代碼簡化如下:
#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);