Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中参考文献的澄清+; 所以我正在尝试学习C++,我遇到了一些让我感到困惑的事情。我有密码 int x = 0; int &y = x; cout << &x<< " " << x << " " << &y << " " <<y<< endl;_C++_Variables_Reference - Fatal编程技术网

C+中参考文献的澄清+; 所以我正在尝试学习C++,我遇到了一些让我感到困惑的事情。我有密码 int x = 0; int &y = x; cout << &x<< " " << x << " " << &y << " " <<y<< endl;

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

我很难理解为什么将x(int)转换为&y(reference)不会导致错误。起初我以为这是一种转换但是

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;