#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不能引用这个临时量?
准确的说是 C++ 非常量左值引用,不能绑定到(右值)临时变量。
C++ 就是这样设计的。
详细规则见 dcl.init.ref/5,或者 cppreference/reference_initialization
string("abc")
是一个类型装换,其结果是一个 prvalue ,右值的一种。