tutorial studio programacion móviles español desarrollo curso aprender aplicaciones c++ compiler-warnings

c++ - studio - ¿Por qué devolver la dirección de la variable local o temporal solo es una advertencia y no un error?



solidity español (2)

Habiendo recibido una advertencia del compilador para esta función:

template<class T> Matrix3x3<T> & operator - (Matrix3x3<T> const & p) { auto m = Matrix3x3<T>(p); m.m11 = -m.m11; m.m12 = -m.m12; m.m13 = -m.m13; m.m21 = -m.m21; m.m22 = -m.m22; m.m23 = -m.m23; m.m31 = -m.m31; m.m32 = -m.m32; m.m33 = -m.m33; return m; }

, Me pregunto por qué devolver una dirección de variable local o temporal no merece un error. ¿Hay circunstancias en las que hay que hacerlo? ¿Cuál es la razón para que este solo sea un "comportamiento indefinido" y no una restricción de idioma?

No puedo pensar en ninguna.


Motivo: falta de coherencia en la generación de error del compilador .

En su caso directo , el compilador es realmente útil para generar una advertencia. Trátalo solo como una bonificación .
Pero busque el siguiente caso donde el compilador no reconoce este problema:

int& foo () { int i = 1; static int j; return i? i : j; // No warning in g++-5! }

Ahora, desde la perspectiva del compilador, no está justificado si da error para un caso y en otro caso se resuelve debido a la complejidad del código.

Uno de los casos de uso de dicha limitación del compilador puede ser la "generación de números aleatorios", como lo sugiere muy bien @tsuki.


No hay una buena razón para que no sea un error, solo el estándar C ++ no trata este caso como tal y los compiladores que cumplen con el estándar se adhieren al estándar.

Sin embargo, se recomienda emitir una advertencia:

§12.2.5.2 La vida útil de un límite temporal al valor devuelto en una declaración de retorno de función (6.6.3) no se extiende; el temporal se destruye al final de la expresión completa en la declaración de retorno .

[...]

[Nota: Esto puede introducir una referencia pendiente, y se recomienda que las implementaciones emitan una advertencia en tal caso . - nota final]

El énfasis es mío.