Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
|=运算符在C+中是什么意思+;? C++中的“=”操作符意味着什么?< P>假设你使用整数上的内置运算符,或者为用户定义的类的SyLy重载操作符,这些都是相同的: a = a | b; a |= b;_C++_Operators - Fatal编程技术网

|=运算符在C+中是什么意思+;? C++中的“=”操作符意味着什么?< P>假设你使用整数上的内置运算符,或者为用户定义的类的SyLy重载操作符,这些都是相同的: a = a | b; a |= b;

|=运算符在C+中是什么意思+;? C++中的“=”操作符意味着什么?< P>假设你使用整数上的内置运算符,或者为用户定义的类的SyLy重载操作符,这些都是相同的: a = a | b; a |= b;,c++,operators,C++,Operators,“|=”符号是按位或赋值运算符。它计算RHS('b')与LHS('a')之间的OR值,并将结果分配给'a',但在执行此操作时,它只计算'a'一次 “|=”运算符的最大优点是当“a”本身是一个复杂表达式时: something[i].array[j]->bitfield |= 23; a XX= b vs: 这种差异是故意的还是偶然的 回答:深思熟虑-为了显示速记表达式的优势…第一个复杂表达式实际上相当于: something[i].array[j]->bitfield = so

|=
”符号是按位或赋值运算符。它计算RHS('b')与LHS('a')之间的OR值,并将结果分配给'a',但在执行此操作时,它只计算'a'一次

“|=”运算符的最大优点是当“a”本身是一个复杂表达式时:

something[i].array[j]->bitfield |= 23;
a XX= b
vs:

这种差异是故意的还是偶然的

回答:深思熟虑-为了显示速记表达式的优势…第一个复杂表达式实际上相当于:

something[i].array[j]->bitfield = something[i].array[j]->bitfield | 23;
a = (a) XX (b);

类似的注释适用于所有复合赋值运算符:

+= -= *= /= %=
&= |= ^=
<<= >>=
相当于:

something[i].array[j]->bitfield = something[i].array[j]->bitfield | 23;
a = (a) XX (b);
除了
a
只计算一次。注意这里的括号-它显示了分组是如何工作的

x |= y

x = x | y
x = x [BITWISE OR] y

x = x | y
x = x [BITWISE OR] y
它是位OR

正如您可以将
x+=y
写为
x=x+y

您可以将
x |=y
写为
x=x | y
,将
x
y
的所有位相加,然后将结果放入
x

请注意,它可能是,但对于基本类型,您应该可以:-)

您可以尝试使用来搜索类似这样的网站,以查找这样的符号。以下是符号猎犬上的|=的示例。
-Tom(联合创始人SH)

尽管一个特别邪恶的类可以实现
|=
去做它想做的任何事情。通常,它将以“直观的方式”来实现<代码> < <代码> > <代码> >=代码>:@ ZZZBOV:是的,C++中总是有警告。但是如果a和b是整数,那么我认为你是安全的。如果您使用的类重载不可靠,并且不能按预期工作,那么是时候修复错误或使用不同的类了。“除了只对a求值一次”+1另一个可能的优势:
something[i++].array[--j]->bitfield |=23定义良好;如果是手写的,就不能进行递增或递减。OTOH,我不确定这样一个复杂的表达式是否是一个好主意——但更简单的表达式,如
array[I++]|=0x3C是完全合理的。@ JoaNayLeffFL:使用代码< >和代码>作为IO运算符,与流类似,但不同于C++中的任何运算符。即使它不总是按位的,或者操作符也被称为按位的。@Steve--And+并不总是添加。非常好的主意,感谢您对以下内容的充分披露:您与SH的关系