В случае 2 компилятор может не рассчитать bit_count полностью, так как он никогда не используется (например, он может выполнять XOR, но не считать)
В случае 3 у вас есть только назначение
Только в случае 4 необходимо выполнить bit_count (что довольно дорого).
(отредактируйте, чтобы уточнить: если вы никогда не используете vec
, он все равно может отбросить весь цикл. Однако это не обязательно)
дополнительная информация:
Компилятор требуется для сохранения только наблюдаемого поведения , определенного как
- Доступ к летучим объектам
- ввод и вывод (включая файлы)
- вызов "неизвестного" кода (например, внешних библиотек)
Стандартный словоблудие, конечно, более сложный, этот вопрос требует дополнительного обсуждения.
Мне всегда было интересно наблюдать за вашим компилятором. Большинство позволяет включить вывод разборки с умом и часом «ознакомления с сборкой моего процессора» под поясом, такие маленькие упражнения могут быть очень проницательными