Dupliqué possible: strong>
Pourquoi ne puis-je pas créer une matrice de taille déterminée par une variable globale? P>Il s'agit de la définition de la matrice simple avec une taille constante 4, qui est stockée dans la mémoire de pile: p>
xxx pré> maintenant si je veux déclarer une matrice de taille dynamique dans la pile qu'il semble que je devrais écrire ce code: p>
xxx pré> mais comme nous le savons pas non autorisé en C ++ et que nous pouvons écrire celui-ci, qui créera la matrice dans la mémoire dynamique (c.-à-d. tas): p>
xxx pré> mais cela est plus lent et (en raison de l'utilisation de nouveaux opérateurs) et nécessite d'appeler la suppression [] Opérateur après avoir terminé notre travail avec une matrice. P >
Donc, ma question est ici: p>
- Pourquoi est-ce que C ++ ne vous permet pas de créer une matrice de longueur dynamique dans la mémoire de pile? LI> ul> blockQuote>
5 Réponses :
C99 autorise des matrices de longueur variable (VLAS); C89 N'A PAS PAS.
void function(int n) { int array[n]; ... }
Je sais ça. Mais la question est pourquoi?"
@Mihran: Parce que les concepteurs de l'origine C ne l'ont pas vu si nécessaire, et C ++ hérité de cette limitation de C. Ensuite, c a été ajustée en C99 pour le permettre - et C ++ n'a pas encore suivi de costume, et afaik, même le C + + 0x Standard n'ajoutera pas la fonctionnalité. Tous les compilateurs C (et notamment MSVC) ne soutiennent pas C99 dans l'ampleur de l'autorisation de la VLAS. La raison initiale de l'omission du soutien était probablement que la fourniture de la prise en charge des compilateurs compliqués de VLAS qui devaient être à la corne de chaussure pour s'intégrer à une mémoire de 64 Ko et le besoin insuffisant de celui-ci; Les tableaux alloués dynamiquement fonctionnent bien pour de nombreuses personnes.
Il n'y a pas de langage appelé C / C ++. Il y a C, qui permet des tableaux de longueur variable (VLAS) depuis 1999 et il y a C ++, qui ne permet pas. P>
Pour répondre à votre question "Pourquoi" - C ++ Corps standard pour une raison quelconque n'a pas inclus VLAS dans la norme C ++. P>
int n; cin >> n; int array[n]; In C++, the size of the array must be known at compile time. But in your code the size will be known at runtime. That is not allowed by the language!
La question est "pourquoi il y a une telle exigence?"
int n; cin >> n; int array[n]; This will work if use g++. g++ support VLAs as an extension. However ISO C++ mandates size of an array to be a constant expression i.e the size must be known at compile time. Why is it that C++ don't allow you to create array of dynamic length in stack memory? Simple answer "Because the standard says so". Even the upcoming C++ Standard (C++0x) is not going to allow Variable Length Arrays.BTW we always have std::vector in C++. So there's no reason to worry. :)
+1 Je ne savais pas à ce sujet.
Lorsque vous connaissez N à l'avance, il est très souvent plus efficace d'utiliser un tableau, mais vous devez le créer comme un pointeur et utiliser Malloc () ou Alloca (). Vous pouvez utiliser des pointeurs comme des tableaux.
En plus des autres réponses:
Ma spéculation est que la carte standard C ++ pense que les matrices de type C sont obsolètes et Evil em> et favorise l'utilisation de std :: vecteur code> (qui a cette fonctionnalité par conception) de cette façon. p>