形参中使用常量引用,常量,普通引用的区别

C++中的引用,给我们提供了一种区别于C指针的形参定义方式。一般我们可以将其定义为

1)普通引用

void foo(int &n);

2)常量

void foo(const int n);

3)常量引用

void foo(const int& n);

三种方法用途不一样,都可以通过编译。

以普通引用为形参的函数,一般会更改实参的值,比如increment(int &n)等;以常量以及常量引用为形参的函数,一般不对实参进行修改。需要注意的是,当函数的功能确定后,不能把常量引用和普通引用混淆,虽然编译可以通过,运行也没有错误,但是会对函数的安全性以及功能造成影响:

1)如果一个本该是常量引用的形参定义成了普通引用,那么程序员会误认为这个形参可以修改。而且,在调用该函数的时候,会产生意想不到的错误。比如:

int getSize1(string &str){
    return str.size();
}
int getSize2(const string &str){
    return str.size();
}
void main(){
    getSize1("helloworld");//报错
    getSize2("helloworld");//正确
}

显然,getSize2才是符合正常函数思维的实现。

2)常量引用为形参时,形参指向实参的空间,而常量为形参时,编译器会给形参重新分配空间。

void foo1(const int n){
    printf("%x\n", &n);
}

void foo2(const int &n){
    printf("%x\n", &n);
}
int main(int argc, char *argv[]){
    int n = 1;
    printf("%x\n", &n);
    foo1(n);
    foo2(n);
    return 0;
}

//输出:
//e25f58cc
//e25f58ac
//e25f58cc

 

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值