Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.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++;?_C++_Reference_Constants - Fatal编程技术网

C++ 为什么在C++;?

C++ 为什么在C++;?,c++,reference,constants,C++,Reference,Constants,我知道我不能写long&const x。但为什么不呢?理论上我可以有一个对x的常数引用。我只是无法将引用设置为其他地址 为什么C++中禁止它? 编辑:我知道有些事情我不明白,但我可以给另一个变量指定一个引用。这段代码可以工作: #include <iostream> int main() { int a = 1, b = 2; int & x = a; x = b; return 0; } #包括 int main() { INTA=1,b=2; int&x=a;

我知道我不能写
long&const x
。但为什么不呢?理论上我可以有一个对x的常数引用。我只是无法将引用设置为其他地址

为什么C++中禁止它? 编辑:我知道有些事情我不明白,但我可以给另一个变量指定一个引用。这段代码可以工作:

#include <iostream>

int main()
{
 int a = 1, b = 2;
 int & x = a;
 x = b;
 return 0;
}
#包括
int main()
{
INTA=1,b=2;
int&x=a;
x=b;
返回0;
}

但这与你所说的是矛盾的。

引用已经总是恒定不变的

初始化后,不能将它们重新指定为引用另一个变量,并且必须始终将它们初始化为引用一个变量

在您的示例中,代码没有执行您认为的操作:

x=b
不会重新分配
x
以引用
b
,而是将
b
的值分配给
x
正在引用的变量,即
a

引用只是变量的别名,即另一个名称。这意味着您可以将
x
的每个实例替换为
a
,其行为将是相同的

我只是无法将引用设置为其他地址

你已经不能了

引用是不可变的。添加
const
不会使它们“更”不可变

根本没有理由添加这一点,也没有任何理由避免它可能带来的混乱

特别是,它会导致人们认为引用是对象,而不是对象。引用不是另一种伪装下的指针。它们是参考文献;另一个对象的别名。和名称不能是
const

我可以将引用分配给另一个变量

不,你不能

这与你所说的是矛盾的


不,是你误解了自己的代码。使用
x=b
,您正在将
a
设置为
2

您是否缺少引用始终是常量的事实?常量引用声明如下:
const long&x
“但我可以将引用分配给另一个变量”-不,您不能;代码实际做的是将
b
的值移动到
a
,而不是重新设置引用的基础。请记住,作为参考-
x
a
的一种别名形式,因此无论您对其做什么,都会对
a
产生透明的影响,包括赋值
x
不能更改为处理不同的对象。在
int&x=a,“x”和“a”是同一对象的两个不同名称,并且
x=b
a=b完全相同
@Manos:不,这是对-
const
的引用。明白为什么准确的术语很重要吗?谢谢,这就是我要找的!