2011-03-28 8 views
27

C++ estándar 8.3.2/4 dice:¿Por qué es imposible crear una matriz de referencias en C++?

No habrá referencias a referencias, no hay matrices de referencias, y no hay punteros a referencias.

Pero no puedo entender por qué esta restricción se agrega a C++. En mi opinión, el código de abajo se puede compilar y trabajar fácilmente. ¿Cuál es la verdadera causa de esta restricción?

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

Respuesta

26

Dado que la indexación en una matriz se define realmente en términos de una conversión implícita a un puntero, entonces la aritmética del puntero. Por lo tanto, para apoyar esto, también debe admitir punteros a referencias y definir qué significa aritmética de puntero en ellos.

5

Porque las referencias no son objetos. Las referencias se presentaron principalmente para admitir llamada por referencia y devolución por referencia sin insertar & en el sitio de llamada. Lo que probablemente quiera es una variedad de indicadores.

5

No se puede reasignar una referencia y no tiene tamaño.

Si se permitieran arreglos de referencias, por lo tanto, tendrían que tratarse de una manera especial.

1

Esto es lo que leer en:

5.2.1 subscripting [expr.sub]

1 Una expresión postfix seguido de una expresión entre corchetes es una expresión postfix. Una de las expresiones tendrá el tipo "puntero a T y la otra tendrá enumeración o tipo integral. El resultado es un valor l de tipo "T". El tipo "T" debe ser un tipo de objeto completamente definido .61) La expresión E1 [E2] es idéntica (por definición) a * ((E1) + (E2)) [Nota: vea 5.3 y 5.7 para detalles de * y + y 8.3.4 para detalles de las matrices. -finalizar]

-C++ Draft.

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

así que imagina &c[0] sería algo como *&(c+0), en mi humilde opinión referencias son como alias. Por lo tanto, siguiendo la noción de matrices, trataría de desreferenciar el valor mantenido por la referencia que uno no desearía.

Cuestiones relacionadas