Trong đoạn mã sau, cấu trúc khuôn mẫu BB và CC gần giống hệt ngoại trừ các hàm tạo. Mẫu BB sử dụng một hàm tạo không làm gì trong khi khuôn mẫu CC sử dụng hàm tạo mặc định. Khi tôi biên dịch nó sử dụng Visual Studio 2013 cập nhật 4, một lỗi được ném trong dòng khai báo constInst2
nhưng không phải trên dòng khai báo constInst
:Hàm tạo dựng ngầm so với hàm tạo "rỗng"
lỗi C4700: biến cục bộ chưa được khởi tạo 'instance2' sử dụng"
tôi mong đợi các lỗi tương tự khi khởi tạo 'dụ' là tốt. tôi hiểu sai this sentence?
"Nếu constructor mặc định ngầm-tuyên bố sẽ không bị xóa hoặc tầm thường, nó được xác định (có nghĩa là, một cơ quan chức năng được tạo ra và biên soạn) bởi trình biên dịch, và nó có chính xác tác dụng tương tự như một constructor người dùng định nghĩa nội dung trống và danh sách initializer trống."
struct AA
{
typedef int a;
typedef const int b;
};
template< typename A >
struct BB
{
typename A::a a_A;
typedef typename A::b a_B;
BB()
{};
};
template< typename A >
struct CC
{
typename A::a a_A;
typedef typename A::b a_B;
CC() = default;
};
int main()
{
BB<AA> instance;
BB<AA>::a_B constInst(instance.a_A);
CC<AA> instance2;
CC<AA>::a_B constInst2(instance2.a_A);
return 0;
}
Khi đặt câu hỏi về lỗi trình biên dịch cụ thể, vui lòng bao gồm thông báo lỗi đầy đủ trong câu hỏi. Nó giúp rất nhiều. –
@MarkRansom: Đã cập nhật câu hỏi. – Hector
@Hector Tôi lấy nguyên văn mã của bạn, biên dịch nó với Visual Studio 2013 Update 4, và chỉ nhận được cảnh báo: 'cảnh báo C4700: uninitialized local variable 'instance2' used' Nó cũng biên dịch không có vấn đề ở đây: http: // ideone. com/Hc1jB4 – PaulMcKenzie