voi*_*ter 14 c++ copy-constructor
我在这里查看复制构造函数的cppreference页面:http: //en.cppreference.com/w/cpp/language/copy_constructor
我已经阅读了关于隐式声明的复制构造函数和隐式定义的复制构造函数的两个部分,但我仍然不理解这种区别.隐式声明但未定义的构造函数不会导致链接器问题吗?
规则非常复杂.我不记得在C++ 03中有区别:要么你有一个编译器生成的复制构造函数,要么你没有.
有人能解释(用简单的话说)这两个类别之间的区别/差异是什么?
Bri*_*ian 11
这在第12条开头的标准中的说明中阐明:
[ 注意:当程序没有明确声明它们时,实现将隐式声明某些类类型的这些成员函数.如果它们使用得很多,那么实现将隐式定义它们(3.2).见12.1,12.4和12.8.- 结束说明 ]
C++ 14(N3936)的规范性参考文献是12.1/5,12.4/6,12.8/13,12.8/26.在每种情况下,如果默认并且未定义为已删除,则默认定义相应的特殊成员函数,并使用odr-used或显式默认.如果我们有类似的东西
struct Foo {};
Run Code Online (Sandbox Code Playgroud)
并且没有Foo创建任何类型的对象,所有六个特殊成员函数(默认构造函数,析构函数,复制构造函数,移动构造函数,复制赋值运算符,移动赋值运算符)被隐式声明为默认值,但未定义,因为它们没有使用odr .