第五章 循环与关系表达式

  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》读书笔记之三—循环与关系表达式的更多相关文章

  1. C++ primer plus读书笔记——第5章 循环和关系表达式

    第5章 循环和关系表达式 1. cout.setf(ios_base::boolalpha); cout << (100 > 3) << endl;将输出true,而不是 ...

  2. C++ Primer Plus读书笔记

    第五章 循环和关系表达式 1. 2.类别别名: (1)   #define FLOAT_POINTER float * FLOAT_POINTER pa, pb; 预处理器置换将该声明转换成  flo ...

  3. 《C++ Primer》读书笔记 第一章

    读<C++ Primer>才知道,自己对C++知之甚少... 写个博客记录下自己C++的成长,只是读书笔记,不是对<C++ Primer>知识点的总结,而是对自己在书上看到的以 ...

  4. 《C#图解教程》读书笔记之三:方法

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.方法那些事儿 (1)方法的结构:方法头—指定方法的特征,方法体—可执行代码的语句序列: (2)方法的调用:参 ...

  5. 《C++ Primer Plus》第5章 循环和关系表达式 学习笔记

    C++提供了3种循环: for 循环. while 循环 和 do while 循环 .如果循环测试条件为 true 或非零,则循环将重复执行一组指令: 如果测试条件为 false 或 0 , 则结束 ...

  6. C++ Primer Plus读书笔记(五)循环和关系表达式

    1.前缀运算符的优先级是从右到左,例如: 1 *++p; //这句话的含义是先对p进行++,再取* 2.循环 c++11新增了一种循环方式,有点和python类似,如下: 1 array<int ...

  7. C primer plus 读书笔记第一章

    写在前面: 算法和数据结构是计算机学习的基础,而大部分书籍是用C/C++编写.所以有了把C语言重新学一遍的想法.这个系列主要是记录看C primer plus的一些笔记和部分课后习题的答案,不会总结的 ...

  8. C primer plus 读书笔记第九章

    本章的标题是函数.C的设计原则是把函数作为程序的构成模块. 1.函数概述 函数的定义:函数是用于完成特定任务的程序代码的自包含单元. 使用函数的原因:1.函数的使用可以省去重复代码的编写.2.使得程序 ...

  9. C primer plus 读书笔记第六章和第七章

    这两章的标题是C控制语句:循环以及C控制语句:分支和跳转.之所以一起讲,是因为这两章内容都是讲控制语句. 第六章的第一段示例代码 /* summing.c --对用户输入的整数求和 */ #inclu ...

随机推荐

  1. 使用C++11 开发一个半同步半异步线程池

    摘自:<深入应用C++11>第九章 实际中,主要有两种方法处理大量的并发任务,一种是一个请求由系统产生一个相应的处理请求的线程(一对一) 另外一种是系统预先生成一些用于处理请求的进程,当请 ...

  2. ASP.NET Core 中的配置

    目录 以键-值对的形式读取配置 多环境配置 读取结构化的配置数据 参考 .NET Core 定义配置的方式不同于之前 NET 版本,之前是依赖于 System.Configuration 的 app. ...

  3. C语言读写配置文件--转载

    http://www.oschina.net/code/snippet_4873_2503 [].[代码] CException.h 跳至 [] [] [] /******************** ...

  4. 6.042 Mathematics for Computer Science

    课程信息 6.042 Mathematics for Computer Science

  5. 手把手教你使用 VuePress 搭建个人博客

    手把手教你使用 VuePress 搭建个人博客 有阅读障碍的同学,可以跳过第一至四节,下载我写好的工具包: git clone https://github.com/zhangyunchencc/vu ...

  6. python爬虫实战(八)--------知乎

    相关代码已经修改调试成功----2017-4-22 一.说明 1.目标网址:知乎登入后的首页 2.实现:如图字段的爬取 zhihu_question表: zhihu_answer表: 3.数据:存放在 ...

  7. python 爬虫入门案例----爬取某站上海租房图片

    前言 对于一个net开发这爬虫真真的以前没有写过.这段时间开始学习python爬虫,今天周末无聊写了一段代码爬取上海租房图片,其实很简短就是利用爬虫的第三方库Requests与BeautifulSou ...

  8. .NET中的集合-ArrayList2

    数组特点:类型同统一,长度固定 集合常用操作 添加 遍历 移除 ArrayList可变长度数组,使用类似于数组 属性:capacity(集合中可以容纳元素的个数,翻倍增长)count(集合中实际存放的 ...

  9. Lambda表达式&匿名方法

    “Lambda表达式“(lambda Expression)就是一个匿名函数(匿名方法),lambda表达式基于数学中的入演算得名. lambda运算符:所有的lambda表达式都是用新的lambda ...

  10. sublime下package control安装无效解决

    使用快捷键:ctrl+`打开控制台执行如下命令 sublime2: import urllib2,os,hashlib; h = 'df21e130d211cfc94d9b0905775a7c0f' ...