课堂定义是否违反了 ODR 规则?
Bjarne Stroustrup 的解释是这样的:
一个类通常在头文件中声明,并且头文件通常包含在许多翻译单元中。但是,为了避免复杂的链接器规则,C++ 要求每个对象都有唯一的定义。如果 C++ 允许在类内定义需要作为对象存储在内存中的实体,则该规则将被打破。
class foo
{
float f = 1.1f;
int i = 1;
string s = "foo";
long long ll = 44ll;
};
这是成员的实际定义吗?这是否违反 ODR 规则?如果没有,与通过构造函数进行初始化相比,这样做有什么优势?