C++ Primer学习总结 第4章 表达式

 第4章 表达式

1.    decltype作用于左值对象时,返回的是该对象的引用类型. 作用于右值对象时,返回的是该对象的类型.

2.    求值顺序.

C++中只有&& || ?:
, 4种运算符是先左后右求值的.

3.    一元正负号运算符作用于数值:

会提升当前数值的类型,比如short变成int型

 

4.    m%(-n)
(-m)%n 与 (-m)%(-n) 的结果分别是:

注意:
模的正负号没有任何影响, m的正负号决定结果的正负.

 

5.     关系运算符满足左结合律:

6.     递增递减运算符(如++x,x++)在什么时候是不可替换(成x+1的形式)?

在用于那些不支持算术运算的迭代器时,是必须的.

 

7.    ++,--运算符,前置版本返回左值对象,后置版本返回右值对象.

8.    后置递增运算符的优先级高于解引用运算符

9.    运算对象可按任意顺序求值:

10.  条件运算符满足右结合律:

11.  位运算符强烈建议只用于处理无符号数或正数,因为符号位如何处理是与机器有关的.

12.   struct结构体类的对象是需要对齐一个字大小的.

13.  sizeof运算符并不去计算其运算对象的值,所以在sizeof中解引用一个无效的指针是合法的.

sizeof作用于 string 和vecvtor时,只返回其固定部分的字节大小,不会对其内容求字节大小.

14.  逗号运算符的求值顺序是从左到右,且其返回值是右边表达式的值.所以如果右边表达式的返回值是左值,那么逗号运算符的返回值也是左值.
注意b=4返回b的引用(即左值)

15.  void* 能存放任何非常量对象的地址:

16.  const_cast<>()会改变(且只能改变)运算对象的底层const属性.(只有指针和引用有底层const)

时间: 2024-12-15 01:34:36

C++ Primer学习总结 第4章 表达式的相关文章

《C++primer》v5 第4章 表达式 读书笔记 习题答案

4.1 105 4.2 *vec.begin()=*(vec.begin())//先调用点运算符,再解引用 *vec.begin()+1=(*vec.begin())+1//先解引用,再加一 4.3略? 4.4 (12/3*4)+(5*15)+(24%4/2)=91 4.5 (a)-86(b)-16 (c)0 (d)0 4.6 n%2 4.7 溢出:计算结果超出该数据类型所能表示的范围 2147483647+1 1U-2 ... 4.8 比较低.. 4.9 首先判断cp是否为空指针,若非空指针则

C++ Primer学习总结 第6章 函数

第6章 函数 1.    函数最外层作用域中的局部变量不能使用与函数形参一样的名字,因为它们属于同一个作用域范围. 2.    局部静态变量的生命周期: 在整个程序的执行路径第一次经过对象定义语句时初始化,并且直到整个程序终止时才被销毁,在此期间即使对象所在函数结束执行也不会对它有影响. 3.    如果重载的函数的参数只有顶层const区别,那么是错误的: 如果有底层const区别可以算作重载. 4.    如果函数的参数要使用引用(且不会改变引用对象的值),那么应该定义成常量引用. 因为使用

C++ Primer学习总结 第5章 语句

第5章 语句 1.    switch中的case标签必须是整型常量表达式,不能是变量也不能是非整型: 注意第二个case 3.14 在C++11中没错误可以执行,但是在C++98中编译不通过. 2.    switch语句的case语句初始化了一个变量时要注意: Case语句不能跳过变量的初始化,可以跳过变量的定义. 3.    范围for语句不仅仅能用auto声明变量: 不过对于数组,使用范围for语句要小心   4.    goto语句不能跳过变量的初始化,可以跳过变量的定义: 5.   

C++ Primer学习总结 第7章 类

第7章 类 1.    引入const成员函数(C++ Primer P231-232) C++类的常量对象是无法调用非const成员函数的,如果想让常量对象调用某个成员函数,必须声明成const: 2.     一个类的尾后const成员函数如果返回*this,那么其返回类型必然是const 类名 & 前面这个const是不能少的.否则无法通过编译. 3.    默认构造函数P235-236 编译器只有在发现类中不包含任何构造函数的情况下,才会为我们合成一个默认的构造函数,且该函数对于类中的成

C++ Primer学习总结 第14章 操作重载与类型转换

第14章 操作重载与类型转换 1.    可以直接调用重载的运算符函数. 但是如果对于一个运算符比如+号,既有重载的成员函数,又有重载的非成员函数,那么此时如果直接使用+号,那么就会出现错误. 因为编译器不知道要调用那个运算符. 2.     逗号,运算符 逻辑与&&运算符 逻辑或||运算符不建议重载. 因为上述3种运算符本身是有求值顺序和短路求值特性(&&和||有短路求值特性)的. 但是重载后的运算符本质上是一次函数调用, 所以求值顺序和短路求值特性都会消失. 注意上面第

C++ Primer 学习笔记与思考_9 表达式中过的那些容易忽略的地方

(一)移位操作符用于IO 输入输出标准库分别重载了位操作符>>和<<用于输入和输出.并且像其他的二元操作符一样,移位操作符也是左结合的,这也正好说明了我们为什么可以把多个输入输出操作连接为单个语句: cout<<"hi"<<"there "<<endl; 将其执行为: ( (cout<<"hi")<<"there" )<<endl;

The C++ Programming Language 学习笔记 第6章 表达式和语句

1.关于strcpy函数. 书中说c风格的字符串尽量少用,strcpy这样的函数应该也要少用.这里讲这个函数主要是要通过本章课后练习第十题来讲一下前面提及的要点.巩固一下前几章的知识.写了一段,本来感觉自己写得不错了,结果和网上的一笔感觉还是差很多,也学到了很多,下面贴上网址供大家看看.http://blog.csdn.net/cazicaquw/article/details/7044602. 里面讲得很详细,很多细节对于我们初学者来说也是很有用的.但感觉他写得太繁琐了,其实从指针到bool的

C++ Primer学习总结 第1-2章 变量和基本类型

第1-2章 变量和基本类型 1.下面这个语句在C++98和C++11中的输出结果不同. C++98结果: (如果想要更高的精度,可以用%.9lf,输出9位有效数字) C++11结果: 结论: printf的%lf在C++11中表示longdouble,所以用中%f就可以输出float和double类型.而printf在C++98中可以用%lf正确输出double. 如果是scanf的话,不论C++98还是C++11中float都用%f读取,double都用%lf读取,因为二者结构不同.   2.

C++ Primer学习总结 第3章 字符串,向量和数组

第3章 字符串,向量和数组 1.    如何用string读取一整行内容? 用getline(cin,s)即可. 当然getline()也可以用来作为while循环读取输入的判断条件. 2.    string与字符串字面值,字符字面值相加 由于+法是从左向右运算的,所以只要保证每次两个值相加时,+号左右两边至少有一个是string就行. 3.    string不仅可以与字符串字面值相加,还可以与以'\0'字符结束的字符串数组相加. 4.    注意下面数组的初值: 如果a与b数组都是全局的话