Я ожидаю, что код ниже будет напечатан Test::Test(string,string,bool)
, однако он печатает Test::Test(string,bool)
. Почему он вызывает конструктор, который принимает только один строковый параметр, когда два предоставлены? Конечно, строка не может быть преобразована в bool ...? Я попытался добавить явное ключевое слово, но это не поможет. Код также находится в http://ideone.com/n3tep1.C++ неправильный конструктор, который называется
#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");
}
'«бар»' не является 'станд :: string', это' Const символ * ', а указатель может быть неявно преобразован в' bool', и это преобразование должно иметь приоритет над конструктором 'std :: string (const char *)'. – clcto
Первая версия - лучшее совпадение, попробуйте новый тест («foo», std :: string («bar»)) – Melkon
Что-то вроде примечания, вы обычно не хотите использовать 'new' очень часто в C++-коде , По возможности предпочтительны переменные стека. Просто хедз-ап, так как вы говорите, что вас уже давно нет. – dandan78