A string és karakter literálok (c)

Egység, amely csak a rendszer a Microsoft

Létrehozásához az érték egy karakter szó előtag nélküli compiler átalakítja a karakter vagy karaktersorozatot az idézőjelek között egyetlen 8-bites érték, hogy egy 32-bites egész. Számos szimbólumok megfelelő szó töltet bájt, mint szükséges, a magas vagy alacsony sorrendben. Ahhoz, hogy hozzon létre egy char értékeket a fordító úgy legkevésbé fontos bájt. Értékteremtés wchar_t vagy char16_t fordító veszi az alacsony szót. A fordító figyelmeztetést, hogy az eredmény meg van csonkítva, ha egyáltalán bit értékét fent megjelölt bájt vagy szó.







Oktális-szekvenciát - visszaperjelet majd egy oktális számjegy (maximum három). Oktális-szekvencia, amely több mint három számjegy kezelik, mint egy szekvencia három oktális számjegy, majd a számjegyet. Ez ahhoz vezethet, hogy nem várt eredményt. például:

Ha a kiterjesztett karakter szó előtagja L egynél több karaktert vett az első szimbólum. Későbbi karakterek nem kerülnek, ellentétben a viselkedését a egyenértékű hagyományos karakter szó előtag nélkül.

Szimbólumokkal lehetetlen kódolni közötti értékeket helyettesítő kódpontokat D800-DFFF generikus neveket. Unicode helyettesítő párok adja az egyetemes szimbólum nevét, a \ UNNNNNNNN. ahol NNNNNNNN - nyolc számjegyű kódot pont a karaktert. Ha szükséges, a fordító létrehoz egy helyettesítő pár.

A C ++ nyelv 03 hagytuk generikus neveket azonban csak bizonyos szimbólumok jelentése szimbólum. Szintén ott lehet egyetemes szimbólum nevek nem jelentenek semmilyen érvényes Unicode karaktereket. A C ++ 11 szabvány, ez a hiba javítva. A C ++, a 11. karakter és sztring literálok és azonosítók, akkor az univerzális jellegű neveket. További információ a egyetemes szimbólum nevek, lásd. A részben a karakterkészletet. További információ a Unicode, lásd. Cikk Unicode-ban. További információ a helyettesítő párok, lásd. Cikk Helyettesítő párok és Kiegészítő karakterek (helyettesítő párok és kiegészítő karakter).

Egy szövegnek egy karaktersor, amely együttesen egy null-terminált húr. A karaktert kell idézőjelek közé. A következő típusú karakterlánc-literál.

Keskeny sztring literálok

Normál szövegkonstans egy null végű tömbje által határolt idézőjelben írja const char [n] előtag nélkül, ahol n - a tömb hossza bájtokban. Normál szövegkonstans tartalmazhat bármilyen grafika, kivéve dupla idézőjelek ( „), fordított perjel (\), vagy egy új sort. A szokásos szövegkonstans is tartalmazhatnak menekülni-szekvencia és az univerzális jellegét nevek fent felsorolt ​​kerülnek a bájt.







Karakterlánc UTF-8

A karakterlánc UTF-8 kódolást egy null végű tömbje által határolt idézőjelben írja const char [n] előtaggal U8, ahol n - a hossza bájtokban a kódolt tömb. Egy szövegnek előtaggal U8 tartalmazhat bármilyen grafikus szimbólumot, kivéve a dupla idézőjelek ( „), a fordított perjel (\), vagy egy új sor karaktert. Egy szövegnek előtaggal U8 is tartalmazhat a fenti escape-szekvencia és az univerzális szimbólum nevek.

Részletes sztring literálok

Részletes szövegkonstans - egy null-terminált wchar_t tömb konstans. kezdve az előtag L. Ebben tömb lehet bármilyen grafikus karakterek kivételével idézőjel ( „), backslash (\) és új sort. Részletes szövegkonstans tartalmazhat escape-szekvenciák és az univerzális jellegű neveket a fent felsorolt.

Kezeletlen sztring literálok (C ++ 11)

Kezeletlen szövegkonstans -. Ezzel befejeződött a nulla értéket egy sor karakter bármilyen típusú, amely magában foglalhatja a grafika, köztük a kettős idézőjelek ( „), backslash (\) és újsor nyers sztring literálok gyakran használják reguláris kifejezések, amelyeket . karakterosztály, és a HTML és az XML húrok példákat lásd az alábbi cikket :. Bjarne Stroustrup GYIK szóló C ++ 11 (Q & C ++ Bjarne Stroustrup 11).

Elválasztó - tartalmaz legfeljebb 16 karakter egyedi szekvencia, amely áll előtt a nyitó zárójel után közvetlenül a záró zárójel nyers szövegkonstans. Például R „abc (Hello” \ () abc „szekvencia határoló - abc és a sorok tartalmát - szia.” \ (Távtartók lehet megkülönböztetni feldolgozatlan tartalmazó sorokat dupla idézőjelek és zárójelek következő sor okozza a fordító hibát ..:

Literálok std :: string (C ++ 14)

Std :: sztring literálok egyéni megvalósítása literálok alapján a standard könyvtár (lásd. Alább), és kapott hozzá az előtag „xyx” s (az utótag s). Ez a fajta sztring literálok létre ideiglenes objektumok, std :: string std :: wstring, std :: u32string vagy std :: u16string függően a megadott előtagot. Ha az előtag nem használják, a fentiek szerint, létrehoz egy objektum típusú std :: húr. Ha használja az előtag L „xyz” s teremt egy objektum típusú std :: wstring. Ha az előtag u „xyz” s létrehoz egy objektum típusú std :: u16string. egy előtagot U "XYZ" s - egy objektum típusú std :: u32string.

Megjegyezzük, hogy strlen () és a wcslen () nem veszi figyelembe a méret a szimbólum lezáró nulla, megegyezik a méret a string elem típusa: egy bájt char * string két byte wchar_t * húrok és char16_t * és négy bájtot húrok char32_t *.

A maximális hossza szövegkonstans - 65535 bájt. Ez a megkötés vonatkozik mind a keskeny és bővült a sztring literálok.

Változás sztring literálok

Mivel sztring literálok állandók (kivéve literálok std: karakterlánc), megpróbálja megváltoztatni (például: Str [2] = 'A') egy fordító hibát.

Egység, amely csak a rendszer a Microsoft

A Visual C ++ string-felhasználható inicializálni mutató nem konstans típusú érték char vagy wchar_t. Ez lehetővé tette a C99 kódot, de nem ajánlott a C ++ 98 és eltávolítják a C ++ 11. Megpróbálja módosítani a húr fog okozni egy access violation, amint azt az alábbi példa:

Hogy mondja a fordító, hogy készítsen egy hiba konvertáló karaktersor szó non_const mutató paraméter lehet compiler / Zc: strictStrings (lekapcsolás vet sztring literálok). Javasoljuk, hogy használja azt, hogy hozzon létre a hordozható kód, a vonatkozó szabványoknak. Ezen kívül, ajánlott, hogy állapítsa meg a szövegkonstans mutató inicializálni a kulcsszó auto. Tehát van egy átalakulás a megfelelő típusú (állandó). A következő kód például fogott fordításkor megkísérelni levelet szövegkonstans:

Kapcsolás szomszédos húr literálok