У меня есть вопрос о том, какая функция выбрана для инициации статического члена класса.
//Base.h
class Base
{
private:
static int count;
static int countInit()
{
return 10;
}
public:
Base()
{
}
};
//and Base.cpp
static int countInit()
{
return 0;
}
int Base::count=countInit();//member function is used.
static int local_count=countInit();//the local one in Base.cpp
Переменная Base::count
инициализируется с Base::countInit()
а не countInit()
определено в Base.cpp. Но local_count
инициализируется местным countInit
, Итак, мне интересно, есть ли такое правило, как Поиск Кенига в этом случае?
После того как ты пишешь int Base::count
ты в классе Base
, так будет вызвана статическая функция класса. Неквалифицированный поиск будет использоваться здесь
из 3.4.2 / 13
Имя, используемое в определении статического члена данных класса X (9.4.2) (после квалифицированного идентификатора статического
member) выглядит так, как если бы имя использовалось в функции-члене X.
из 9.4.2
Определение статического члена данных должно появиться в пространстве имен
область действия, включающая определение класса члена. В определении в области именного пространства имя статического
член данных должен быть квалифицирован по имени класса с помощью оператора ::. Выражение инициализатора в
определение статического члена данных находится в области его классаПример:
class process { static process* run_chain; static process* running; }; process* process::running = get_main(); process* process::run_chain = running;
Других решений пока нет …