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

Такие разные константы - C++

Восстановить пароль Регистрация
 
thick_int
Заблокирован
23.11.2011, 09:03     Такие разные константы #1
Существует ли какое-нибудь правило, согласно которому можно железно определить, что вот эта константа известна на стадии компиляции (а,следовательно, может быть использована для задания размерности массива), а вот эта константа не является таковой (то есть, ее значение на стадии коммпиляции не известно)?

Интуция и здравый смысл, конечно, хорошо, но наверно все же должно быть какое-то правило.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
23.11.2011, 09:14     Такие разные константы #2
Цитата Сообщение от thick_int Посмотреть сообщение
Существует ли какое-нибудь правило, согласно которому можно железно определить,
когда вы пишите
C++
1
const int A=333;
Вы знаете, константа это, или нет?

Если же вам динамически (программно) понадобилось знание о типе - признак ущербной архитектуры
thick_int
Заблокирован
23.11.2011, 09:18  [ТС]     Такие разные константы #3
Нет, мне не динамически нужно, а обычно.
Я так понимаю, что констнта на стадии компиляции - это выражение, которое может быть вычислено стандартным калькулятором, использующим в качестве аргументов числовые литералы.
Поправьте, если не так.
Bers
Заблокирован
23.11.2011, 09:31     Такие разные константы #4
Цитата Сообщение от thick_int Посмотреть сообщение
констнта на стадии компиляции - это выражение, которое может быть вычислено стандартным калькулятором,
Не знаю, что такое "стандартный калькулятор".

Константа на стадии компиляции - это просто кучка голых данных, имеющие тип.
Если компилятор увидит, что нигде в программе не требуется получить адрес этой константы - он даже память под неё не выделит, тупо скопипастит её значение везде, где оно используется.

Если же где то в программе потребуется получить адрес константы, то компилятор выделит где то там память под неё, и вернёт этот адрес по требованию.

В некотором смысле, единственная разница между #define подстановкой и константой в том, что последняя имеет тип (выполняется проверка на стадии компиляции), а так же может иметь адрес.
thick_int
Заблокирован
23.11.2011, 09:35  [ТС]     Такие разные константы #5
То есть стандарт по этому вопросу умалчивает и остается полагаться на интуициию.
Bers
Заблокирован
23.11.2011, 09:37     Такие разные константы #6
Цитата Сообщение от thick_int Посмотреть сообщение
Существует ли какое-нибудь правило, согласно которому можно железно определить, что вот эта константа известна на стадии компиляции
ЛЮБАЯ КОНСТАНТА ИЗВЕСТНА НА СТАДИИ КОМПИЛЯЦИИ
thick_int
Заблокирован
23.11.2011, 09:40  [ТС]     Такие разные константы #7
Не любая.
Например так:
C++
1
2
int n = 5;
const int m(n);
Или может быть я путаю константу и литерал.
Bers
Заблокирован
23.11.2011, 09:48     Такие разные константы #8
C++
1
2
int n = 5;
const int m(n);
я честно говоря потерялся)) надо подумать

Добавлено через 3 минуты
черт... не знал даже, что так можно.

Добавлено через 16 секунд
Из этого можно сделать далеко идущие последствия
thick_int
Заблокирован
23.11.2011, 09:49  [ТС]     Такие разные константы #9
Ну у меня возникли сомнения вот в связи с чем.
Сперва я очень обрадовался, что вроде, как любая переменная, объявленная с типом const int может использоваться в качестве размерности массива. А на самом деле, вот не любая.
То есть константа константе рознь.
Bers
Заблокирован
23.11.2011, 09:50     Такие разные константы #10
Цитата Сообщение от thick_int Посмотреть сообщение
Сперва я очень обрадовался, что вроде, как любая переменная, объявленная с типом const int может использоваться в качестве размерности массива. А на самом деле, вот не любая.
То есть константа константе рознь.
Любая жеж
thick_int
Заблокирован
23.11.2011, 09:56  [ТС]     Такие разные константы #11
Не понял, а что такое жеж?

сразу же еще, чтобы не создавать лишней темы, такой вопрос.

Допустим у меня есть класс, в котором один из его членов объявлен со спецификатором static.
Читая один учебник, у меня сложилось мнение, что доступ к этому члену могут иметь только функции-члены, также объявленные со спецификатором static.
Читая другой учебник, понял, что и обычные функции-члены могут иметь доступ к этому static-члену.
А как правильно на самом деле?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2011, 10:00     Такие разные константы
Еще ссылки по теме:

C++ Константы и C++
C++ Такие разные конструкторы

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

Или воспользуйтесь поиском по форуму:
Bers
Заблокирован
23.11.2011, 10:00     Такие разные константы #12
Цитата Сообщение от thick_int Посмотреть сообщение
А как правильно на самом деле?
Доступ к нему имеет любой, кто знаком с самим классом.
Получить доступ к статик-мемберам можно даже при отсутствии экземпляров данного класса
Yandex
Объявления
23.11.2011, 10:00     Такие разные константы
Ответ Создать тему
Опции темы

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