了解参考绑定

时间:2015-07-02 14:28:46

标签: c++ reference

我们不能将非const左值引用绑定到rvalue,但它可以绑定到const值。我们也不能将左值引用绑定到左值。实际上标准是这样说的:

8.5.3 / 5.2:

  

引用应该是对非易失性const的左值引用   type(即cv1应为const),或者引用应为rvalue reference。

但对于这些事情是否有更好的解释而不是"标准这样说"?

2 个答案:

答案 0 :(得分:3)

因为它没有语义意义。

您不能将非常量左值引用绑定到右值,因为修改右值是什么意思?根据定义,没有其他任何东西可以看到结果,所以这没有意义。

int& i = 3;
//should change referenced location, but we aren't referencing a memory location
i = 5; 

您不能将左值引用绑定到左值,因为存在右值引用以便于对其引用进行破坏性优化。你不希望你的对象被任意地从你身下移出,所以标准不允许它。

void process_string (std::string&&);
std::string foo = "foo";
//foo could be made garbage without us knowing about it
process_string (foo); 
//this is fine
process_string (std::move(foo));

答案 1 :(得分:3)

想想一些真实的案例:

getNetworkInfo()