std::move_if_noexcept
的定义如下(C ++ 11 20.2.3 / 7-8):
template <class T>
typename conditional<!is_nothrow_move_constructible<T>::value
&& is_copy_constructible<T>::value,
const T&,
T&&
>::typemove_if_noexcept(T& x) noexcept;
Returns: std::move(x)
用简单的英语来说,如果
move_if_noexcept(x)
的move构造函数未抛出或x
不可复制构造,则x
将x
强制转换为右值。这使我想知道是否存在任何不可复制但它们的move构造函数可能抛出的通用类型。在标准库中,我检查了不可复制的类型
unique_ptr
,future
,promise
,各种互斥类型,unique_lock
,condition_variable
和packaged_task
,并且,除非我误读了按照标准,它们都声明其移动操作noexcept
。标准库(C ++ 11或C ++ 14)或常用的第三方库(例如Boost)中是否存在仅移动类型?
最佳答案
fstream类是未声明noexcept且没有删除复制构造函数的move构造函数的示例:http://en.cppreference.com/w/cpp/io/basic_ofstream/basic_ofstream
关于c++ - 什么是带有可引发的move操作的仅 move 类的示例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21473649/