如果std :: optional中的类型T是一个简单的可复制类型,那么std :: optional是可以轻易复制的。我问,因为我想在原子中使用它,所以以下有效的一些简单的可复制类型T
std::atomic<std::optional<T>>
答案 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
也应该是可以轻易破坏的。