Временная привязка к ссылке const в списке инициализаторов c'tor

Раздел 12.2.5 в C ++ 03 говорит: « Временная привязка к ссылочному элементу в ctor-initializer конструктора (12.6.2) сохраняется до тех пор, пока конструктор не выйдет из "
Итак, я попробовал следующую программу

#include<iostream>
using namespace std;

struct foo
{
  foo()
  {
    cout<<"foo c'tor"<<endl;
  }
  ~foo()
  {
    cout<<"foo d'tor"<<endl;
  }
};

struct bar
{
  const foo &ref;
  bar():ref(foo()) 
  {
    cout<<"bar c'tor"<<endl;
  }

};

int main()
{
  bar obj;
}    

. Результат, который я получил:

foo c'tor
foo d'tor
bar c'tor

Теперь, согласно стандарту, временный сгенерированный foo () в c'tor init-list c'tor бара будет уничтожен после c'tor бара, поэтому foo d'tor следует печатать после bar c'tor
, но все наоборот.
Объясните причину.

12
задан Happy Mittal 18 January 2011 в 06:31
поделиться