Мне любопытно, какие свободы имеет компилятор при оптимизации.Давайте ограничим этот вопрос GCC и C / C ++ (любая версия, любой вариант стандарта):
Можно ли написать код, который ведет себя по-разному, в зависимости от того, с каким уровнем оптимизации он был скомпилирован?
Пример, который я имею в виду, - это печать разных фрагментов текста в различных конструкторах в C ++ и получение разницы в зависимости от того, выбраны ли копии (хотя я не смог заставить такую вещь работать).
Подсчет тактов не допускается.Если у вас есть пример для компилятора без GCC, мне тоже было бы любопытно, но я не могу его проверить.Бонусные баллы за пример в C.: -)
Редактировать: Код примера должен соответствовать стандарту и не содержать неопределенного поведения с самого начала.
Редактировать 2: Получил несколько отличных ответов!Позвольте мне немного поднять ставку: код должен составлять правильно сформированную программу и соответствовать стандартам, а также должен компилироваться для корректных, детерминированных программ на каждом уровне оптимизации.(Это исключает такие вещи, как условия гонки в плохо сформированном многопоточном коде.) Также я ценю, что это может повлиять на округление с плавающей запятой, но давайте не будем об этом говорить.Репутация щедрости на первом законченном примере, соответствующем (духу) этих условий;25, если это связано со злоупотреблением строгим псевдонимом.(При условии, что кто-то показывает мне, как отправить вознаграждение кому-то другому.)