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