函数中传参时,带有 | 符号的疑问

来源:8-12 二进制文件的操作

qq_慕瓜6269993

2020-04-01

ifstream in(src.c_str() , ios::in | ios::binary);
ofstream out(target.c_str(), ios::out | ios::binary | ios::trunc);

传参时指定读写模式的部分, | 是什么意思?这种函数该如何定义?有什么具体使用场景?

写回答

2回答

Jmoons

2020-04-01

“|”的 意思是位运算符,位或。此处作用为联合使用各种标识符。你看看std::ios部分的代码实现就能知道:

    static constexpr _Openmode in         = static_cast<_Openmode>(0x01);
    static constexpr _Openmode out        = static_cast<_Openmode>(0x02);
    static constexpr _Openmode ate        = static_cast<_Openmode>(0x04);
    static constexpr _Openmode app        = static_cast<_Openmode>(0x08);
    static constexpr _Openmode trunc      = static_cast<_Openmode>(0x10);

每一种模式,实际占用1bit作为标识。一个标识符占用8个bit(“0xff”)也就能表示8种状态的各种组合。比如ios::in为十六进制的“0x01”也就是二进制的“0000 0001” ,ios::app为十六进制的“0x02”也就是二进制的“0000 0010”,ios::in | ios::app则为二进制的0000 0011,等于最后两bit,也就是app和in同时生效。

4
2
qq_慕瓜6269993
明白了,非常感谢
2020-04-01
共2条回复

quickzhao

2020-04-01

这是文件打开的方式,你可以跟踪一下源码,这里按位或,同时保证打开文件的多种状态。按位或的应用很广,你可以看看我们之前讲的位运算操作。 

0
1
qq_慕瓜6269993
明白了,非常感谢。。。我开始理解错了,还以为是c++的某种语法
2020-04-01
共1条回复

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程