String și caracter literali (c)

Hexazecimală de evacuare-secvență - un backslash urmat de caracterul x și un șir de cifre hexazecimale. Escape-secvențe, care nu conțin cifre hexazecimale, cauzând compilator eroare C2153. Această eroare raportează că literali hexazecimale trebuie să conțină cel puțin o cifră hexazecimală. Escape-secvență care conține atât hexazecimal și alte caractere în calculul randamentului ultimului simbol neshestnadtsaterichny. Cea mai mare valoare hex - 0xFF.

backslash (\) - un caracter de linie de continuare, în cazul în care este la capătul liniei. În cazul în care caracterul backslash pe care doriți să o utilizați ca un caracter literal, două linii oblice trebuie să introduceți un rând (\\). Pentru mai multe informații despre simbolul liniei de continuare, a se vedea. Secțiunea de difuzare în fază.

Un șir literal este o secvență de caractere care formează împreună un șir terminat-nul. Caracterele trebuie să fie închise în ghilimele duble. Următoarele tipuri de un sir de caractere.

literali șir îngust

string îngust literal - este o terminații nul constantele matrice char. care pot conține simboluri grafice cu exceptia ghilimele duble ( „), un backslash (\) sau o nouă linie de caractere. Un șir îngust literal poate conține secvențe de evacuare enumerate în secțiunea literals Reper C ++.

literali avansate șir

string Avansat literal - este o terminații null constantele matrice wchar_t. începând cu prefixul L. În această matrice poate include orice caractere grafice cu excepția dublu citat ( „), backslash (\) și newline. string avansat literal poate conține escape secvența listată în literalii Reper C ++.

literals string Netratate (C ++ 11)

string Netratate literal -. Aceasta completează valoarea de zero a unui șir de caractere de orice tip, care poate include orice elemente grafice, inclusiv ghilimele duble ( „), Backslash (\) si un sir de caractere prime newline sunt adesea folosite în expresii regulate, care sunt utilizate . clase de caractere, și HTML și XML siruri de caractere pentru exemple, consultați următorul articol :. FAQ Bjarne Stroustrup pe C ++ 11 (Q & C ++ de Bjarne Stroustrup 11).

Separator - conține până la 16 de caractere de secvență personalizate, care se află chiar înainte de paranteza de deschidere și imediat după paranteza de închidere șir brut literal. Distanțiere poate fi folosit pentru a distinge între rândurile care conțin ghilimele duble și paranteze. Linia următoare produce o eroare de compilator:

std :: string literals (C ++ 14)

literali std :: string sunt literale de punere în aplicare personalizate pe baza biblioteca standard (a se vedea. de mai jos) și obținută prin adăugarea de prefixul „XYX“ s (cu sufixul s). Acest tip de un sir de caractere creează obiecte temporare, cum ar std :: string, std :: wstring, std :: u32string sau std :: u16string, în funcție de prefixul specificat. Dacă nu se utilizează prefixul, așa cum sa arătat mai sus, creează un obiect de tip std :: string. Dacă utilizați prefixul L „xyz“ s, creează un obiect de tip std :: wstring. Atunci când se utilizează prefixul u „xyz“ s creează un obiect de tip std :: u16string. un prefix U "xyz" s - un obiect de tip std :: u32string.

Sufixul „s“ poate fi de asemenea utilizat pentru Sirurile de caractere prime:

Literali std :: string definit în spațiul de nume std :: literalii :: string_literals în fișierul antet . Deoarece std :: literali :: string_literals si std :: literalii sunt declarate ca namespace construite. std :: literali :: string_literals considerate în mod automat să fie deținută în mod direct de către std spațiu de nume.

Dimensiunea sir de caractere

Pentru siruri de tip char * ANSI codificat (nu UTF-8) string dimensiune literal (în octeți) este unul mai mare decât numărul de caractere din șirul (considerând finală zero). dimensiunea nu este legată direct de numărul de rânduri de caractere pentru celelalte tipuri. În codificarea UTF-8 pentru codificarea unor unități de cod utilizate până la patru elemente de simbol, și pentru tipurile char16_t wchar_t și 16-bit Unicode - două elemente (patru octeți) pentru a codifica unitatea de cod audio. Mai jos este dimensiunea șirului extins literal.

Rețineți că strlen () și wcslen () nu ia în considerare dimensiunea simbolului de închidere la zero, egală cu dimensiunea de tipul elementului șir: un octet la char * string, doi octeți pentru wchar_t * siruri de caractere și char16_t *, și patru octeți pentru siruri de caractere char32_t *.

Lungimea maximă a unui șir literal - 65535 octeți. Această restricție se aplică atât îngustă și extins la un sir de caractere.

literali Schimbare șir

Din moment ce un sir de caractere sunt constante (cu excepția literals std: string), încercările de a schimba (exemplu: str [2] = 'A') sunt o eroare de compilare.

Unitatea care se aplică numai sistemelor de Microsoft

In Visual C ++ literal șir poate fi folosit pentru a inițializa un pointer la valoarea non-constantă de tip char sau wchar_t. Este permis în cod C, dar nu este recomandată în C ++ 98 și îndepărtat din 11 C ++. Încercarea de a schimba șirul va provoca o violare de acces, așa cum se arată în exemplul următor: