C++ primer (5th) 随想与学习笔记 6 优先级晦涩难通 新标准更清晰
第四章 表达式
字面符和变量是最简单的表达式(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 优先级晦涩难通 新标准更清晰相关推荐
- C++Primer第5版学习笔记(三)
C++Primer第5版学习笔记(三) 第四/五章的重难点内容 你可以点击这里回顾第三章内容 因为第五章的内容比较少,因此和第四章的笔记内容合并. 第四章是和表达式有关的知识, ...
- C++Primer第5版学习笔记(一)
C++Primer第5版学习笔记(一) 第一.二章的重难点内容 这个笔记本主要记录了我在学习C++Primer(第5版,中文版)的过程中遇到的重难点及其分析.因为第一.二章都比较简单,因 ...
- windows内核开发学习笔记十八:IRP 处理的标准模式
windows内核开发学习笔记十八:IRP 处理的标准模式 在 Windows 内核中的请求基本上是通过 I/O Request Packet 完成的. I/O manager ---> Dis ...
- C++Primer第五版学习笔记
<C++ Primer>Learning Note 程序实例下载地址:http://www.informit.com/title/0321714113 第一章 开始 ...
- 【滤波器学习笔记】一阶RC低通滤波
一阶RC低通滤波 从模拟到数字 本文整理自网络.<匠人手记>等书籍文章 模拟电路低通滤波时域.频域 软件低通滤波 典型电路 图1 典型RC电路 直流.交流.脉冲信号都可以用它 时域 电容电 ...
- C++ primer第二次阅读学习笔记(第17章:用于大型程序的工具:命名空间)
第十七章:用于大型程序的工具:命名空间 在一个给定的作用域中定义的每个名字,在该作用域中必须是唯一的.对庞大.复杂的应用程序而言,这个很难满足.由独立开发的库构成的复杂程序更有可能遇到名字冲突,因为库 ...
- c++ primer第五版----学习笔记(十五)Ⅱ
部分习题解答: 15.1: 虚成员即为虚函数 15.2: protected受保护的成员,其派生类可以访问其成员:而private私有成员,其派生类不可以访问 15.3: #ifndef QUOTE_ ...
- Linux学习笔记(1)----配通网络
最近在自己学习Linux,把一些想记下的东西记下来,方便以后记忆. 同时也分享给有兴趣的朋友,有朋友发现有错误的地方,还望多指教. 本文介绍一些常用的Linux命令的使用方法 要想修改文档,就必须知道 ...
- 奇舞学院学习笔记之CSS一页通
CSS概念与简单选择器 版本 CSS Level 1 CSS Level 2(CSS2.1规范) CSS Level 3 Color Module Level 3 Selectors Level 3 ...
- halcon学习笔记(一)毛边检测 仿射变换+标准区域登陆检测内外边缘毛边
一.中级视频教程毛刺检测: 实现功能,检测突出产品外围突出的毛刺: 1.先获取背景的区域,用 binary_threshold()获取背景区域A: 2.背景区域进行闭运算得到闭运算区域B 3.用dif ...
最新文章
- iOS lldb调试
- 生态物流的变革效应:左边资源、右边货源
- 无密码身份验证:安全、简单且部署快速
- Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理
- 计算机体系结构---第二章---指令系统
- .NET Core 3.0 linux 部署小贴士
- JDK 1.5新特性
- linux内核态获取ip地址,Linux内核支持动态获取IP地址
- My SQL外键约束
- ajax常见写法,jquery ajax较常见的写法
- UVALive 7274	Canvas Painting (优先队列)
- 用友打印问题合集 一【各模块】
- 卫星对地观察模型系统操作说明
- android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context...
- MoCo v1 文献研究 [自监督学习]
- avue去除table表格操作列
- Amelia:下一代WordPress预订插件
- 在iframe中写html,使用jQuery在iframe中获取HTML
- 利用mxnet生成rec文件(图像分类)
- 最新完整前后端微商城电商购物系统源码+全开源的
热门文章
- WSL2 通过 USBIP 连接USB串口设备 JetsonUSB备份刷机
- 七夕表白攻略:原来数学才是世界上最浪漫的学科!
- 下载安装Vue-CLI
- C++ Concurrency in Action 2nd Edition
- 计算机考试金麦圈编号教程,计算机二级:数据处理.docx
- Halcon 排线检测|固定颜色检测
- 【转】韩寒:跳出棋盘的棋子
- 游戏挂机时计算机设置在哪里,电脑挂机锁如何设置 电脑挂机锁设置方法【图文】...
- layim之整合WebSocket即时通讯
- 英语基本句型及一般时态