jca*_*er2 7 c++ oop class copy-constructor copy-elision
我试图使用c ++类型系统删除复制构造函数,以防止复制对象.
struct DeleteCopyConstructor {
DeleteCopyConstructor() {};
DeleteCopyConstructor(DeleteCopyConstructor& op2) = delete;
DeleteCopyConstructor(const DeleteCopyConstructor& op2) = delete;
};
DeleteCopyConstructor f() {
DeleteCopyConstructor d;
// initialize d...
return d;
}
Run Code Online (Sandbox Code Playgroud)
错误是:
error: use of deleted function ‘DeleteCopyConstructor::DeleteCopyConstructor(const DeleteCopyConstructor&)’
Run Code Online (Sandbox Code Playgroud)
我读过有关复制省略,但它似乎是一个编译器优化,所以我认为它不适用.如何在d不触发复制构造的情况下返回?
gsa*_*ras -1
复制省略,但它似乎是编译器优化,所以我认为它不适用。
确实如此。阅读移动或命名返回值优化 (NRVO) 的更多内容?
如何才能返回
d而不触发复制构造?
让编译器来处理它。