wal*_*lly 5 c++ constructor language-lawyer c++11
定义一个类时,以下是否有效?
T(const T&&) = default;
Run Code Online (Sandbox Code Playgroud)
我在这里阅读有关移动构造函数的内容,它解释了如何隐式声明默认值:
一个类可以有多个移动构造函数,例如,
T::T(const T&&)
和T::T(T&&)
.如果存在一些用户定义的移动构造函数,则用户仍可以使用关键字default强制生成隐式声明的移动构造函数.
在页面底部,它提到了缺陷报告CWG 2171:
CWG 2171 C++ 14
X(const X&&) = default
是非常重要的,是微不足道的.
也许wiki条目只是有一个错误,CWG 2171只是指复制构造函数,而不是移动构造函数?
来自 n4296 草案:
\n\n8.4.2.1 显式默认函数:
\n\n\n\n\n明确默认的函数应
\n\n(1.1) \xe2\x80\x94 是一个特殊成员函数,
\n\n(1.2) \xe2\x80\x94具有相同的声明函数类型(除了可能不同的引用限定符,并且在复制构造函数或复制赋值运算符的情况下,参数类型可能是\n \ xe2\x80\x9c 对非常量 T\xe2\x80\x9d 的引用,其中 T 是成员\n 函数\xe2\x80\x99s 类的名称),就好像它已被隐式声明一样,并且
\n\n(1.3) \xe2\x80\x94 没有默认参数。
\n
12.8.10 复制和移动类对象:
\n\n\n\n\n类 X 的隐式声明的移动构造函数将具有以下形式\n X::X(X&&)
\n
结果该行:
\n\nT(const T&&) = default;\n
Run Code Online (Sandbox Code Playgroud)\n\n无效,因为隐式声明的移动构造函数具有以下形式:
\n\nT(T&&)\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
145 次 |
最近记录: |