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?
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?
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 |
+-----------------------------------------------------------------------------+
Non è inizializzato, viene chiamato il costruttore predefinito.
Da http://en.cppreference.com/w/cpp/string/basic_string/basic_string:
costruttore predefinito. Costruisce una stringa vuota.
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.
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
Qual è il significato della parte "può averlo aggiunto 0"? Sembra di punto in bianco. Non puoi aggiungere 0 a un puntatore non nullo? – vargonian
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
Questo non si limita a verificare se la stringa è vuota. Assegna un valore ad esso. Inoltre, come risponde questa domanda? – jogojapan
Non è inizializzata. – chris
Come altri hanno notato, è stato chiamato il costruttore predefinito, ma per rispondere alla domanda specifica, è possibile provare 'cout << name' e' cout << name.length() '. – Simon
@Simon provare qualcosa non ti dice se il comportamento è indefinito o definito dall'implementazione (ma sarebbe stato un buon inizio :-)). –