тип static const int в классе, почему так выводит на экран?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

В предыдущем примере значение указателя определяется на этапе выполнения программы, а не на этапе компиляции.

Сама спицифика сборки приложений на С++ состоит в том, что компилятор выполняет лишь трансляцию исходного кода в объектный код. А уже связь между объектами и их адресацию осуществляет компоновщик (линкер). Поэтому компилятор заранее не может знать, каким образом компоновщик соберёт исполняемый модуль и по каким адресам расположит те или иные объекты.
есть ли такие функции, которые можно пометить как то специально, вследствие чего компилятор по этой метке выполнял бы их на этапе компиляции?
Есть так называемые inline функции, но они не выполняются на этапе компиляции, а только встраиваются в тело вызывающей их функции.
Lev
Сообщения: 45
Зарегистрирован: 14 фев 2005, 11:17

Спасибо всем. Помогли.
Я прочитал про http://www.codeproject.com/cpp/crc_meta.asp - понравилось. Интересные штучки получаются, факториал например. только мой компилятор выдал INTERNAL COMPILLER ERROR. видимо не смог обработать закрутку из тестового примера.

Вопрос ещё. Как-нибудь можно получать (неважно какие именно) уникальные значения типа INT на этапе компиляции?
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Lev писал(а):Интересные штучки получаются, факториал например. только мой компилятор выдал INTERNAL COMPILLER ERROR. видимо не смог обработать закрутку из тестового примера.
Поставь IntelC++ поверх своего MSVS6, иначе с шаблонами будет работать сложно. Или переходи на восьмую студию.
2B OR NOT(2B) = FF
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

К сожалению, в языке Си/Си++ нет оператора, аналогичного функции rand(). Поэтому, если нужен статический массив уникальных значений, то он бычно генерится внешней программой, к примеру GUIDGEN.EXE, а затем полученный код компилируется в текущем проекте.
По поводу использования шаблонов метапрограммирования, то в широкой практике они мало используются. Обычно их применяют для вычисления неких константных выражений, результат которых и так заранее определён. Их можно ещё использовать для разворота циклов с фиксированным числом итераций в линейную последовательность повторяющихся команд. Но современные компиляторы и так выполняют подобного рода оптимизацию с обычными циклами, поэтому эффект от использования шаблонов метапрограммирования в настоящее время не столь внушительный. А вот дополнительные проблемы при компиляции могут возникнуть.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Но современные компиляторы и так выполняют подобного рода оптимизацию с обычными циклами, поэтому эффект от использования шаблонов метапрограммирования в настоящее время не столь внушительный.
А откуда компилятор может знать размер цикла, если он как правило задается динамически? А если он задается статически, то это либо magic number либо шаблонный параметр.
2B OR NOT(2B) = FF
Ответить