如果包含的类型是一个简单的可复制类型

时间:2016-06-03 19:24:10

标签: c++ c++17

如果std :: optional中的类型T是一个简单的可复制类型,那么std :: optional是可以轻易复制的。我问,因为我想在原子中使用它,所以以下有效的一些简单的可复制类型T

std::atomic<std::optional<T>>

1 个答案:

答案 0 :(得分:11)

复制构造函数指定为:

  

optional(const optional<T>& rhs);
  3 要求: is_copy_constructible_v<T>true   4 效果:如果rhs包含值,则初始化包含的值,就像使用表达式T直接非列表初始化类型为*rhs的对象一样。
  5 后置条件: bool(rhs) == bool(*this)   6 抛出:所选T的构造函数抛出的任何异常。

{} 例如,在libstdc ++实现中,optional对于任何optional<T>都不是可复制的。

对琐碎性的唯一明确讨论是,如果T是可以轻易破坏的,那么T也应该是可以轻易破坏的。