在函数参数中常量类型的常量化是否会显着提高性能?

| 一位朋友告诉我,这样做效率更高
int addNumbers(const int number1, const int number2);
int addNumbers(int number1, int number2);
假设
number1
number2
当然不会被赋予新值。这会大大提高性能吗?我还应该了解其他副作用吗?     
已邀请:
        
const correctness
更多的是让编译器帮助您避免犯诚实的错误。声明参数的恒定性只是类型安全的另一种形式,而不能提高性能。 大多数现代编译器将能够检测变量是否确实是常数,并应用正确的优化方法。因此,出于性能原因,请勿使用const-correctness。而是出于可维护性原因使用它,并防止自己犯下愚蠢的错误。     
        我希望您知道在函数声明方面,这两个是相同的,也就是说,它们声明了相同的函数!!! 现在,就定义而言,我不能说是否有任何提升,但是我可以保证您没有任何明显的提升。我不相信现代编译器是愚蠢的。他们中的大多数人比你和我都聪明。 还有另一面。一些程序员会更喜欢在适用的地方添加const,以确保它们真正是const正确的。这是一种有效的观点和实践。但是同样,我不会仅仅为了性能问题而这样做。     
        充其量是微优化。在最坏的情况下是错误的。 不要为这样的想法而烦恼。 如果不打算更改值,请使用use5ѭ。继续前进。     
        您可能会想到这样的事情:
void foo(vector<int> large_object)
void foo(const vector<int>& large_object)
第二种情况可能会更快,因为编译器只会将引用推入堆栈。在第一种情况下,整个向量将被推送。     
        这可能取决于编译器和函数的性质,实际上没有任何优化空间。如果考虑到编译器在选择何时使用CPU寄存器以及使用哪个加载指令方面的工作,那么我找不到任何用例,在这些用例中,知道参数为const将允许编译器优化代码。 但是,您仍应在函数声明中使用const。它是自我记录,并让其他人知道参数的性质。另外,它可能会阻止您无意中使用变量:
void addNumbers(const int num1, const int num2)
{
    ...
    num1++;   // you really didn\'t mean to do this!
}
    

要回复问题请先登录注册