#include <iostream>

class a {
 public:
 static int num;
};

class b {
 public:
 static int num;
};

int a::num = b::num;

int b::num = 6;

int main(){
 std::cout << a::num << std::endl;
 return 0;
}

上面显示6

我的问题是,自从执行a::num = b::num以来,这怎么可能呢?b::num还没有任何值(value)。

最佳答案

您将在此示例中看到不同initialization阶段的交互。初始化按以下顺序进行:

  • 静态初始化阶段。
  • a::numzero-initialized,是静态的非本地变量。
  • b::numconstant initialization阶段进行初始化,因为其初始值设定项是常量表达式6
  • 动态初始化阶段。
  • a::num从不是constant expression的表达式b::num初始化。此时,b::num已被初始化为6。

  • 请注意,如果编译器可以保持与上述序列相同的效果,则可以静态初始化a::num

    关于c++ - 在C++类中初始化彼此相等的静态值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60173266/

    10-11 22:59
    查看更多