函数参数中的const'ing原型是否会显着提升性能?

时间:2011-06-18 14:44:16

标签: c++ performance const

一位朋友告诉我,这样做效率更高

int addNumbers(const int number1, const int number2);

大于

int addNumbers(int number1, int number2);

当然假设不会为number1number2分配新值。这是否会带来显着的性能提升?我应该知道其他任何副作用吗?

5 个答案:

答案 0 :(得分:11)

const correctness更多的是让编译器帮助您防止犯下诚实的错误。声明参数的常量只是类型安全的另一种形式,而不是性能的提升。

大多数现代编译器都能够检测变量是否真的是常量,并应用正确的优化。因此,请不要将 性能原因 用于const-correctness。而是将其用于 可维护性原因 & 阻止自己做出愚蠢的错误

答案 1 :(得分:8)

我希望你知道,在函数声明方面,这两个是 相同的 ,即它们声明了相同的函数!!!

现在,就定义而言,我不能说是否有任何提升,但我可以保证你没有 重要 提升。我不相信现代编译器是愚蠢的。他们中的大多数都比你和我聪明。))

还有另一面。一些程序员更愿意在适用的地方添加 ,以真正 const-correct 。这是一个有效的观点和实践。但同样,对于性能问题,我不会

答案 2 :(得分:0)

这至多是微观优化;最坏的错误。

不要理会这样的想法。

如果您不打算更改值,请使用const。继续前进。

答案 3 :(得分:0)

你可能会想到这样的事情:

void foo(vector<int> large_object)

VS

void foo(const vector<int>& large_object)

第二种情况可能更快,因为编译器只会在堆栈上推送引用。在第一种情况下,将推送整个矢量。

答案 4 :(得分:-1)

这可能取决于编译器和函数的性质,实际上没有任何优化空间。如果你考虑编译器选择何时使用CPU寄存器和使用哪个加载指令的工作,我找不到任何知道参数是const的用例,这将允许编译器优化代码。

但是,您仍应在函数声明中使用const。它是自我记录,让其他人知道参数的性质。此外,它可能会阻止您使用变量无意中执行某些操作:

void addNumbers(const int num1, const int num2)
{
    ...
    num1++;   // you really didn't mean to do this!
}