一位朋友告诉我,这样做效率更高
int addNumbers(const int number1, const int number2);
大于
int addNumbers(int number1, int number2);
当然假设不会为number1
和number2
分配新值。这是否会带来显着的性能提升?我应该知道其他任何副作用吗?
答案 0 :(得分:11)
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!
}