dahil hiçbir kısa devre operatörü var, bu yüzden işlevi çağrılacak garantili yan etkileri kaldırmadan en uygun duruma getirilemezse. C++ 11 standart alıntı:
[...] uygun uygulamaları aşağıdaki açıklandığı gibi soyut makinesinin (yalnızca) gözlemlenebilir davranışı taklit etmek için gereklidir.
Bu hüküm bazen “olarak eğer” kuralı [...] gerçek onun değeri kullanılır etmediğini tahmin eğer bir ifadenin kısmını değerlendirmek gerekmez uygulama ve o denir Programın gözlemlenebilir davranışını etkileyen hiçbir yan etki üretilmektedir.
Yani,
int doSomething() { return 1; }
gibi bir şey uzağa optimize olabilir ama
int doSomething() { std::cout << "d\n"; return 1; }
izin verilmez.
Ayrıca, C++ 11'den beri daha karmaşık işlevler yazabilir ve bunları constexpr
kullanarak derleme zamanında değerlendirebilirsiniz.
Evet, standart bunu garanti eder ve bir iyileştiricinin anlamsal etkiyi değiştirmesine izin verilmez. –
Sadece dönüş değerini açıkça atmak istiyorsanız '(void) doSomething(); – Useless