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

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

Войти
Регистрация
Восстановить пароль
 
thick_int
Заблокирован
#1

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

23.11.2011, 09:03. Просмотров 529. Ответов 11
Метки нет (Все метки)

Существует ли какое-нибудь правило, согласно которому можно железно определить, что вот эта константа известна на стадии компиляции (а,следовательно, может быть использована для задания размерности массива), а вот эта константа не является таковой (то есть, ее значение на стадии коммпиляции не известно)?

Интуция и здравый смысл, конечно, хорошо, но наверно все же должно быть какое-то правило.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2011, 09:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Такие разные константы (C++):

Такие разные конструкторы - C++
здравствуйте, есть такой код: class ArrayWrapper { public: ArrayWrapper () : _p_vals( new int ) ,...

Как переопределить функцию так, чтобы она не только могла принимать разные параметры, но и возвращать тоже разные? - C++
То есть я считаю несправедливым, если такое проканывает: void f () {;} void f (int) {;} а такое нет: void f (int) {;} int f...

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

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

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

встроенные константы в С++ (pi e) - C++
Подскажите, существуют ли в С++ встроенные константы. Например pi=3.14.... или e=2.71.... Если да, то как их вызвать. Если...

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

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

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

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

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

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

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

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

Допустим у меня есть класс, в котором один из его членов объявлен со спецификатором static.
Читая один учебник, у меня сложилось мнение, что доступ к этому члену могут иметь только функции-члены, также объявленные со спецификатором static.
Читая другой учебник, понял, что и обычные функции-члены могут иметь доступ к этому static-члену.
А как правильно на самом деле?
0
Bers
Заблокирован
23.11.2011, 10:00 #12
Цитата Сообщение от thick_int Посмотреть сообщение
А как правильно на самом деле?
Доступ к нему имеет любой, кто знаком с самим классом.
Получить доступ к статик-мемберам можно даже при отсутствии экземпляров данного класса
1
23.11.2011, 10:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2011, 10:00
Привет! Вот еще темы с ответами:

Константы, вычисление... - C++
Только начали учить с++ и уже завалили лабами на понедельник, а я его (с++) в глаза первый раз позавчера увидел :( времени осваивать...

Указатели и константы - C++
В чем разница между записью const int * a и int * const a? Где то в книге читал, забыл, теперь не могу найти. Заранее спасибо!

Константы, переменные - C++
Отпишите пожалуст с начала до конца что происходит в этой программе =) void main() { //Описание переменных целого типа ...

изменение константы - C++
Добрый день, только начал учить с++, поэтому сильно не бейте :) интересует такой гипотетический вопрос в целях обучения const int ic...


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

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

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