类静态变量的初始化顺序

QuantumPlus:

我有一个具有两个静态变量的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。那么,谁能告诉我为什么?

StoryTeller-Unslander Monica:

根据查找规则,这是正确的。[basic.lookup.unqual] / 13说:

查找在类X的静态数据成员的定义中使用的名称(在该静态成员的qualified-id之后),就像在X的成员函数中使用该名称一样。[注意:[class.static.data ]进一步描述了在静态数据成员的定义中名称使用的限制。—尾注]

由于a查找不合格对象的方式好像您在成员函数中一样,因此它必须先找到该成员A::a的初始化顺序A::aA::b不影响查找,但它影响的结果是如何明确界定。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章