Tại sao C++ đúc chuỗi ký tự tôi chuyển vào dưới dạng bool thay vì chuỗi?Quá tải Bool/String Sự mơ hồ
#include <iostream>
using namespace std;
class A
{
public:
A(string v)
{
cout << v;
}
A(bool v)
{
cout << v;
}
};
int main()
{
A("hello");
return 0;
}
Output: 1
Có phải vì trình biên dịch là không đủ thông minh để thực hiện chuyển từ char * để chuỗi và thay vì chỉ giả định rằng bool là điều gần gũi nhất với một con trỏ? Là lựa chọn duy nhất của tôi để làm cho một constructor char * rõ ràng mà về cơ bản không chính xác điều tương tự như các nhà xây dựng chuỗi?
Tôi thường thích chuyển đổi rõ ràng hơn. Chuyển đổi ngầm định có những thứ như thế này. Xem http://stackoverflow.com/q/2346083/10077 –
Tôi không chắc chắn nhưng: Cả hai chuyển đổi đều có thể (chuyển đổi con trỏ thành bool checks for null pointer). Nhưng chuyển đổi sang bool là một * chuyển đổi * tích hợp, trong khi chuỗi là một con người * xác định * convesion (thông qua ngầm c'tor). Và bây giờ nếu tôi nhớ chính xác, các bản dựng sẵn có mức độ ưu tiên cao hơn so với người dùng đã xác định. – leemes
có thể trùng lặp của [C++ Phương thức quá tải không hoạt động] (http://stackoverflow.com/questions/14770252/c-method-overload-not-working) –