C++非const引用问题:error: cannot bind non-const lvalue reference of type

    当一个函数的形参为非const类型,而一个参数以非const传入,编译器一般会认为程序员会在该函数里修改该参数,而且该参数返回后还会发挥作用。此时如果你把一个临时变量当成非const引用传进来,由于临时变量的特殊性,程序员无法对改临时变量进行操作,同时临时变量可能随时会消失,修改临时变量也毫无意义,因此,临时变量不能作为非const引用。

例如++++i与i++++的区别,前者是合法的,后者是非法的;原因在于前者是i自增后再参与其他预算,而后者是i参与运算后对i的值(临时变量)再自增1,即i++++让第一个后++返回的临时对象再自增,这样对C++是无意义的,同样也是禁止的。

例子:

std::string a[10]={
        "hello",
        "world",
        "shenzhen"
};
void print(const std::string& str){
        std::cout << str << std::endl;
}
std::string get_string(int i){
        return a[i];
}
int main(){
        print(get_string(1));
        return 0;
}

以上例子编译会提示错误:

error: cannot bind non-const lvalue reference of type

因为get_string(1)返回的是临时对象(属于const),而void print(std::string& str)要求接收非const引用,因此会报错,解决办法有多种:

  1. print(std::string& str)改成print(const std::string& str);
  2. print(std::string& str)改成print(std::string str);
  3. 先定义一个变量对象用于接收get_string(1)的返回值,再传给print(std::string& str);
  • 25
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值