Какая функция используется для инициализации статического члена класса?

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

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

13

Решение

После того как ты пишешь 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;

17

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector