Константы в CPP
Константа - это произвольная постоянная величина. Слово произошло от латинского constantis, что означает “постоянный, неизменный”. Из этого следует, что значение константы в программе задаётся один раз и больше не изменяется.
О константах вообще я рассказывал уже не раз, например, здесь. Поэтому о их важности и общих для всех языков свойствах говорить уже не буду. В этой статье только об особенностях, присущих языку С++.
Константы в С++, как и переменные, имеют тип данных.
Значениями констант могут быть любые допустимые для С++ значения. Например, 0, 1, 0.5, 'A' или "Hello, World!".
Если вы используете числовые значения, и хотите чтобы они были определённого типа, то, например, вот такая запись:
100L
Будет означать, что это не просто число 100, а число 100 типа long.
Пример объявления констант в С++:
const int STO = 100; const float PI = 3.14; const string HELLO = "Hello, WORLD!";
Теперь вы можете использовать их в программе, например, так:
cout << HELLO << endl; cout << PI << endl; cout << "Pi * 100 = " << PI * 100 << endl;
Есть ещё один способ объявления констант, который работает не только в С++, но и в чистом Си:
#define MY_COUNT 13; #define MY_STR "MY_COUNT";
Здесь мы с помощью директивы #define объявили две константы - числовую и строковую.
Однако при таком объявлении могут быть глюки при использовании этих констант в потоковом вводе-выводе. Например, вот такой код вызовет ошибку:
cout << MY_COUNT << endl;
Также могут быть глюки при использовании таких констант в выражениях. Например, вот такой код:
string s = MY_STR + " = ";
не вызовет ошибки, однако в переменной s будет
"MY_COUNT", а не "MY_COUNT = ", как ожидалось.
Я не знаю, с чем это связано. Может быть с глюками конкретного компилятора, а может быть с тем,
что потоковый ввод-вывод появился только в С++, а в Си его не было. Хотя и
printf такие константы тоже глючат. Впрочем, раньше такого не было. Возможно, что это уже Windows 10 вносит свои коррективы.
Решить проблемы можно, например, так:
int x = MY_COUNT; string s = MY_STR; s = s + " = "; cout << s << x << endl;
Здесь всё отработает так, как и ожидалось. Но, получается, что сегодня в С++ без надобности для
определения констант директиву #define лучше не использовать.
Ну а вывод программы при использование вышеупомянутых примеров будет примерно таким: