【发布时间】:2021-11-25 17:34:17
【问题描述】:
课堂定义是否违反了 ODR 规则?
Bjarne Stroustrup 的 explanation 指出:
一个类通常在头文件中声明,头文件通常包含在许多翻译单元中。但是,为了避免复杂的链接器规则,C++ 要求每个对象都有唯一的定义。如果 C++ 允许在类内定义需要作为对象存储在内存中的实体,则该规则将被打破。
class foo
{
float f = 1.1f;
int i = 1;
string s = "foo";
long long ll = 44ll;
};
这是成员的实际定义吗?这是否违反 ODR 规则?如果不是,与通过构造函数进行初始化相比,这样做有什么优势?
【问题讨论】:
-
方便简洁。不。不。不。方便和简洁。
-
“与通过构造函数进行初始化相比,这样做有什么优势” 您刚刚证明了 - 不必编写那些构造函数。此外,如果有多个构造函数,您只需编写一次此初始化。
标签: c++ in-class-initialization