Estaba arreglando otro error en algún código y me encontré con un código que habría pensado que era un error; sin embargo, este código se compila bajo gcc 4.4, 4.5 y 4.6 y parece funcionar como "esperado". ¿Alguien puede decirme si esto es válido C++?return por el valor asignado a la referencia de const
struct foo {
int bar;
};
foo myfunction(foo const &orig) {
foo fooOnStack = orig;
fooOnStack.bar *= 100;
return fooOnStack;
}
void myOtherFunction(foo const &orig) {
foo const &retFoo = myfunction();
// perhaps do some tests on retFoo.bar ...
}
Si esto es válido C++, ¿alguien sabe la razón de ser legal?
La lógica canónica se describe aquí: [GotW # 88: Un candidato para la "const más importante"] (http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for- the-most-important-const /). – ildjarn
Además, el standardese que apoya que esto sea legal C++ está en C++ 03 §12.2/5. – ildjarn
Gracias, hoy aprendí algo de C++. Tiene sentido, pero nunca lo había usado antes, y sabía que volver a una referencia no const no estaba permitido. – graphicsMan