Здравствуйте, all
Чего-то я не понимаю:
class A
{
public:
static int b;
};
const int b = 100;
int A::b = b;
A::b будет равен 0 а не 100, т.е, почему выражение A::b = b реально транслируется в A::b = A::b?
и все будет правильно только если написать int A::b = ::b;
Почему такая область видимости при инициализации?
J>Неочевидное какое-то разрешения имен, если бы я так хотел, я бы сделал A::b = A::b,(хотя это бред)
J>Может где-то можно более подробно прочитать об этом частном случае?
Я согласен, оно неочевидно. Как и многие вещи в С++. И чтобы их узнать придется либо примеры самому писать (что очень занудно и не очень надежно, так как разные компиляторы любят глючить по-разному). А лучше почитать в книгах. Правда, авторы книг, такими "мелочами" обычно пренебрегают, и потому надежнее глянуть в стандарт С++. это в пунтке 3.4.3/3, по-моему.
In a declaration in which the declarator-id is a qualified-id, names used before the qualified-id being declared are looked up in the defining namespace scope; names following the qualified-id are looked up in the scope of the member's class or namespace.
ЗЫ
Надеюсь с цитатой не ошибся