C++ 获取函数在常量引用中按值返回的结果
C++ Get result of function returning by value in const reference
我有以下示例:
struct A
{
...
};
按值返回 A 的函数
A getFoo()
{
A a;
...
return a;
}
调用方只需要读取该输出数据。
const A& a = getFoo();
这是一个糟糕的方法吗?应该是吗?
const A a = getFoo();
我唯一关心的是范围。我不在乎修改,我只需要阅读。我只关心避免创建不必要的副本,而不是以悬而未决的引用结束。
至少在您展示的代码片段中,这不是一个坏方法。相反,从某种意义上说,它很好,因为您避免了返回值的副本,从而提高了代码的性能。
但是,现在限制您不能修改该值。如果您对此不满意,那么第二种方法更好。事实上,选择一个而不是另一个取决于特定方案。一般来说很难说。
请注意,不能使用非常量引用执行此操作,因为不允许将临时引用绑定到非常量引用。
并且不要担心函数返回的值的范围。它现在已经获得了引用变量的范围。
const A& a = getFoo();
这是一个糟糕的方法吗?应该是吗?
const A a = getFoo();
前者引入了不必要的间接性,据我所知没有任何好处。后者更容易理解(无需了解受引用约束的临时的寿命延长(,这使得它更好。
相关文章:
- C++Brute Force攻击函数不会返回结果
- 如何在一个表达式中生成并返回结果?
- 使用std::tie进行类似golang的错误处理,同时返回结果,是否有缺点?(C++11)
- C++ 线程端回调并返回结果
- C++使用存储过程返回结果
- reinterpret_cast总是返回结果C++?
- 尝试以随机字符(长读取)打印字符串返回结果
- 通过C 中的参考返回结果
- 使用枚举确定返回结果的类型(使用宏的黑客)
- 返回结果不可见
- 打开一个 Shell 程序,向其传递参数,然后返回结果
- 如何在递归函数中计算返回结果
- 整数列表的交集-无法返回结果列表
- 来自 open() 的返回结果代码之间的差异:25 与 3
- 使用 c++11 线程返回结果的正确方法是什么
- 传递StringBuilder并从c++dll向c#返回结果
- 如何跳出一些深度递归的函数并直接返回结果
- 使用MPI临时接收数据,然后返回结果
- C++,我不知道为什么我的函数不返回结果
- QDialog show()后面跟着返回结果操作