【发布时间】:2018-05-05 07:21:41
【问题描述】:
我有这样的方法:
std::unique_ptr<const Stats> Table::GetStats() const {
std::unique_ptr<Stats> result;
// ...
// Prepare stats. Under some conditions an exception may be thrown.
// ...
return result;
}
问题是它无法编译:
错误:无法将‘std::unique_ptr’左值绑定到‘std::unique_ptr&&’
我可以通过使用以下绕过来编译它:
return std::unique_ptr<const Stats>(result.release());
但这似乎有点过分了。我无法理解,从 C++ 的角度来看,第一段代码有什么问题?有没有更优雅的解决方案?
【问题讨论】:
-
编译器版本?为我工作。 godbolt.org/g/DZak6n
-
@RichardHodges, gcc (Debian 4.9.2-10+deb8u1) 4.9.2
-
@RichardHodges 可能你会在没有 OP 的情况下获得 RVO
// Prepare stats. Under some conditions an exception may be thrown. -
@Alexey 那是旧的。这将是越野车。你可以试试
return { std::move(result) }; -
@RichardHodges 原始海报,帖子所有者
标签: c++ c++11 return constants unique-ptr