C++ 03'teki Bölüm 12.2.5, " yapıcısının ctor-initializer (12.6.2) dosyasındaki bir başvuru üyesine geçici olarak bağlı bir yapıcı çıkış yapana kadar devam eder. "
yüzden programıc'tor başlatıcı listesinde const const başvuruya geçici olarak bağlama
#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;
}
aşağıdaki çalıştı alıyorum çıktısı:
foo c'tor
foo d'tor
bar c'tor
Şimdi standardına göre, geçici c'tor ini foo() tarafından oluşturulan
bar c'tor t-list foo d'tor
foo d'tor
bar c'tor
sonra basılmalıdır, ancak başka bir şekilde.
Lütfen nedenini açıklayın.
Kurucuda 'ref' referansını alırsanız ne olur? Belki de derleyici, aslında kullanılmadığından daha önce onu yok edeceğine karar verir. –
VS2008, goc 4.3.4 'foo, foo, bar' output'u üreten' foo, bar, foo 'çıktısını üretir. İlginç ... – Naveen
g ++ hata, rapor. –