关于函数模板重载运算符的一些问题

程序员菜鸟 2018-01-18 10:37:01
#include <iostream>  

#define WAY 1

template <typename T>
struct Screen {
#if WAY == 1
friend std::istream &operator>>(std::istream &in, Screen<T>& screen) {
in >> screen.height >> screen.length;
if (!in) {
screen = Screen();
}
return in;
}

friend std::ostream &operator<<(std::ostream &out, const Screen<T> &screen) {
out << "height: " << screen.height << " length: " << screen.length;
return out;
}
#endif
Screen() = default;

T height;
T length;
};

在上面代码里,screen=Screen(),这个语句做了什么工作?是使用了Screen的默认构造函数吗?可是默认构造函数不能初始化成员,为什么在输出screen的时候可以输出我输入的的height和length呢
...全文
186 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻夢之葉 2018-01-18
  • 打赏
  • 举报
回复
如果读取失败,那么就赋值给screen一个默认的值
liweiiewil 2018-01-18
  • 打赏
  • 举报
回复
这里有个判断啊:if (!in) ,确定走到里面了吗?如果in是有效的,那在读完width与height后,不会调用screen=Screen()啊

64,667

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧