函数中传参时,带有 | 符号的疑问
来源: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回答
-
“|”的 意思是位运算符,位或。此处作用为联合使用各种标识符。你看看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同时生效。
422020-04-01 -
quickzhao
2020-04-01
这是文件打开的方式,你可以跟踪一下源码,这里按位或,同时保证打开文件的多种状态。按位或的应用很广,你可以看看我们之前讲的位运算操作。
012020-04-01
相似问题