Câu hỏi này liên quan đến các tiêu chuẩn trước của C++ 11 (C++ 03). explicit
ngăn chặn chuyển đổi tiềm ẩn từ loại này sang loại khác. Ví dụ:là từ khóa rõ ràng cần thiết với một constructor lấy nhiều hơn một tham số?
struct Foo
{
explicit Foo(int);
};
Foo f = 5; // will not compile
Foo b = Foo(5); // works
Nếu chúng ta có một hàm tạo mất từ hai tham số trở lên, điều gì sẽ explicit
ngăn chặn? Tôi hiểu rằng trong C++ khởi 11 bạn đã chuẩn bị tinh thần, vì vậy nó sẽ ngăn chặn công trình xây dựng như:
struct Foo
{
explicit Foo(int, int);
};
Foo f = {4, 2}; // error!
Nhưng trong C++ khởi 03 chúng tôi không có chuẩn bị tinh thần, vì vậy những gì loại xây dựng là explicit
ngăn chặn từ khóa ở đây?
AFAIK hoàn toàn không có gì. Nó chỉ dễ dàng hơn để _ignore_ hơn để _forbid_. –
không thay đổi điều này với C++ 11? –
@NeilKirk gì thay đổi? Bạn có nghĩa là những gì tôi chỉ ra trong câu hỏi của tôi (khởi tạo cú đúp)? –