实施1:
foo(const Bar x);
实施2:
foo(const Bar & x);
如果对象不会在函数内更改,你为什么要复制它(实现 1)。
这会被编译器自动优化吗?
摘要:即使对象const
在函数声明中被声明,仍然可以通过其他别名来编辑对象&
。
如果您是编写库的人并且知道您的函数不这样做,或者对象足够大以证明每次操作的取消引用成本是合理的,
foo(const Bar & x);
那么这就是要走的路。
第 2 部分:
这会被编译器自动优化吗?
由于我们确定它们并不总是等价的,而且等价的条件很重要,编译器通常很难确保它们,所以几乎可以肯定 没有