Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > C/C++: Общие вопросы > Оператор |= и оптимизация


Автор: shm 05.09.17, 15:18
Допустим есть такой код
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    bool f = true;
    for(int i = 0; i < 10; i++)
        i |= f();

где f - какая-то функция, которая возвращает bool.
Я правильно понимаю, что оптимизатор не имеет право в данном случае убрать вызовы f?

Автор: Dushevny 05.09.17, 15:29
По умолчанию он должен считать, что любой вызов функции обладает побочными эффектами. Но если он сможет раскрутить этот вызов и увидит, что побочных эффектов нет - то может смело соптимизировать.

Добавлено: вот если бы там был оператор ||=, то имел бы право оптимизировать и не раскручивая (по аналогии с ||). К счастью, ни в обычных Сях, ни в плюсах такого оператора нет.

Автор: Славян 05.09.17, 15:31
Я бы не стал убирать, не вижу причин для убирания.

Автор: shm 05.09.17, 16:10
Цитата Dushevny @
о умолчанию он должен считать, что любой вызов функции обладает побочными эффектами. Но если он сможет раскрутить этот вызов и увидит, что побочных эффектов нет - то может смело соптимизировать.

Я так и думал. Спасибо.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)