2010-07-18 33 views

Trả lời

4

Sử dụng để trang trí các nhà thầu; một hàm tạo nên trang trí không thể được trình biên dịch sử dụng cho các chuyển đổi ngầm định.

C++ cho phép lên đến một chuyển đổi người dùng cung cấp, trong đó "người dùng cung cấp" phương tiện "bằng phương tiện của một constructor lớp", ví dụ như, trong:

class circle { 
    circle(const int r) ; 
} 

    circle c = 3 ; // implicit conversion using ctor 

trình biên dịch sẽ gọi ctor vòng tròn ở đây , constructinmg circle c với giá trị là 3 cho r.

explicit được sử dụng khi bạn không muốn điều này. Thêm phương tiện rõ ràng rằng bạn phải rõ ràng xây dựng:

class circle { 
    explicit circle(const int r) ; 
} 

    // circle c = 3 ; implicit conversion not available now 
    circle c(3); // explicit and allowed 
5

Từ khóa explicit ngăn các chuyển đổi tiềm ẩn.

// Does not compile - an implicit conversion from const char* to CImg 
CImg image = "C:/file.jpg"; // (1) 
// Does compile 
CImg image("C:/file.jpg"); // (2) 

void PrintImage(const CImg& img) { }; 

PrintImage("C:/file.jpg"); // Does not compile (3) 
PrintImage(CImg("C:/file.jpg")); // Does compile (4) 

Nếu không có từ khóa explicit, báo cáo (1) và (3) sẽ biên dịch bởi vì trình biên dịch có thể thấy rằng một const char* có thể được ngầm chuyển đổi sang một CImg (thông qua các nhà xây dựng chấp nhận một const char*). Đôi khi chuyển đổi tiềm ẩn này là không mong muốn bởi vì nó không phải lúc nào cũng có ý nghĩa.

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