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
静态数据成员的定义应出现在包含成员类定义的命名空间范围内.在命名空间作用域的定义中,静态数据成员的名称应使用::运算符通过其类名限定.静态数据成员定义中的初始化表达式在其类的范围内
例:
Run Code Online (Sandbox Code Playgroud)class process { static process* run_chain; static process* running; }; process* process::running = get_main(); process* process::run_chain = running;