基本上我正在尋找的是具有以下原型的函數:string getln(istream);
我所需要做的就是像PHP的fgets()
一樣工作,即將輸入流作爲參數並從流中返回下一行。相當於PHP的fgets()的C++?
我覺得我目前的做法是創建,它被稱爲一個臨時變量每次有點笨重:
string getln(istream &input) { string rtn; getline(input, rtn); return rtn; }
有沒有更好的解決方案?
背景:
我不是在尋找這樣的賦值操作的功能(如some_str = getln(ifile);
),但我想用它作爲一個字符串流的數據源。最終我想要一個getline(ifile, tmp); string_str.str(tmp);
的較小版本,看起來更像string_str.str(getln(ifile));
,但沒有我的示例函數每次創建一個臨時變量的開銷。
如果我對此太挑剔,請隨時打電話給我。我只是希望看看是否有辦法改進我的方法。
你對此太挑剔。你的方法很好。即使有一個getline版本返回一個字符串而不是將一個字符串作爲引用參數,它仍然需要在內部創建一個臨時字符串。 – 2010-10-26 21:39:33
誰說它實際上會創建一個臨時的。你有沒有檢查過RVO沒有踢進去,並且不需要暫時的。另外,很多字符串實現在寫入機制上使用拷貝,因此如果拷貝字符串實際上被拷貝出函數,那麼拷貝字符串並不昂貴。 – 2010-10-26 22:22:49