2013-07-19 4 views
16

Se una stringa è definita come questovalore e la dimensione del non inizializzata variabili std :: string in C++

std::string name; 

Quale sarà il valore della stringa non inizializzata "nome" e di che dimensioni che sarebbe stato?

+12

Non è inizializzata. – chris

+1

Come altri hanno notato, è stato chiamato il costruttore predefinito, ma per rispondere alla domanda specifica, è possibile provare 'cout << name' e' cout << name.length() '. – Simon

+12

@Simon provare qualcosa non ti dice se il comportamento è indefinito o definito dall'implementazione (ma sarebbe stato un buon inizio :-)). –

risposta

28

Poiché non è inizializzato, è il costruttore predefinito chiamato. Poi:

vuota costruttore di stringa (costruttore di default):

Costruisce una stringa vuota, con una lunghezza di zero caratteri.

Date un'occhiata: http://www.cplusplus.com/reference/string/string/string/

EDIT: Come indicato nel C++ 11, §21.4.2/1:

e ff etti: Costruisce un oggetto della classe basic_string. Le post di questa funzione sono riportati in Tabella 63.

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

I tipi definiti dall'utente predefiniti non sono non inizializzati. Il costruttore predefinito definisce una stringa vuota (ad esempio "") con una dimensione/lunghezza pari a zero.

4

The Standard (C++ 11, §21.4.2/1) descrive i risultati di default-costruendo un std::basic_string (di cui è un std::string specializzazione) come segue:

[...] un oggetto della classe basic_string. Le postcondizioni [...] sono indicate nella Tabella 63.

E Tabella 63 dice:

data() un puntatore non nullo che è copiabile e può avere 0 aggiunto ad esso
capacity() un valore specificato

+0

Qual è il significato della parte "può averlo aggiunto 0"? Sembra di punto in bianco. Non puoi aggiungere 0 a un puntatore non nullo? – vargonian

-4

valore è nullo e la dimensione è 0 Ma puoi chk direttamente se la stringa è vuota o meno da vuoto()

Solo nel caso in cui si desidera verificare che nell'applicazione, fare questo

std::string name // Construct an empty string 
if(name.empty()) { // Check if its empty 
    name="something"; 
} 

simile e più dettagliata discussione è qui initializing strings as null vs. empty string

+1

Questo non si limita a verificare se la stringa è vuota. Assegna un valore ad esso. Inoltre, come risponde questa domanda? – jogojapan

Problemi correlati