当初始化内部类的静态成员变量的值等于外部类的静态成员变量时,行为就确定了吗?

问题描述 投票:0回答:1

输出确定了吗?这是代码片段

#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?
}
c++ c++11
1个回答
0
投票

避免静态(全局)变量。当您想要跨多个翻译单元执行此类操作时,您可能会在某些时候遇到静态初始化顺序惨败

因此请尽可能使用

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?
}
© www.soinside.com 2019 - 2024. All rights reserved.