假设
- 我有一个功能
A f()
; - 我想将一个局部变量初始化为;
a
的返回值f
- 我不想依赖 RVO;
什么是避免f
被复制的返回值的最佳选择(以及为什么)
a
可能需要修改- 我知道
a
不会修改
选项:
a) A a = f();
b) A&& a = f();
c) const A& = f();
d)const A&& = f();
编辑:
我会说:
- b)
- C)
因为两者都使用引用并避免了额外的副本(RVO 也可以避免,但不能保证)。那么我怎么会看到选项a)大部分时间都建议?
我想问题的核心是:我知道 a) 很可能与 c) 具有相同的效果,那么为什么不使用 c) 而不是 a),以使事情明确且独立于编译器?