2013-07-17 5 views
13

У меня вопрос о том, какая функция выбрана для инициализации статического члена класса.Какая функция используется для инициализации статического члена класса?

//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. Итак, интересно, есть ли правило, такое как Koenig поиск в этом случае?

+0

Так 'INT Базовый :: Count = countInit() ; 'вызывает участника? –

+1

@ LuchianGrigore, да, это так. Я не знал, что это произошло. – chris

+0

где is "int Base :: count = countInit();" вызывается? вызвать функцию статического члена. Счетчик Base :: countInit() не вызывается только countInit() из области класса Base. – lulyon

ответ

17

После того, как вы напишите int Base::count, вы находитесь в классе Base, поэтому будет называться статическая функция класса. негодный поиска будет использоваться здесь

от 3.4.2/13

имя, используемое в определении статического члена данных класса X (9.4.2) (после квалифицированного-идентификатор статического член) ищется, как будто имя было использовано в функции члена X.

от 9.4.2

определения для статического элемента данных должны появляться в области видимости пространства имен ограждающих участник определение класса. В определении в области пространства имен имя статического члена данных должно быть присвоено его именем класса с помощью оператора ::. Выражение инициализатор в определения статического члена данных в рамках своего класса

Пример:

class process { 
static process* run_chain; 
static process* running; 
}; 
process* process::running = get_main(); 
process* process::run_chain = running; 

+0

Спасибо. очень ясно. – Donglei

Смежные вопросы