次のコードを g++ または clang++ でコンパイルすると、「returning reference to temporary object」(g++) および「returning reference to local temporary object」(clang++) という警告が表示されます。
なぜgetData_warning
これらの警告が表示されるのに対し、表示されないのかについて誰かが教えてくれますgetData_nowarning
か?
struct Geom {
int * data;
};
// Not ideal because one can change the pointed to value
int * const & getData_nowarning (Geom const & geom) {
return geom.data;
}
// Ideal because one cannot change the pointed to value.
int const * const & getData_warning (Geom const & geom) {
return geom.data; // <------------------- WARNING HERE
}
void test () {
Geom const geom = { new int(0) };
int * data1 = getData_nowarning(geom);
int const * data2 = getData_warning(geom);
}