我有一个关于选择哪个函数来初始化静态类成员的问题。
//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()
,而不是Base.cpp中定义的countInit()
。但local_count
由本地countInit
初始化。所以,我想知道,在这种情况下是否有像 Koenig查找这样的规则?
答案 0 :(得分:17)
在您编写int Base::count
后,您在班级Base
中,因此将调用类的静态函数。这里将使用不合格的查找
从3.4.2 / 13
用于定义类X(9.4.2)的静态数据成员的名称(在static的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;