Знаковые литералы C++

Символьный литерал состоит из символьной константы. Она представлена символом, заключенным в одинарные кавычки. Существует два типа символьных литералов.

  • Узкие символьные литералы типа char, например 'a'.

  • Расширенные символьные литералы типа wchar_t, например L'a'.

Символ, используемый для символьного литерала, может быть любым графическим символом за исключением зарезервированных символов, таких как знак новой строки ('\n'), обратной косой черты ('\'), а также одинарные (') и двойные (") кавычки. Зарезервированные символы должны задаваться с помощью escape-последовательности.

Escape-последовательность

Существует пять типов escape-последовательностей: простой, восьмеричный, шестнадцатеричный, Юникод (UTF-8) и Юникод (UTF-16). Возможны следующие типы escape-последовательностей:

Значение

Escape-последовательность

новая строка

\n

горизонтальная табуляция

\t

вертикальная табуляция

\v

стирание назад

\b

возврат каретки

\r

перевод страницы

\f

предупреждение

\a

обратная косая черта

\\

вопросительный знак

? или \?

одинарная кавычка

\'

двойная кавычка

\"

нуль-символ

\0

восьмеричный

\ooo

шестнадцатеричный

\xhhh

Юникод (UTF-8)

\uxxxx

Юникод (UTF-16)

\Uxxxxxxxx

В примере кода ниже показаны некоторые примеры экранированных символов.

#include <iostream>
using namespace std;

int main() {
    char newline = '\n';
    char tab = '\t';
    char backspace = '\b';
    char backslash = '\\';
    char nullChar = '\0';

    cout << "Newline character: " << newline << "ending" << endl; // Newline character:
                                                                  //  ending
    cout << "Tab character: " << tab << "ending" << endl; // Tab character : ending
    cout << "Backspace character: " << backspace << "ending" << endl; // Backspace character : ending
    cout << "Backslash character: " << backslash << "ending" << endl; // Backslash character : \ending
    cout << "Null character: " << nullChar << "ending" << endl; //Null character:  ending
}

Сведения об escape-последовательностях UTF-16 с префиксом \U см. в разделе Строковые литералы в C++.

Блок, относящийся только к системам Microsoft

Восьмеричная escape-последовательность — это обратная косая черта, за которой следует последовательность восьмеричных цифр (не более трех). Поведение восьмеричной escape-последовательности, которая содержит более трех цифр, определяется реализацией; такие последовательности могут давать неожиданные результаты. Например:

char c1 = '\100';     // char '@'
char c2 = '\1000';   // char '0' 

Escape-последовательности, содержащие невосьмеричные символы, при вычислении дают последний невосьмеричный символ. Например:

char c3 = '\009'// char '9'
char c4 = '\089'     // char '9'
char c5 = '\qrs'     // char 's'

Шестнадцатеричная escape-последовательность — это обратная косая черта, за которой следует символ x и последовательность шестнадцатеричных цифр. Escape-последовательности, которые не содержат шестнадцатеричные цифры, вызывают ошибку компилятора C2153: "шестнадцатеричные константы должны содержать по крайней мере одну шестнадцатеричную цифру". Escape-последовательности, содержащие как шестнадцатеричные, так и другие символы, при вычислении дают последний нешестнадцатеричный символ. Наибольшее шестнадцатеричное значение — 0xff.

char c1 = '\x0050';  // char 'P'
char c2 = '\x0pqr';  // char 'r'

Завершение блока, относящегося только к системам Майкрософт

Символ обратной косой черты (\) — это символ продолжения строки, если он стоит в конце строки. Если символ обратной косой черты требуется использовать как символьный литерал, необходимо ввести две косые черты подряд (\\). Дополнительные сведения о символе продолжения строки см. в разделе Фазы трансляции.

Символы Юникода

Символы Юникода с кодировкой UTF-8 указываются с префиксом \u. Например:

const wchar_t chr1 = L'\u79c1';

Во многих случаях можно просто ввести нужный символ.

const wchar_t chr2 = L'私'; 

Параметры редактора Visual C++

По умолчанию редактор кода Visual C++ использует кодирование, которое соответствует конкретному языковому стандарту. В английских версиях Visual Studio по умолчанию установлена кодовая страница 1252. Однако, если добавить символ другого типа, например символ Юникода, и сохранить файл, появится сообщение: "Некоторые знаки Юникода в этом файле не были сохранены в текущей кодовой странице. Повторить сохранение этого файла в кодировке Юникод с тем, чтобы не потерять ваши данные?". Файл можно сохранить в другой кодировке. Кроме того, можно изменить кодовую страницу для файла в диалоговом окне Файл, Дополнительные параметры сохранения. Автоматическое определение символов Юникод можно отключить, сняв флажок "Автоматически определять кодировку UTF-8 без сигнатуры" на странице параметров Сервис, Параметры, Текстовый редактор, Общие.

См. также

Ссылки

Литералы в C++