Знаковые литералы 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 без сигнатуры" на странице параметров Сервис, Параметры, Текстовый редактор, Общие.