Per curiosità, mi chiedo quale sia il vero tipo di base di una stringa letterale C++.Tipo di stringa letterale C++
A seconda di ciò che osservo, ottengo risultati diversi.
Un test typeid simile al seguente:
std::cout << typeid("test").name() << std::endl;
mi char const[5]
mostra.
tentando di assegnare una stringa letterale a un tipo non compatibile in questo modo (per vedere l'errore data):
wchar_t* s = "hello";
ricevo a value of type "const char *" cannot be used to initialize an entity of type "wchar_t *"
da IntelliSense di VS12.
Ma non vedo come potrebbe essere const char *
come la seguente riga è accettato da VS12:
char* s = "Hello";
Ho letto che questo è stato consentito in standard pre-C++ 11 come è stato per retro-compatibilità con C, anche se la modifica di s
risulterebbe in comportamento non definito. Presumo che questo sia semplicemente VS12 che non ha ancora implementato tutto lo standard C++ 11 e che questa riga normalmente genera un errore.
lettura standard C99 (from here, 6.4.5.5) suggerisce che dovrebbe essere un array:
Il carattere sequenza multibyte viene quindi utilizzato per inizializzare un array di durata di conservazione statico e lunghezza appena suf fi ciente per contenere la sequenza.
Quindi, qual è il tipo al di sotto di una stringa C++ letterale?
Grazie mille per il vostro tempo prezioso.
VS12 parla un po 'strano dialetto che è simile, ma non identico, C++. –