Являются ли const_iterators быстрее? - PullRequest
35 голосов
/ 16 апреля 2009

Наши рекомендации по кодированию предпочитают const_iterator, потому что они немного быстрее по сравнению с обычным iterator. Кажется, что компилятор оптимизирует код, когда вы используете const_iterator.

Это действительно правильно? Если да, то что на самом деле происходит внутри, что делает const_iterator быстрее?.

РЕДАКТИРОВАТЬ: я написал небольшой тест для проверки const_iterator против iterator и нашел разные результаты:

Для итерации 10 000 объектов const_terator занимал несколько миллисекунд (около 16 мс) меньше. Но не всегда . Были итерации, в которых оба были равны.

Ответы [ 11 ]

0 голосов
/ 16 апреля 2009

По моему опыту, компилятор не выполняет какую-либо измеримую оптимизацию при использовании константных итераторов. Несмотря на то, что утверждение «это могло бы» является верным, и ссылки не определены как указатели в стандарте.

Однако у вас может быть две ссылки на один и тот же объект, поэтому одна может быть const, одна не const. Затем, я думаю, ответы в этой теме на ограничительные указатели применимы: компилятор не может знать, был ли объект изменен, например, другим потоком или каким-либо кодом обработки прерываний.

...