来自std :: string的std :: istringstream而不复制

时间:2013-06-01 17:31:31

标签: c++ istringstream

我一直在用这个:

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变量应保持有效状态,对吧?

2 个答案:

答案 0 :(得分:3)

const_cast是安全的,因为std::string的基础缓冲区不是const。是的,只要liness被读取时没有过期,您的程序应该没问题。

答案 1 :(得分:0)

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

因此,您修改后的代码的效果不一定与初始代码相同。