C++ 重载 ostream 不适用于带有空参数的默认构造
c++ overload ostream doesn't work for default construct with empty argument
这是从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;
相关文章:
- 使函数参数默认为周围范围
- 如何将值传递给其参数(默认参数)
- 当“std::make_index_sequence”和“std::index_sequence”用于模板参数默认类型时
- C ,构造器中允许的参考参数默认值
- 哪些规则控制参数默认赋值?
- 错误:上一个规范后给出的参数默认参数
- 是否可以设计一个包含模板参数默认值的类
- 构造函数中参数C++默认值
- 如何设置依赖于其他参数的参数默认值
- C++模板参数默认函数实现
- QInput对话框参数默认值
- g++4.8.2上列表方法参数默认初始化时出错
- 在函数定义中指定参数默认值会导致错误 C2143:语法错误:'='之前缺少')'
- 函数模板:将第一个模板参数默认为第二个
- 模板模板参数默认可以引用其他模板类型的参数
- 参数默认为先例参数的值
- 如何修改一个类,使它只有一个成员函数,所有参数默认
- 内置类型的模板参数默认值
- 是否可以使用构造函数或对象作为其他类方法的参数默认值?
- 模板参数默认为更高版本