为何fstream:open函数不支持string作为文件名

都是STL的一部分,为什么fstream::open的参数只能是const char*呢? 要用string的话还得c_str()一下。
这是STL设计上的问题吗,还是出于别的什么原因的考虑?

1、string是类,char是基础类型。类当中包含成员变量以及方法。有点结构化类型的意思。char []是数组类型。都不是一个思想的产物


2、为了不引入不必要的依赖。

stream::open的文件名如果使用string,那么在实现时必须#include把整个string类的定义包含进来。并且,如果使用string作为参数类型,那么你open("a.txt"); 时,还必须构造一个string,构造时会分配内存并拷贝整个字符串,复杂度O(n),当然这里n一般不大;如果用char const*作为参数类型,string::c_str()的实现一般非常简单(末尾添个‘\0',返回begin()),复杂度O(1)。使用string得不偿失。


3、C++11就支持string这个参数

你可能感兴趣的:(为何fstream:open函数不支持string作为文件名)