未声明的(自动生成的)复制构造函数是否自动标记为inline
?
如果是这样,并且如果我不希望它们被标记为inline
,这是否意味着我必须手动定义一个并手动复制我需要的每个成员(假设我没有使用 C++11,所以没有= default
从中获利)?
未声明的(自动生成的)复制构造函数是否自动标记为inline
?
如果是这样,并且如果我不希望它们被标记为inline
,这是否意味着我必须手动定义一个并手动复制我需要的每个成员(假设我没有使用 C++11,所以没有= default
从中获利)?
它们被视为已声明inline
(这并不一定意味着它们将被内联)。是的,在 C++11 之前,防止它们被内联的唯一方法是手动声明和定义它们,在初始化列表中显式复制每个成员和每个基类。
是的。从 C++11、12.8/11 开始:
隐式声明的复制/移动构造函数是
inline public
其类的成员。
如果您想更熟悉复制和移动构造函数,我强烈建议您阅读 12.8 的全部内容。
他们是,我相信。但是,对于这样一个编译器定义的函数,和 not 之间的区别inline
是不可观察的。是的,你必须定义你自己的,它是非的inline
,尽管你为什么想要这样的东西超出了我的范围。它对语义没有影响,也不会影响编译器的内联。
隐式定义的特殊成员函数是inline
并且它们必须是,因为它们可以在多个翻译单元中隐式生成。的意思inline
是它可以在多个翻译单元中定义而不违反ODR,而不是代码实际上会被内联(这取决于类型和编译器)。
为什么不希望复制构造函数成为inline
?