C++关键字的用途:&=(又称"and_eq")
Purpose of the C++ keyword: &= (a.k.a. 'and_eq')
cppreference和cplusplus,以及Microsoft网站都没有提供C++关键字&=(又名and_eq(的详细定义,尽管对于新手来说似乎有点神秘的例子。
然而,Lischner
C++ In a Nutshell: A Desktop Quick Reference
的书提供了以下内容(第291页,2003年(:
and_eq运算符是执行按位 and 的赋值运算符。
引用Microsoft的例子:
#include <iostream>
#include <iso646.h>
int main( )
{
using namespace std;
int a = 3, b = 2, result;
result= a &= b;
cout << result << endl;
}
产量2
.
因此,您能否告诉我 &= 是否是级联赋值的快捷方式(如果存在这样的事情result = a = b;
?
No. a &= b
是a = a & b
的快捷方式。
此外,a = b
返回分配给 a
的值。所以result = a &= b
是:
a = a & b;
result = a;
&=
,所有其他内置运算符op=
在 [expr.ass]\7 中描述为
表单
E1 op= E2
的表达式的行为等效于E1 = E1 op E2
,只是只计算一次E1
。在+=
和-=
中,E1
要么具有算术类型,要么是指向可能符合 cv 的完全定义的对象类型的指针。在所有其他情况下,E1
应具有算术类型。
所以,result= a &= b;
与
result = (a = (a & b));
或文本:
将按位和 A 和 B 之间的结果存储为 A 和 结果。
它不是一个关键字,而是一个表达式运算符。在这里找到: https://en.cppreference.com/w/cpp/language/expressions
它是与赋值运算符组合的按位 AND 运算符。在基元类型上,它对两个参数执行按位 AND,然后将结果分配给第一个参数。
uint32_t a = 0b00110101;
uint32_t b = 0b01101011;
a &= b;
//Equivalent: a = a & b;
assert(a == 0b00100001);
foo &= bar
是foo = foo & bar
的缩写,用于内置类型。但是,它是一个可以通过用户定义类型重新实现的运算符,因此可以为此更改其语义。
a = a & b;
和 a &= b;
之间有一个相关的区别。 前者创建一个临时等于a & b
并将该临时值分配给a
。 后者更新a
到位。
对于内置类型,这并不重要:任何编译器都会将任一表达式优化为相同的机器语言指令。 但是,如果定义一个类并重载运算符,则编写a = a & b;
最终可能会创建一个临时对象,向其复制一堆数据,然后将其所有数据复制到其他地方。 虽然有一些方法可以缓解这个问题,但a &= b;
理论上更有效。
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- BoostPython and CMake
- OpenSSL BIO and SSL_read
- Gurobi GRBModel and GRBmodel in C++
- 如何格式化我的文本文件以使其不会一遍又一遍地重复同一行?
- 如何解决隐式转换丢失整数精度:'size_t'(又名"无符号长")到'int'警告?
- std::visit and std::variant usage
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- Directx12 and keystrokes
- C++关键字的用途:&=(又称"and_eq")
- 如何在C 11中使用variadic模板来生成左相关表达式(又称左折)
- 网络对分布式构建又称Distcc的影响
- OpenGL非排他性全屏模式(又称全屏无边界窗口)
- 在C++中多次标记具有相同类型的并集(又称变体)
- 从“const BYTE*{又称const unsigned char*}”到“BYTE_PTR{又称unsigned