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

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

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


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

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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值