C++标准8.3.2/4表示:为什么不可能在C++中创建一个引用数组?
有应是 没有引用任何参考文献,没有参考文献, 的阵列和没有指针的引用。
但我不明白为什么这个限制被添加到c + +。在我看来,下面的代码很容易编译和工作?这种限制的真正原因是什么?
int a = 10, b = 20;
int &c[] = {a, b};
C++标准8.3.2/4表示:为什么不可能在C++中创建一个引用数组?
有应是 没有引用任何参考文献,没有参考文献, 的阵列和没有指针的引用。
但我不明白为什么这个限制被添加到c + +。在我看来,下面的代码很容易编译和工作?这种限制的真正原因是什么?
int a = 10, b = 20;
int &c[] = {a, b};
由于数组中的索引实际上是按照隐式转换为指针的方式定义的,因此指针算术。所以为了支持这个,你还必须支持指向引用的指针,并且定义它们的指针算术方法。
因为引用不是对象。主要引用了参考文献,以便在呼叫地点插入&
,以支持通过参考的引用和参考归还。你可能想要的是一个指针数组。
引用不能被重新分配,并且没有大小。
如果允许引用数组,那么它们必须以特殊方式处理。
这是我在读:
5.2.1下标[expr.sub]
1后缀表达式,随后在方括号中 表达式是 后缀表达式。其中一个 表达式的类型应为 “指向T的指针,另一个应具有枚举或整数类型的 。 结果是类型“T”的左值。类型“T”应该是完全定义的对象类型 。61)表达式E1 [E2] 与 *((E1) +(E2))[注:有关*和+的详细信息,请参阅5.3和5.7;有关数组的详细信息,请参阅8.3.4。 - 注意]
-C++草案。
int a = 10, b = 20;
int &c[] = {a, b};
所以,想象&c[0]
将东西像*&(c+0)
,恕我直言引用就像别名。因此,通过数组的概念,它会尝试解引用不想要的引用所持有的值。