所以我正在运行这段示例代码:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main() {
ifstream inFile;
string str;
cout << "\nEnter file name : ";
cin >> str;
try {
inFile.open(str);
if(!inFile)
throw exception();
} catch(exception e) {
cout <<"\nAn exception was caught. file does not exist. ";
return 1;
}
return 0;
}
它给了我一个编译器错误:
test.cpp:14:13: error: no viable conversion from 'string' (aka 'basic_string<char>') to 'const char *'
inFile.open(str);
^~~
/usr/include/c++/4.2.1/fstream:517:24: note: passing argument to parameter '__s' here
open(const char* __s, ios_base::openmode __mode = ios_base::in)
我查了函数原型:
void open (const char* filename,
ios_base::openmode mode = ios_base::in | ios_base::out);
void open (const string& filename,
ios_base::openmode mode = ios_base::in | ios_base::out);
为什么 fstream::open() 期望 const String/ const char* ?文件名可以从任何地方(从用户,如上面的示例中)获得,在这种情况下,将str
其制成 aconst string
并没有帮助。我能够通过使用来让它工作str.c_str()
,但是有人可以帮助我理解为什么const -ness 在文件打开方法中被强制执行吗?为什么不应该允许我按原样使用字符串,而不必使用 char* 或将其转换为 c 样式的字符串?