代码之家  ›  专栏  ›  技术社区  ›  WilliamKF

为什么std::ifstream构造函数不接受std::字符串?[副本]

  •  1
  • WilliamKF  · 技术社区  · 12 年前

    可能重复:
    Design of std::ifstream class
    Why does (i|o)fstream take a const char* parameter for a file name?

    查看std::ifstream的构造函数,我发现两个:

    ifstream ( );
    explicit ifstream ( const char * filename, ios_base::openmode mode = ios_base::in );
    

    为什么第二个需要 const char * 而不是 const std::string & ?

    这是某种避免循环还是前瞻性参考?

    2 回复  |  直到 7 年前
        1
  •  8
  •   Kerrek SB    12 年前

    这只是一个简单的疏漏。没有人及时想到这件事。这已在C++11中进行了更正,其中 std::string 也被接受。从27.9.1.7/3开始:

    explicit basic_ifstream(const string& s, ios_base::openmode mode = ios_base::in);

    效果: 与…一样 basic_ifstream(s.c_str(), mode)

        2
  •  0
  •   Puppy    12 年前

    你的编译器已经过时了。升级它,您应该会发现 std::string 构造函数。