C++ 重载 ostream 不适用于带有空参数的默认构造

c++ overload ostream doesn't work for default construct with empty argument

本文关键字:参数 默认 ostream 重载 不适用 适用于 C++      更新时间:2023-10-16

这是从https://msdn.microsoft.com/en-us/library/1z2f6c2k.aspx

取出的示例
#include <iostream>
using namespace std;
class Date
{
    int mo, da, yr;
public:
    Date()
    {
        mo = 10; da = 10; yr = 99;
    }
    Date(int m, int d, int y)
    {
        mo = m; da = d; yr = y;
    }
    friend ostream& operator<<(ostream& os, const Date& dt);
};
ostream& operator<<(ostream& os, const Date& dt)
{
    os << dt.mo << '/' << dt.da << '/' << dt.yr;
    return os;
}
int main()
{
    Date dt0();
    cout << dt0 << endl;
    Date dt(5, 6, 92);
    cout << dt;
}

我希望输出为

10/10/99
5/6/92

但是我得到的是

1
5/6/92

我该如何工作?

欢迎来到C ,您可以在其中被绊倒,因为最烦人的解析!

dt0不是对象,它是一个函数!输出它时,实际上是在输出函数dt0的地址,该函数始终评估为true,即1

您可以用{}替换(),因此不会发生歧义:

Date dt0{};

或完全放下括号:

Date dt0;