170 похожих чатов

Товарищи, растолкуйте пожалуйста, для чего требуются compile-time вычисления?

18 ответов

22 просмотра

Чтобы не делать их в рантайме.

Nick-Salander Автор вопроса
Nick Salander
Почему? Причина?

Потому что незачем делать много раз то, что можно сделать 1 раз.

Nick-Salander Автор вопроса
Alexey Petrunyaka
Потому что незачем делать много раз то, что можно ...

Понял, получается что можем отдать компилятору на вычисление, то в runtime уже становится жестко закодировано и не вычисляется ?

Nick Salander
Понял, получается что можем отдать компилятору на ...

Конечно. Плюс появляются дополнительные возможности для оптимизации компилятором с учётом того, что результат вычисления известен.

Nick Salander
Понял, получается что можем отдать компилятору на ...

Я бы сказал, что причинно-следственная связь обратная - если что-то нужное в runtime может быть заранее посчитано и быть задано константой времени компиляции, то стоит это именно в таком ключе и использовать. По сути это "бесплатная" оптимизация

Nick-Salander Автор вопроса
Андрей Таусинов
Я бы сказал, что причинно-следственная связь обрат...

Значит "заранее посчитано" является основным признаком для выноса кода в compile-time. А какие элементы обычно туда уплывают? Константы наверное? Еще что?

Nick Salander
Значит "заранее посчитано" является основным призн...

Всё, что возможно вынести, лучше вынести. Там, где результат вычислений попадает в if, ещё и поменять его на if constexpr.

Nick-Salander Автор вопроса

if( 1 + 2 == 3 )? Типа такого?

Nick-Salander Автор вопроса

А если там запрос в СУБД или сетевой запрос?

Alexey Petrunyaka
Тогда при компиляции не вычислишь.

Что как бы и логично, странно такие вопросы задавать.

Nick Salander
if( 1 + 2 == 3 )? Типа такого?

Скорее когда не напрямую константы написаны, а какие-то вычисления чуть более сложные, которые по факту приходят к сравнениям констант.

В первую очередь для мета-программирования. Преобразования над типами почти всегда требуют каких-либо вычислений. И вот эти вычисления происходят во время компиляции, так как к моменту наступления рантайма типы должны быть известны. А всякие constexpr factorial - это сказки, в реальном коде практически не встречающиеся.

Nick-Salander Автор вопроса
Alexander Karaev
В первую очередь для мета-программирования. Преобр...

Я пока чуть коснулся шаблонов, не до конца ясно всё.

Nick-Salander Автор вопроса
Nick Salander
Я пока чуть коснулся шаблонов, не до конца ясно вс...

Поэтому и эта тема пока трудновата, я в примерах часто встречаю квалификатор constexpr, а объяснения не нашёл.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта