我有一个具有两个静态变量的A类。我想用另一个不相关的静态变量来初始化一个,就像这样:
#include <iostream>
class A
{
public:
static int a;
static int b;
};
int A::a = 200;
int a = 100;
int A::b = a;
int main(int argc, char* argv[])
{
std::cout << A::b << std::endl;
return 0;
}
输出为200。那么,谁能告诉我为什么?
根据查找规则,这是正确的。[basic.lookup.unqual] / 13说:
查找在类X的静态数据成员的定义中使用的名称(在该静态成员的qualified-id之后),就像在X的成员函数中使用该名称一样。[注意:[class.static.data ]进一步描述了在静态数据成员的定义中名称使用的限制。—尾注]
由于a
查找不合格对象的方式就好像您在成员函数中一样,因此它必须先找到该成员A::a
。的初始化顺序A::a
和A::b
不影响查找,但它影响的结果是如何明确界定。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句