int x = 2;
int y = x;
int &z = x;
实际上,我会简单地说:为什么变量 y 分配了变量x的值,而z是它的引用?在 C++ 中,赋值运算符有某种隐藏的转换,在变量y的情况下,它将在与x关联的地址处获得的值赋给它,而在&z的情况下- 地址本身? 我会很高兴看到任何关于这个主题的高质量文献。
int x = 2;
int y = x;
int &z = x;
实际上,我会简单地说:为什么变量 y 分配了变量x的值,而z是它的引用?在 C++ 中,赋值运算符有某种隐藏的转换,在变量y的情况下,它将在与x关联的地址处获得的值赋给它,而在&z的情况下- 地址本身? 我会很高兴看到任何关于这个主题的高质量文献。
而是相反。
x是一个可寻址的表达式,一个左值。当你初始化另一个变量时,左值被“降低”到它的值,右值,并且相同的值被分配给另一个变量。但是当你初始化一个引用的时候,那么左值就是为它而存在的,它是在不降级的情况下被取走的。请注意,您不是在谈论分配,而是在谈论初始化。当分配给引用时,再次需要一个值,一个右值,并将其写入引用所引用的变量。
这是对手指的解释。书籍中有更详细的解释,甚至可以在标准中找到完全准确(以及非常正式和无聊)的定义。