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

hyp*_*not 7 c++ string visual-studio-2010 command-line-arguments

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

ifstream infile(ifile.c_str());
Run Code Online (Sandbox Code Playgroud)

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

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

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

ifstream fin( argv[1] )
Run Code Online (Sandbox Code Playgroud)

要么

ifstream fin( argv[1].c_str() )
Run Code Online (Sandbox Code Playgroud)

jon*_*sca 15

ifstream用于只接受a 的构造函数const char *(这是c_str()方法提供的).

我相信有一个新的构造函数,它采用std::string即将推出的标准,(编辑)看到这个答案.

它也可能特定于您的实现.

  • +1即将发布的标准文档的最新副本,即*最终草案*(在批准的标准之前不应在文档中执行语义更改)确实有一个构造函数,它采用`const std :: string&) (2认同)

Ern*_*ill 6

那本书相当陈旧(至少,我的版本相当陈旧,也许你的版本也是你的.)iostream图书馆比STL和string班级年龄大得多; 早期的vrsions iostream没有string构造函数,就是这样.