Visual Studio 2010'da RVO'yu (dönüş değeri optimizasyonu) devre dışı bırakmak mümkün müdür? Optimizasyon bayrağını /Od
'a ayarlamak (tüm optimizasyonları kapatır) yardımcı olmaz. G ++ 'da RVO'yu devre dışı bırakan -fno-elide-constructors
bayrağı bulunur.Visual Studio 2010'da geri dönüş değeri optimizasyonu nasıl devre dışı bırakılır?
cevap
Yapamazsınız. Sadece bu kadar basit. RVO/NRVO Standarttır ve kodunuz mevcut olmamasına bağlı olmamalıdır.
Değişkeninizi volatile
olarak tanımlamaya çalışın, sorununuzu çözebilir. Değilse, kodu göndermelisiniz ...
+1; Bu sadece rastgele bir tahmindir (ve bu nedenle aşağı inme hak ediyor) olmasına rağmen, 'my_volatile_variable' dönüşü, RVO'yu devre dışı bırakır. (C++ 11 §12.8/31 madde 1.) – Potatoswatter
@Potatoswatter: Cevabımı neden sadece rastgele bir tahmin olarak düşündüğünüzü merak ediyorum. Cevabımdaki "belki", bu sorunun ne olduğundan emin olmadığım için gerçek sorunun ne olduğunu bilmediğim anlamına geliyordu. IMHO, bu soru, http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – Malkocoglu
Ah, özür dilerim. Sanırım seni bu yüzden reddettiler. (“Volatile” ile ilgili bir cevabı haklı çıkarmak daha iyidir.) – Potatoswatter
Bu optimizasyonu devre dışı bırakmak için herhangi bir sebep yoktur! Neyi başarmaya çalışıyorsun? Hata ayıklama işlemlerinin, herhangi bir kötü yan etki olmadan daha hızlı çalışmasına yardımcı olur. Ayrıca, RVO'ya veya NRVO'ya bağlı kodun hata ayıklama ve serbest bırakmada aynı şekilde çalışmasını sağlar.
Birini (en azından benim için) çok önemli bir sebep olarak düşünebilirim: eğitim! Derleyicileri ihmal ettiğinde, yapıcıları nasıl açıklar, kurucuları/taşınırları, işlev çağrılarındaki yıkıcıları nasıl açıklarsınız? Böyle bir seçeneği desteklemek için g ++ 'ya çok müteşekkirim. – Goran
Döndürülmüş bir değerin ömrünü anlamak için onu devre dışı bırakmak zorundayım, bunu şimdi anlayamıyorum çünkü geçici yaratmıyor, sadece doğrudan kopyalar. – Zebrafish
- 1. Visual Studio 2010'da AnkhSVN nasıl devre dışı bırakılır?
- 2. Güneş jvm ile inlinasyon optimizasyonu nasıl devre dışı bırakılır?
- 3. Bazı koşullarda ActionBar.TabListener nasıl devre dışı bırakılır/devre dışı bırakılır
- 4. QPushButton nasıl devre dışı bırakılır
- 5. visual studio 2008 derleme optimizasyonu
- 6. Visual Studio 2017 Bağımlılık Doğrulamasını devre dışı bırak
- 7. Android Studio - Kaydırma kodu önizleme bindirme nasıl devre dışı bırakılır?
- 8. Otomatik hizalama nasıl devre dışı bırakılır?
- 9. Std :: tuple'dan paketlenmiş değerlerin dönüş değeri optimizasyonu
- 10. Visual Studio 2012'de (veya Resharper'da) otomatik tamamlama nasıl devre dışı bırakılır *
- 11. Visual Studio 2008'de çılgın Javascript/HTML formatını nasıl devre dışı bırakılır?
- 12. Visual Studio 2015- "Projenize bağlı olarak, yararlı bulabileceğiniz uzantıları belirledik" mesajı nasıl devre dışı bırakılır?
- 13. .NET: System.Transactions'da promosyonu nasıl devre dışı bırakılır?
- 14. DrawerLayout Gölge nasıl devre dışı bırakılır
- 15. Emacs'ta x yapıştırma nasıl devre dışı bırakılır
- 16. JQuery Mousewheel: Nasıl devre dışı bırakılır?
- 17. hız günlükleri nasıl devre dışı bırakılır
- 18. active_admin'in toplu eylemi nasıl devre dışı bırakılır?
- 19. Apache2'de mod_deflate nasıl devre dışı bırakılır?
- 20. GitLab: Otomatik başlangıç nasıl devre dışı bırakılır?
- 21. AngularJS'deki girdilerin kırpılması nasıl devre dışı bırakılır?
- 22. Emacs'te saçak nasıl devre dışı bırakılır?
- 23. ScrollView kaydırması nasıl devre dışı bırakılır?
- 24. Android'de ListView'i tıklayarak nasıl devre dışı bırakılır?
- 25. Bir kendogrid'de sayfalama nasıl devre dışı bırakılır
- 26. Django: modelinde sipariş nasıl devre dışı bırakılır
- 27. GWT ValueListBox nasıl devre dışı bırakılır?
- 28. Yammer sohbeti tamamen nasıl devre dışı bırakılır?
- 29. zaten ayırtılmış tarihler nasıl devre dışı bırakılır?
- 30. CakePHP Form Combo nasıl devre dışı bırakılır?
RVO/NRVO'ya ** değinebileceği kadarıyla ** standart değil (bkz. C++ 0x standardı, bölüm 12.8. Sınıf nesnelerini kopyalama ve taşıma, paragraf 32)). Standart, bu tür bir optimizasyona izin verir (g ++ ve VisualStudio bunu uygular). Bununla bir problemim yok. Ama devre dışı bırakmak için biraz geçiş yapmak güzel olurdu. Eğitim amaçlı belki. Teşekkürler, şimdi çok daha net :) – Goran
@Goran: Standart açıkça izin veriyorsa, o zaman Standarttır. – Puppy
İzin! = Gerektirir. Standartın bir parçası olmadığı için standartla çelişmez. –