ssortingng array[] = "";
Comment puis-je assigner un const char*
à un tableau? Est-ce la même chose que:
ssortingng array[] = {""};
?? Cela aurait du sens pour moi. Cependant, cela ne fonctionne toujours pas
int array[] = 5;
Alors, quelle est la différence entre eux que cela ne fonctionne pas pour les tableaux int
?
C’est un code incorrect. c’est un bug dans votre compilateur (éventuellement gcc / g ++?) de l’accepter.
Clang donne l’erreur suivante ( lien ):
a.cpp:5:17: error: array initializer must be an initializer list std::ssortingng array[] = ""; ^ 1 error generated.
Visual C ++ accepte ( lien ):
testvc.cpp(2) : error C3074: an array can only be initialized with an initializer-list
La clause pertinente dans la norme est 8.5p17:
[…]
– Si le type de destination est un tableau de caractères, un tableau de char16_t, un tableau de char32_t ou un tableau de wchar_t et que l’initialiseur est un littéral de chaîne, voir 8.5.2.
[…]
– Sinon, si le type de destination est un tableau, le programme est mal formé.
[…]
Soumis à gcc en tant que bogue: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60009
En fait, cette fonctionnalité est un report de l’initialisation de tableaux de caractères vides. ( std::ssortingng
agit de manière très similaire à char
.)
char buf[10] = "";
est équivalent à char buf[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
, mais char buf[10] = "a";
est équivalent à char buf[10] = {'a', 0, 0, 0, 0, 0, 0, 0, 0, 0};
. Pourquoi? Puisque char
est une valeur arithmétique, elle est auto-initialisée à zéro.
Votre compilateur voit ""
comme une valeur char
(techniquement, const char*
) et la convertit simplement en std::ssortingng
. Bien que cela ne soit pas exactement conforme aux normes, cela fonctionne sur la plupart des compilateurs.