Considere el siguiente código donde devuelvo double&
y string&
. Funciona bien en el caso de un doble, pero no en el caso de una cadena. ¿Por qué el comportamiento difiere?Devolviendo una referencia en C++
En ambos casos el compilador ni siquiera arroja el Warning: returning address of local variable or temporary
ya que estoy devolviendo una referencia.
#include <iostream>
#include <string>
using namespace std;
double &getDouble(){
double h = 46.5;
double &refD = h;
return refD;
}
string &getString(){
string str = "Devil Jin";
string &refStr = str;
return refStr;
}
int main(){
double d = getDouble();
cout << "Double = " << d << endl;
string str = getString();
cout << "String = " << str.c_str() << endl;
return 0;
}
Salida:
$ ./a.exe
Double = 46.5
String =
Tuve una publicación similar y las respuestas fueron muy útiles. Además, echa un vistazo a los comentarios http://stackoverflow.com/questions/2612709/why-does-this-object-wonk-out-get-deleted – brainydexter