【C++ | 运算符】介绍运算符的分类、求值顺序、优先级、结合律

发布于:2024-05-05 ⋅ 阅读:(29) ⋅ 点赞:(0)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
⏰发布时间⏰:2024-05-02 14:41:08

本文未经允许,不得转发!!!


在这里插入图片描述

在这里插入图片描述

🎄一、概述

C++语言提供了一套丰富的运算符,并定义了这些运算符作用于内置类型的运算对象时所执行的操作。同时,当运算对象是类类型时,C++语言也允许由用户指定上述运算符的含义。

一元运算符:作用于一个运算对象的运算符是一元运算符,如取地址符( & ) 和解引用符 ( * );
二元运算符:作用于两个运算对象的运算符是二元运算符, 如相等运算符(==) 和乘法运算符( * )。
三元运算符:作用于三个运算对象。如:条件运算符(? :

重载运算符:运算符作用于类型的运算对象时,C++允许为已存在的运算符赋予了另外一层含义 。使用重载运算符时,包括运算对象的类型和返回值的类型, 都是由该运算符定义的;但是运算对象的个数、 运算符的优先级和结合律都是无法改变的。

左值和右值:为了方便记忆,左值是可以位于赋值符号(=)的左侧,右值不能。在日常使用中,当一个对象被用作左值,用的是该对象的内存位置(也就是当成一个装东西的容器);被用作右值时,用的是该对象的值(内容)。

运算符分类:

  • 算术运算符(+、-、*、/、%);
  • 逻辑运算符(!、&&、||);
  • 关系运算符(<、<=、>、>=、==、!=);
  • 赋值运算符(=、+=、-=、*=、/=、%=、<<=、>>=、&=、|=、^=);
  • 递增、递减运算符(++、--);
  • 成员访问运算符(.->);
  • 条件运算符(? :);
  • 位运算符(~、<<、>>、&、|、^);
  • sizeof 运算符;
  • 逗号运算符;

求值顺序,C++中,只有4种运算符明确规定了运算对象的求值顺序:

  • 逻辑与(&&):规定先求左侧运算对象的值,只有左侧的值为才继续求右侧运算对象的值;
  • 逻辑或(||):规定先求左侧运算对象的值,只有左侧的值为才继续求右侧运算对象的值;
  • 条件运算符(? :):规定先求?左侧运算对象的值(条件值),条件值为真则继续求:左侧运算对象的值,条件值为真则继续求:右侧运算对象的值;
  • 逗号运算符(,):规定先对左侧的表达式求值,然后将求值结果丢弃掉,再求右侧表达式的值,并将其作为整个表达式的结果。

在这里插入图片描述

🎄二、优先级和结合律

✨2.1 介绍优先级、结合律

🌟优先级:当表达式种存在多个不同的运算符时,优先级高的运算符对象会优先计算,然后再计算优先级低的运算符对象。表达式中的括号无视这一规则,被括号括起来的部分会得到优先计算。
例如:1+2+3*4+(5+6);表达式中,会先算括号的(5+6),再算优先级高的3*4,最后算其他的。

🌟结合律:如果表达式中,运算符优先级一样,则按照各个运算符的结合律计算。左结合律,表示按照从左向右的顺序组合运算对象;右结合律,表示按照从右向左的顺序组合运算对象。

✨2.2 运算符优先级表

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

🎄三、C语言、C++的运算符区别

C++作为C语言的超集,在运算符方面也增加了一些新的内容来满足更多的要求。从前面的优先级表可以看到C++至少增加了下面这些运算符:

  • 作用域运算符(::);
  • 专用的类型转换运算符(const_cast、dynamic_cast、reinterpret_cast、static_cast);
  • 类型标识运算符(typeid);
  • 参数包大小运算符(sizeof...);
  • 动态内存分配、释放运算符(new、new[]、delete、delete[]);
  • 能否抛出异常运算符(noexcept);
  • 抛出异常运算符(throw)。

另外,在C语言中的条件运算符结果只能作为右值,而C++中的条件运算符结果允许作为左值。C++规定,当条件运算符的两个表达式都是左值或者能转换成同一种左值类型时, 运算的结果是左值; 否则运算的结果是右值。


在这里插入图片描述

🎄四、总结

👉本文主要介绍C++中运算符的分类、求值顺序、优先级、结合律,最后介绍C语言和C++在运算符方面的一些区别。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁