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::stringconstliness

于 2013-07-03T15:55:37.843 に答える