Mục 12.2.5 trong C++ 03 cho biết "Giới hạn tạm thời đối với thành viên tham chiếu trong bộ khởi tạo của hàm khởi tạo '(12.6.2) "
Vì vậy, tôi đã cố gắng sau chương trìnhRàng buộc tạm thời để tham chiếu const trong danh sách khởi tạo c'tor
#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;
}
Kết quả tôi nhận được là:
foo c'tor
foo d'tor
bar c'tor
Bây giờ theo tiêu chuẩn, tạm thời được tạo ra bởi foo() trong c'tor ini t-danh sách các c'tor của thanh sẽ bị phá hủy sau khi c'tor của thanh như vậy foo d'tor
nên được in sau bar c'tor
nhưng nó là cách khác xung quanh.
Vui lòng giải thích lý do.
Điều gì sẽ xảy ra nếu bạn tham chiếu 'ref' bên trong hàm tạo? Có lẽ trình biên dịch quyết định rằng vì nó không thực sự được sử dụng nên nó có thể phá hủy nó trước đó. –
VS2008 tạo ra đầu ra 'foo, bar, foo' khi gcc 4.3.4 tạo ra đầu ra' foo, foo, bar'. Thú vị ... – Naveen
g ++ lỗi, báo cáo. –