Pau*_*nta 202 c++ default declaration keyword c++11
我见过default
在类中的函数声明旁边使用过.它有什么作用?
class C {
C(const C&) = default;
C(C&&) = default;
C& operator=(const C&) & = default;
C& operator=(C&&) & = default;
virtual ~C() { }
};
Run Code Online (Sandbox Code Playgroud)
Pet*_*der 228
这是一个新的C++ 11功能.
这意味着您要使用该函数的编译器生成版本,因此您不需要指定正文.
您还可以使用它= delete
来指定您不希望编译器自动生成该函数.
随着移动构造函数和移动赋值运算符的引入,生成构造函数,析构函数和赋值运算符的自动版本的规则变得非常复杂.使用= default
并= delete
简化操作,因为您不需要记住规则:您只需说出您想要发生的事情.
Ker*_* SB 42
这是一个新的C++ 0x特性,它告诉编译器创建相应构造函数或赋值运算符的默认版本,即只为每个成员执行复制或移动操作的版本.这很有用,因为移动构造函数并不总是默认生成(例如,如果你有一个自定义析构函数),不像复制构造函数(同样适用于赋值),但是如果没有什么不值得写的,那么最好让它编译器处理它而不是每次自己拼出来.
另请注意,如果提供任何其他非默认构造函数,则不会生成默认构造函数.如果您仍然需要默认构造函数,则可以使用此语法让编译器创建一个.
作为另一个用例,有几种情况下不会隐式生成复制构造函数(例如,如果您提供自定义移动构造函数).如果您仍想使用默认版本,可以使用此语法请求它.
有关详细信息,请参见标准的第12.8节.