инициализация статических членов
От: jam2 Болгария  
Дата: 21.04.05 09:41
Оценка:
Здравствуйте, 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;
Почему такая область видимости при инициализации?
Re: инициализация статических членов
От: Lorenzo_LAMAS  
Дата: 21.04.05 09:45
Оценка:
J>и все будет правильно только если написать int A::b = ::b;
J>Почему такая область видимости при инициализации?

потому, что имя b находится в области видимости класса А, и в твоем случае int A::b = b; в первую очередь будет рассматриваться именно область видимости класса А. А вот с ::b все уже нормально.
Of course, the code must be complete enough to compile and link.
Re[2]: инициализация статических членов
От: jam2 Болгария  
Дата: 21.04.05 10:09
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>потому, что имя b находится в области видимости класса А, и в твоем случае int A::b = b; в первую очередь будет рассматриваться именно область видимости класса А. А вот с ::b все уже нормально.


Спасибо за ответ,
Но почему в первую очередь в A, ведь инициализация происходит в глобальной области?
Неочевидное какое-то разрешения имен, если бы я так хотел, я бы сделал A::b = A::b,(хотя это бред)
Может где-то можно более подробно прочитать об этом частном случае?
Re[3]: инициализация статических членов
От: Lorenzo_LAMAS  
Дата: 21.04.05 10:53
Оценка:
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.


ЗЫ

Надеюсь с цитатой не ошибся
Of course, the code must be complete enough to compile and link.
Re: инициализация статических членов
От: Аноним  
Дата: 21.07.09 09:25
Оценка:
[/ccode]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.