Здравствуйте, rg45, Вы писали:
Pzz>>А я по молодости разок-другой такое в продакшене применил (разумеется не с sin/cos, с какой-то другой парой функций с одинаковым прототипом). Сейчас бы я так делать не стал. Народ реально не догоняет (к огромному моему удивлению).
R>Я бы тоже не стал использовать такую конструкцию, и не только потому, что это ставит кого-то в тупик, а потому что выражение (flag ? sin : cos) имеет тип указателя на функцию. Т.е дополнительная косвенность появляется совершенно необосновано. Рассуждения примерно те же, что и в случае ++i vs i++. Подробнее здесь: 9. Не пессимизируйте преждевременно.
Это вообще не проблема. Вменяемый компилятор эту косвенность свернёт.
Более того, на процессоре, который поддерживает MOV с условием (ARM, относительно свежие x86), он таки может выбрать косвенность и сэконимить один переход, вычислив выражение в скобках без переходов.