C++函数参数前添加const关键字与不加的区别是什么
C++函数参数添加const关键字的影响说明
示例代码对比
参数带const的代码
#include <iostream> using namespace std; void function1(const int x); int main(){ };
参数不带const的代码
#include <iostream> using namespace std; void function2(int x); int main(){ };
具体差异(按值传递场景)
你给出的两个示例都属于按值传递参数的场景,参数是外部实参的独立拷贝,const的影响分两种情况:
- 函数声明阶段:对于按值传递的参数,顶层const会被编译器忽略,
void function1(const int x)和void function2(int x)的函数签名完全一致,二者不会构成重载,声明时加不加const对编译器来说没有区别。 - 函数实现阶段:如果实现时给参数加了const,函数内部就无法修改这个参数的值,任何对该参数赋值的操作都会触发编译报错,相当于强制约束参数为只读,避免误改不需要修改的参数副本,提升代码安全性。
举个实现阶段的例子:
// 带const的实现 void function1(const int x) { x = 20; // 编译报错,x是只读变量不允许修改 cout << x << endl; } // 不带const的实现 void function2(int x) { x = 20; // 编译合法,修改的只是x的本地拷贝,不会影响外部实参 cout << x << endl; }
注意:如果是按引用传递、按指针传递的场景,const的作用会更明显,比如
const int& x代表无法通过该引用修改外部实参本身,和按值传递的场景有本质区别。
内容的提问来源于stack exchange,提问作者keam vireak
相关产品推荐
相关产品推荐

