函数参数中的常量基元类型是否会导致显著的性能提升?
Does const'ing primitive types in function parameters result in a significant performance boost?
一个朋友告诉我做更有效
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!
}
相关文章:
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 不同版本的编译器(例如GCC)是否会产生不同的性能?
- 在现代C++中,侵入式容器是否仍然比非侵入式容器具有性能优势?
- 与纯 V8 相比,NodeJS 是否有任何性能缺陷或显著开销?
- 通过默认复制构造函数比较 C++ 字符串是否会影响性能,原因为何?
- 隐式转换函数的返回对象时是否会影响性能?
- 为数组赋值时是否存在性能差异
- 在类中始终使用此指针是否有任何性能成本
- 在渲染之前直接上传是否会对性能产生负面影响
- 我是否错过了什么,或者虚拟呼叫的性能并不像人们所说的那样糟糕
- 使用 OpenGL 窗口(如 GLFW)或周围的窗口(如 GTK 或 SDL)是否存在性能差异?
- 在将其尺寸较大的向量移动到容量较小的向量之前,是否可以通过使用Reserve()来提高代码性能
- QSqlQuery 绑定值与 BindValues 与 QString.arg() 是否存在性能差异
- 检查从查询返回的任何行是否包含在字符串中的最高性能方法?
- 在C++代码中使用纯 C 库是否有性能下降/损失
- 使用 const CString& 而不是单独使用 CString 作为函数参数是否有任何性能优势?
- 在 C/C++ 中在特定地址边界上对齐内存是否仍能提高 x86 性能?
- 如果多个线程使用同一对象,性能是否受到影响
- OpenCV的Python或C++编码的性能是否不同
- 当从应用程序多次调用数据库过程时,性能是否会受到影响