哪个函数用于初始化静态类成员?

Don*_*lei 13 c++ static-members argument-dependent-lookup

我有一个关于选择哪个函数来初始化静态类成员的问题.

//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
Run Code Online (Sandbox Code Playgroud)

变量Base::count初始化为Base::countInit()而不是countInit()Base.cpp中定义的变量.但是local_count由当地人初始化countInit.所以,我想知道,在这种情况下是否有像Koenig查找这样的规则?

For*_*veR 17

写完之后int Base::count你就上课了Base,所以会调用类的静态函数.这里将使用不合格的查找

从3.4.2/13

查找在类X(9.4.2)的静态数据成员的定义中使用的名称(在静态成员的qualified-id之后),就好像该名称是在X的成员函数中使用一样.

从9.4.2

静态数据成员的定义应出现在包含成员类定义的命名空间范围内.在命名空间作用域的定义中,静态数据成员的名称应使用::运算符通过其类名限定.静态数据成员定义中的初始化表达式在其类的范围内

例:

class process {
static process* run_chain;
static process* running;
};
process* process::running = get_main();
process* process::run_chain = running;
Run Code Online (Sandbox Code Playgroud)