Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.23.119] |
|
Сообщ.
#1
,
|
|
|
Допустим есть такой код
bool f = true; for(int i = 0; i < 10; i++) i |= f(); где f - какая-то функция, которая возвращает bool. Я правильно понимаю, что оптимизатор не имеет право в данном случае убрать вызовы f? |
Сообщ.
#2
,
|
|
|
По умолчанию он должен считать, что любой вызов функции обладает побочными эффектами. Но если он сможет раскрутить этот вызов и увидит, что побочных эффектов нет - то может смело соптимизировать.
Добавлено: вот если бы там был оператор ||=, то имел бы право оптимизировать и не раскручивая (по аналогии с ||). К счастью, ни в обычных Сях, ни в плюсах такого оператора нет. |
Сообщ.
#3
,
|
|
|
Я бы не стал убирать, не вижу причин для убирания.
|
Сообщ.
#4
,
|
|
|
Цитата Dushevny @ о умолчанию он должен считать, что любой вызов функции обладает побочными эффектами. Но если он сможет раскрутить этот вызов и увидит, что побочных эффектов нет - то может смело соптимизировать. Я так и думал. Спасибо. |