我正在阅读C ++ Primer一书,并在文件输入输出章节中使用:
ifstream infile(ifile.c_str());
打开名称在字符串ifile
中的文件。
我尝试了代码,即使没有c_str()
也能正常运行。那么使用它有什么意义呢?
当我尝试从命令行参数打开文件时,是否应该使用c_str()
?我的意思是正确的用法:
ifstream fin( argv[1] )
或
ifstream fin( argv[1].c_str() )
答案 0 :(得分:15)
ifstream
的构造函数过去只使用const char *
(这是c_str()
方法提供的内容。
我相信有一个新的构造函数,在即将推出的标准中需要std::string
,(编辑)请参阅this answer。
它也可能特定于您的实施。
答案 1 :(得分:6)
那本书相当陈旧(至少,我的版本相当陈旧,也许你的版本也是你的。)iostream
库比STL和string
类早得多;早期的iostream
版本没有string
构造函数,就是这样。
答案 2 :(得分:2)
ifstream
构造函数将filename作为const char *
而不是C ++ string
。见this。 c_str()
成员函数返回指向字符串的const char *
指针。
编辑:也许您的编译器支持此构造函数的重载版本或标准已更新。