Я хочу передать ссылку в функцию. Этот код не работает, как я ожидал:
struct A {
};
void foo(A& a) {
// do something with a
}
int main(int, char**) {
foo(A());
}
Я получаю ошибку компиляции
неверная инициализация неконстантной ссылки типа
A&из rvalue типаA
Но когда я просто добавляю метод A& ref() в A, как показано ниже, и вызываю его, прежде чем передавать его, кажется, я могу использовать A. При отладке объект A уничтожается после вызова foo():
struct A {
A& ref() {
return *this;
}
};
void foo(A& a) {
// do something with a
}
int main(int, char**) {
foo(A().ref());
}
Является ли этот действующий код стандартным? Вызывает ли вызов ref() время жизни объекта до тех пор, пока foo() не вернется?