根据我的理解,按位包含OR运算符比较第一个和第二个操作数中的每一位,如果任何一个位为1,则返回1.Bjarne Stroustrup使用它(ist是一个istream对象):
ist.exceptions(ist.exceptions()|ios_base::bad_bit);
我还没有在编程中真正使用过很多东西,是否应该在我的待办事项列表中学习?我明白如果我有一个int并且值为9,那么二进制文件将是00001001,但这就是它。我不明白为什么他会在他使用它的上下文中使用这个运算符。
答案 0 :(得分:0)
您可以将其视为向一组现有选项添加选项的方法。如果您熟悉linux,可以打个比方:
PATH = "$PATH:/somenewpath"
这说'我想要现有路径和这条新路径/某条新路径'
在这种情况下,他说'我想要例外的现有选项,我也想要bad_bit选项'
答案 1 :(得分:0)
std::ios::exceptions
是一个函数,它在文件中获取/设置一个异常掩码,文件对象使用它来决定它应该抛出异常的情况。
此功能有两种实现方式:
iostate exceptions() const; // get current bit mask
void exceptions (iostate except); // set new bit mask
您发布的语句使用ios_base::badbit
标志结合当前在文件对象中设置的当前标志,将新的异常掩码设置到文件对象。
OR 按位运算符通常用于创建使用现有位域和新标志创建位域。它也可以用于将两个标志组合成一个新的位域。
以下是一个解释示例:
// Enums are usually used in order to represent
// the bitfields flags, but you can just use the
// constant integer values.
// std::ios::bad_bit is, actually, just a constant integer.
enum Flags {
A,
B,
C
};
// This function is similar to std::ios::exceptions
// in the sense that it returns a bitfield (integer,
// in which bits are manipulated directly).
Something foo() {
// Return a bitfield in which A and B flags
// are "on".
return A | B;
}
int main() {
// The actual bitfield, which is represented as a 32-bit integer
int bf = 0;
// This is what you've seen (well, somethng similar).
// So, we're assigning a new bitfield to the variable bf.
// The new bitfield consists of the flags which are enabled
// in the bitfield which foo() returns and the C flag.
bf = foo() | C;
return 0;
}