C++ řetězcové literály
Literál řetězce tvoří nula nebo více znaků ze znakové sady zdroj ohraničena uvozovkami (").Řetězcový literál je že, přijatá společně zakončený řetězec představuje posloupnost znaků.
Řetězcové literály mohou obsahovat libovolný grafický znak ze znakové sady zdroje, s výjimkou uvozovkami ("), zpětné lomítko (\), nebo znakem.Mohou obsahovat stejné sekvence escape popsané v Znak C++ konstanty.
C++ řetězce mají tyto typy:
Pole charn, kde n je délka řetězce (ve znacích) plus 1 pro ukončující '\0**'** , označuje konec řetězce
Pole wchar_t, pro celý znak řetězce
Výsledkem úpravy řetězcová konstanta není definován.Příklad:
char *szStr = "1234";
szStr[2] = 'A'; // Results undefined
Konkrétní společnosti Microsoft
V některých případech shodné řetězcové literály mohou být "sdružené" ušetřit místo do spustitelného souboru.Kompilátor způsobí, že všechny odkazy na konkrétní řetězcový literál stejné umístění v paměti, ale každý odkaz v sdružování řetězcový literál, přejděte samostatnou instanci řetězcový literál./GF umožňuje sdružování řetězec.
Konec konkrétní společnosti Microsoft
Při určování řetězcové literály, spojení sousedních řetězců.Proto toto prohlášení:
char szStr[] = "12" "34";
je stejná jako toto prohlášení:
char szStr[] = "1234";
Toto zřetězení řetězců sousedních usnadňuje určení dlouhých řetězců přes více řádků:
cout << "Four score and seven years "
"ago, our forefathers brought forth "
"upon this continent a new nation.";
V předchozím příkladu celý řetězec Four score and seven years ago, our forefathers brought forth upon this continent a new nation. je spliced dohromady.Tento řetězec lze zadat také pomocí řádku splétání takto:
cout << "Four score and seven years \
ago, our forefathers brought forth \
upon this continent a new nation.";
Spojení po všech přilehlých řetězce konstanty NULL znaku, '\0', připojen k poskytování značku konce řetězce pro c funkce zpracování řetězců.
První řetězec obsahuje znak escape, mohou přinést zřetězení překvapivé výsledky.Zvažte následující dvě prohlášení:
char szStr1[] = "\01" "23";
char szStr2[] = "\0123";
Přestože je přirozené předpokládat, szStr1 a szStr2 obsahují stejné hodnoty ve skutečnosti obsahovat hodnoty ukazuje následující obrázek.
Únik a zřetězení
Konkrétní společnosti Microsoft
Maximální délka řetězce literálu je 16 384 bajtů (16 kB).Toto omezení platí pro řetězce typu char [ a [wchar_t].Literál řetězce se skládá z části uzavřený v uvozovkách, preprocesoru spojuje částí do jednoho řetězce a pro každý řádek zřetězeny přidá dodatečný bajt celkový počet bajtů.
Předpokládejme například řetězec se skládá z řádků 40 50 znaků na řádek (2 000 znaků) a jeden řádek s 7 znaků a každý řádek je ohraničena uvozovkami.Přidá do 2,007 bajtů plus jeden bajt pro ukončujícím znakem null 2,008 bajtů celkem.O zřetězení vkládá zvláštní znak celkový počet bajtů pro každý z prvních 40 řádků.Díky celkem 2 048 bajtů.(Další znaky nejsou zapsány do konečné řetězec). Upozorňujeme však, že pokud řádek continuations (\) jsou použity místo uvozovek, preprocesoru nepřidá zvláštní znak každého řádku.
Konec konkrétní společnosti Microsoft
Určení velikosti objektů string počtu znaků a přidáním 1 pro ukončující '\0' nebo typu 2 wchar_t.
Protože označit uvozovek (") uzavře řetězce pomocí sekvence escape (\") představující uzavřený uvozovkami.Jednoduché uvozovky (') lze znázornit bez sekvence escape.Znak zpětného lomítka (\) je znak pro pokračování řádku při umístění na konci řádku.Pokud chcete zobrazit v rámci řetězce zpětné lomítko, je nutné zadat dvě zpětná lomítka (\\).(Viz Fáze překladu v Předprocesoru odkaz Další informace o pokračování řádku.)
Zadat řetězec wide znak typu ([wchar_t]), před otevřením uvozovkami znakem l.Příklad:
wchar_t wszStr[] = L"1a1g";
Všechny běžné řídicí kódy uvedené v Znak konstanty jsou platné v řetězcové konstanty.Příklad:
cout << "First line\nSecond line";
cout << "Error! Take corrective action\a";
Protože ukončí řídicí kód prvního znaku, který není šestnáctková číslice, specifikace s vloženými šestnáctkové znaky escape Řetězcové konstanty mohou způsobit neočekávané výsledky.Následující příklad je určen k vytváření řetězce literálu obsahujícího 5 ASCII, následovaný znaky five:
"\x05five"
Skutečný výsledek je hexadecimální 5F, což je kód ASCII znak podtržení následovaný znaky ive.Následující příklad vytvoří požadované výsledky:
"\005five" // Use octal constant.
"\x05" "five" // Use string splicing.