C++非常量引用,引用不了临时量?

#include <iostream>
#include <string>
using namespace std;

struct A{
    A(string val):s(val){}
    string s;
};

void show(A &a){ cout<<a.s<<endl; }

int main()
{
    show(string("abc"));
    return 0;
}

以上代码,会出现编译错误,提示 show() 这个函数调用错误。
这里show的形参创建了一个临时量,为什么show不能引用这个临时量?

阅读 2.7k
2 个回答
C++非常量引用,引用不了临时量?

准确的说是 C++ 非常量左值引用,不能绑定到(右值)临时变量。

C++ 就是这样设计的。

详细规则见 dcl.init.ref/5,或者 cppreference/reference_initialization

string("abc") 是一个类型装换,其结果是一个 prvalue ,右值的一种。

新手上路,请多包涵

传递临时变量的引用必须使用const &
将函数写成

void show(const A &a){ cout<<a.s<<endl; }

才行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题