使用fstream构造函数和打开函数的区别
The difference between using fstream constructor and open function
我有一个关于fstream和.open函数的构造函数的简单问题。下面这两种表达有什么不同吗?
<标题> 1fstream("file.txt",ios::app);
<标题> 2 h1> 于(1),我不需要再次使用。open函数,对吗?这两个表达式在功能上有什么不同吗?我的第二个问题是,如果我让openmode为空,默认的打开模式是什么?
标题>标题>两个代码片段后面的对象的状态没有区别。
为什么有两个版本?
-
该函数的存在是为了创建与流直接关联的
fstream
对象。 -
将open
存在,因为这些类型的对象无法复制。因此,您不能通过写入fstream
对象分配给不同的流:fstream foo('bblskd'); // ... foo = fstream('skdjf');
(注意这个接口是在move语义之前设计的)。
你可以在这里找到默认的打开模式
不,没有区别。
对于(1),我不需要再次使用。open函数,对吗?
正确。
两种表达在功能上是否有差异?
我想不起来。
我的第二个问题是,如果我让openmode为空,默认的打开模式是什么?
是ios_base::in|ios_base::out
。详见http://en.cppreference.com/w/cpp/io/basic_fstream/open
这是一个非常老的问题,但在我看来没有一个答案是正确的。
两个版本是相同的。但是单独打开的原因是当您想要创建自己的继承自basic_fstream的类时。你想在构造函数之前或之后对输入做点什么。
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);
}
};
第二个MoleStream构造函数在open之前和之后执行操作。在c++中,这可能不是一个好的实践,但它可能很有用。
相关文章:
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- 在 const 函数中通过引用和指针返回之间的区别
- 析构函数和'delete'之间的区别
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 在 C 和 C++ 中作为函数参数,int **a 和 int a[][] 之间有什么确切的区别
- 定义类模板构造函数的两种方法之间的区别
- 仅具有运算符()的结构和普通函数之间的实际区别
- 当两者都调用时,删除和析构函数之间的区别?
- 为什么C++不允许两个同名的函数/类模板,区别仅在于非类型模板参数(整型)的类型?
- Release() 和析构函数之间的区别?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 调用 "project" 函数和调用 DLL 函数之间的区别
- cv2有什么区别.StereoSGBM_create() 和 cv2.StereoBM_create() 函数用于 Op
- 将复制构造函数设置为private和=delete有什么区别
- 函数隐藏和重载之间的区别
- 使用 std::move 将参数传递给函数,如果该参数声明为按值传递或使用移动操作数 &&,是否有区别?
- C 函数中的静态和 C++ 中类中的静态之间的区别?
- 打印一个带有静态 int 的函数,有一个 std::cout 和多个 std::cout 有什么区别?
- 将函数作为参数传递的两种方式之间的区别
- c++中接口和实现文件的显式函数区别