これはデザイン上の質問ではありません。 (まあ、大丈夫、それは設計問題のようなものです)。私が疑問に思うのは、C++ std::fstream
クラスがコンストラクタまたはオープンメソッドでstd::string
を受け取っていない理由です。誰もがコード例を愛しています。なぜstd :: fstreamクラスはstd :: stringをとらないのですか?
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::string filename = "testfile";
std::ifstream fin;
fin.open(filename.c_str()); // Works just fine.
fin.close();
//fin.open(filename); // Error: no such method.
//fin.close();
}
これは、私がファイルを扱う際に常に覚えています。確かにC++ライブラリは可能な限りstd::string
を使用するでしょうか?
サンプルでは、過負荷解決ルールであいまいさがあってはいけません。 'f(char *、std :: string)'は[完全一致](http://www.lcdf.org/c++/clause13.html#s13.3.3.1.1)ですが、他は変換が必要なため、まず最初に実行可能な機能があります。最初の 'f'を削除した場合、"(char *、std :: string&) - >(char *、std :: string) - >(char *、char *) "は[より良い変換シーケンス"(char *、std :: string) - >(std:string) - >(char *、std :: string) - >(char *、std :: string)よりも(http://www.lcdf.org/c++/clause13.html#s13.3.3) :string、char *) "、第2の' f'が実行可能な関数として最適です。何か不足していますか? – outis
私は遅れていましたが、修正されました。 – wilhelmtell
このマイクロ最適化は、(1)文字列が言語のあらゆる構成要素、特に文字列と緊密に結合されていること(これは 'GMP'が短絡に依存しないようにすることに似ています) 2) 'char *'は邪悪なものです。ユーザーが使用することを奨励すべきではありません。また、コンパイル時にはミリ秒で十分です。最後に(3) ' '私はデカップリングの依存関係は、この場合の正当な理由ではないと主張しています。 –