形参有没const的区别

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

但是形参是按地址如指针或者引用的话,就另当别论了。
看个例子:
#include <iostream>
#include <string>
using namespace std;
void print_str(const char *s)
{
      cout<<s<<endl;
}
int main()
{
      const char *p = "hello world";
      print_str(p);
      return 0;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值