Я наткнулся на это, не получив «не экземпляр для конструктора» ошибки при использовании std::out_of_range constructor
кода со старыми компиляторамистрока автоматически преобразует константный символ * в STD :: строка
Для некоторых старых компиляторов определение std::out_of_range
является
class out_of_range : public logic_error {
public:
out_of_range(const string& message);
};
в более поздних версиях они добавили второй конструктор
class out_of_range : public logic_error {
public:
out_of_range(const string& message);
out_of_range(const char *message);
};
код я пытался сотрудничать mpile сделал следующий вызов конструктора:
std::out_of_range("Some Error Message");
после добавления #include <string>
компилятор смог преобразовать const char*
в std::string
?
Это ожидаемое поведение?
Это по той же причине, что вы можете сделать, например. 'std :: string str =" foobar ";' См. например. [эту конструктор конструктора 'std :: string'] (http://en.cppreference.com/w/cpp/string/basic_string/basic_string) для получения дополнительной информации (это конструктор, помеченный' 5' в списке, который вы должны посмотреть). –