【发布时间】:2016-06-06 03:42:12
【问题描述】:
假设我有一些功能:
Foo GetFoo(..)
{
...
}
假设我们既不知道这个函数是如何实现的,也不知道 Foo 的内部结构(例如,它可能是非常复杂的对象)。但是我们确实知道该函数按值返回 Foo,并且我们希望将此返回值用作 const。
问题:将此函数的返回值存储为const & 总是一个好主意吗?
const Foo& f = GetFoo(...);
而不是,
const Foo f = GetFoo(...);
我知道编译器会做返回值优化,并且可能会移动对象而不是复制它,所以最后const & 可能没有任何优势。但是我的问题是,有什么缺点吗?为什么我不应该只开发肌肉记忆以总是使用const & 来存储返回值,因为我不必依赖编译器优化,而且即使移动操作对于复杂的操作也可能很昂贵对象。
把这个延伸到极端,为什么我不应该总是对我的代码中不可变的所有变量使用const &?例如,
const int& a = 2;
const int& b = 2;
const int& c = c + d;
除了比较冗长,还有什么缺点吗?
【问题讨论】:
-
如果函数返回引用怎么办?语义是不同的,如果你得到你不想要的东西,要求你得到它可能会严重烧伤你。
-
我认为只要我想将返回的值视为不可变的,上述方法也适用于返回的引用。
-
保持对像
int这样的简单类型的引用可能比使用int变量效率低。 -
那是一个缺点。所以我想除了缩放器之外的任何东西都应该没问题?
-
你永远不应该用它自己的未初始化值来初始化一个变量(无论是否为 const)。确定这就是你想问的?
标签: c++