C++ T::T(T&;)有什么用?

C++ T::T(T&;)有什么用?,c++,constructor,C++,Constructor,为什么有T::T(T&)而有T::T(const T&)哪一个更适合copy (可能是用来实现movesemantic???) 原始描述(经melpomene证明是错误的): 在C++11中,支持一种新形式的复制构造函数T::T(T&) (来自) 我想知道它的实际用途是什么?T(T&)在C++11中并不新鲜。新功能是使用default关键字显式定义自动生成的复制构造函数: T(const T &) = default; 正如你的链接所说: 一个类可以有多个复制构造函数,例如T::T(c

为什么有
T::T(T&)
而有
T::T(const T&)
哪一个更适合
copy

(可能是用来实现
move
semantic???)

原始描述(经
melpomene
证明是错误的):

C++11
中,支持一种新形式的复制构造函数
T::T(T&)
(来自) 我想知道它的实际用途是什么?

T(T&)
在C++11中并不新鲜。新功能是使用
default
关键字显式定义自动生成的复制构造函数:

T(const T &) = default;
正如你的链接所说:

一个类可以有多个复制构造函数,例如
T::T(const T&)
T::T(T&)
。如果存在一些用户定义的复制构造函数,用户仍然可以使用关键字
default
强制生成隐式声明的复制构造函数

在C++11之前,如果类中有
T(T&)
构造函数,则会阻止自动创建
T(const T&)
(默认副本构造函数)。由于C++11,您可以同时拥有两个构造函数(用户定义的
T(T&)
构造函数和自动
T(const T&)
构造函数)


至于非常量复制构造函数的用途,答案是“不多”。它确保只能复制可变对象(而不是临时对象),这不是您通常需要的

(可能是用来实现移动语义??)


完全正确。在移动语义之前,例如(现在从C++标准中删除),它类似于代码> UNQuyYQPTR <代码>。特别是,它有一个可以修改
r
(这会导致一些不直观的行为,这就是它被从语言中删除的原因)。

这根本不能回答问题。OP问的是
T::T(T&)
,而不是
T::T(const T&)
@Zereges OP的问题是基于错误的假设(或对链接的误读)。我的答案试图先解决这个问题。@Zereges已编辑。为了完整起见,任何cv限定符的组合都可以应用于
T&
以形成副本构造函数
T(T&)
T(常数T&)
T(volatile T&)
T(常数volatile T&)
都是复制构造函数。有些关联: