【问题标题】:What is ios::in|ios::out?什么是 ios::in|ios::out?
【发布时间】:2023-03-12 08:30:01
【问题描述】:

我在阅读一些项目代码时发现了这个,这里MembersOfLibrary()class MenberOfLibrary 的构造函数

class MembersOfLibrary {
  public:
    MembersOfLibrary();
    ~MembersOfLibrary() {}
    void addMember();
    void removeMember();
    unsigned int searchMember(unsigned int MembershipNo);
    void searchMember(unsigned char * name);
    void displayMember();

  private:
    Members    libMembers;

};

MembersOfLibrary::MembersOfLibrary() {

    fstream memberData;
    memberData.open("member.txt", ios::in|ios::out);
    if(!memberData) {
    cout<<"\nNot able to create a file. MAJOR OS ERROR!! \n";
    }
    memberData.close();
}

ios::in|ios::out 是什么?

【问题讨论】:

标签: c++ file-handling


【解决方案1】:
  • ios::in 允许来自流的输入(读取操作)。
  • ios::out 允许输出(写入操作)到流。
  • |(按位或运算符)用于组合两个ios 标志,
    意味着将ios::in | ios::out 传递给构造函数
    std::fstream 启用流的输入和输出。

需要注意的重要事项:

  • std::ifstream 自动设置了 ios::in 标志。
  • std::ofstream 自动设置了 ios::out 标志。
  • std::fstream 没有 ios::inios::out 自动
    放。这就是为什么在您的示例代码中明确设置它们的原因。

【讨论】:

  • 为什么我们需要按位或,这里不能使用逻辑或运算符?
  • 逻辑和按位或是两个完全不同的东西。逻辑 OR 仅处理 bool 值。例如,仅当第一个表达式的计算结果为 false 时,它才会计算第二个表达式。
  • 而按位或(处理整数值)逐位遍历两个值,如果在两个输入值中的任何一个中设置了该位,则在结果值中设置该位,从而导致结合效果。
【解决方案2】:

ios::inios::outopenmode flags,在您的情况下与二进制 (|) 操作相结合。这样就可以打开文件进行读写了。

【讨论】:

  • 在 cppreference.com 参考页面上,它告诉我们ios:: 是命名空间inout 在哪里?
【解决方案3】:
 memberData.open("member.txt", ios::in|ios::out);

ios::in 用于从文件中读取数据

要写入文件时使用 ios::out

ios::in|ios::out 表示 ios::in 或 ios::out,取其所用

这是一个有用的链接

http://www.cplusplus.com/doc/tutorial/files/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-03
    • 2015-12-14
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    相关资源
    最近更新 更多