Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.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 @ о умолчанию он должен считать, что любой вызов функции обладает побочными эффектами. Но если он сможет раскрутить этот вызов и увидит, что побочных эффектов нет - то может смело соптимизировать. Я так и думал. Спасибо. |