Tôi mong đợi mã bên dưới để in Test::Test(string,string,bool)
, tuy nhiên nó in Test::Test(string,bool)
. Tại sao nó gọi hàm tạo chỉ nhận một tham số chuỗi khi hai tham số được cung cấp? Chắc chắn một chuỗi không thể được chuyển đổi thành một bool ...? Tôi đã thử thêm từ khóa rõ ràng nhưng nó không giúp ích gì. Mã số cũng ở http://ideone.com/n3tep1.Nhà xây dựng sai C++ được gọi là
#include <iostream>
#include <string>
using namespace std;
class Test
{
public:
Test(const string& str1, bool flag=false)
{
cout << "Test::Test(string,bool)" << endl;
}
Test(const string& str1, const string& str2, bool flag=false)
{
cout << "Test::Test(string,string,bool)" << endl;
}
};
int main()
{
Test* test = new Test("foo", "bar");
}
' "thanh"' không phải là một 'std :: chuỗi', nó là một 'const char * ', và một con trỏ có thể được chuyển đổi hoàn toàn thành một' bool', và chuyển đổi đó phải được ưu tiên hơn hàm tạo 'std :: string (const char *)'. – clcto
Phiên bản đầu tiên là một kết hợp tốt hơn, thử thử nghiệm mới ("foo", std :: string ("bar")) – Melkon
Trên một ghi chú có liên quan, bạn thường không muốn sử dụng 'mới' rất thường xuyên trong mã C++ . Các biến ngăn xếp được ưu tiên khi có thể. Chỉ cần một đầu lên kể từ khi bạn nói rằng bạn đã đi xa một lúc. – dandan78