【发布时间】:2019-11-16 12:09:33
【问题描述】:
考虑下面一行
const auto x = condition ? getLvalue() : getRvalue();
因为x是const,我不需要复制getLvalue返回的值,如果我能引用它我会很高兴。当然,以下不会编译
const auto& x = condition ? getLvalue() : getRvalue(); // Compilation error
因为引用 R 值是没有意义的。
我该如何解决这个问题?有问题还是我可以相信编译器理解getLvalue 的返回类型不需要复制?
【问题讨论】:
-
你试过
const auto&& x = ...吗? -
我们称 && 为通用参考。也许有点过时但值得一读here
-
您可以使用
std::move(getLvalue())。 -
@AlexHodges 你确定这会有所帮助吗?无论如何,条件表达式的值类别是固定的,所以通用引用对 AFAIK 没有帮助 ...
-
通用引用将成为左值或右值,具体取决于它的初始化内容。由于您的参考可以是 l 或 r,因此使用通用参考似乎很合适,然后 std::forward 到任何需要参考的地方。
标签: c++ design-patterns reference