《C++ Primer Plus》读书笔记之三—循环与关系表达式
第五章 循环与关系表达式
1、表达式是值或者值与操作符的结合,每个C++表达式都有值。表达式到语句的转换只要加一个分号就可以完成。但是,反过来,从语句中删除分号,并不一定能将它转化成表达式。
2、前缀与后缀操作符:虽然选择使用前缀还是后缀对程序的行为没有影响,但执行速度可能有细微的差别。对于内置类型和当代编译器而言,这看似不是什么问题。然而,C++允许您针对类定义这些操作符,在这种情况下,用户这样定义前缀函数:将值加1,然后返回结果;但后缀版本首先复制一个拷贝,将其加1,然后将复制的拷贝返回。因此,对于类而言,前缀版本的效率比后缀版本高。
3、递增/递减操作符和指针:前缀递增、前缀递减和解除引用操作符(*)的优先级相同,以从右往左的方式进行结合。后缀递增和后缀递减的优先级相同,但比前缀操作符的优先级高,这两个操作符以从左往右的方式进行结合。例如:
*++p ;先将++应用于p,然后将*应用于被递增后的p
++*p;先取得p的值,然后将这个值加1,p指向不变
(*p)++;先对指针解除引用,然后将++应用于解除引用的这个值,p指向不变
*p++;后缀操作符优先级更高,这意味着将操作符用于p,而不是*p,因此对指针递增。然而后缀操作符意味着将对原来的地址而不是递增后的新地址解除引用,但语句执行完毕后,p的值将递增一个。
4、逗号操作符的优先级是最低的,逗号表达式的值是最后一个表达式的值;关系操作符的优先级比算术运算符低,所以有:
x+3>y-2等价于(x+3)>(y-2)
5、任何有效的表达式都可以用作for循环的测试条件,非零值为true,零值为false(用在for循环犯错了,死循环)
6、C-风格字符串的比较:strcmp()函数,该函数接受两个字符串的地址作为参数。这意味着参数可以是指针、字符串常量或者字符数组名。相同,返回0;第一个大,返回负数;第二个大,返回正数。
7、string类字符串的比较:使用关系操作符。因为类函数重载了这些操作符。
8、假如有char ch;然后用cin>>ch;输入了一个字符串,当用cin一个一个字符的读入的时候,cin将忽略空格和换行符接着往下读。但是!如果我们不想忽略空格呢?赶紧用cin.get(ch);来补救。具体地说,成员函数cin.get(ch);读取输入中的下一个字符(即便它是空格),并将其赋给变量ch。注:①发送给cin的输入被缓冲。这意味着只有用户按下回车键后,他输入的内容才会被发送给程序。②头文件iostream将cin.get(ch)的参数声明为引用类型,为的就是能在过程中修改ch的值!按值传递的话不能修改ch的值!!
9、文件尾条件(EOF):检测到EOF后,cin将两位(eofbit和failbit)都设置成1.可以通过成员函数eof()来查看eofbit是否被设置;如果检测到EOF,则cin.eof()将返回true,否则返回false。同样,如果eofbit或者failbit被设置成1,则fail()成员函数返回true,否则返回false。
while(cin.fail()==false) // test for EOF 或者while(!cin.fail()) 或者 while(cin) // while input is successful 这个更通用
注:cin.get();返回输入中的下一个字符;cin.get(ch)方法的返回值是一个cin对象。不过当cin出现在需要bool值的地方(如while循环的测试条件中)时,istream类调用可以将istream对象(cin)转换成bool值的函数!!
《C++ Primer Plus》读书笔记之三—循环与关系表达式的更多相关文章
- C++ primer plus读书笔记——第5章 循环和关系表达式
第5章 循环和关系表达式 1. cout.setf(ios_base::boolalpha); cout << (100 > 3) << endl;将输出true,而不是 ...
- C++ Primer Plus读书笔记
第五章 循环和关系表达式 1. 2.类别别名: (1) #define FLOAT_POINTER float * FLOAT_POINTER pa, pb; 预处理器置换将该声明转换成 flo ...
- 《C++ Primer》读书笔记 第一章
读<C++ Primer>才知道,自己对C++知之甚少... 写个博客记录下自己C++的成长,只是读书笔记,不是对<C++ Primer>知识点的总结,而是对自己在书上看到的以 ...
- 《C#图解教程》读书笔记之三:方法
本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.方法那些事儿 (1)方法的结构:方法头—指定方法的特征,方法体—可执行代码的语句序列: (2)方法的调用:参 ...
- 《C++ Primer Plus》第5章 循环和关系表达式 学习笔记
C++提供了3种循环: for 循环. while 循环 和 do while 循环 .如果循环测试条件为 true 或非零,则循环将重复执行一组指令: 如果测试条件为 false 或 0 , 则结束 ...
- C++ Primer Plus读书笔记(五)循环和关系表达式
1.前缀运算符的优先级是从右到左,例如: 1 *++p; //这句话的含义是先对p进行++,再取* 2.循环 c++11新增了一种循环方式,有点和python类似,如下: 1 array<int ...
- C primer plus 读书笔记第一章
写在前面: 算法和数据结构是计算机学习的基础,而大部分书籍是用C/C++编写.所以有了把C语言重新学一遍的想法.这个系列主要是记录看C primer plus的一些笔记和部分课后习题的答案,不会总结的 ...
- C primer plus 读书笔记第九章
本章的标题是函数.C的设计原则是把函数作为程序的构成模块. 1.函数概述 函数的定义:函数是用于完成特定任务的程序代码的自包含单元. 使用函数的原因:1.函数的使用可以省去重复代码的编写.2.使得程序 ...
- C primer plus 读书笔记第六章和第七章
这两章的标题是C控制语句:循环以及C控制语句:分支和跳转.之所以一起讲,是因为这两章内容都是讲控制语句. 第六章的第一段示例代码 /* summing.c --对用户输入的整数求和 */ #inclu ...
随机推荐
- AngularJS $timeout和 $interval ,定时器手机验证码倒计时
$interval是 window.setInterval的Angular包装形式.$interval指每次延迟时间后执行响应的函数(也可以说:每次执行函数的间隔时间).$interval多数用于计时 ...
- svn 被锁,清理恢复过程
svn 被锁,清理恢复过程 http://stackoverflow.com/questions/18000363/tortoisesvn-wont-allow-me-to-add-any-files ...
- Flex4 outerDocument
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...
- 【扫盲】】32位和64位Windows的区别
用户购买windows安装盘或者重新安装操作系统的时候,通常会遇到这个问题,就是不知道该如何选择使用32位操作系统和64位操作系统,有人说64位系统速度快,其实理论上确实是这样,不过具体还要根据你的个 ...
- IOS贝塞尔曲线圆形进度条和加载动画
做项目让做一个加载动画,一个圈圈在转中间加一个图片,网上有好多demo,这里我也自己写了一个,中间的图片可加可不加.其中主要用到贝塞尔曲线.UIBezierPath是对CGContextRef的进一步 ...
- 【WAN】PPPOE宽带上网功能详解
1.mac地址克隆 某些地方的运营商会把宽带账号和用户电脑的mac地址绑定起来,运营商的账号只能让当前的电脑去上网,限制路由器上网,这时候路由器可以复制用户电脑的mac伪装成这台电脑去上网,实现路由器 ...
- DataGridView 获取当前单元格
获取DataGridview控件中的当前单元格,是通过DataGridview的Rows属性和Column属性的索引来取得的,他们的索引都是从0开始的. Private void datagridvi ...
- winform httplicent调用API
绑定datagriview Uri uri = new Uri("http://localhost:49423");//地址 HttpClient clien ...
- JS实现最短路径之弗洛伊德(Floyd)算法
弗洛伊德算法是实现最小生成树的一个很精妙的算法,也是求所有顶点至所有顶点的最短路径问题的不二之选.时间复杂度为O(n3),n为顶点数. 精妙之处在于:一个二重初始化,加一个三重循环权值修正,完成了所有 ...
- 关于JAVA是值传递还是引用传递的问题
1.概念 值传递:方法调用时,实际传入的是它的副本,在方法中对值的修改,不影响调用者的值. 引用传递:方法调用时,实际传入的是参数的实际内存地址,调用者和调用方法所操作的参数都指向同一内存地址,所以方 ...