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

Статическе константы - C++

Восстановить пароль Регистрация
 
duran_duran
1 / 1 / 0
Регистрация: 11.01.2014
Сообщений: 20
17.01.2014, 23:52     Статическе константы #1
Для чего используют статические константы?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2014, 23:52     Статическе константы
Посмотрите здесь:

встроенные константы в С++ (pi e) C++
C++ Инициалиация константы
Ввод константы C++
C++ Определение константы
Константы препроцесора C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14217 / 6232 / 988
Регистрация: 02.05.2013
Сообщений: 10,390
Завершенные тесты: 1
18.01.2014, 01:00     Статическе константы #2
Статические константы разными бывают.
Например, статическая константа в глобальном пространстве имен.
Или локальная статическая константа. Или статический константный
член класса. Что именно интересует ?
duran_duran
1 / 1 / 0
Регистрация: 11.01.2014
Сообщений: 20
18.01.2014, 11:44  [ТС]     Статическе константы #3
Цитата Сообщение от Убежденный Посмотреть сообщение
Статические константы разными бывают.
Например, статическая константа в глобальном пространстве имен.
Или локальная статическая константа. Или статический константный
член класса. Что именно интересует ?
Статические константы как члены класса)
Убежденный
Системный программист
 Аватар для Убежденный
14217 / 6232 / 988
Регистрация: 02.05.2013
Сообщений: 10,390
Завершенные тесты: 1
18.01.2014, 13:14     Статическе константы #4
Цитата Сообщение от duran_duran Посмотреть сообщение
Для чего используют статические константы?
"Для чего используют статические константы" = "для чего используют static" + "для чего используют const".


Ну например, экземплярам класса нужен какой-то общий, один на всех объект,
причем этот объект по своей сути неизменяемый. Вот и повод сделать его static const.
Статическое константное поле класса - хорошая альтернатива дефайнам и глобальным
переменным: оно не занимает место в экземплярах класса, и в то же время его
видимость не выходит за пределы scope класса, а доступ снаружи легко может
быть ограничен с помощью public или private. Хотя во многих случаях еще лучше
помещать такие объекты в анонимные пространства имен в файлах реализации.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.01.2014, 14:05     Статическе константы #5
Цитата Сообщение от Убежденный Посмотреть сообщение
Например, статическая константа в глобальном пространстве имен.
Вот это для чего испльзуют (если, конечно, используют)? Именно со static.
Убежденный
Системный программист
 Аватар для Убежденный
14217 / 6232 / 988
Регистрация: 02.05.2013
Сообщений: 10,390
Завершенные тесты: 1
18.01.2014, 14:24     Статическе константы #6
Насколько я знаю, static использовали, когда неймспейсов в языке не было.
Сейчас в нем большого смысла в таком виде нет.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.01.2014, 14:34     Статическе константы #7
Я не об этом. Я о применении static к глобальной константе. Насколько я знаю, глобальная константа и так static (внутреннее связывание). Поэтому, вроде бы, и смысла применять к ней static нет. Или бывает, что есть?
Убежденный
Системный программист
 Аватар для Убежденный
14217 / 6232 / 988
Регистрация: 02.05.2013
Сообщений: 10,390
Завершенные тесты: 1
18.01.2014, 14:50     Статическе константы #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Насколько я знаю, глобальная константа и так static (внутреннее связывание).
Да, internal linkage (C++03, 3.5.3).

Поэтому, вроде бы, и смысла применять к ней static нет. Или бывает, что есть?
С технической точки зрения смысла нет. А так - ну разве что с точки зрения читаемости кода.
Видим const - сразу понимаем: ага, значит неизменяемая. Видим static или namespace - ага,
значит c ограниченной областью видимости. И не нужно вспоминать всякие пункты стандарта
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
18.01.2014, 19:53     Статическе константы #9
Очень часто константные члены класса имеет смысл делать статическими. Например - класс агрегирует определенное количество объектов и оно не изменяется для всех экземпляров. Вот в таком случае и имеет смысл делать константу-член статической.

Более того, делать константы нестатическими стало можно лишь в стандарте С++11, в С++98 надо обязательно было использовать static.
Убежденный
Системный программист
 Аватар для Убежденный
14217 / 6232 / 988
Регистрация: 02.05.2013
Сообщений: 10,390
Завершенные тесты: 1
18.01.2014, 20:19     Статическе константы #10
Цитата Сообщение от MrGluck Посмотреть сообщение
делать константы нестатическими стало можно лишь в стандарте С++11, в С++98 надо обязательно было использовать static.
Поясните, что именно имеется в виду ?
В C++98 я не могу объявить в классе const-данные, не сделав их static ?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
18.01.2014, 20:28     Статическе константы #11
Цитата Сообщение от Убежденный Посмотреть сообщение
Поясните, что именно имеется в виду ?
В C++98 я не могу объявить в классе const-данные, не сделав их static ?
Я неверно выразился.
В С++98 нельзя инициализировать константы если они не статические внутри класса таким вот образом:
C++
1
2
3
4
5
class A
{
    public:
    const int N = 10; // need static if C++98
};
То бишь если хотим константу, то остается либо список инициализации конструктора либо делать её статической.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
18.01.2014, 21:59     Статическе константы #12
Цитата Сообщение от MrGluck Посмотреть сообщение
делать константы нестатическими стало можно лишь в стандарте С++11
Кстати, это справедливо и не для констант.
Цитата Сообщение от MrGluck Посмотреть сообщение
В С++98 нельзя инициализировать константы если они не статические внутри класса таким вот образом
Дополнение: инициализация статических констант внутри класса возможна только для интегральных типов.
duran_duran
1 / 1 / 0
Регистрация: 11.01.2014
Сообщений: 20
18.01.2014, 22:39  [ТС]     Статическе константы #13
Спасибо всем за ответы!
Тогда получается использовать просто константы в классе очень часто получается нецелесообразным?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2014, 22:49     Статическе константы
Еще ссылки по теме:

C++ Константы, переменные
Указатели и константы C++
C++ Константы и C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
18.01.2014, 22:49     Статическе константы #14
Очень часто этого просто не требуется, но насчет целесообразности я бы поспорил.
Yandex
Объявления
18.01.2014, 22:49     Статическе константы
Ответ Создать тему
Опции темы

Текущее время: 20:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru