Да, подобные вопросы задавались и раньше, но они не были точно такими же (или, по крайней мере, предоставленных ответов мне было недостаточно).
Мой общий вопрос: каков срок жизни временного объекта, созданного при вызове функции?
Код:
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
A()
{
cout << "A()" << endl;
}
A(const A&)
{
cout << "A(const A&)" << endl;
}
A(A&&)
{
cout << "A(A&&)" << endl;
}
~A()
{
cout << "~A()" << endl;
}
};
class Container
{
public:
A& getA()
{
return a;
}
private:
A a;
};
void f(A & a)
{
cout << "f()" << endl;
}
int main()
{
f (Container().getA());
cout << "main()" << endl;
}
Это дает результат:
A()
f()
~A()
main()
Я создаю временный экземпляр Container
и передаю ссылку на его поле функции f()
. Вывод предполагает, что экземпляр Container
начинает свою жизнь при вызове f()
, живет до возврата из функции и только после этого уничтожается. Но, возможно, это случайность.
Что говорит стандарт? Действительна ли ссылка на Container::a
в теле f()
?
Container::a
вf()
? - person NPS   schedule 18.02.2019