簡體   English   中英

來自std :: string的std :: istringstream而不復制

[英]std::istringstream from std::string without copying

我一直在用這個:

ifstream in("file.txt")
string line;    
getline(in,line);
istringstream iss(line);
...

對於一些簡單的解析。 我想避免不必要的復制,以提高性能所以我試過:

ifstream in("huge_line.txt");
string line;
getline(in,line);
istringstream ss;
ss.rdbuf()->pubsetbuf(const_cast<char*>(line.c_str()), line.size());
...

它似乎做了這項工作(顯着改善了性能)。 我的問題是,鑒於const_cast,這是否安全? 我的意思是,只要我使用istrinstream,內部緩沖區永遠不會被istringstream類寫入,所以只要行變量有效且不變,ss變量應保持有效狀態,對吧?

const_cast是安全的,因為std::string的底層緩沖區不是const 是的,只要在讀取ss line不會過期,你的程序應該沒問題。

ss.rdbuf()->pubsetbuf是實現定義的,因此不一定符合您的預期。

因此,您更改的代碼的效果不需要等同於初始代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM