Когда следующий код скомпилирован g ++ или clang ++, я получаю предупреждения «Возвращение ссылки на временный объект» (g ++) и «Возвращение ссылки на локальный временный объект» (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);
}