Константы и литералы в C++: типы, синтаксис и лучшие практики
Константы — это фиксированные значения, которые программа не может изменять, их называют литералами.
Константы могут быть любого базового типа данных и делятся на целые литералы, литералы с плавающей точкой, символы, строки и булевы значения.
Константы обрабатываются как обычные переменные, за исключением того, что их значения нельзя менять после определения.
Целые литералы
Целый литерал может быть десятичным, восьмеричным или шестнадцатеричным. Префикс указывает базу: 0x или 0X для шестнадцатеричного, 0 для восьмеричного, ничего — для десятичного.
Целый литерал может иметь суффикс — комбинацию U и L для unsigned и long соответственно. Суффикс может быть в любом регистре и порядке.
Примеры целых литералов:
212 // Допустимо 215u // Допустимо 0xFeeL // Допустимо 078 // Недопустимо: 8 не является восьмеричной цифрой 032UU // Недопустимо: нельзя повторять суффикс
Другие примеры:
85 // десятичный 0213 // восьмеричный 0x4b // шестнадцатеричный 30 // int 30u // unsigned int 30l // long 30ul // unsigned long
Литералы с плавающей точкой
Литерал с плавающей точкой имеет целую часть, точку, дробную часть и экспоненту. Можно записывать в десятичной или экспоненциальной форме.
В десятичной форме нужно включать точку, экспоненту или оба. В экспоненциальной — целую часть, дробную часть или обе. Знаковую экспоненту вводят e или E.
Примеры:
3.14159 // Допустимо 314159E-5L // Допустимо 510E // Недопустимо: неполная экспонента 210f // Недопустимо: нет точки или экспоненты .e55 // Недопустимо: отсутствует целая или дробная часть
Булевы литералы
Существует два булевых литерала, входящие в стандартные ключевые слова C++:
Значение true, представляющее истину.
Значение false, представляющее ложь.
Не следует считать true равным 1, а false — 0.
Символьные литералы
Символьные литералы заключаются в одинарные кавычки. Если литерал начинается с L (только заглавная), это широкий символ (например, L'x') и должен храниться в переменной типа wchar_t. Иначе — узкий символ (например, 'x'), хранится в char.
Символьный литерал может быть обычным символом (например, 'x'), escape-последовательностью (например, '\t') или универсальным символом (например, '\u02C0').
Некоторые символы в C++ после обратного слэша получают специальное значение (например, новая строка \n или таб \t). Таблица escape-последовательностей:
| Escape-последовательность | Значение |
|---|---|
| \\ | символ \ |
| \' | символ ' |
| \" | символ " |
| \? | символ ? |
| \a | Звонок/алерт |
| \b | Backspace |
| \f | Form feed |
| \n | Новая строка |
| \r | Возврат каретки |
| \t | Горизонтальная табуляция |
| \v | Вертикальная табуляция |
| \ooo | Восьмеричное число (1-3 цифры) |
| \xhh... | Шестнадцатеричное число (1+ цифр) |
Пример использования escape-последовательностей:
Live Demo#include <iostream>
using namespace std;
int main() {
cout << "Hello\tWorld\n\n";
return 0;
}
Результат:
Hello World
Строковые литералы
Строковые литералы заключаются в двойные кавычки. Содержат символы, похожие на символьные литералы: обычные символы, escape-последовательности, универсальные символы.
Длинную строку можно разбить на несколько строк, используя строковые литералы, разделяя их пробелами.
Примеры. Все три формы — идентичные строки:
"hello, dear" "hello, \ dear" "hello, " "d" "ear"
Определение констант
В C++ есть два простых способа определить константы:
Использование препроцессора #define.
Использование ключевого слова const.
Препроцессор #define
Форма использования #define для определения константы:
#define идентификатор значение
Пример:
Live Demo#include <iostream>
using namespace std;
#define LENGTH 10
#define WIDTH 5
#define NEWLINE '\n'
int main() {
int area;
area = LENGTH * WIDTH;
cout << area;
cout << NEWLINE;
return 0;
}
Результат:
50
Ключевое слово const
Можно использовать префикс const для объявления типизированных констант:
const тип переменная = значение;
Пример:
Live Demo#include <iostream>
using namespace std;
int main() {
const int LENGTH = 10;
const int WIDTH = 5;
const char NEWLINE = '\n';
int area;
area = LENGTH * WIDTH;
cout << area;
cout << NEWLINE;
return 0;
}
Результат:
50
Хорошей практикой является определение констант ЗАГЛАВНЫМИ БУКВАМИ.
Язык C
- Освоение переменных, литералов и констант в C++: подробное руководство
- Понимание типов данных C++: основы, модификаторы и лучшие практики
- Освоение операторов C++: полное руководство с практическими примерами
- Комментарии в C++: лучшие практики для читаемого и поддерживаемого кода
- Шаблоны классов в C++: практическое руководство
- Переменные, константы и литералы в C: полное руководство
- Переменные, константы и литералы в Python — подробное руководство
- Константы и литералы в C: целочисленные, вещественные, символьные, строковые и определение констант
- Язык программирования C++: обзор и ключевые особенности
- Константы и литералы в C++: типы, синтаксис и лучшие практики