-
- Ну разумеется. Вы сделали x не параметром шаблона, а параметром
функции. Теперь это не константа. - йцyкeн(03.10.2022 14:32)
- Как же не константа? Включите -O1 и "о чудо" случится. Самая
настоящая константа. VladislavS.(214 знак., 03.10.2022 14:45)
- Нет. Для функции plusminus x не является константой, поэтому в
ассемблерном тексте проверка условия сохранилась в виде инструкции
cmove. А вот в местах вызова фактические параметры являются
константами, и там оптимизатор заменил вызовы plusminus
результатами этих вызовов. - йцyкeн(03.10.2022 14:47)
- Вот мы и вышли на разный уровень - либо это константа по стандарту языка, либо оптимизатор так решил. Поэтому, где рассчитываем иметь константу пишем if constexpr, чтобы муха не проскочила. Не всегда так просто определить "на глаз" константность данных, пусть этим компилятор занимается. - VladislavS.(03.10.2022 14:53)
- Нет. Для функции plusminus x не является константой, поэтому в
ассемблерном тексте проверка условия сохранилась в виде инструкции
cmove. А вот в местах вызова фактические параметры являются
константами, и там оптимизатор заменил вызовы plusminus
результатами этих вызовов. - йцyкeн(03.10.2022 14:47)
- Как же не константа? Включите -O1 и "о чудо" случится. Самая
настоящая константа. VladislavS.(214 знак., 03.10.2022 14:45)
- Ну разумеется. Вы сделали x не параметром шаблона, а параметром
функции. Теперь это не константа. - йцyкeн(03.10.2022 14:32)