Với phương pháp sau đây:Tại sao chuỗi được trích dẫn khớp với chữ ký phương thức bool trước chuỗi std ::?
// Method 1
void add(const std::string& header, bool replace);
//Method 2
void add(const std::string& name, const std::string& value);
Nó sẽ xuất hiện đoạn mã sau sẽ kết thúc phương pháp 1 kêu gọi thay vì phương pháp 2:
something.add("Hello", "World");
tôi đã kết thúc việc tạo ra một phương pháp mà trông như thế này:
//Method 3
void MyClass::add(const char* name, const char* value) {
add(std::string(name), std::string(value));
}
Nó hoạt động. Vì vậy, nó sẽ có vẻ rằng khi một phương pháp chấp nhận một "chuỗi trích dẫn" nó sẽ phù hợp theo trình tự sau:
const char*
bool
std::string
Tại sao một chuỗi trích dẫn sẽ được đối xử dưới dạng bool
trước một số std::string
? Đây có phải là hành vi thông thường không? Tôi đã viết một số tiền phong nha của mã cho dự án này và chưa có bất kỳ vấn đề nào khác với chữ ký sai phương thức được chọn ...
Đây là nó. Tôi đã có vấn đề này một lần và nó nhầm lẫn tôi, nhưng tham số thứ hai của bạn là một const char *, và điều đó sẽ được chuyển đổi thành một boolean. – GManNickG