2015-08-16 2 views
4

Je n'étais pas familier avec cela. Je l'ai cherché sur google mais je n'ai pas trouvé ma réponse. Donc, poster ma question. Juste essayé programme suivant:C++: tableau statique à l'intérieur d'une classe ayant une taille inconnue

#include <iostream> 
class test 
{ 
    static char a[]; 
    static int b[]; 
}; 
int main() 
{ 
    test t; 
} 

Il compile très bien sans aucun avertissement sur MSVS 2010 & g ++ 4.8.1. Il compile aussi bien dans le compilateur C++ 14. (Voir la démo en direct here.) Alors, où en dit la norme C++ à ce sujet? Si je supprime le mot-clé statique de la déclaration du tableau char dans la classe test, le compilateur donne une erreur ISO C++ forbids zero size array lorsque j'utilise l'option de ligne de commande -pedantic-errors dans l'option g ++ & /Za dans le compilateur MSVS 2010, elle indique error C2133: 'test::a' : unknown size. Donc, mes questions sont:

1) Quelle est l'utilisation de la matrice statique de taille inconnue?

2) Comment puis-je spécifier plus tard leur taille & accéder à ces éléments de tableau? Je suis vraiment confus.

3) Pourquoi supprimer les fils de mots-clés statiques aux erreurs de compilation?

Il serait préférable que quelqu'un l'explique en utilisant un exemple simple.

Merci.

Répondre

4

Le compilateur ne se soucie pas de la taille. C'est juste une déclaration pour le champ statique, donc dire que vous avez un tableau est suffisant. La taille n'a pas d'importance à ce stade.

Vous avez seulement une déclaration pour le champ statique à ce stade. Vous n'utilisez jamais ces tableaux et le compilateur est permissif ... il ne se plaindra pas. Si vous souhaitez cependant les utiliser, vous aurez besoin d'une définition . Si vous omettez la taille, vous obtiendrez des messages d'erreur similaires à ceux que vous avez déjà vus.

Il n'y a rien de spécial qui se passe. Pourquoi la suppression des mots clés statiques entraîne-t-elle une erreur de compilateur?

+0

Pourquoi? – Destructor

+0

Parce que c'est une définition pour la * classe *. En C++, tout objet doit avoir une taille connue. –