Lors de la déclaration d'une référence à un tableau d'Ints, pourquoi doit-il faire référence à un pointeur const?

Note: j'utilise le compilateur g++ (qui est ce que j'entends est assez bonne et censé être assez proche de la norme).


Disons que vous avez déclaré un tableau d'entiers:

int a[3] = { 4, 5, 6 };

Maintenant, disons que vous voulez vraiment pour déclarer une référence à ce tableau (nevermind pourquoi, autres que les Bjarne dit la langue prend en charge).

Cas 1 -- Si vous essayez:

int*& ra = a;

puis le compilateur hésite et dit:

"invalid initialization of non-const reference of type `int*&' from a temporary of type `int*'"  

Tout d'abord, pourquoi est - 'a' une variable temporaire (c'est à dire ne pas avoir une place dans la mémoire?)...

De toute façon, fine, chaque fois que je vois un non-const erreur, j'ai essayer de le jeter dans un const...

Cas 2 -- si vous essayez:

int*const&rca = a;  //wish I knew where the spaces should go (but my other post asking about this sort of protocol got a negative rank while many of the answers got ranked highly -- aha! there are stupid questions!) 

Ensuite, tout est cool, ça compile, et vous obtenez une référence à la matrice.

Cas 3 -- Maintenant, voici une autre chose qui va compiler:

int* justSomeIntPointer = a;  //LINE 1
int*& rpa = justSomeIntPointer;  //LINE 2

Cela vous donne aussi une référence pour le tableau d'origine.

Voici donc ma question: À quel point est-ce le nom d'une manière statique déclaré tableau
devenir un const-pointeur? Je crois me souvenir que le nom d'un tableau d'entiers est également un pointeur de type int, mais je ne me souviens pas qu'il ne soit jamais un const-pointeur vers int...

Il semble que le Cas 1 échoue parce que la référence à déclarer (ra) n'est pas const-pointeur, ce qui peut signifier que " a " est déjà un const-pointeur vers int.

Il semble que le Cas 2 fonctionne parce que la référence à déclarer (rca) est déjà un const-pointeur vers int.

Cas 3 fonctionne aussi, qui est très bien, mais pourquoi? À partir de quel point de l'hypothèse d'un pointeur de int (c'est à dire le nom du tableau "a") const-pointeur? T-il se passer si vous l'affectez à un int* (LIGNE 1), ou faut-il se produire lorsque vous affectez cet int* int*& (LIGNE 2)?

Espérons que cela a du sens. Merci.

source d'informationauteur Jimmy