gpt4 book ai didi

c++ - std::ifstream 类的设计

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:00 25 4
gpt4 key购买 nike

我们这些看到了 STL 之美的人会尽可能多地使用它,并鼓励其他人在我们看到他们使用原始指针数组的任何地方使用它em>。 Scott Meyers 写了一本关于 STL 的书,书名为 Effective STL .然而 ifstream 的开发人员发生了什么,他们更喜欢 char* 而不是 std::string。我想知道为什么ifstream::open()的第一个参数是const char*类型,而不是const std::string &。请看一下它的签名:

void open(const char * filename, ios_base::openmode mode = ios_base::in );

这是为什么?为什么不是这个:

void open(const string & filename, ios_base::openmode mode = ios_base::in );

这是设计上的严重错误吗?还是这个设计是故意的?可能是什么原因?我看不出他们为什么更喜欢 char* 而不是 std::string 的任何原因。请注意,我们仍然可以将 char* 传递给采用 std::string 的后一个函数。这不是问题!

顺便说一下,我知道 ifstream 是一个 typedef,所以不要对我的标题发表评论。:P。它看起来很短,这就是我使用它的原因。

实际的类模板是:

template<class _Elem,class _Traits> class basic_ifstream;

最佳答案

因为 IOStream 是在部分 STL 集成到标准库之前设计的。字符串类是在那之后制作的。在标准化过程中已经很晚了,修改 IOStream 不被认为是保存。

顺便说一句,作为 C++0X 中微小但方便的更改的一部分,对这类事情进行了清理。

关于c++ - std::ifstream 类的设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4640281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com