Khi thiết kế một API công khai, đó có phải là một cách hay để làm cho người xây dựng rõ ràng không?Có phải là một cách hay để làm cho người xây dựng rõ ràng
class A {
public:
//explicit A(int i){}
A(int i){}
};
void fun(const A& a) {}
int main() {
// If I use explicit for A constructor, I can prevent this mistake.
// (Or shall I call it as feature?)
fun(10);
}
Hoặc tôi có cho phép chuyển đổi ngầm định, cho phép người dùng gọi API của tôi bằng cách nhập ít hơn không?
ví dụ về chuyển đổi ẩn: bất kỳ điều gì giống số (ví dụ:thư viện bignum hoặc thư viện ngày/giờ) - chống lại chuyển đổi ngầm: chỉ xem xét lớp 'std :: vector' có thể được khởi tạo với kích thước ban đầu. –
Tôi đồng ý với điều này. IME hiếm khi xảy ra trường hợp bạn muốn truyền ngầm và nếu bạn sai về mặt rõ ràng, không có hại gì được thực hiện bằng cách buộc người dùng phải thực hiện thêm một vài lần nhấn phím. – sbi
Ví dụ: chuyển đổi ngầm từ đôi thành phức tạp thông qua 'phức tạp (double re, double im = 0)' có ý nghĩa, nhưng chuyển đổi từ int sang vector thông qua 'vector (int size)' thì không. –