getline
関数には、メンバー関数であるcharacter versionと、文字列を受け取るglobal versionがあります。なぜ彼らは両方のメンバー機能ではないのですか?現在の方法では文字列バージョンがないように見えます。getlineの文字列バージョンが非メンバ関数なのはなぜですか?
7
A
答えて
5
istream& istream::getline(char* s, streamsize n)
は、ストリームインターフェイスの一部です。
istream& getline(istream& is, string& str)
は、(ちょうどistream &operator>>(istream&, string&)
等)string
ライブラリから拡張方法です。 fstream::open()
もstd::string
引数ではなく、むしろconst char*
を取らないよう
この設計は、おそらく、文字列からのiostreamを切り離すために選ばれました。
2
iostreamクラスの実装は文字列に依存してはならないためです。
1
ストリームライブラリの問題は、それがうまく設計されていないことです。特に、メンバ関数getline
は全く存在してはいけません。自由な関数getline
は彼が使用するのに適している、それはいくつかの利点があります:それはメンバ関数ではなく、安全であり、生のバッファでは働かず、推測を必要としません。
member関数とfree関数の両方がistreamパブリックインターフェイスの一部であることに言及する必要があります。
関連する問題
- 1. なぜis_lock_freeはメンバ関数ですか?
- 2. `eval`が非文字列で動作するのはなぜですか?
- 3. C++:getline関数を持たない文字列に空白を入れた
- 4. バッチなぜドライブ文字が非大文字になるのですか
- 5. seekgがgetlineで動作しないのはなぜですか?
- 6. 致命的なエラー:文字列のメンバ関数fetch_assoc()を呼び出す
- 7. メンバ関数displayに文字列を返しますか? C#
- 8. なぜ関数へのポインタのサイズがメンバ関数へのポインタのサイズと異なるのですか?
- 9. 演算子のオーバーロード:メンバ関数と非メンバ関数の比較?
- 10. 2つの異なるgetline()関数が存在するのはなぜですか?
- 11. ヘッダーファイルのメンバでない関数を非表示にする
- 12. AppDomainSetup.ShadowCopyFilesが文字列であるのはなぜですか?
- 13. getline文字列内の文字列の取得
- 14. PHP json_encode関数がUTF-8文字列を16進数のエンティティに変換するのはなぜですか?
- 15. なぜ私の文字列関数は[email protected]を返しますか?
- 16. ランダムな文字列関数VB.NETのヘルプ?
- 17. 関数に文字列引数を渡す - それはなぜ機能していないのですか?
- 18. 文字列に整数をキャストできないのはなぜですか?
- 19. 空の文字列+変数:なぜですか?
- 20. 文字列が `this`になると文字列が切り取られるのはなぜですか?
- 21. 次のマップ関数がコンマで文字列を返すのはなぜですか?
- 22. constメンバ関数がメンバ配列を変更できないようにする
- 23. ラックレスポンス本体が文字列ではないのはなぜですか?
- 24. 文字列の比較が真でないのはなぜですか?
- 25. BluetoothDeviceが文字列になることがあるのはなぜですか?
- 26. 文字列にgetlineを使用する
- 27. C++チュートリアルで文字列の配列が文字列に使用されているのはなぜですか?
- 28. メンバ関数の文字列表現を取得する方法は?
- 29. 空の文字列がSeq.emptyと一致しないのはなぜですか?
- 30. python3がこのjson文字列をロードしないのはなぜですか?
最初は直感的ではないかもしれませんが、クラスに機能を追加する最もオブジェクト指向の方法はフリー関数を使用するという考えを支持する作者がいます。この[Guru Of The Week#84](http://www.gotw.ca/gotw/084.htm)を読んでください。問題は、なぜ既存のライブラリメンバ関数の一部がフリー関数ではないのでしょうか? –