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&)
都是复制构造函数。有些关联: