Я использую это:станд :: 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 должна оставаться в допустимом состоянии, если переменная линии действительна и неизменна, правильно ?
'ss.rdbuf() -> pubsetbuf (& line.front(), line.size());' для короткой версии также позволяет избежать уродливого приведения – Xeverous