Рассмотрим следующие два выражения:
std::cout << "Hello world!";
int x{ 5 };
Что такое ''Hello world!'' и ''5''? Это литералы. Литерал (также известный как литеральная константа) - это фиксированное значение, которое было вставлено непосредственно в исходный код.
Литералы и переменные имеют значение (и тип). В отличие от переменной (значение которой можно задавать и изменять с помощью инициализации и присваивания соответственно), значение литерала фиксировано (5
всегда равно 5
).
Поэтому литералы называют константами. Чтобы еще больше подчеркнуть разницу между литералами и переменными, давайте рассмотрим эту короткую программу:
#include
int main()
{
std::cout << 5 << '\n'; // вывести значение литерала
int x { 5 };
std::cout << x << '\n'; // вывести значение переменной
return 0;
}
В строке 5 мы выводим на консоль значение 5
. Когда компилятор скомпилирует эту программу, он сгенерирует код, который заставит std::cout
вывести значение 5
. Это значение 5
компилируется в исполняемый файл и может быть использовано напрямую.
В строке 7 мы создаем переменную с именем x и инициализируем ее значением 5. Компилятор сгенерирует код, который скопирует литеральное значение 5
в любую область памяти, заданную для x
. В строке 8, когда мы печатаем x
, компилятор сгенерирует код, который заставит std::cout
вывести значение в области памяти x (которое имеет значение 5).
Таким образом, оба оператора вывода делают одно и то же действие (печатают значение 5
).
Но в случае литерала значение 5
может быть выведено напрямую. В случае переменной значение 5
должно быть извлечено из памяти, которую представляет переменная.
Это также объясняет, почему литерал постоянен, а переменная может быть изменена. Значение литерала помещается непосредственно в исполняемый файл, и сам файл не может быть изменен после его создания. Значение переменной помещается в память, и значение в памяти может быть изменено во время работы исполняемого файла.
Ключевые понятия
Литералы - это значения, которые вставляются непосредственно в исходный код. Эти значения обычно появляются непосредственно в исполняемом коде (если они не оптимизированы).
Объекты и переменные представляют собой ячейки памяти, в которых хранятся значения. Эти значения могут быть получены по запросу.