Why it is impossible to create an array of references in c++?

匿名 (未验证) 提交于 2019-12-03 02:16:02

问题:

C++ Standard 8.3.2/4 says:

There shall be no references to references, no arrays of references, and no pointers to references.

But I can't understand why this restriction is added to c++. In my opinion the code bellow can easily be compiled and work? What is the real cause of this restriction?

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

回答1:

Because indexation into an array is actually defined in terms of an implicit conversion to a pointer, then pointer arithmetic. So to support this, you'd have to also support pointers to references, and define what pointer arithmetic means on them.



回答2:

Because references aren't objects. References were primarily introduced to support call by reference and return by reference without inserting & at call-site. What you probably want is an array of pointers.



回答3:

A reference cannot be reassigned, and has no size.

If arrays of references were allowed they would therefore have to be treated in a special way then.



回答4:

This is what i read at:

5.2.1 Subscripting [expr.sub]

1 A postfix expression followed by an expression in square brackets is a postfix expression. One of the expressions shall have the type “pointer to T and the other shall have enumeration or integral type. The result is an lvalue of type “T.” The type “T” shall be a completely-defined object type.61) The expression E1[E2] is identical (by definition) to *((E1)+(E2)) [ Note: see 5.3 and 5.7 for details of * and + and 8.3.4 for details of arrays. ―end note ]

-C++ Draft.

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

So imagine &c[0] would be something like *&(c+0), IMHO references are like aliases. Hence going by the notion of arrays it would try to dereference the value held by the reference which one would not want.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!