Я знаю, что временное не может быть привязано к неконстантной ссылке, но может быть привязано к константной ссылке. То есть
A & x = A(); //error
const A & y = A(); //ok
Я также знаю, что во втором случае (выше) время жизни временного созданного из A()
продолжается до времени существования ссылки const (т.е. y
).
Но мой вопрос:
Может ли ссылка const, привязанная к временному, быть привязана к еще одной константной ссылке, продлевая время жизни временного до времени жизни второго объекта?
Я пробовал это, и это не сработало. Я не совсем понимаю это. Я написал этот код:
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
во втором случае? Говорит ли стандарт (С++ 03) об этом?