Я хочу передать ссылку в функцию. Этот код не работает, как я ожидал:
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()
не вернется?