我一直在用这个:
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 变量就应该保持有效状态,对吧?
The const_cast
是安全的,因为底层缓冲区std::string
is not const
。是的,只要line
不会过期,同时ss
正在读取,你的程序应该没问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)