Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
duran_duran
1 / 1 / 0
Регистрация: 11.01.2014
Сообщений: 20
#1

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

17.01.2014, 23:52. Просмотров 1205. Ответов 13
Метки нет (Все метки)

Для чего используют статические константы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2014, 23:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Статическе константы (C++):

Константы и C++ - C++
Скажите новичку зачем в C++ константы? И для чего они?

Инициалиация константы - C++
Здравствуйте, вообщем на шестом ВС вроде была такая возможность, а 2010 ругается: int c=42; const int b=c; int Temp;

константы в классах - C++
в классе используется константа типа double. Как правильно задать ее? как static const double внутри класса или просто написать...

Ввод константы - C++
Имеется массив. Нужно чтоб пользователь вводил его размер, но для этого нужно чтоб переменная была константой. Вопрос как сделать так чтоб...

Определение константы - C++
Помогите составить определение следующих данных - константа pi = π = 3.14159265358 (12 значащих цифр)

Указатели на константы - C++
Поясните. Запутался в нескольких примерах. С++ 11 стандарт. 1.int i=0, &r=i; auto a=r; const int ci=i,&cr=ci; auto b=ci; auto...

13
Убежденный
Ушел с форума
Эксперт С++
15697 / 7207 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
18.01.2014, 01:00 #2
Статические константы разными бывают.
Например, статическая константа в глобальном пространстве имен.
Или локальная статическая константа. Или статический константный
член класса. Что именно интересует ?
0
duran_duran
1 / 1 / 0
Регистрация: 11.01.2014
Сообщений: 20
18.01.2014, 11:44  [ТС] #3
Цитата Сообщение от Убежденный Посмотреть сообщение
Статические константы разными бывают.
Например, статическая константа в глобальном пространстве имен.
Или локальная статическая константа. Или статический константный
член класса. Что именно интересует ?
Статические константы как члены класса)
0
Убежденный
Ушел с форума
Эксперт С++
15697 / 7207 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
18.01.2014, 13:14 #4
Цитата Сообщение от duran_duran Посмотреть сообщение
Для чего используют статические константы?
"Для чего используют статические константы" = "для чего используют static" + "для чего используют const".


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

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

Более того, делать константы нестатическими стало можно лишь в стандарте С++11, в С++98 надо обязательно было использовать static.
0
Убежденный
Ушел с форума
Эксперт С++
15697 / 7207 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
18.01.2014, 20:19 #10
Цитата Сообщение от MrGluck Посмотреть сообщение
делать константы нестатическими стало можно лишь в стандарте С++11, в С++98 надо обязательно было использовать static.
Поясните, что именно имеется в виду ?
В C++98 я не могу объявить в классе const-данные, не сделав их static ?
1
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
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
};
То бишь если хотим константу, то остается либо список инициализации конструктора либо делать её статической.
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
18.01.2014, 21:59 #12
Цитата Сообщение от MrGluck Посмотреть сообщение
делать константы нестатическими стало можно лишь в стандарте С++11
Кстати, это справедливо и не для констант.
Цитата Сообщение от MrGluck Посмотреть сообщение
В С++98 нельзя инициализировать константы если они не статические внутри класса таким вот образом
Дополнение: инициализация статических констант внутри класса возможна только для интегральных типов.
0
duran_duran
1 / 1 / 0
Регистрация: 11.01.2014
Сообщений: 20
18.01.2014, 22:39  [ТС] #13
Спасибо всем за ответы!
Тогда получается использовать просто константы в классе очень часто получается нецелесообразным?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
18.01.2014, 22:49 #14
Очень часто этого просто не требуется, но насчет целесообразности я бы поспорил.
0
18.01.2014, 22:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2014, 22:49
Привет! Вот еще темы с ответами:

Константы в структурах - C++
есть массив структур. допустим 10 элементов. как инициализировать 5 элементов массива константами?

Указатели и константы - C++
Добрый вечер, будьте добры раскрыть смысл каждой из трех строк: const int* ptr; int* const ptr; int const* ptr;

Вычисляемые константы - C++
Можно ли сделать так, чтобы сначала вычислить, а затем сделать константой?

Константы препроцесора - C++
А есть ли где-то список предустановленых констант препроцесора? Мне нужно узнать тип операционой системы, версию, и поочие. Есть ли где-то...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru