я знаю, что временный не может быть привязан к неконстантной ссылке, но он может быть привязан к константной ссылке . То есть
A & x = A(); //error
const A & y = A(); //ok
я также знаю, что во втором случае (выше) время жизни временного объекта, созданного из A ()
, увеличивается до времени жизни ссылки const (т.е. y
]).
Но мой вопрос:
Может ли константная ссылка, привязанная к временному, быть далее привязана к еще одной константной ссылке, продлевая время жизни временного до времени жизни второй объект?
Я пробовал это, но ничего не вышло. Я этого не совсем понимаю. Я написал этот код:
struct A
{
A() { std::cout << " A()" << std::endl; }
~A() { std::cout << "~A()" << std::endl; }
};
struct B
{
const A & a;
B(const A & a) : a(a) { std::cout << " B()" << std::endl; }
~B() { std::cout << "~B()" << std::endl; }
};
int main()
{
{
A a;
B b(a);
}
std::cout << "-----" << std::endl;
{
B b((A())); //extra braces are needed!
}
}
Вывод ( ideone ):
A()
B()
~B()
~A()
-----
A()
B()
~A()
~B()
Разница в выводе? Почему временный объект A ()
разрушается раньше, чем объект b
во втором случае? Говорит ли Стандарт (C ++ 03) об этом поведении?