Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用fstream构造函数和open函数的区别_C++_Io_Fstream - Fatal编程技术网

C++ 使用fstream构造函数和open函数的区别

C++ 使用fstream构造函数和open函数的区别,c++,io,fstream,C++,Io,Fstream,我有一个关于fstream的构造函数和.open函数的简单问题。 以下两个表达式之间有什么区别吗 1. 2. 对于(1),我不需要使用。再次打开函数,对吗?这两个表达式在功能上有什么不同吗 我的第二个问题是,如果我将openmode留空,默认的打开模式是什么?不,没有区别 对于(1),我不需要使用。再次打开函数,对吗 这是正确的 这两个表达式在功能上有什么不同吗 我想不出来 我的第二个问题是,如果我将openmode留空,那么默认的开放模式是什么 它是ios_base::in | ios_bas

我有一个关于fstream的构造函数和.open函数的简单问题。 以下两个表达式之间有什么区别吗

1. 2. 对于(1),我不需要使用。再次打开函数,对吗?这两个表达式在功能上有什么不同吗


我的第二个问题是,如果我将openmode留空,默认的打开模式是什么?

不,没有区别

对于(1),我不需要使用。再次打开函数,对吗

这是正确的

这两个表达式在功能上有什么不同吗

我想不出来

我的第二个问题是,如果我将openmode留空,那么默认的开放模式是什么


它是
ios_base::in | ios_base::out
。有关更多详细信息,请参阅。

两个代码片段后面的对象的状态没有区别

为什么有两个版本

  • ctor的存在是为了创建与流直接关联的
    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);
        }
    };