为什么引用const是必要的,以避免复制参数

时间:2011-08-16 14:55:10

标签: c++ reference

根据Wikipedia,函数调用不会将references的参数复制到const类型:

void f_slow(BigObject x);
void f_fast(const BigObject& x);

f_slow(y); // slow, copies y to parameter x
f_fast(y); // fast, gives direct read-only access to y

为什么引用必须是const?非const引用不会实现相同的目的:

void f_should_be_fast(BigObject& x);

7 个答案:

答案 0 :(得分:8)

是的,任何类型的参考都可以。使const变得更灵活,因为它可以接受const变量或临时值作为参数,并且文档(并强制执行)你不打算修改参数的意图。

答案 1 :(得分:7)

const确实不影响速度。它只是阻止函数修改原始对象,使其类似于按值传递语义(但显然不相同)。

请注意,这也值得一读:Want Speed? Pass by Value

答案 2 :(得分:1)

通过引用非const,您无法将const对象(或对const对象的引用)传递给函数,这将导致更差的const正确性。但是它不会影响执行速度。

答案 3 :(得分:1)

const关键字表示函数/方法中的参数值不会更改。这个可能会带来更好的性能,因为编译器可以通过一些性能改进来调整代码,但这不会被授予。

答案 4 :(得分:0)

是的,它会完成相同的工作,但const是编译器的一个信号,如果一个对象永远不会被修改,它可以进行优化。

答案 5 :(得分:0)

在这种情况下,参考只是不可修改,因为它使用 const 进行限定。通过不对其进行限定 const ,它只是一个可修改的参考。唯一的问题是参考参数是否可修改。速度与 const 资格,AFAIK无关。

答案 6 :(得分:0)

使用const引用为您提供 Const correctness 简而言之:

这意味着参考所引用的类型不能在函数&中修改。与此同时,您不会产生价值传递的开销。

它可以帮助诚实的程序员犯下诚实的错误。提供编译器执行任何优化(它可以执行任何优化)。