2012-06-28 44 views
12

Trong đoạn mã sau:Trong C++, là một hàm tạo với chỉ các đối số mặc định là một hàm tạo mặc định?

struct Foo 
{ 
    Foo(int x=0); 
}; 

Liệu các nhà xây dựng được tính là một constructor mặc định?

+1

Trình tạo mặc định được trình biên dịch tạo tự động khi bạn không xác định. Vì vậy, tôi muốn nói không, không phải vì bạn đã xác định nó – peacemaker

+3

@peacemaker thực sự, một hàm tạo mặc định là một hàm tạo không có đối số – Matt

+2

@peacemaker: Bạn đang bối rối mặc định như trong "được cung cấp theo mặc định" với mặc định như trong " được gọi theo mặc định ". Tiêu chuẩn này sử dụng thuật ngữ để chỉ thuật ngữ sau. –

Trả lời

18

C++ 98 §12.1/5 (tôi nhấn mạnh):

Một constructor mặc định cho một lớp X là một constructor của X có thể được gọi mà không cần một cuộc tranh cãi. Nếu không có constructor do người dùng khai báo cho lớp X, thì hàm tạo mặc định được khai báo ngầm định.

Vì vậy, có, nó được tính là hàm tạo mặc định. See also.

+0

Tôi nghĩ tôi đã đọc ở đâu đó một lần. Cảm ơn bạn đã làm rõ. – chris

+0

Cảm ơn! Không biết rằng có một sự khác biệt. – panickal

+2

@panickal Có thể đáng chú ý ví dụ này cũng là một hàm tạo chuyển đổi và vẫn mang theo các chuyển đổi ngầm định. –

Các vấn đề liên quan