C++ stringstream做兩次類型轉換第二次失敗的解決方法

代碼簡化如下:

#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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章