C++ 使用fstream构造函数和open函数的区别
我有一个关于fstream的构造函数和.open函数的简单问题。 以下两个表达式之间有什么区别吗 1. 2. 对于(1),我不需要使用。再次打开函数,对吗?这两个表达式在功能上有什么不同吗C++ 使用fstream构造函数和open函数的区别,c++,io,fstream,C++,Io,Fstream,我有一个关于fstream的构造函数和.open函数的简单问题。 以下两个表达式之间有什么区别吗 1. 2. 对于(1),我不需要使用。再次打开函数,对吗?这两个表达式在功能上有什么不同吗 我的第二个问题是,如果我将openmode留空,默认的打开模式是什么?不,没有区别 对于(1),我不需要使用。再次打开函数,对吗 这是正确的 这两个表达式在功能上有什么不同吗 我想不出来 我的第二个问题是,如果我将openmode留空,那么默认的开放模式是什么 它是ios_base::in | ios_bas
我的第二个问题是,如果我将openmode留空,默认的打开模式是什么?不,没有区别 对于(1),我不需要使用。再次打开函数,对吗 这是正确的 这两个表达式在功能上有什么不同吗 我想不出来 我的第二个问题是,如果我将openmode留空,那么默认的开放模式是什么
它是
ios_base::in | ios_base::out
。有关更多详细信息,请参阅。两个代码片段后面的对象的状态没有区别
为什么有两个版本
fstream
对象
。因此,您不能通过写入以下内容将fstream
对象分配给不同的流:
fstream foo('bblskd');
// ...
foo = fstream('skdjf');
您可以找到默认的打开模式。这是一个非常古老的问题,但在我看来,没有一个答案是正确的 两个版本都是相同的。但是,当您想要创建自己的继承自basic_fstream的类时,可以使用单独的open。您希望在之前和/或之后对构造函数的输入进行处理
class MoleStream : public std::basic_fstream<char> {
public:
MoleStream () : std::basic_fstream<char> ("defaultmole") { }
MoleStream ( const char *fn ) {
std::string s = fn; s+=".mole";
std::basic_fstream<char>::open (s);
if ( !is_open() )
std::basic_fstream<char>::open (fn);
}
};
class MoleStream:public std::basic\u fstream{
公众:
MoleStream():std::basic_fstream(“defaultmole”){
分子流(常数字符*fn){
标准::字符串s=fn;s+=“.mole”;
标准::基本流::开放;
如果(!is_open())
标准::基本流::开放(fn);
}
};
第二个MoleStream构造函数在打开之前和之后执行一些操作。这在C++中可能不是一个好的实践,但它可能是有用的。 我只回答你的第一个问题。请每个问题只发布一个问题。此外,你可以回答你的第二个问题,用十秒阅读你最喜欢的C++标准库文件。哦,我在一些网站上搜索我的第二个问题…是ios_base::in | ios_base::out吗?是的,正如我链接到您的文档所说的那样!在您的第一个版本中,您遗漏了标识符,从而创建了一个临时。你的意思是:
fstream-fin(“file.txt”,ios::app)代码>?
fstream foo('bblskd');
// ...
foo = fstream('skdjf');
class MoleStream : public std::basic_fstream<char> {
public:
MoleStream () : std::basic_fstream<char> ("defaultmole") { }
MoleStream ( const char *fn ) {
std::string s = fn; s+=".mole";
std::basic_fstream<char>::open (s);
if ( !is_open() )
std::basic_fstream<char>::open (fn);
}
};