2015-03-19 16 views
8

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?

+1

AFAIK hoàn toàn không có gì. Nó chỉ dễ dàng hơn để _ignore_ hơn để _forbid_. –

+0

không thay đổi điều này với C++ 11? –

+0

@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)? –

Trả lời

4

Nếu chúng ta có một hàm tạo có hai hoặc nhiều tham số, điều gì sẽ explicit ngăn chặn?

Không có gì.

5

Nó có thể là thú vị nếu ai đó thay đổi chữ ký của phương pháp của bạn với một tham số mặc định:

struct Foo 
{ 
    explicit Foo(int, int = 0); 
}; 

Với từ khóa explicit, bạn idiomatically nói rằng bạn không bao giờ muốn có một nhà xây dựng để làm chuyển đổi ngầm.

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