Valori letterali stringa C++
Un valore letterale stringa è costituita da zero o più caratteri dal set di caratteri di origine racchiuso tra virgolette doppie (").Un valore letterale stringa rappresenta una sequenza di caratteri che, insieme, costituiscono una stringa con terminazione null.
I valori letterali stringa possono contenere qualsiasi carattere grafico dal set di caratteri di origine eccetto le virgolette doppie ("), la barra rovesciata (\), o un carattere di nuova riga.Possono contenere le stesse sequenze di escape descritte in Costanti carattere C++.
Le stringhe C++ hanno questi tipi:
Matrice char[n], dove n è la lunghezza della stringa (i caratteri) più 1 per di terminazione '\0**'** che contrassegna la fine della stringa
Matrice wchar_t, per le stringhe di caratteri estesi
Il risultato di una costante di stringa è definito.Ad esempio:
char *szStr = "1234";
szStr[2] = 'A'; // Results undefined
Specifici di Microsoft
In alcuni casi, i valori letterali stringa “identici possono essere raccolti„ per risparmiare spazio nel file eseguibile.In pool di valore letterale stringa, il compilatore genera tutti i riferimenti a un valore letterale stringa particolare al passaggio alla stessa posizione di memoria, anziché avere ogni punto di riferimento a un'istanza separata del valore letterale stringa./GF attiva la condivisione delle stringhe.
Microsoft FINALE specifico
In specificare i valori letterali stringa, le stringhe adiacenti vengono concatenate.Pertanto, questa dichiarazione:
char szStr[] = "12" "34";
è identico a questa dichiarazione:
char szStr[] = "1234";
La concatenazione delle stringhe adiacenti consente di specificare stringhe lunghe tra più righe:
cout << "Four score and seven years "
"ago, our forefathers brought forth "
"upon this continent a new nation.";
Nell'esempio precedente, l'intera stringa Four score and seven years ago, our forefathers brought forth upon this continent a new nation. è impiombata raccolta.Questa stringa può essere specificata tramite la riga che impiomba come segue:
cout << "Four score and seven years \
ago, our forefathers brought forth \
upon this continent a new nation.";
Dopo tutte le stringhe adiacenti nella costante sono state concatenate, il carattere NULL, '\0', viene aggiunta per fornire un marcatore di fine della stringa per le funzioni di gestione delle stringhe c.
Quando la prima stringa contiene un carattere di escape, la concatenazione di stringhe può generare risultati sorprendenti.Considerare le due dichiarazioni seguenti:
char szStr1[] = "\01" "23";
char szStr2[] = "\0123";
Sebbene sia naturale presumere che szStr1 e szStr2 contengono gli stessi valori, effettivamente contengono sono illustrati nella figura che segue.
Escape e concatenazione di stringhe
Specifici di Microsoft
La lunghezza massima di un valore letterale stringa è di 16.384 byte (una).Questo limite viene applicato alle stringhe di tipo char[] e wchar_t[].Se una stringa letterale è costituito dalle parti racchiuse tra virgolette doppie, il preprocessore concatena le parti in una singola stringa e per ogni riga concatenata, aggiungere un byte aggiuntivo al numero totale di byte.
Ad esempio, si supponga che una stringa costituita da 40 righe con 50 caratteri per riga (2.000 caratteri) e di una riga con 7 caratteri e ogni riga è racchiusa tra virgolette doppie.Ciò è pari a 2.007 byte più byte singolo per il carattere di terminazione null, per un totale di 2.008 byte.Nella concatenazione, un carattere aggiuntivo verrà aggiunto al numero totale di byte per ognuna delle prime 40 righe.In tal modo totale di 2.048 byte.(I caratteri aggiuntivi non sono scritti nella stringa finale.) Si noti, tuttavia, che se le continuazioni di riga (\) vengono utilizzate anziché le virgolette doppie, il preprocessore non aggiunge un carattere aggiuntivo per ogni riga.
Microsoft FINALE specifico
Determinare la dimensione degli oggetti stringa calcola il numero di caratteri e aggiungendo 1 per '\0' di terminazione o 2 per tipo wchar_t.
Poiché le virgolette doppie ()"racchiude le stringhe, utilizzare la sequenza di escape (\") per rappresentare le virgolette doppie importate.La virgoletta singola (') può essere rappresentato senza una sequenza di escape.Il carattere barra rovesciata (\) è un carattere di continuazione di riga quando viene posizionato alla fine di una riga.Se si desidera un carattere barra rovesciata venga visualizzato in una stringa, è necessario barre rovesciate di tipo due\\().(Vedere fasi di conversionenel riferimento del preprocessore per ulteriori informazioni sulla continuazione di riga.)
Per specificare una stringa di tipo a caratteri estesi (wchar_t[]), inserire le virgolette doppie di apertura con il carattere L.Ad esempio:
wchar_t wszStr[] = L"1a1g";
Tutti i codici di escape normali elencati in Costanti carattere sono validi nelle costanti di stringa.Ad esempio:
cout << "First line\nSecond line";
cout << "Error! Take corrective action\a";
Poiché il codice di escape termina al primo carattere che non è una cifra esadecimale, la specifica delle costanti di stringa con i codici di escape esadecimali incorporati può provocare risultati imprevisti.Nell'esempio viene utilizzato per creare un valore letterale stringa contenente ASCII 5, seguito da caratteri five:
"\x05five"
Il risultato è un oggetto esadecimale 5F, ovvero il codice ASCII per una sottolineatura, seguita da caratteri ive.Nell'esempio produce i risultati voluti:
"\005five" // Use octal constant.
"\x05" "five" // Use string splicing.