未声明的复制构造函数是否自动内联?

时间:2013-01-11 20:28:48

标签: c++ inline copy-constructor c++03 default-copy-constructor

未声明(自动生成)的复制构造函数是否自动标记为inline

如果是这样,如果我不希望它们被标记为inline,那是否意味着我必须手动定义一个并手动复制我需要的每个成员(假设我不使用C ++ 11,这样就没有= default可以利用了吗?

4 个答案:

答案 0 :(得分:8)

他们被视为被宣布为inline(事实并非如此) 必然意味着他们将被内联)。是的,在 pre-C ++ 11,防止它们内联的唯一方法就是 手动声明和定义它们,复制每个成员和每个成员 初始化列表中显式的基类。

答案 1 :(得分:6)

是。从C ++ 11,12.8 / 11:

  

隐式声明的复制/移动构造函数是其类的inline public成员。

如果你想更熟悉复制和移动构造函数,我强烈建议阅读全部12.8。

答案 2 :(得分:1)

我相信他们是。但是,对于这样的编译器定义的函数,inline与否之间的差异是不可观察的。是的,你必须定义自己的非inline,尽管为什么你会想要这样的事情超出我的范围。它对语义没有影响,也不会影响编译器的内联。

答案 3 :(得分:1)

隐式定义的特殊成员函数是inline,它们必须是在多个翻译单元中隐式生成的。 inline的含义是它可以在不违反ODR的情况下在多个翻译单元中定义,而不是实际内联代码(这取决于类型和编译器)。

为什么不希望复制构造函数为inline