跳到主要内容

C++ 命名要求: CopyConstructible

指定类型的实例可以从左值表达式复制构造。

要求

如果满足以下条件,则类型 T 满足 CopyConstructible

  • 类型 T 满足 MoveConstructible,并且

给定

  • v,一个类型为 T 或 const T 的左值表达式,或者一个类型为 const T 的右值表达式
  • u, 任意标识符

以下表达式必须有效并具有其指定的效果

pub表达式后置条件
pubT u = v;u 的值等同于 v 的值。
v 的值未改变。
pubT(v)T(v) 的值等同于 v 的值。
v 的值未改变。

表达式 v.~T() 也必须有效,并且对于左值 v,表达式 &v 必须具有 T*const T* 类型,并且必须求值为 v 的地址。 (直到 C++11)

备注


重载 operator& 的类不符合 CopyConstructible,因此不能在标准库容器中使用。这是 C++98 中的一个设计决策(而不是缺陷,参见LWG issue 390)。 (直到 C++11)
当需要对象的地址时,标准库使用 std::addressof (自 C++11 起)

C++ 命名要求: CopyConstructible

指定类型的实例可以从左值表达式复制构造。

要求

如果满足以下条件,则类型 T 满足 CopyConstructible

  • 类型 T 满足 MoveConstructible,并且

给定

  • v,一个类型为 T 或 const T 的左值表达式,或者一个类型为 const T 的右值表达式
  • u, 任意标识符

以下表达式必须有效并具有其指定的效果

pub表达式后置条件
pubT u = v;u 的值等同于 v 的值。
v 的值未改变。
pubT(v)T(v) 的值等同于 v 的值。
v 的值未改变。

表达式 v.~T() 也必须有效,并且对于左值 v,表达式 &v 必须具有 T*const T* 类型,并且必须求值为 v 的地址。 (直到 C++11)

备注


重载 operator& 的类不符合 CopyConstructible,因此不能在标准库容器中使用。这是 C++98 中的一个设计决策(而不是缺陷,参见LWG issue 390)。 (直到 C++11)
当需要对象的地址时,标准库使用 std::addressof (自 C++11 起)