C++ Primer 5 CH4 表达式

4.1 基础

  • 函数调用也是一种特殊的运算符,它对运算对象的数量没有限制。
  • C++ 的表达式要么是左值,要么是右值。左值可以位于赋值语句的左边,右值则不可以。
  • 当一个对象被用作右值的时候,用的是对象的值;当对象被用作左值的时候,用的是对象的身份。
    【mark】
  • 优先级规定了运算对象的组合方式,但是没有说明运算对象的求值顺序,一般不会明确指定求值顺序。
  • 对于没有指定执行顺序的运算符,如果表达式指向并修改了同一个对象,将会引发错误并产生未定义的行为。
cout << i << ++i << endl; // 未定义的

4.2 算术运算符

  • 算术运算符的运算对象和求值结果都是右值。
  • 在表达式求值之前,小整数类型的运算对象被提升成较大的整数类型,所有运算对象最终会转换成同一类型。
  • 一元正(负)号运算符作用于一个指针或者算数值时,返回运算对象(取负)的提升后的副本。
bool b = true;
bool b2 = -b; // b2 is true
  • m = (m / n) * n + m % n,则 m % n 符号与 m 相同。

4.3 逻辑和关系运算符

  • 逻辑和关系运算符的运算对象以及求值结果都是右值。
  • 相等性测试与布尔字面值
if (val) {} // 如果 val 是任意的非 0 值
if (!val) {} // 如果 val 是 0
if (val == true) // 如果 val 等于 1

4.4 赋值运算符

  • 赋值运算符的左侧对象必须是一个可修改的左值。
int i = 0, j = 0, k = 0; // 初始化而非赋值
const int ci = i; // 初始化而非赋值
1024 = k; // 错误 字面值是右值
i + j = k; // 错误 算术表达式是右值
ci = k; // 错误 ci 是常量左值
  • 赋值运算的结果是它的左侧对象,并且是一个左值,结果的类型是左侧运算对象的类型。
  • 赋值运算符满足右结合律。

4.5 递增和递减运算符

  • 递增和递减运算符有两种形式:前置版本 ++i 和后置版本 i++。这两种运算符必须作用于左值运算对象,前置版本将对象本身作为左值返回,后置版本将对象原始值的副本作为右值返回。
  • 除非必须,否则不用递增和递减运算符的后置版本。

4.6 成员访问运算符

  • ptr->mem == (*ptr).mem

4.7 条件运算符

4.8 位运算符

  • 位运算符的运算对象如果是“小整型”,则会被自动提升为整数类型。
  • 位运算符如何处理带符号数的符号位是未定义的,因此建议仅将位运算符用于处理无符号数。
  • 移位运算符(IO运算符)满足左结合律。

sizeof 运算符

  • sizeof 运算符返回一条表达式或者一个类型名字所占的字节数,返回 size_t 类型的常量表达式。
sizeof (type)
sizeof expr
  • sizeof 运算符满足右结合律。
  • sizeof 的运算对象中解引用一个无效指针是安全的,因为指针没有被真正使用。
  • 对数组执行 sizeof 运算得到整个数组的大小,对 sting 或 vector 执行 sizeof 运算只返回该类型固定部分的大小。

4.10 逗号运算符

  • 逗号运算符先对左侧的表达式求值,然后将结果丢弃掉,再对右侧的表达式求值,返回右侧的结果。

4.11 类型转换

  • 算术转换:运算符的运算对象将转换成最宽的类型。
  • 整型提升:转换后的类型要容纳原类型所有可能的值。
  • 如果一个运算对象是无符号类型,另一个是带符号类型:
    无符号类型不小于带符号类型:带符号类型转成无符号类型;
    带符号类型大于无符号类型:转换结果依赖于机器;
  • 指针的转换
    常量整数值 0 或者字面值 nullptr 能转换成任意指针类型;
    指向任意非常量的指针能转成 void
    指向任意对象的指针能转成 const void
  • 转换成布尔类型:指针或算术值为 0,结果为 false,否则为 true。
  • 转换成常量:允许将指向非常量的指针(引用)转换成相应的常量指针(引用)。
  • 类类型能定义由编译器自动执行的转换,不过编译器每次只能执行一次类类型的转换。
  • 强制转换
cast-name <type> (expression)
  • static_cast
// 把一个较大的算术类型赋值给较小的类型。
double slope = static_cast<double>(j) / i;
// 找回存在于 void* 指针的值
double *p = static_cast<double*>(p);
  • const_cast
// 改变运算对象的底层 const
const char *pc;
char *p = const_cast<char*>(pc);
  • reinterpret_cast
// todo

转载于:https://www.cnblogs.com/eathen/p/6599498.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHY以太网自动协商原理

自协商原理&#xff1a;自协商是通过一种叫做快速连接脉冲&#xff08;Fast Link Pulse&#xff09;的信号实现的&#xff0c;简称FLP。自协商的双方通过FLP来交换数据。 在具备自协商能力的端口没有Link的情况下&#xff0c;端口一直发送FLP&#xff0c;在FLP中包含着…

canvas--初级

摘要&#xff1a; canvas:默认宽高为300*150&#xff0c;需用canvas的API定义其宽高绘画路径以beginPath()开始,以closePath()结束常用方法fill()、stroke()、rect()、arc()、text()、lineTo()、moveTo()以下为代码&#xff1a; var cdocument.getElementById("mycanvas&q…

扑克牌翻牌问题(递归)

扑克牌翻牌问题 题目描述&#xff1a; 有52张牌&#xff0c;使它们全部正面朝上&#xff0c;从第2张开始&#xff0c;凡是2的倍数位置上的牌翻成正面朝下&#xff1b;接着从第3张牌开始&#xff0c;凡是3的倍数位置上的牌&#xff0c;正面朝上的翻成正面朝下,正面朝下的翻成正面…

以太网自动协商原理

自协商基本原理 自动协商模式是端口根据另一端设备的连接速度和双工模式&#xff0c;自动把它的速度调节到最高的公共水平&#xff0c;即线路两端能具有的最快速度和双工模式。 自协商功能允许一个网络设备能够将自己所支持的工作模式信息传达给网络上的对端&#xff0c;并接受…

Python学习-文件的调用-读取

1.文件的打开 open(filename[,mode[,buffering]]) #这个一定要记得关文件。close.() filename,要以路径的形式展示&#xff0c;比如在"c:\"中&#xff0c;则要这样写: rc:\filename 如果不用路径展示&#xff0c;那就用filename.其会在执行文件所在的文件夹进行搜索…

javascript . 05 json的组成、for...in 遍历对象、简单数据类型与复杂数据类型的传值与传址、内置对象...

对象字面量 JSON var obj { aaa :999};   var json{"aaa":999&#xff0c;“bbb”&#xff1a;888}; ”kay“&#xff1a;value 对象字面2⃣️定义方法和json很像&#xff0c;只有一点不同&#xff0c;json的key 必须加“”   &#xff1b; 对象&#xff0c;数…

nohup命令

nohup命令 起因 ssh到机器上&#xff0c;然后执行某个程序&#xff0c;再登录发现程序早就不运行了。 原因 ssh过去之后&#xff0c;执行的大部分命令&#xff08;守护进程不会断开&#xff09;&#xff0c;都是ssh进程的子进程&#xff0c;ssh断开&#xff0c;命令自然会中断 …

mac与phy如何实现网络自适应

这两天修改网卡驱动以实现10/100/1000M自适应&#xff0c;因此研究了下phy芯片和emac驱动如何兼容10/100/1000M网络环境&#xff0c;记录在此。 网络中设备端数据链路层由mac芯片和phy芯片组成&#xff0c;phy芯片根据外部网络环境完成自动协商以及配置&#xff0c;驱动中根据p…

asp.net(mvc) 框架

1、NFine mvcef 2、Grove orm架构 3、NHibernate orm 4、NBear 5、petshop 6、Membership 7、Brnshop 网上商城 8、cms快速开发&#xff1a;http://www.open-open.com/news/view/a90f1 9、c#开源框架&#xff1a;http://www.cnblogs.com/gaoyuchuanIT/articles/5612268.html 来…

LVM逻辑卷详解及创建

我们先来看一下这张图片&#xff1a;PV: 底层的一个硬盘设备&#xff0c;可以是一个分区&#xff0c;也可能是一个RAID。我们可以把这个块设备创建成一个物理卷格式&#xff0c;即一个PV。VG: 将一个或多个PV提供的存储空间在一个更低的单位上划分成一个个独立的存储单元&#…

python文件操作总结

python中对文件、文件夹&#xff08;文件操作函数&#xff09;的操作需要涉及到os模块和shutil模块。 得到当前工作目录&#xff0c;即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目录名:os.listdir() 函数用来删除一个文件:os.remove() 删除多个目…

Fread 和fwrite的参数不同,返回值不同

函数fwrite 功能C语言函数&#xff0c;向文件写入一个数据块 。size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);注意&#xff1a;这个函数以二进制形式对文件进行操作&#xff0c;不局限于文本文件返回值&#xff1a;返回实际写入的数据块数目&…

课程简介及算法分析

先学课程 -概率论 运行时间&#xff08;running time&#xff09; - 输入&#xff08;eg 已经排序&#xff09; - 输入规模&#xff08;6和6*10^9&#xff09; 各种各样的分析&#xff1a; - 最坏情况分析&#xff08;worst case&#xff09;usually T(n) max time when inp…

利用shell脚本添加环境变量

在shell脚本设置了环境变量&#xff0c;如export LIBRARY_PATH./lib/&#xff0c;执行了此脚本后, 在执行生成的可执行文件&#xff0c;提示错误 error while loading shared libraries: libww.so: cannot open shared object file: No such file or directory 但是如果把expor…

2017 ACM-ICPC西安网赛B-Coin

B-Coin Bob has a not even coin, every time he tosses the coin, the probability that the coins front face up is \frac{q}{p}(\frac{q}{p} \le \frac{1}{2})​p​​q​​(​p​​q​​≤​2​​1​​). The question is, when Bob tosses the coin kktimes, whats the pr…

Java第四次作业

Dog dognew Dog("哈士奇","黑白",2);System.out.println(dog);}}class Dog {private String name;private String color;private int age;public String getName(){return name;}public String getColor(){return color;}public int getAge(){return age;}…

ITU-RBT.656视频标准接口

601是SDTV的数据结构 656是SDTV的interface 709是HDTV的数据结构 1120是HDTV的interface ITU-R BT.601是演播室数字电视编码参数标准&#xff0c;而ITU-R BT.656 则是ITU-R BT.601附件A中的数字接口标准&#xff0c; 用于主要数字视频设备(包括芯片)之间采用27Mhzs并口或243Mb…

C语言博客作业03--函数

1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 本周学习了函数&#xff0c;其实&#xff0c;函数于之前学习的三大控制结构是密不可分的&#xff0c;而函数又有其特殊的地方&#xff0c;例如&#xff1a;函数的声明、函数的调用等等。我们之前编写…

Shell记录-Shell命令(其他)

top命令是Linux下常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用状况&#xff0c;类似于Windows的任务管理器。 &#xff0e;命令格式 top [参数]Shell2&#xff0e;命令功能 显示当前系统正在执行的进程的相关信息&#xff0c;包括进程ID、内存占用率、…

Insta360:从软到硬,一年做出360°全景相机,中间填了多少坑?

摘要刘靖康在大学就开始创业。在大二的时候他曾经去腾讯实习&#xff0c;然后又去了“超级课程表”这个团队实习半年&#xff0c;2013 年 9 月回到南京创业&#xff0c;一开始的产品叫“名校直播”&#xff0c;是一款围绕院校名师讲座所做的视频直播产品。 不久前&#xff0c;一…