【发布时间】:2019-09-05 12:19:01
【问题描述】:
This explanation of copy elision 声明
以下情况,编译器需要省略 类对象的复制和移动构造,即使复制/移动 构造函数和析构函数具有可观察到的副作用。这 对象被直接构造到存储中 否则被复制/移动到。复制/移动构造函数不需要 存在或可访问,因为语言规则确保没有复制/移动 操作发生,甚至在概念上:
在return语句中,当操作数是同一个类的prvalue时 type(忽略 cv-qualification)作为函数返回类型:
T f() { 返回 T(); }
F(); // 只调用一次 T 的默认构造函数
我的问题是为什么下面的代码不能编译:
#include <mutex>
std::mutex createMutex()
{
return std::mutex();
}
int main()
{
auto mutex = createMutex();
}
【问题讨论】:
-
mutex 作为返回值?笏?你做错了什么。
-
@MarekR 我不这么认为。
标签: c++ mutex copy-elision