代码简化如下:
#include <sstream>
using namespace std;
int mian()
{
stringstream ss;
long long x = 0, y = 0;
ss << "1567248577151"; // 时间戳字符串转数字
ss >> x;
ss.str("");
ss << "1567248626158";
ss >> y;
return 0;
}
重复使用了同一个stringstream的对象ss来做类型转换,按照网上多数文章所说的清除缓冲区的做法,写了ss.str("");
清除了缓冲区,然而……y的值始终为0,为什么?
原因:
ss服务在转换完x的时候,已经读取完缓冲区,因此ss的状态变为ios::eofbit
,导致转换y的代码从ss << "1567248626158";
开始就是失败的
解决方法:
在转换完x之后重设ss的状态为ios::goodbit
,代码如下:
ss.clear(ios::goodbit);