这是关于STL的投诉。为什么他们将文件名参数作为(char *)而不是作为std :: string?这似乎毫无意义。
关于这个主题还有另外两个问题:
问题是我有很多代码如下:
std::ofstream f(fname.c_str());
当我希望它看起来像这样:
std::ofstream f(fname);
上述帖子中提到的其他问题是UTF-16与UTF-8的问题。 (UTF-16可能包含会破坏POSIX API的NULL)。但这不是一个真正的问题,因为实现可以在调用open()之前将UTF-16转换为UTF-8。
但严重的是,这没有任何意义。有没有计划升级STL?
答案 0 :(得分:10)
为什么ifstream和ofstream类不将std :: string作为文件名?
我已经看到了一些合理的论据(即这将创建流对字符串的依赖),但坦率地说,我认为实际的原因是流比标准库及其字符串更老。
有没有计划升级STL?
它被称为C ++ 11,将成为该标准的新版本。我不知道文件流是否改变了。您可以查看final draft并自行查找。
请注意, STL 是包含在标准库中的容器,算法和迭代器库的名称。标准库的一部分也是字符串,流和其他 特别是,流不是STL的一部分。他们是兄弟姐妹。
答案 1 :(得分:3)
历史原因。 iostream库是与字符串东西分开开发的。但是为什么没有将这个集成到C ++标准中是任何人的猜测。我似乎有几个关于Usenet的问题(包括依赖理论),但从来没有一个真正令人满意的解释。
答案 2 :(得分:2)
我记得,实际上 (至少是那种)字符串与wstring的情况。我现在找不到这个帖子,但我有理由肯定我记得安德鲁科尼格的一篇Usenet帖子说它是由一个国家委员会的成员提出的(日本是我似乎记得的,但可以容易出错)提出了如何处理各种语言的文件名的问题(特别是因为当时相对较少的操作系统提供了很多支持)。即使它开始非常简单,但很快就会发现,避免它变成巨大混乱的唯一方法就是停止对这个想法的所有讨论。