2011-03-28 41 views
27

C++标准8.3.2/4表示:为什么不可能在C++中创建一个引用数组?

有应是 没有引用任何参考文献,没有参考文献, 的阵列和没有指针的引用。

但我不明白为什么这个限制被添加到c + +。在我看来,下面的代码很容易编译和工作?这种限制的真正原因是什么?

int a = 10, b = 20; 
int &c[] = {a, b}; 

回答

26

由于数组中的索引实际上是按照隐式转换为指针的方式定义的,因此指针算术。所以为了支持这个,你还必须支持指向引用的指针,并且定义它们的指针算术方法。

5

因为引用不是对象。主要引用了参考文献,以便在呼叫地点插入&,以支持通过参考的引用和参考归还。你可能想要的是一个指针数组。

5

引用不能被重新分配,并且没有大小。

如果允许引用数组,那么它们必须以特殊方式处理。

1

这是我在读:

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),恕我直言引用就像别名。因此,通过数组的概念,它会尝试解引用不想要的引用所持有的值。

相关问题