• C++ 学习笔记 运算符优先级


    原则:

    单目运算符》双目算符》三目运算符;

    算数运算符》关系运算符》逻辑运算

    移位运算符》关系运算符》位逻辑运算符

    括号最高,逗号最低,赋值和复合赋值仅高于逗号运算符

    右结合性:先计算右边再计算左边:三目和赋值运算符

    左侧结合性:先计算左边再计算右边:其余运算符

    一,赋值运算符

     用于修改对象的值。

    运算符名语法可重载
    加法赋值 a += b
    简单赋值 a =  b
    减法赋值 a -= b
    乘法赋值 a *= b
    除法赋值 a /= b
    取模赋值 a %= b
    逐位与赋值 a &= b
    逐位或赋值 a |= b
    逐位异或赋值 a ^= b
    逐位左移赋值 a <<= b
    逐位右移赋值 a >>= b

     

     二.自增/自减运算符

    自增/自减运算符增加或减小对象的值

    运算符名语法可重载
    前自减 --a
    后自增 a++
    前自增 ++a
    后自减 a--

    三.算术运算符

    返回特定算术运算的结果

    运算符名语法可重载
    一元减 -a
    一元加 +a
    加法 a + b
    减法 a - b
    乘法 a * b
    除法 a / b
    a % b
    逐位非 ~a
    逐位与 a & b
    逐位或 a | b
    逐位异或 a ^ b
    逐位左移 a << b
    逐位右移 a >> b

    四.逻辑运算符

    返回布尔运算的结构(关键词形式(and、or、not)和符号形式(&&、||、!)的使用可以互相代替

    运算符名语法可重载
    a and b

    a && b

    not a

    !a

     是
    同或 a or b

    a || b

    五.比较运算符

    比较参数

    运算符名语法可重载
    不等于 a != b
    等于 a == b
    小于 a < b
    大于 a > b
    小于或等于 a <= b
    大于或等于 a >= b
    三路比较(C++20) a <=> b

    六.成员访问运算符

    运算符名语法可重载
    间接寻址(由 a 所指向的变量) *a
    数组下标 a[b]
    取地址 &a
    对象的成员 a.b
    指针的成员 a->b
    对象的成员指针 a.*b
    指针的成员指针 a->*b

    七.其他运算符

    运算符名语法可重载
    逗号 a, b
    函数调用 a(a1, a2)
    条件 a ? b : c

    八.运算符优先级

    优先级

    运算符

    描述

    结合性

    1

    ::

    作用域解析

    从左到右

    2

    a++   a--

    后缀自增与自减

    type()   type{}

    函数风格转型

    a()

    函数调用

    a[]

    下标

    .   ->

    成员访问

    3

    ++a   --a

    前缀自增与自减

    从右到左

    +a   -a

    一元加与减

    !   ~

    逻辑非逐位非

    (type)

    c风格转型

    *a

    间接(解引用)

    &a

    取止

    sizeof

    取大小

    co_await

    await 表达式 (C++20)

    new   new[]

    动态内存分配

    delete   delete[]

    动态内存分配

    4

    .*   ->*

    成员指针

    从左到右

    5

    a*b   a/b   a%b

    乘法,除法,取余

    6

    a+b   a-b

    加法,减法

    7

    <<   >>

    逐位左移与右移

    8

    <=>

    三路比较运算(C++20 起)

    9

    <   <=

    分别为 < 与 ≤ 的关系运算符

    >   >=

    分别为 > 与 ≥ 的关系运算符

    10

    ==   !=

    分别为 = 与 ≠ 的关系运算符

    11

    a&b

    逐位与

    12

    ^

    逐位异域(互斥或)

    13

    |

    逐位或(可兼或)

    14

    &&

    逻辑与

    15

    ||

    逻辑或

    16

    a?b:c

    三元条件

    从右到左

    throw

    throw运算

    co_yield

    yield 表达式 (C++20)

    =

    直接赋值(C++ 类默认提供)

    +=   -=

    以和及差复合赋值

    *=   /=   %=

    以积、商及余数复合赋值

    <<=   >>=

    以逐位左移及右移复合赋值

    &=   ^=   |=

    以逐位与、异或及或复合赋值

    17

    ,

    逗号

    从左到右

    特殊运算符

    static_cast 转换一个类型为另一相关类型

    dynamic_cast 在继承层级中转换

    const_cast 添加或移除 cv 限定符

    reinterpret_cast 转换类型到无关类型

    C 风格转型 以 static_cast 、 const_cast 及 reinterpret_cast 的混合转换一个类型到另一类型

    new 创建有动态存储期的对象

    delete 销毁先前由 new 表达式创建的对象,并释放其所拥有的内存区域

    sizeof 查询类型的大小

    sizeof... 查询形参包的大小(C++11 起)

    typeid 查询类型的类型信息

    noexcept 查询表达式是否能抛出异常(C++11 起)

    alignof 查询类型的对齐要求(C++11 起)

  • 相关阅读:
    日志_测试代码_Qt532
    SetParent
    【转】QT获取系统时间,以及设置日期格式
    JNI打通java和c
    Python 对图片进行人脸识别
    Python写黑客小工具,360免杀
    简单选择排序
    插入排序
    双向链表的实现
    记录安卓开发中的问题
  • 原文地址:https://www.cnblogs.com/qq964107326/p/15024332.html
Copyright © 2020-2023  润新知