什么| =表示在c ++中

vic*_*ico -9 c++

我有代码行

int i =0;
result |= EXPECT_EQUAL(list.size(),     3);
Run Code Online (Sandbox Code Playgroud)

什么|=男子?

我试图编译类似的东西:

int result |= 5;
Run Code Online (Sandbox Code Playgroud)

但得到了错误:

aaa.cpp:26:16: error: expected initializer before ‘|=’ token
Run Code Online (Sandbox Code Playgroud)

Ser*_*sta 14

a |= b;只是语法糖a = a | b;.相同的语法几乎适用于C++中的每个运算符.

但这int i |= 5;是一个错误,因为在定义行中你必须有一个初始化,这是一个不使用被声明的变量的表达式.

int i=3;
i |= 5;
Run Code Online (Sandbox Code Playgroud)

是有效的,将给出值7(3 | 5)i.

  • @CoryKramer:那是胡说八道;那里接受的答案陷入了历史和低级实现细节;根据 _language_ 的操作实际上是完全等效的。至少承认两者将编译为相同的代码是正确的。 (2认同)

Chr*_*ckl 5

它是按位OR分配的运算符.

http://en.cppreference.com/w/cpp/language/operator_assignment

int result |= 5;
Run Code Online (Sandbox Code Playgroud)

您无法同时初始化int并为其分配内容.初始化和分配是不同的事情.你必须写:

int result = 0;
result |= 5;
Run Code Online (Sandbox Code Playgroud)

如果这是你想要的,当然.既然int result |= 5;不是C++,我们只能猜测你的意图.