, Вот почему это плохая идея: вы не знаете, что произойдет.
я определяюDate
и укажите пользовательское преобразование.
class Date {
private:
int day;
int month;
string dateStr;
public:
Date(int _day, int _month) : day(_day), month(_month) {}
operator const string() {
ostringstream formattedDate;
formattedDate << month << "/" << day;
dateStr = formattedDate.str();
return dateStr;
}
};
Хорошо работает при конвертации вstring
.
Date d(1, 1);
string s = d;
Но почему нельзя использовать его сcout
напрямую?
cout << d << endl; // The compiler complains that there is no suitable type marching << operator
Однако, если я используюchar*
вместоstring
для пользовательского преобразования, я могу использовать его сcout
непосредственно. Зачем?
operator const char*() {
ostringstream formattedDate;
formattedDate << month << " / " << day;
dateStr = formattedDate.str();
return dateStr.c_str();
}
пс. Я знаю что перегруз<<
напрямую будет хорошо работать для вывода. Но мой вопрос:почему не может использовать<<
с пользовательским преобразованием вstd::string
?