* 两个整数相除的结果是整数。如果商含有小数部分,将被截掉。
* %该操作符只能被应用在整数类型(char、short、int、long)。当两个操作数都是正数时,结果为正。但是,如果有一个(或两个)操作数为负,余数的符号则取决于机器。因此,移植性无法保证。
* 算术异常:算术表达式的计算会导致不正确或未定义的值。例如:除零、溢出。
* 标准C++头文件limits提供了与内置类型表示有关的信息,另外C++编译系统也提供了标准C头文件climits和cfloat,它们定义了提供类似处理的预处理宏。如何使用这些头文件来防止溢出和下溢,参见[PLAUGER92]的第4章和第5章。
* 浮点数的算术符还涉及精度的问题:在计算机中,当它表示一个数值时,只有固定的数位可以使用。浮点数加法、乘法和减法的结果精度受到底层数据类型的固有精度的影响。
4.2 等于、关系和逻辑操作符
* 二元关系操作符(小于或等于操作符)的缺点①:左右操作数的计算顺序在标准C和C++都是未定义的,因此计算过程必须是与顺序无关的。
* 缺点②:要判断ival、jval、kval是否各不相同。if ( ival != jval != kval )是错的,需要写成如下,if ( ival != jval && ival != kval && jval != kval )。
4.3 赋值操作符
* 赋值和初始化都使用=。一个对象只能被初始化一次,也就是在被定义的时候,但在程序中可以被赋值多次。
* 将不同类型的表达式赋值给一个对象时,右边表达式的类型必须与左边被赋值对象的类型完全匹配。编译器会试着隐式地将右操作数的类型转换成被赋值对象的类型,如果转换是合法的,则编译器会悄悄地进行(如果会引起精度损失,通常会给出一个警告)。如果不可能进行隐式的类型转换,那么赋值操作被标记为编译时错误。
* 赋值操作符的左操作数必须是左值——必须由一个相关联的、可写的地址值
4.4 递增和递减操作符
* 使用断言#include <cassert>,assert(条件表达式)
4.5 条件操作符
* 语法格式:expr1 ? expr2 : expr3
4.6 sizeof操作符
* sizeof的作用是返回一个对象或类型名的字节长度
三种形式:①sizeof(type_name) ②sizeof(object) ③sizeof object
* 返回类型是size_t,这是一种与机器相关的typedef的定义。在<cstddef>中定义
* sizeof应用在数组上,返回的是数组的字节长度,而不是数组的长度
* sizeof在编译时刻计算,因此被看做常量表达式
4.7 new和delete表达式
* 没有语法能为动态分配的数组的元素指定一个显示的初始集合,如果是类的对象数组,如果定义了缺省构造函数,那么每一个元素都会使用缺省构造函数初始化。
* 将同一个对象释放一次以上是不合法的,会在运行时产生一个未定义的行为
4.9 逗号运算符
* 从左向右计算,结果是最右边的值
4.10 位操作符
* 如果一个对象被用作一组位或位域的离散集合,称此对象为位向量(bitvector)
* 位向量是用来记录一组项目或条件的是/否信息的紧缩方法
* 编译器中,类型声明的限定修饰符,如const或volatile,有时就存储在位向量中
* iostream库用位向量表示格式状态,例如:输出的整数是以十进制、十六进制等
* 支持位向量的两种方式:
①使用内置整值来表示位向量,典型使用unsigned int
②标准库bitset类,支持位向量的类抽象
建议使用标准库的类抽象
* 用整值数据类型作为位向量时,类型可以是有符号的,也可以是无符号的,强烈建议使 用无符号类型。因为大多数的位操作中,符号位的处理是未定义的,因此在不同的实现 中符号位的处理可能会不同。在一个实现下可行的程序,在另一个实现有可能会失败。
* 按位非操作符(~):翻转操作数的每一位,每个1被设置为0,而每个0被设置为1。
* 移位操作符(<<、>>):将其左边操作数的位向左或向右移动某些位。操作数中移到外 面的位被丢弃。左移操作符(<<)从右边开始用0补空位。如果操作数是无符号数,则是右移操作符(>>)从左边开始插入0,否则的话,它或者插入符号位的拷贝,或者插入0,具体由实现定义。
* 按位与(&):如果两个操作数都含1,则结果是1。否则是0。
* 按位异或(^):在每个位所在处,如果两个操作数只有一个含有1,则结果该位为1,否则为0。
* 按位或(|):如果两个操作数有一个或者两个含有1,则结果为1,否则为0.
* 通过使用常数1移位,再进行位操作来设置或取消某个位的值。
4.11 bitset操作
* 要使用bitset类,必须包含相关的头文件。#include <bitset>
* bitset三种声明方式:
- 缺省定义中,只需简单地指明位向量的长度。例如:bitset<32> bitvec;缺省情况,所有位都被初始化为0。
- 传递一个无符号参数。例如:bitset<32> bitvec2(0xffff);
- 传递一个代表0和1的字符串。例如:string bitval(“1010”); bitset<32> bitvec4(bitval);
* 转换为字符串:bitvec3.to_string();
* 转换为unsigned long:to_ulong();
4.12 优先级
* 优先级顺序:
- ::(全局域)、::(类域)、::(名字空间域)
- .(成员选择)
- ->(成员选择)
- [](下标)
- ()(函数调用)()(构造函数)
- ++(后置递增)
- --(后置递减)
- C++类型转换
- ++/--(前置递增、递减)
- ~/!/-/+(按位非、逻辑非、一元减、一元加)
- *(解引用)
- &(取地址)
- ()(类型转换)
- *、/、%、+、-、
- << 、>>
- 比较 <、<=、>、>=、==、!=
- &、^(异或)、|(按位或)、&&(逻辑与)、||(逻辑或)、
- ?:(条件运算符)、=(赋值)、复合赋值(*=、/=、…)
- throw
- ,(逗号运算符)
4.13 类型转换
* C++并不是把不同类型的值加在一起,而是提供一组算术转换,以便在执行算术运算之前,将两个操作数转换成共同的类型。
* 转换规则:小类型总是被提升成大类型,以防止精度丢失。这些转换由编译器自动完成,无需程序员介入----称为隐式类型转换
* double到int的转换不支持舍入,需要编写程序来实现。
4.13_1 隐式类型转换
* C++定义了一组内置类型对象之间的标准转换,在必要时它们被编译器隐式地应用到对象上。隐式类型转换发生在下列这些典型的情况:
- 在混合类型的算术表达式中。这种情况下,最宽的数据类型成为目标转换类型—称为算术转换
- 用一种类型的表达式赋值给另一种类型的对象,这种情况,目标转换类型是被赋值对象的类型
- 把表达式传递给一个函数调用,表达式的类型与形式参数的类型不相同。这种情况,目标转换类型是形式参数的类型
- 从一个函数返回一个表达式,表达式的类型与返回类型不相同。这种情况下,目标转换类型是函数的返回类型
4.13_2 算术转换
* 算术转换保证了二元操作符(如加法或乘法)的两个操作数被提升为共同的类型,然后再用它表示结果的类型。
* 为了防止精度丢失,如果必要的话,类型总是被提升为较宽的类型
* 所有含有小于整型的有序类型的算术表达式。在计算之前,其类型都会转换成整型。对于比int小的整型,包括:char、signed char、unsgined char、short和unsgined short,如果类型的所有可能的值都能包容在int内,它们就会被提升为int型,否则它们将被提升为unsgined int。
* long类型的一般转换有一个例外:如果一个操作数是long类型,另一个是unsigned int类型,只有机器上的long类型足够长以便能够存放unsigned int的所有值时,unsigned int才会转换为long,否则两个操作数都被提升为unsigned long。
4.13_3 显示转换
* 也被成为强制类型转换(cast)
* static_cast、dynamic_cast、const_cast、reinterpret_cast
* const_cast,去掉表达式的常量性(以及volatile对象的volatile性)
* static_cast,类似于C风格的强制转换。无条件转换、静态类型转换。编译器隐式执行的任何类型转换都可以由static_cast完成。用于:
- 基类和子类之间的转换
- 基本数据类型转换
- 把空指针转换成目标类型的指针
- 把任何类型的表达式转换成void类型
- static_cast不能去掉const、volatile属性
* reinterpret_cast----转换为不同类型(不安全)时候使用。例如:
double dval = 0.123;int *pi = reinterpret_cast<int*>(&dval);
4.13_4 旧式强制类型转换
* 只有当为C语言或标准C++之前的编译器编写代码的时候用这个语法
* 两种形式:
- type(expr) // C++强制转换符号
- (type)expr // C强制转换符号
* 对旧式强制转换符号的支持是为了对“在标准C++之前写的程序”保持向后兼容性,以及提供与C语言兼容的符号
相关推荐
C++ Primer习题集(第五版) , 带目录完整版。 --------------------------------------------------------------------------- 目录 第1章............................................................ 1 练习1.1 ...
【原书名】 C++ Primer (4th Edition) 【原出版社】 Addison Wesley/Pearson 【作者】 (美)Stanley B.Lippman,Josée LaJoie,Barbara E.Moo 【译者】 李师贤 蒋爱军 梅晓勇 林瑛 【丛书名】 图灵计算机科学丛书 ...
C++ Primer结合了Stanley Lippman的实践经验和Josée Lajoie对于ANSI/ISO标准C++的深入理解,此第三版被重新改写,以便更加精确地讲述标准C++的特性和用法。对于C++初学者特别有价值的是一些来自真实世界中的程序...
本课程是C++ Primer初级教程,课程内容是学习C++语言基础知识,对应着教材的第1章到第8章。 第1章 快速入门 1.1 编写简单的C++程序 1.2 初窥输入/输出 1.2.1 标准输入与输出对象 1.2.2 一个使用IO库的程序 ...
C++primer 课后题答案 目录 第一章 快速入门 2 第二章 变量和基本类型 7 第三章 标准库类型 13 第四章 数组和指针 21 第五章 表达式 31 第六章 语句 37 第七章 函数 37 第八章 标准IO库 37 第九章 顺序容器 43 第十...
C++ Primer中文版(第5版)[203M]分3个压缩包 本书是久负盛名的C++经典教程,其内容是C++大师Stanley B. Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合,已经帮助全球无数...
第5章new和delete表达式 45.第5章显式转换 46.第6章简单语句 47.第6章if语句 48.第6章switch语句 49.第6章while语 50.第6章for语句 51.第6章dowhile语句 52.第6章break,continue,goto语句 53.第6...
c++primer 笔记 。
C++ Primer中文版(第5版)[203M]分3个压缩包 本书是久负盛名的C++经典教程,其内容是C++大师Stanley B. Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合,已经帮助全球无数...
C++Primer第五版 第4章 表达式(练习解答) 个人总结的文档+源码,仅供学习参考之用,遗漏之处请参看我的博客
C++ Primer Plus 第六章分支语句和逻辑操作符的笔记 用例子阐释了 逻辑表达式,问号操作符,switch语句,break和continue以及文件简单输入输出 学习笔记系列博客地址:...
分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系表达式、分支语句和逻辑操作符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、虚函数、动态内存分配、继承、代码重用、...
C++ primer 第4版 原书+习题解答+源码 清晰pdf,非影印。 本书是久负盛名的C++经典教程引,其内容是C++大师Stanley B. Lippman丰富的实践经验和C++标准委员会原负责人Josée Lajoie对C++标准深入理解的完美结合,...
作为目前业界广泛使用的编程语言,C++可谓包罗万象、博大精深。20年来,讲述C++的图书早已经汗牛充 栋、层出不穷,但其中业界公认的完整涵盖C++标准的权威著作只有两部,其中一部就是本书!它是业界 内久负盛名、...
第 4 章表达式 第 5 章声明 第 6 章函数 第 7 章类 第二部分:C++ 库 第 8 章 IO 库 第 9 章顺序容器 第 10 章通用算法 第 11 章关联容器 第三部分:课堂作者工具 第四部分:高级主题 第 19 章专用工具和技术
分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系表达式、分支语句和逻辑操作符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、虚函数、动态内存分配、继承、代码重用、...
全书分18章和10个附录,分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系表达式、分支语句和逻辑运算符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、虚函数、动态内存...
第4章 表达式 80 练习4.1~练习4.38 第5章 语句 99 练习5.1~练习5.25 第6章 函数 120 练习6.1~练习6.56 第7章 类 152 练习7.1~练习7.58 第8章 IO库 183 练习8.1~练习8.14 第9章 顺序容器 193 练习9.1...
The Solutions for C++ Primer 5th目录第I部分 C++基础第2章 变量和基本类型第3章 字符串、向量和数组第4章 表达式第5章 语句第6章 函数第7章 类第II部分 C++标准库第8章 IO库第9章 顺序容器第10章 泛型算法第11章 ...