Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ const';函数参数中的原语类型是否会显著提高性能?_C++_Performance_Constants - Fatal编程技术网

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)