定义一个类时,以下是否有效?
T(const T&&) = default;
我正在阅读有关移动构造函数here的内容,并解释了如何隐式声明默认值:
一个类可以有多个移动构造函数,例如
T::T(const T&&)
和T::T(T&&)
。如果存在一些用户定义的移动构造函数,则 用户可能仍然强制生成隐式声明的移动 带有关键字default的构造函数。
在页面底部,它提到了缺陷报告CWG 2171:
CWG 2171 C ++ 14
X(const X&&) = default
是微不足道的,是微不足道的。
也许wiki条目有错误,而CWG 2171只是指复制构造函数,而不是移动构造函数?
答案 0 :(得分:2)
来自n4296草案:
8.4.2.1明确默认的功能:
明确默认的功能
(1.1) - 是一个特殊的成员函数,
(1.2) - 具有相同的声明函数类型(可能除外) 不同的参考资格,除了复制的情况 构造函数或复制赋值运算符,参数类型可以是 “引用非const T”,其中T是成员的名称 函数的类)好像它已被隐式声明和
(1.3) - 没有默认参数。
12.8.10复制和移动类对象:
类X的隐式声明的移动构造函数将具有该形式 X :: X(X&安培;&安培;)
结果是:
T(const T&&) = default;
无效,因为隐式声明的移动构造函数的形式为:
T(T&&)