【发布时间】:2011-06-06 03:10:41
【问题描述】:
我们这些已经看到 STL 之美的人尝试尽可能多地使用它,并鼓励其他人在我们看到它们的任何地方使用它,使用 原始指针 和 数组时间>。 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;
【问题讨论】:
-
流与 STL 的唯一共同点是两者都是标准库的一部分。 标准库!= STL。
标签: c++ stl class-design std standard-library