¿Es posible deshabilitar RVO (optimización del valor de retorno) en Visual Studio 2010? Establecer el indicador de optimización en /Od
(desactiva todas las optimizaciones) no ayuda. En g ++ existe el indicador -fno-elide-constructors
que deshabilita el RVO.Cómo deshabilitar la optimización del valor de retorno en Visual Studio 2010?
Respuesta
No puede. Es así de sencillo. RVO/NRVO es Estándar, y su código no debe depender de que no esté presente.
Intente definir su variable como volatile
, quizás resuelva su problema. Si no lo hace, debe enviar el código de entrada ...
+1; aunque esto es solo una suposición aleatoria (y como tal merece votos a la baja) es correcto que 'return my_volatile_variable;' desactive RVO. (C++ 11 §12.8/31 elemento 1.) – Potatoswatter
@Potatoswatter: Tengo curiosidad por qué piensas en mi respuesta como una simple suposición al azar. El "quizás" en mi respuesta significaba que no estaba seguro de esta respuesta porque no sabía cuál era el verdadero problema. En mi humilde opinión, esta pregunta está en la línea de http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – Malkocoglu
Ah, lo siento. Supongo que esa es la razón por la que te rechazaron. (Es mejor justificar una respuesta que involucre 'volátil '.) – Potatoswatter
¡Nunca hay ninguna razón para desactivar esta optimización! ¿Qué estás intentando lograr? Ayuda a las compilaciones de depuración a ejecutarse más rápido sin ningún tipo de efectos secundarios negativos. También garantiza que el código dependiente de RVO o NRVO funcione de forma idéntica en depuración y liberación.
Puedo pensar en una razón (al menos para mí) muy importante: ¡educación! ¿Cómo se explican los constructores, mover/copiar constructores, destructores en las llamadas de función a un estudiante cuando el compilador los omite!?! Estoy muy agradecido por g ++ por apoyar esa opción. – Goran
Tengo que desactivarlo para comprender la vida útil de un valor devuelto, no lo puedo entender ahora porque no crea el temporal, solo lo copia directamente. – Zebrafish
- 1. Cómo deshabilitar AnkhSVN en Visual Studio 2010?
- 2. ¿Puedo deshabilitar la "vista de depuración" en Visual Studio 2010?
- 3. Cómo deshabilitar pestañas flotantes en Visual Studio 2010
- 4. Confiando en la Optimización del Valor de Retorno
- 5. Desactivando la optimización del valor de retorno de g ++
- 6. ¿La "optimización del valor de retorno" causa un comportamiento indefinido?
- 7. ¿Cómo analizar la unidad del analizador en Visual Studio 2010?
- 8. Deshabilitar Visual Studio 2010 Html Tag Pair Edición
- 9. optimización del valor de retorno vs auto_ptr para vectores grandes
- 10. cómo deshabilitar plegado de código en Visual C++ 2010
- 11. Comprensión de la optimización del valor de retorno y el retorno de los temporales - C++
- 12. Cómo deshabilitar/usar la barra de título de Visual Studio
- 13. ¿Cómo activar IntelliSense en Visual Studio 2010?
- 14. Visual Studio 2010 - RemovePreviousVersions
- 15. /LinkResource en Visual Studio 2010
- 16. Visual Studio 2010 "Mancha"
- 17. ExtJS en Visual Studio (2010)
- 18. requisitos del sistema para Visual Studio 2010
- 19. Cómo deshabilitar la notificación sobre actualizaciones de extensiones en Visual Studio 2010
- 20. GTK # en Visual Studio 2010
- 21. Desinstalar Visual Studio 2010
- 22. apertura en Visual Studio 2010
- 23. IronScheme en Visual Studio 2010
- 24. Java en Visual Studio 2010?
- 25. Cómo deshabilitar la localización de errores en Visual Studio?
- 26. ¿Puede Visual Studio 2010 resaltar la sintaxis del archivo ".inc"?
- 27. VB6 en Visual Studio 2010
- 28. ¿Cómo instalo Crypto ++ en Visual Studio 2010?
- 29. Cómo convertir la solución visual studio 2010 SP1 en la solución visual studio 2012?
- 30. ¿Cómo usar Mercurial de Visual Studio 2010?
Por lo que puedo decir, RVO/NRVO es ** no ** el estándar (ver C++ 0x estándar, sección 12.8. Copiar y mover objetos de clase, párrafo 32) El estándar simplemente permite dicha optimización (g ++ y VisualStudio lo implementa). No tengo ningún problema con eso. Pero sería bueno tener algún interruptor para deshabilitarlo. Para fines educativos tal vez. Gracias, está mucho más claro ahora :) – Goran
@Goran: Si el Estándar lo permite explícitamente, entonces es Estándar. – Puppy
¡Permitir! = Requerir. Como tal, no es parte del estándar, simplemente no contradice el estándar. –