Почему время жизни временного не продлевается до времени жизни включающего объекта?

я знаю, что временный не может быть привязан к неконстантной ссылке, но он может быть привязан к константной ссылке . То есть

 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) об этом поведении?

31
задан Nawaz 4 August 2011 в 06:30
поделиться