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不可复制构造,则xx强制转换为右值。这使我想知道是否存在任何不可复制但它们的move构造函数可能抛出的通用类型。

在标准库中,我检查了不可复制的类型unique_ptrfuturepromise,各种互斥类型,unique_lockcondition_variablepackaged_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/

10-12 15:34