为什么我应该在函数中使用c_str()

时间:2011-06-18 13:26:06

标签: c++ string visual-studio-2010 command-line-arguments

我正在阅读C ++ Primer一书,并在文件输入输出章节中使用:

ifstream infile(ifile.c_str());

打开名称在字符串ifile中的文件。

我尝试了代码,即使没有c_str()也能正常运行。那么使用它有什么意义呢?

当我尝试从命令行参数打开文件时,是否应该使用c_str()我的意思是正确的用法:

ifstream fin( argv[1] )

ifstream fin( argv[1].c_str() )

3 个答案:

答案 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。见thisc_str()成员函数返回指向字符串的const char *指针。

编辑:也许您的编译器支持此构造函数的重载版本或标准已更新。