例如,考虑一下:
int sum(int a, int b)
{
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
与
int sum(const int a, const int b)
{
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
第二种方法通常更快吗?
C中的函数参数被复制并发送到函数,因此函数内部的更改不会影响原始值.我的理由是,在sum上面的第二个中,编译器确实知道a并且b没有在函数内部进行修改,所以它只能传递原始值而不先复制它们.这就是为什么我认为第二个sum比第一个更快.但我真的不知道.在sum上面特别简单的例子中,差异(如果有的话)应该是最小的.
编辑:这个sum例子只是为了说明我的观点.我不希望在这个特定的例子中应该有很大的差异.但我想知道在更复杂的情况下const,编译器是否可以利用函数参数中的修饰符来使函数更快.我怀疑编译器总能确定一个参数是否在一个函数内被改变(因此我的第二个问题在下面); 因此我希望当它找到一个const修饰符时,它会做出与没有const修饰符时不同的东西.
问题:一般来说,一个函数在它的参数时会const比它们不是时更快?
问题2:通常,C编译器(理论上)是否总能确定函数内是否更改了函数参数?
一位朋友告诉我,这样做效率更高
int addNumbers(const int number1, const int number2);
Run Code Online (Sandbox Code Playgroud)
比
int addNumbers(int number1, int number2);
Run Code Online (Sandbox Code Playgroud)
当然假设number1并且number2不会分配新值.这是否会带来显着的性能提升?我应该知道其他任何副作用吗?
可能重复:
函数参数使用'const'
例如,
void Func(int para);
Run Code Online (Sandbox Code Playgroud)
如果我知道我不想在Func(...)中更改para的值,我是否应该将para声明为“ const int”以保证这一点?即
void Func(const int para);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我认为
void Func(const int ¶);
Run Code Online (Sandbox Code Playgroud)
有时不是合适的替代方法,因为const int&通常是由基础指针实现的,因此它基本上等效于
void Func(const int *p_para);
Run Code Online (Sandbox Code Playgroud)
《 C ++编码标准:101条规则》一书第31页说:“ void Func(const int para);” 不好,因为它会“混淆”头文件的阅读器。我不确定...
经过深思熟虑,我认为一个好的解决方案是将其声明为“ void Func(int para);”。并在实现它时使用“ void Func(const int para){...}”。我在“ void Func(const int para);”中发现“ const”一词。将被编译器静默删除...