Why it is impossible to create an array of references in c++?
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 a开发者_开发百科nd work? What is the real cause of this restriction?
int a = 10, b = 20;
int &c[] = {a, b};
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.
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.
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.
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.
精彩评论