const 形参

本文详细解析了C++中形参是否使用const的差异,通过实例展示了const形参与非const形参在参数传递方式上的区别,解释了为何在某些情况下即使省略const也会导致编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

形参前面有没const,这里还是有点区别的。分几个情况看看:
知道实参如果按值传递,则形参接收的只是实参的一个拷贝,对这个拷贝的任何操作都不会去改变实参,那么此时它加不加const都是一样,所以在有这样一种情况“尽管函数的形参是const,但是编译器还是将它定义为普通的函数”,如:
void fun(const int i);
void fun(int i);
是一样的,这时会出现“重定义的错误”。

但是形参是按地址如指针或者引用的话,就另当别论了。
看个例子:
[cpp]  view plain copy
  1. #include <iostream>  
  2. #include <string>  
  3. using namespace std;  
  4. void print_str(const char *s)  
  5. {  
  6.       cout<<s<<endl;  
  7. }  
  8. int main()  
  9. {  
  10.       const char *p = "hello world";  
  11.       print_str(p);  
  12.       return 0;  
  13. }  

 这样编译没有问题,如果我把第10行的const去掉,编译也没有问题。但是第10行不变,把第4行的const去掉,编译就有问题了。(引用类似,就不再说了)
那么可以首先想到,void print_str(const char *s);和void print_str(char *s);不是两个一样的函数。
可以这样想想:对于变量的约束,允许加强,但是不能削弱
若形参是const,那么实参是不是const都不要紧; 若形参不是const,那么要传递成功,则应该不是const。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值