Ну вот мой код исключения:C++ Weird строка/символ поведение * исключение
class OptionNotFoundError: public std::exception {
public:
OptionNotFoundError(std::string option, int position) throw()
: option(option), position(position) {}
OptionNotFoundError(char option_, int position) throw()
: position(position) { option.push_back(option_); }
virtual ~OptionNotFoundError() throw() {}
virtual const char* what() const throw() {
std::string what_str = "Option '" + option + "' not found in position " + std::to_string(position);
std::cout << what_str.c_str() << std::endl;
return what_str.c_str();;
}
std::string option;
int position;
};
Когда исключение, вот что я получаю в терминале:
terminate called after throwing an instance of 'Args::OptionNotFoundError'
Option 'c' not found in position 1
what():
Так cout
отлично работает, но ... не возвращение. Если я использую return "smth"
, он отлично работает.
Страннее: если я заменю what_str определение с
std::string what_str = "test";
Я получаю
terminate called after throwing an instance of 'Args::OptionNotFoundError'
test
what(): x�zL�
Опять же, cout<<
работает отлично. Но возвращение ... Не так много. Это ошибка кодирования?
Существует тонны дубликатов для этого UB ... – dasblinkenlight
Рассмотрите возможность создания 'std :: string what_str;' переменной-членом класса 'OptionNotFoundError' вместо локальной переменной внутри функции' what() '. Тогда 'what_str' все еще был бы жив и пинал вместо того, чтобы быть уничтоженным по возвращении. – PaulMcKenzie