![](/img/trans.png)
[英]Initializing “const std::string” from “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.