Другие языки программирования и технологии
скажите для чего в с++ константы, можно просто взять переменную например int x=15; и не менять её
и не нужно писать огромные строки
В C++ по умолчанию существует два вида констант: целочисленные, имеют тип int; и вещественные, имеют тип double. Целочисленные константы могут быть десятичными, восьмеричными и шестнадцатеричными. Приведение типов числовых констант, при присваивании, осуществляется неявно. Вещественные константы могут быть представлены в десятичной форме, где целую часть от вещественной разделяет точка, либо в экспоненциальной форме. При присваивании переменной вещественного типа отличной от double числовой константы среда разработки может выдать предупреждение о потере точности, в случае явного преобразования типов. Можно подтвердить своё намерение об этом соответствующим суффиксом. Например для float - это f. Пример:
float x = 12.5f;
Макроконстанты объявляются с помощью директивы define и по своей сути представляют текстовую строку, которую требуется подставить в код в указанном месте. Недостаток такого способа заключается в том, что в этом случае ничего не известно о том, что конкретно стоит в этой строке. Это может привести к ошибкам. Поэтому для определения переменной, которая не будет изменять своё значение во время всего времени выполнения программы существует ключевое слово const. Это позволяет избежать возможности изменения программистом значения такой переменной, которое может привести к фатальным ошибкам.
float x = 12.5f;
Макроконстанты объявляются с помощью директивы define и по своей сути представляют текстовую строку, которую требуется подставить в код в указанном месте. Недостаток такого способа заключается в том, что в этом случае ничего не известно о том, что конкретно стоит в этой строке. Это может привести к ошибкам. Поэтому для определения переменной, которая не будет изменять своё значение во время всего времени выполнения программы существует ключевое слово const. Это позволяет избежать возможности изменения программистом значения такой переменной, которое может привести к фатальным ошибкам.
Немного добавлю, что объявить массив так
const int n=10; float a[n];
можно, а
int n=10; float a[n];
нельзя.
const int n=10; float a[n];
можно, а
int n=10; float a[n];
нельзя.
Не такие и огромные.. .
В целом ответ такой: серьезные программы пишутся, как правило, не одним человеком. И невозможно предсказать, не придет ли другому человеку в голову "поправить" константу на одну функцию, а потом забыть вернуть значение.
Ну и в C++ два типа констант - объявленые через #define и через const. Разберись, какие тебе нужны, там разница принципиальная. И кроме собственно констант, есть константные объекты (с которых можно снимать константность оператором const_cast).
В целом ответ такой: серьезные программы пишутся, как правило, не одним человеком. И невозможно предсказать, не придет ли другому человеку в голову "поправить" константу на одну функцию, а потом забыть вернуть значение.
Ну и в C++ два типа констант - объявленые через #define и через const. Разберись, какие тебе нужны, там разница принципиальная. И кроме собственно констант, есть константные объекты (с которых можно снимать константность оператором const_cast).
Будете писать большие проекты в команде - быстро поймёте =)
Когда кто-нибудь из коллег в коде случайно вызовет изменения (и не обязательно явным способом а н-р из-за ошибки адресации при работе с указателями) и вся ваша логика поедет. А если учесть что приложение может быть многопоточным - откуда ноги растут найдете не сразу =)
Борьба между программистами в команде бывает даже идёт из-за пробелов и символов табуляций =), а Вы про константы так.. . ;)
Когда кто-нибудь из коллег в коде случайно вызовет изменения (и не обязательно явным способом а н-р из-за ошибки адресации при работе с указателями) и вся ваша логика поедет. А если учесть что приложение может быть многопоточным - откуда ноги растут найдете не сразу =)
Борьба между программистами в команде бывает даже идёт из-за пробелов и символов табуляций =), а Вы про константы так.. . ;)
Krab Bark ты не прав
В С99 стандарте так можно делать "Массивы переменной длины (variable-length arrays)"
и еще куча плюшек!
в gcc делается так у параметра компилера -std=c99
в С11 вообще красота!
В С99 стандарте так можно делать "Массивы переменной длины (variable-length arrays)"
и еще куча плюшек!
в gcc делается так у параметра компилера -std=c99
в С11 вообще красота!
Основная задача - сделать код более понятным.
const int x = 15;
// .. здесь много строк кода
но мы всё равно знаем, что X по-прежнему 15
Вторичная задача - оптимизация кода.
const int x = 15;
// .. здесь много строк кода
но мы всё равно знаем, что X по-прежнему 15
Вторичная задача - оптимизация кода.
Похожие вопросы
- C++ как переменную (signed int) разделить на старший и младший байт, а после записать в 2е другие переменные типа char?
- Можете подтвердить что я неудачник и тд и тп и что нужно просто взять и сделать
- Чем отличается в языке С++ объявление указателя на переменную int *a от int* a?
- Определите значение переменных x и y после выполнения фрагмента алгоритма.
- Перераспределить значения переменных (x,y,z)
- C# Почему const uint SIZE не воспринимается массивом, как константа, а int работает? Погрешности с double
- [c++] не работает long int переменная объявленная как long int a; занимает всего 4 байта ((( Что может быть не так?
- С# - нужно сделать так, чтобы консоль читала слова, как переменные, а не просто слова...
- Запишите функцию для получения случайного числа x из промежутка: [0; 15) [0; 15] [-15; 15) [10; 15)
- зачем в php константы и и переменные? не вижу в этом смысла, обьясните