4

我一直在使用这个:

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 类写入,因此只要 line 变量有效且未更改,ss 变量就应该保持有效状态,对吧?

4

2 回答 2

3

是安全的const_cast,因为std::stringis not的底层缓冲区const。是的,只要在读取line时没有过期ss,你的程序应该没问题。

于 2013-07-03T15:55:37.843 回答
-1

的效果ss.rdbuf()->pubsetbuf是实现定义的,因此不一定符合您的期望。

因此,您更改的代码的效果不需要与最初的效果相同。

于 2018-03-30T02:18:50.887 回答