C++ 使用std::mutex复制省略
声明 在下列情况下,编译器必须省略 类对象的复制和移动构造,即使复制/移动 构造函数和析构函数都有明显的副作用。这个 对象直接构造到存储中,它们将 否则将被复制/移动到。复制/移动构造函数不需要 存在或可访问,因为语言规则确保没有复制/移动 操作发生,甚至在概念上: 在return语句中,当操作数是同一类的prvalue时 类型(忽略cv限定)作为函数返回类型: tf(){返回T();}C++ 使用std::mutex复制省略,c++,mutex,copy-elision,C++,Mutex,Copy Elision,声明 在下列情况下,编译器必须省略 类对象的复制和移动构造,即使复制/移动 构造函数和析构函数都有明显的副作用。这个 对象直接构造到存储中,它们将 否则将被复制/移动到。复制/移动构造函数不需要 存在或可访问,因为语言规则确保没有复制/移动 操作发生,甚至在概念上: 在return语句中,当操作数是同一类的prvalue时 类型(忽略cv限定)作为函数返回类型: tf(){返回T();} f();//只有一个对T的默认构造函数的调用 我的问题是为什么下面的代码没有编译: #include <
f();//只有一个对T的默认构造函数的调用 我的问题是为什么下面的代码没有编译:
#include <mutex>
std::mutex createMutex()
{
return std::mutex();
}
int main()
{
auto mutex = createMutex();
}
#包括
std::mutex createMutex()
{
返回std::mutex();
}
int main()
{
自动互斥=createMutex();
}
我的问题是为什么下面的代码没有编译
因为你引用的参考资料说
(从C++17开始)
不适用于旧的C++标准。您使用C++14编译器编译了该程序。在C++14中,返回的对象是移动的,因此类型必须是可移动的,而
std::mutex
不是。移动可以省略为优化,但这种可能性并不能消除移动性要求
该示例在C++17中格式良好,将使用兼容的编译器进行编译。mutex作为返回值?沃特?你做错了什么事。@MarekR我不这么认为。@StaceyGirl在我写评论的时候我仍然有暂停时间。Ofc我会得到一个好答案!