引见由言语自身定义、并用于内置范例运算对象的运算符,同时简朴引见几种规范库定义的运算符。
第四章 表达式
基础观点
一元运算符:作用于一个运算对象的运算符
二元运算符:作用于两个运算对象的运算符
函数挪用也是一种特别的运算符,它对运算对象的数目没有限定
左值:当对象被当作左值的时刻,用的是对象的身份(在内存中的位置)。
右值:当一个对象被当作右值的时刻,用的是对象的值(内容)。
求值递次
在大多数情况下,不会明白指定求值递次。只要四种运算符明白划定可运算对象的求值递次:
1. 逻辑与运算符(&&):先求左边才求右边,只要当左边为真时才盘算右边的值2. 逻辑或运算符(||)3. 前提运算符(?:)4. 逗号运算符(,)
算术运算符
bool b = true;bool b2 = -b; //b2是true。-1不即是0,所以b2的值为真
C++11划定,商一概向0取整(即直接切除小数部份)。
若m%n不即是0,则它的标记和m雷同:
(-m)/n 和 m/(-n) 都即是 -(m/n) m%(-n) 即是 m%n(-m)%n 即是 -(m%n)
逻辑和关联运算符
关联运算符作用于算术或指针范例,逻辑运算符作用于恣意能转换成布尔值的范例。
- 它们的返回值都是布尔范例。
逻辑与 &&、 逻辑或 ||
短路求值(short-circuit evaluation)
关联运算符
关联运算符的求值效果是布尔值,连在一起用会发作意想不到的效果:
if(i < j < k) //若k大于1则为真
应改成:
if(i < j && j < k)
赋值运算符
赋值运算符飞左边运算对象必需是一个可修正的左值。
假如赋值运算符的摆布两个运算对象范例差别,则右边运算对象将转换成左边运算对象的范例。
赋值运算满足右结合律
int i, j; i = j = 0; //准确,都被赋值为0
前提运算符 ?:
cond ? expr1 : expr2
满足右结合律,运算对象平常根据从右向左的递次组合。
位运算符
作用于整数范例的运算对象,以及一种名为bitset的规范库范例的运算对象。
~ :位求反 << :左移 >> :右移 & :位与 ^ :位异或| :位或
sizeof运算符
返回所占字节数,所得值是一个size_t范例。
有以下两种情势:sizeof(type)sizeof expr
满足右结合律。
范例转换
隐式范例转换
大多数情况下数组转换成指针。
- 当数组被用作decltype关键字参数,或许作为取址符(&)、sizeof及typeid等运算符的运算对象时,上述转换不会发作。
显现转换
定名的强迫范例转换
cast-name<type>(expression)
cast-name有以下几种:
dynamic_cast //运行时范例辨认static_cast //只要不包括底层const,都可举行强迫范例转换,通知编译器不在乎精度丧失const_cast //只能转变运算对象的底层const,称为去掉cast性子(cast away the const)。将常量对象转换为非常量对象。reinterpret_cast //
参考:C++Primer第五版
引见由言语自身定义、并用于内置范例运算对象的运算符,同时简朴引见几种规范库定义的运算符。
相干文章:
第一章C++:函数返回值、GNU编译器敕令
第二章C++:变量和基础范例
以上就是第四章C++:表达式观点-运算符的运用的细致内容,更多请关注ki4网别的相干文章!