函数参数中的常量基元类型是否会导致显著的性能提升?

Does const'ing primitive types in function parameters result in a significant performance boost?

本文关键字:性能 是否 常量 参数 函数 类型      更新时间:2023-10-16

一个朋友告诉我做更有效

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

int addNumbers(int number1, int number2);

当然假设CCD_ 1和CCD_。这是否会显著提高性能?还有其他副作用我应该知道吗?

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

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

我希望您知道,就函数声明而言,这两个函数是完全相同的,也就是说,它们声明了相同的函数!!!

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

还有另一面。一些程序员更喜欢在适用的任何地方添加const,以真正实现constcorrect。这是一个有效的观点和实践。但是,对于性能问题,我不会这么做,只是

这充其量只是微观优化;最坏的情况是错误的。

不要为这样的想法而烦恼。

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

您可能会想到这样的东西:

void foo(vector<int> large_object)

与。

void foo(const vector<int>& large_object)

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

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

但是,您仍然应该在函数声明中使用const。它是自我记录的,让其他人知道参数的性质。此外,它可能会防止你无意中使用一个变量做一些事情:

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