web-dev-qa-db-fra.com

Valeur et taille d'une variable std :: string non initialisée en c ++

Si une chaîne est définie comme ceci

std::string name;

Quelle sera la valeur de la chaîne non initialisée "nom" et quelle serait sa taille?

27
Charzhard

Parce qu'il n'est pas initialisé, c'est le constructeur par défaut qui est appelé. Alors :

constructeur de chaîne vide (constructeur par défaut):

Construit une chaîne vide, avec une longueur de zéro caractère.

Jetez un oeil: http://www.cplusplus.com/reference/string/string/string/

EDIT: Comme indiqué dans C++ 11, §21.4.2/1:

Effets: construit un objet de classe chaîne_base . Les postconditions de cette fonction sont indiquées dans le tableau 63.

-> Table 63
+-----------------------------------------------------------------------------+
| data()     | a non-null pointer that is copyable and can have 0 added to it |
+------------+----------------------------------------------------------------+
| size()     | 0                                                              |
+------------+----------------------------------------------------------------+
| capacity() | an unspecified value                                            |
+-----------------------------------------------------------------------------+
41
Pierre Fourgeaud

Il n'est pas non initialisé, son constructeur par défaut est appelé.

De http://en.cppreference.com/w/cpp/string/basic_string/basic_string :

Constructeur par défaut. Construit une chaîne vide.

15
Oliver Charlesworth

Les types définis par l'utilisateur construits par défaut ne sont pas non initialisés. Le constructeur par défaut définit une chaîne vide (c'est-à-dire "") avec une taille/longueur nulle.

12
Rapptz

La norme (C++ 11, §21.4.2/1) décrit les résultats de la construction par défaut d'un std::basic_string (Dont std::string Est une spécialisation) comme suit:

[...] un objet de classe basic_string. Les post-conditions sont [...] indiquées dans le tableau 63.

Et le tableau 63 dit:

data() un pointeur non nul qui est copiable et peut y avoir 0 ajouté
size() 0
capacity() une valeur non spécifiée

4
jogojapan