假设我有一个static const int
类成员变量。它直接在类定义中初始化,但在 a 中没有定义.cpp
(这没关系,因为它没有被 odr 使用)。
此外,假设这个常量在另一个类的构造函数初始化列表中使用,并且创建了另一个类的全局实例。
// mytype1.hpp
class MyType1
{
public:
static const int g_myConstant = 42; // no definition in cpp
};
// mytype2.hpp
class MyType2
{
public:
MyType2();
private:
int m_myMember;
};
// mytype2.cpp
MyType2::MyType2()
: m_myMember(MyType1::g_myConstant)
{
}
// otherfile.cpp
// is the reference to MyType1::g_myConstant in the ctor well defined?
MyType2 myType2GlobalInstance;
构造是否myType2GlobalInstance
明确?换句话说:C++ 对static const
类成员变量的静态初始化顺序有什么保证?
由于没有定义该常量,因此可能没有需要初始化的内存,并且该变量的行为更像是预处理器宏..但这可以保证吗?常量是否定义有区别吗?
如果成员变量是 ,它会改变什么static constexpr
吗?