为什么你可以将rvalue传递给需要引用的函数?
void func(const std::string& x)
{
std::cout << x << std::endl;
}
int main()
{
std::string& x = "Test"; //fails to compile
func("Test"); //works
return 0;
}
在尝试之前,我认为在调用func之前我需要创建一个字符串变量。
std::string tmp = "Test";
func(tmp);
就像我需要创建引用一样。
std::string tmp = "Test";
std::string& x = tmp;
答案 0 :(得分:7)
它不是要传递给函数,而是关于lvalue
对const
对象的引用。
std::string& x = "Test"; //fails to compile
以上尝试将临时绑定绑定到非const引用。如果我们要进行调整,它就会很好地形成:
std::string const& x = "Test"; // compiles
现在它延长了临时的生命周期,直到引用超出范围,如c ++标准所规定的那样 知道了这一点,我们可以通过将原型更改为:
来使您的函数无法编译void func(std::string& x)
现在,functions参数无法绑定到临时对象,因为它接受非const引用。
对于post c ++ 11时代,事情会更有趣。您可以将临时值绑定到非常量rvalue
引用:
std::string&& x = "Test"; //Okay and still extends the lifetime of the temporary