第四章 表达式

字面符和变量是最简单的表达式(expression)。

4.1 基础

自定义运算符称为重载运算符(overloaded operator)。左值和右值的说法来自于C语言,谭浩强就没讲过!?除了优先级和结合律外,求值顺序也是易错点,cout<< i<<""<<++i<<endl;虽知道第一个输出的是i,但不知i的值是否已经加一。这种策略是在代码生成效率和程序潜在缺陷之间的权衡,这句话还不理解,为何效率提高了。

4.2 算术运算符

取余/取模运算的的对象必须是整数类型。C++11标准规定商无论正负都需要向0调整,直接去除小数部分。取模余数的符号与被除数保持一致。

-21%-8;/结果为-5
21%-5;/结果为1

4.3 逻辑和关系运算符

与或运算的策略叫短路求值(short-circuit evaluation)。进行布尔类型的比较是直接用if(val)即可,无需if(val==true),因为如果val不是布尔型,if(val==true)相当于if(val==1),哎,我之前一致用这方法,好笨啊!

4.4 赋值运算符

赋值可用列表,但类型不可存在窄化转换。

int k;
k = {3.14};/错误: 窄化转换

赋值运算符合右结合律

int ival, *pval;
ival = pval =0;//错误:虽然零可以赋给任何对象,但指针和整数类型是不可转换的!!

赋值运算符优先级低,养成通常加括号的好习惯!

4.5 递增和递减运算符

尽量使用前置版本,除非必须,因为后置版本需要保存原值的副本。后置运算符高于解引用运算符,递增和递减运算符是衡量程序员代码简洁性的一项标准吧!

4.6 成员访问运算符

<span style="font-size:14px;">string *p="Hello";
*p.size();\\错误
(*p).size();\\正确</span>

符号*没有符号.运算级别高。

4.7 条件运算符

可以嵌套,为了不影响可读性,最好别嵌套3层以上。

4.8 位运算符

强力建议位运算只用于无符号类型。不要混淆位运算符|和&与逻辑运算符||和&&的意义。

4.9 sizeof运算符

两种方法获得类型大小

sizeof(type);
sizeof expr;

sizeof是和指针同一个优先级的右结合运算符,不关心实际对象,因此无效指针也可,并还可以通过作用域来获得成员的大小。

sizeof计算数组大小的时候不会把数组变换成指针,这里数组转换成指针很tricky的!。数组返回的大小是常量表达式,可以作为声明数组时的维度。

4.10 逗号表达式

运算优先级是最低的!!

4.11 类型转换

有关联才转换,,函数调用也会发生类型转换。

无符号和有符号容易引起副作用,谨慎!

隐式转换和C差不多,这里显示转换很不同,显示转换的格式为cast-name<type>(expression);cast-name是static_cast、dynamic_cast、const_cast和reinterpret_cast中的一种。const_cast一般用于重载函数,reinterpret_cast最好别用,其他的转换就用static_cast和dynamic_cast。

作用域优先级>成员函数调用>前后置递增减>复合运算>算术>条件>逻辑>赋值>逗号。

总之,优先级是一大难点啊,但解决的办法也很easy--加括号

C++ primer (5th) 随想与学习笔记 6 优先级晦涩难通 新标准更清晰相关推荐

  1. C++Primer第5版学习笔记(三)

    C++Primer第5版学习笔记(三) 第四/五章的重难点内容 你可以点击这里回顾第三章内容       因为第五章的内容比较少,因此和第四章的笔记内容合并.       第四章是和表达式有关的知识, ...

  2. C++Primer第5版学习笔记(一)

    C++Primer第5版学习笔记(一) 第一.二章的重难点内容        这个笔记本主要记录了我在学习C++Primer(第5版,中文版)的过程中遇到的重难点及其分析.因为第一.二章都比较简单,因 ...

  3. windows内核开发学习笔记十八:IRP 处理的标准模式

    windows内核开发学习笔记十八:IRP 处理的标准模式 在 Windows 内核中的请求基本上是通过 I/O Request Packet 完成的. I/O manager ---> Dis ...

  4. C++Primer第五版学习笔记

    <C++ Primer>Learning Note 程序实例下载地址:http://www.informit.com/title/0321714113 第一章            开始 ...

  5. 【滤波器学习笔记】一阶RC低通滤波

    一阶RC低通滤波 从模拟到数字 本文整理自网络.<匠人手记>等书籍文章 模拟电路低通滤波时域.频域 软件低通滤波 典型电路 图1 典型RC电路 直流.交流.脉冲信号都可以用它 时域 电容电 ...

  6. C++ primer第二次阅读学习笔记(第17章:用于大型程序的工具:命名空间)

    第十七章:用于大型程序的工具:命名空间 在一个给定的作用域中定义的每个名字,在该作用域中必须是唯一的.对庞大.复杂的应用程序而言,这个很难满足.由独立开发的库构成的复杂程序更有可能遇到名字冲突,因为库 ...

  7. c++ primer第五版----学习笔记(十五)Ⅱ

    部分习题解答: 15.1: 虚成员即为虚函数 15.2: protected受保护的成员,其派生类可以访问其成员:而private私有成员,其派生类不可以访问 15.3: #ifndef QUOTE_ ...

  8. Linux学习笔记(1)----配通网络

    最近在自己学习Linux,把一些想记下的东西记下来,方便以后记忆. 同时也分享给有兴趣的朋友,有朋友发现有错误的地方,还望多指教. 本文介绍一些常用的Linux命令的使用方法 要想修改文档,就必须知道 ...

  9. 奇舞学院学习笔记之CSS一页通

    CSS概念与简单选择器 版本 CSS Level 1 CSS Level 2(CSS2.1规范) CSS Level 3 Color Module Level 3 Selectors Level 3 ...

  10. halcon学习笔记(一)毛边检测 仿射变换+标准区域登陆检测内外边缘毛边

    一.中级视频教程毛刺检测: 实现功能,检测突出产品外围突出的毛刺: 1.先获取背景的区域,用 binary_threshold()获取背景区域A: 2.背景区域进行闭运算得到闭运算区域B 3.用dif ...

最新文章

  1. iOS lldb调试
  2. 生态物流的变革效应:左边资源、右边货源
  3. 无密码身份验证:安全、简单且部署快速
  4. Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理
  5. 计算机体系结构---第二章---指令系统
  6. .NET Core 3.0 linux 部署小贴士
  7. JDK 1.5新特性
  8. linux内核态获取ip地址,Linux内核支持动态获取IP地址
  9. My SQL外键约束
  10. ajax常见写法,jquery ajax较常见的写法
  11. UVALive 7274 Canvas Painting (优先队列)
  12. 用友打印问题合集 一【各模块】
  13. 卫星对地观察模型系统操作说明
  14. android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context...
  15. MoCo v1 文献研究 [自监督学习]
  16. avue去除table表格操作列
  17. Amelia:下一代WordPress预订插件
  18. 在iframe中写html,使用jQuery在iframe中获取HTML
  19. 利用mxnet生成rec文件(图像分类)
  20. 最新完整前后端微商城电商购物系统源码+全开源的

热门文章

  1. WSL2 通过 USBIP 连接USB串口设备 JetsonUSB备份刷机
  2. 七夕表白攻略:原来数学才是世界上最浪漫的学科!
  3. 下载安装Vue-CLI
  4. C++ Concurrency in Action 2nd Edition
  5. 计算机考试金麦圈编号教程,计算机二级:数据处理.docx
  6. Halcon 排线检测|固定颜色检测
  7. 【转】韩寒:跳出棋盘的棋子
  8. 游戏挂机时计算机设置在哪里,电脑挂机锁如何设置 电脑挂机锁设置方法【图文】...
  9. layim之整合WebSocket即时通讯
  10. 英语基本句型及一般时态