Форум программистов, компьютерный форум CyberForum.ru

Как создать глобальную константу для всего проекта? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Передача двухмерного массива в функцию http://www.cyberforum.ru/cpp-beginners/thread1306450.html
Товарищи, помогите, пожалуйста, с таким вопросом: Я хочу сделать функции ввода и вывода элементов двухмерного массива, да так, чтобы эти функции были универсальными и принимали аргументы в качестве параметров. Но в описании функции требуется указывать его размерность: void filling_array (arr); Вопрос: как написать функцию, чтобы эти размеры задавались при вызове? Заранее спасибо)
C++ Вывести таблицу значений функции Мастера, помогите написать программу 4 варианта, а то совсем ничего не получается http://www.cyberforum.ru/cpp-beginners/thread1306449.html
Написать функцию для сортировки порядка строк в файле по возрастанию их длины C++
Дан текстовый файл состоящий из некоторого количества строк.написать функцию для сортировки порядка строк в файле по возрастанию их длины
Определить, является ли квадратная матрица симметричной относительно побочной диагонали C++
Собственно столкнулся с проблемой: мне нужно сравнить элементы массива над побочной диагональю и под ней. однако когда при сравнении пишу a так считаются индексы элементов под диагональю при выполнении програмы она дает ошибку. int i,j,k; a=new double*; for(i=0; i<n;i++) { a = new double; } k=0; for(i=1; i<n; i++)
C++ Динамическое программирование. Деревья http://www.cyberforum.ru/cpp-beginners/thread1306433.html
Добрый день. Хотелось бы увидеть реализацию следующей задачи именно через ДП(Кнут и потоки реализовал). Найти паросочетание максимального веса в дереве.
C++ Как изменять параметры объектов формы при событии Доброго времени суток. Столкнулся с проблемой windows forms, допустим у нас есть форма MyForm, какой код надо вписать в MyForm.h, чтобы при *любое событие* форма меняла допустим фон на изображение?, или же просто меняла цвет. подробнее

Показать сообщение отдельно
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
3131 / 1571 / 425
Регистрация: 18.10.2014
Сообщений: 2,907
21.11.2014, 07:15     Как создать глобальную константу для всего проекта?
Цитата Сообщение от gromo Посмотреть сообщение
И если константа будет определена в заголовочном файле, то придется перекомпилировать все модули, куда включается этот заголовочный файл. А если завести себе отдельный файл config.cpp с константами,
Как уже было сказано мной выше, каждый подход имеет свои преимущества и недостатки. Если выбранный способ задания константы не подходит для ваших целей, то не важно быстро компилируется проект или нет.

Ещё раз: константа, объявленная по методу 'extern const' НЕ является константой вообще. Это "неизменяемая переменная", а не константа. Она не может использоваться там, где язык С++ требует константу. Она не может использоваться для задания размера массивного типа, она не может использоваться в метках case, она не может использоваться как параметр шаблона, и т.д. и т.п. В дополнение к этому, 'extern const' значение не может напрямую участововать в оптимизациях времени компиляции. Другими словами в огромном количестве (или даже в подавляющем большинстве) языковых случаев такая ложная "константа" совершенно бесполезна.

Если же вы работаете над какими-то гигантскими проектами, в которых настоящие константы не нужны, то конечно, для сокращения времени компиляции вам возможно лучше пользоваться подходом с 'extern const'. Но это какие-то очень специфические проекты. В большинстве реальных С++ проектов нужны настоящие константы, т.е. константы времени компиляции. Такие константы можно получить только одним способом - определением прямо в заголовочном файле.

Поэтому рассуждать на тему того, какой способ "предпочтительнее", в большинстве случаев просто не приходится. Если вам нужна настоящая константа в терминологии языка С++, т.е. константа времени компиляции, то никакого выбора у вас нет - константа определяется именно так, как показал я. А то, что ваш проект будет долго перекомпилирваться - это неизбежные реалии языков С и С++.

=============

В языке С, например, 'const' объекты вообще никогда не являются константами, где их не объявляй. Поэтому в языке С огромное количество именованных констант объявляется через '#define'. '#define' и 'enum' - это фактически единственные спосбы получить именованную константу времени компиляции в С.
 
Текущее время: 19:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru