, Вот почему это плохая идея: вы не знаете, что произойдет.

я определяю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?

Ответы на вопрос(1)

Ваш ответ на вопрос