C++ const';函数参数中的原语类型是否会显著提高性能?
一个朋友告诉我这样做更有效C++ const';函数参数中的原语类型是否会显著提高性能?,c++,performance,constants,C++,Performance,Constants,一个朋友告诉我这样做更有效 int addNumbers(const int number1, const int number2); 当然,假设不会为number1和number2分配新值。这是否会显著提高性能?还有什么副作用我应该知道吗?我希望你知道,就函数声明而言,这两个函数是相同的,也就是说它们声明了相同的函数 现在,就定义而言,我不能说是否有任何提升,但我可以向你保证没有显著的提升。我不相信现代编译器是愚蠢的。他们中的大多数人都比你和我聪明 还有另一面。一些程序员更喜欢在任何适用的
int addNumbers(const int number1, const int number2);
当然,假设不会为
number1
和number2
分配新值。这是否会显著提高性能?还有什么副作用我应该知道吗?我希望你知道,就函数声明而言,这两个函数是相同的,也就是说它们声明了相同的函数
现在,就定义而言,我不能说是否有任何提升,但我可以向你保证没有显著的提升。我不相信现代编译器是愚蠢的。他们中的大多数人都比你和我聪明
还有另一面。一些程序员更喜欢在任何适用的地方添加常量,以真正做到常量正确。这是一个有效的观点和实践。但是,我不会因为性能问题而这么做
const correction
更多的是让编译器帮助您防止犯诚实的错误。声明参数的常量只是类型安全的另一种形式,而不是提高性能
大多数现代编译器将能够检测变量是否为常量,并应用正确的优化。因此,出于性能原因,不要使用常量正确性。而是出于可维护性的原因使用它&防止自己犯愚蠢的错误这可能取决于编译器和函数的性质,因为实际上没有任何优化空间。如果您考虑一下编译器的工作,即选择何时使用CPU寄存器以及使用哪条加载指令,我找不到任何知道参数为const将允许编译器优化代码的用例 但是,您仍然应该在函数声明中使用const。它是自我记录的,让其他人知道参数的性质。此外,它还可以防止您无意中使用变量执行某些操作:
void addNumbers(const int num1, const int num2)
{
...
num1++; // you really didn't mean to do this!
}
这充其量只是微观优化;最坏的情况是错的 不要为这样的想法烦恼
如果不打算更改该值,请使用
const
。然后继续。你可能会想到这样的事情:
void foo(vector<int> large_object)
void foo(矢量大对象)
vs
void foo(常量向量和大对象)
第二种情况可能更快,因为编译器只会在堆栈上推送引用。在第一种情况下,整个向量将被推送。确实如此。使用
const
,除非您需要修改某些内容。与“在不需要修改某些内容时使用const
相反”!为什么函数声明要确定函数将如何实现?假设您出于某种原因想要使用其中一个参数作为计数器,并在循环中递减它。在这种情况下,您必须更改函数声明,我相信我不必解释为什么这是一件坏事。我已经放弃了问Q为什么要进行否决投票?
,但最好知道在这种特殊情况下这样做的反参数。反参数:减少键入。但是,因为这里的每个人都强烈支持在可能的情况下使用const
ing来防止愚蠢的bug,所以这是一个非常简单的辩护。@Pieter:“少键入”在反对清晰性和表达您的意图时从来都不是一个反驳。不仅让编译器知道,而且让您(开发人员)知道。如果您有一个用户需要扩展的抽象类,那么拥有一个函数“const correct”将让开发人员知道您不需要处理特定的变量。显然,在对象引用中可以更好地观察到这一点。。。
void foo(vector<int> large_object)
void foo(const vector<int>& large_object)