为什么STL ifstream和ofstream类不将std :: string作为文件名?

vy3*_*y32 9 c++ iostream stl

这是对STL的抱怨.为什么他们将文件名参数作为(char*)而不是作为std :: string?这似乎毫无意义.

关于这个主题还有另外两个问题:

问题是我有很多代码如下:

    std::ofstream f(fname.c_str());
Run Code Online (Sandbox Code Playgroud)

当我希望它看起来像这样:

std::ofstream f(fname);
Run Code Online (Sandbox Code Playgroud)

上述帖子中提到的其他问题是UTF-16与UTF-8的问题.(UTF-16可能包含会破坏POSIX API的NULL).但这不是一个真正的问题,因为实现可以在调用open()之前将UTF-16转换为UTF-8.

但严重的是,这没有任何意义.有没有计划升级STL?

sbi*_*sbi 10

为什么ifstream和ofstream类不将std :: string作为文件名?

我已经看到了一些合理的论据(即这将创建流对字符串的依赖),但坦率地说,我认为实际的原因是流比标准库及其字符串更老.

有没有计划升级STL?

它被称为C++ 11,将成为该标准的新版本.我不知道文件流是否改变了.你可以查看最终草案并自己找出答案.

请注意,STL是包含在标准库中的容器,算法和迭代器库的名称.标准库的一部分也是字符串,流和其他.
特别是,流不是STL的一部分.他们是兄弟姐妹.

  • 快速浏览草案表明`string`将被允许作为文件名,但`wstring`将不会. (6认同)