可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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.