Jeśli ciąg jest zdefiniowany jak tenWartość i wielkość niezainicjowanej zmiennej std :: string w C++
std::string name;
Jaka będzie wartość napisu niezainicjowane „nazwa” i jaki rozmiar by to było?
Jeśli ciąg jest zdefiniowany jak tenWartość i wielkość niezainicjowanej zmiennej std :: string w C++
std::string name;
Jaka będzie wartość napisu niezainicjowane „nazwa” i jaki rozmiar by to było?
Ponieważ nie jest zainicjowany, jest to domyślny konstruktor, który jest wywoływany. Następnie:
pusty konstruktor string (domyślny konstruktor):
Tworzy pusty łańcuch o długości zero znaków.
Spójrz: http://www.cplusplus.com/reference/string/string/string/
Edycja: Zgodnie C++ 11 §21.4.2/1:
E ECTS ff: konstruuje obiektu klasy basic_string. W postconditions tej funkcji są podane w tabeli 63.
-> Table 63
+-----------------------------------------------------------------------------+
| data() | a non-null pointer that is copyable and can have 0 added to it |
+------------+----------------------------------------------------------------+
| size() | 0 |
+------------+----------------------------------------------------------------+
| capacity() | an unspecified value |
+-----------------------------------------------------------------------------+
To nie jest niezainicjowany, jego domyślny konstruktor jest wywoływana.
Od http://en.cppreference.com/w/cpp/string/basic_string/basic_string:
Domyślny konstruktor. Konstruuje pusty ciąg.
Domyślnie skonstruowane typy zdefiniowane przez użytkownika nie są niezainicjowane. Domyślny konstruktor definiuje pusty ciąg (tj. ""
) o rozmiarze/długości równym zero.
normy (C++ 11 §21.4.2/1), opisuje wyniki domyślnych Budowa (którego std::basic_string
std::string
jest specjalizacja) w następujący sposób:
[...] obiekt klasy
basic_string
. Warunki końcowe [...] wskazano w tabeli 63.
i Tabela 63 mówi:
data()
niepusta wskaźnik, który jest copyable i może mieć 0 dodane do niego
capacity()
gdy wartość nieokreślona
Jakie jest znaczenie części "można dodać do niej"? Wydaje się nie na miejscu. Nie możesz dodać 0 do jakiegokolwiek wskaźnika innego niż zerowy? – vargonian
wartości ma wartość null, a rozmiar to 0 Ale możesz bezpośrednio chk, jeśli ciąg znaków jest pusty lub pusty()
Tylko w przypadku, gdy chcesz sprawdzić, czy w aplikacji, Zrób to
std::string name // Construct an empty string
if(name.empty()) { // Check if its empty
name="something";
}
podobne i bardziej szczegółowa dyskusja jest tutaj initializing strings as null vs. empty string
To nie tylko sprawdza, czy ciąg znaków jest pusty. Przypisuje mu wartość. Ponadto, w jaki sposób to odpowiada na pytanie? – jogojapan
Nie jest niezainicjowany. – chris
Jak zauważyli inni, domyślny konstruktor został wywołany, ale aby odpowiedzieć na konkretne pytanie, możesz wypróbować 'cout << name' i' cout << name.length() '. – Simon
@Simon próbuje coś nie powiedzieć, jeśli niezdefiniowane zachowanie lub jego definicja została zdefiniowana (ale byłby to dobry początek :-)). –