为什么std :: ifstream构造函数不带std :: string?

时间:2012-09-25 00:04:59

标签: c++ string constructor std ifstream

  

可能重复:
  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 个答案:

答案 0 :(得分:6)

这是一个简单的遗漏。没有人及时想到它。这已在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)相同。

答案 1 :(得分:-1)

您的编译器已过期。升级它,你应该找到一个std::string构造函数。