Рассмотрим следующий код
vector<double> v;
// fill v
const vector<double>::iterator end =v.end();
for(vector<double>::iterator i = v.bgin(); i != end; ++i) {
// do stuff
}
Могут ли такие компиляторы, как g++, clang++, icc разворачивать такие циклы. К сожалению, я не знаю ассемблера, чтобы проверить на выходе, разворачивается ли цикл или нет. (и у меня есть доступ только к g++.)
Мне кажется, что это потребует от компилятора большей сообразительности, чем обычно: сначала сделать вывод, что итератор является итератором с произвольным доступом, а затем выяснить, сколько раз выполняется цикл. Могут ли компиляторы сделать это при включенной оптимизации?
Спасибо за ваши ответы, и прежде чем некоторые из вас начнут читать лекции о преждевременной оптимизации, это упражнение на любопытство.