输出确定了吗?这是代码片段:
#include <iostream>
class Outer {
public:
class Inner {
public:
Inner() {}
void func(Outer& outer) ;
static const int thrd;
};
private:
static const int num;
int var;
};
void Outer::Inner::func(Outer& outer) {
outer.var = 1;
}
const int Outer::Inner::thrd = Outer::num;
const int Outer::num = 5;
int main(){
std::cout << "Outer::Inner::thrd=" << Outer::Inner::thrd << std::endl; //is the output is determined?
}
避免静态(全局)变量。当您想要跨多个翻译单元执行此类操作时,您可能会在某些时候遇到静态初始化顺序惨败。
因此请尽可能使用
constexpr
。这样你就不能以错误的方式初始化常量。 (在头文件中用内联 constexpr 替换 static constexpr)
#include <iostream>
class Outer
{
private:
static constexpr int num{5};
public:
class Inner {
public:
Inner() {}
void func(Outer& outer) ;
static constexpr int thrd{num};
};
private:
int var;
};
void Outer::Inner::func(Outer& outer)
{
outer.var = 1;
}
int main(){
std::cout << "Outer::Inner::thrd=" << Outer::Inner::thrd << std::endl; //is the output is determined?
}