【发布时间】:2015-04-09 05:45:00
【问题描述】:
下面的编译没有错误:
#include <memory>
std::unique_ptr<int> f() {
std::unique_ptr<int> x(new int(42));
return x;
}
int main() {
std::unique_ptr<int> y = f();
}
我以为f() 的返回值是由x 复制初始化的,但std::unique_ptr 是只移动类型。由于复制构造函数不可用,这怎么不是格式错误的?标准中的相关条款是什么?有没有地方说如果f() 是仅移动类型,而不是返回语句变成移动构造而不是复制构造?
【问题讨论】:
-
不确定是不是重复的C++ return value optimization。
-
@iammilind:不是。
-
@vsoftco:这更像是它,尽管考虑到它询问不同的标准,我倾向于通过添加到问题的底部来处理这个问题(“这是之前针对 C+ 提出的+11:")