Considerare il seguente codice dove restituisco double&
e un string&
. Funziona bene nel caso di un doppio ma non nel caso di una stringa. Perché il comportamento differisce?Restituzione di un riferimento in C++
In entrambi i i casi il compilatore non anche gettare la Warning: returning address of local variable or temporary
come sto tornando un punto di riferimento.
#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;
}
uscita:
$ ./a.exe
Double = 46.5
String =
Ho avuto un post simile e le risposte sono state molto utili. Inoltre, controlla i commenti http://stackoverflow.com/questions/2612709/why-does-this-object-wonk-out-get-deleted – brainydexter