У меня есть класс в C++, и я хотел бы иметь возможность печатать объект, поэтому я создал оператор char * cast. Дело в том, что по какой-то причине вывод операторной функции представляет собой случайные символы вместо возвращаемой строки. вот код:Случайный вывод с char * operator
operator const char*()const {
std::cout << (std::to_string(Nom) + '/' + std::to_string(Denom)).c_str() << std::endl;
return (std::to_string(Nom) + '/' + std::to_string(Denom)).c_str();
}
и основная функция:
Rational r1(7, 15);
std::cout << r1<<std::endl;
return 0;
Первый линейный выход нормально ("7/15"), но возвращаемое значение просто случайные буквы.
Любые подсказки?
Как вы думаете, что делает c_str()? – UKMonkey
Вы вызываете 'c_str()' на временный объект. Результат - обвисший указатель в тот момент, когда ваш оператор возвращается, даже раньше. – StoryTeller
Причина, по которой 'std :: string' имеет' c_str() ', а не' operator char *() ', заключается в том, чтобы сделать ее более очевидной, так как такой код делает что-то серьезно неправильное. –