嘘~ 正在从服务器偷取页面 . . .

C++语法 运算符优先级


C++语法 运算符优先级

建议不确定运算符优先级就都多套几个括号,尤其是位运算符。

优先级 运算符 叙述 示例 重载性 结合性
1 :: 作用域解析(C++专有) Class::age = 2; 由左至右
2 ++ 后缀递增 i++
-- 后缀递减 i--
() 函数调用或函数调用形式的类型转换 int x = f();
[] 数组访问 array[4] = 2;
. 以对象方式访问成员 obj.age = 34;
-> 以指针方式访问成员 ptr->age = 34;
dynamic_cast 运行时检查类型转换(C++专有) Y& y = dynamic_cast<Y&>(x);
static_cast 未经检查的类型转换(C++专有) Y& y = static_cast<Y&>(x);
reinterpret_cast 重定义类型转换(C++专有) int const* p = reinterpret_cast<int const*>(0x1234);
const_cast 更改非常量属性(C++专有) int* q = const_cast<int*>(p);
typeid 获取类型信息(C++专有) std::type_info const& t = typeid(x);
3 ++ 前缀递增 ++i 由右至左
-- 前缀递减 --i
+ 一元正号 int i = +1;
- 一元负号 int i = -1;
!
not
逻辑非
!的备用拼写
if (!done) …
~
compl
按位取反
~的备用拼写
flag1 = ~flag2;
('type') 强制类型转换 int i = (int)floatNum;
* 取指针指向的值 int data = *intPtr;
& 取变量的地址 int *intPtr = &data;
sizeof 某某的大小 size_t s = sizeof(int);
new 动态内存分配(C++特有) long* pVar = new long;
new[] 动态数组内存分配(C++特有) long* array = new long[20];
delete 动态内存释放(C++特有) delete pVar;
delete[] 动态数组内存释放(C++特有) delete[] array;
4 .* 成员对象选择(C++专有) obj.*var = 24; 由左至右
->* 成员指针选择(C++专有) ptr->*var = 24;
5 * 乘法 int i = 2 * 4;
/ 除法 float f = 10.0 / 3.0;
% 模数(取余数 int rem = 4 % 3;
6 + 加法 int i = 2 + 3;
- 减法 int i = 5 - 1;
7 << 位元左移 int flags = 33 << 1;
>> 位元右移 int flags = 33 >> 1;
8 <=> 三路比较(C++20 auto flags = 33 <=> 1;
9 < 小于关系 if (i < 42) …
<= 小于等于关系 if (i <= 42) ...
> 大于关系 if (i > 42) …
>= 大于等于关系 if (i >= 42) ...
10 == 等于关系 if (i == 42) ...
!=
not_eq
不等于关系
!=的备用拼写
if (i != 42) …
11 &
bitand
位元 AND
&的备用拼写
flag1 = flag2 & 42;
12 ^
xor
位元 XOR(独占or)
^的备用拼写
flag1 = flag2 ^ 42;
13 |
bitor
位元 OR(包含or)
|的备用拼写
flag1 = flag2 | 42;
14 &&
and
逻辑 AND
&&的备用拼写
if (conditionA && conditionB) …
15 ||
or
逻辑 OR
||的备用拼写
if (conditionA || conditionB) ...
16 c?t:f 三元条件运算 int i = a > b ? a : b; 由右至左
17 = 直接赋值 int a = b;
+= 以和赋值 a += 3;
-= 以差赋值 b -= 4;
*= 以积赋值 a *= 5;
/= 以商赋值 a /= 2;
%= 以取余数赋值 a %= 3;
<<= 以位元左移赋值 flags <<= 2;
>>= 以位元右移赋值 flags >>= 2;
&=
and_eq
以位元AND赋值
&=的备用拼写
flags &= new_flags;
^=
xor_eq
以位元XOR赋值
^=的备用拼写
flags ^= new_flags;
|=
or_eq
以位元OR赋值
|=的备用拼写
flags |= new_flags;
18 throw 抛出异常 throw EClass("Message"); 由右至左
19 , 逗号运算符 for (i = 0, j = 0; i < 10; i++, j++) … 由左至右

参考文献

[1] C和C++运算符 - 维基百科,自由的百科全书


文章作者: q779
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 q779 !
评论