Qu’est-ce que ssortingng array = “”; signifie et pourquoi ça marche?

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.