C+中参考文献的澄清+; 所以我正在尝试学习C++,我遇到了一些让我感到困惑的事情。我有密码 int x = 0; int &y = x; cout << &x<< " " << x << " " << &y << " " <<y<< endl;
我很难理解为什么将x(int)转换为&y(reference)不会导致错误。起初我以为这是一种转换但是C+中参考文献的澄清+; 所以我正在尝试学习C++,我遇到了一些让我感到困惑的事情。我有密码 int x = 0; int &y = x; cout << &x<< " " << x << " " << &y << " " <<y<< endl;,c++,variables,reference,C++,Variables,Reference,我很难理解为什么将x(int)转换为&y(reference)不会导致错误。起初我以为这是一种转换但是 int &y = &x; 导致错误 有人能解释为什么会这样吗?提前感谢。这不是转换。当变量类型为T&时,其中T是某种随机类型,基本上就是说“我在声明一个名称,它是另一个名称的别名,或者可能是一个匿名值。”。它更像是typedef,而不是指针 引用经常被实现为地址,但这并不是思考它们是什么的好模型 在您的示例中,您感到困惑的是: int * const &y = &am
int &y = &x;
导致错误
有人能解释为什么会这样吗?提前感谢。这不是转换。当变量类型为
T&
时,其中T
是某种随机类型,基本上就是说“我在声明一个名称,它是另一个名称的别名,或者可能是一个匿名值。”。它更像是typedef
,而不是指针
引用经常被实现为地址,但这并不是思考它们是什么的好模型
在您的示例中,您感到困惑的是:
int * const &y = &x;
这样就行了。然后,
y
成为获取x
地址的临时结果的别名。请注意,它是对指针的引用。它必须是对常量指针的引用,因为它是对临时值的引用。int&
不是地址。这是一个参考
int&y=x
声明y
作为对x
的引用。它实际上意味着y
成为x
的另一个名称。每当你使用y
,就好像你说了x
指针(不是引用)用于存储地址<代码>整数&y=&x无效,因为
&x
是x
的地址(它是int*
)y
是对int
的引用,而不是对int*
的引用,因此您想知道为什么流插入操作符我猜它是003AFA08 0 003AFA08 0
严格来说,&x
不是x
的地址,而是指向x
的指针,即使&
运算符被称为address of:)@fredforflow:“对象指针类型的有效值表示内存中字节的地址或空指针。”对我来说足够接近了。:)@GMan:“一元&
运算符的结果是指向其操作数的指针。[…]如果表达式的类型是T
,则结果的类型为“指向T
”,并且是指定对象地址的PR值。@FredOverflow:“[…]是指定对象的地址”。那么说&x
有什么错呢?@GMan:如果它只是一个地址,你就不能取消引用它或对它做任何有用的事情。
int * const &y = &x;