C++表达式:由一个或多个运算对象组成、对表达式求值将得到一个结果;一般是左值(lvalue)/右值(rvalue)
2.运算符算术运算符/逻辑和关系运算符/赋值运算符/递增和递减运算符/成员访问运算符/条件运算符/位运算符等均基本与C语言相同。
特别:条件运算符(?:)在单个表达式中嵌入if-else逻辑
cond ? expr1 : expr2; //cond是判断条件的表达式,expr1和expr2是两个类型相同或可能转化为某个公共类型的表达式 //条件部分若判断为真,则得到expr1,否则是expr2 string finalgrade = (grade < 60) ? "fail" : "pass";
(1)sizeof运算符
sizeof:返回一条表达式或一个类型名字所占的字节数,所得值为一个size_t类型的常量表达式。
sizeof (type); //返回存储type类型的对象所占空间的大小 sizeof expr; //返回表达式expr结果类型的大小
(2)逗号运算符
逗号运算符:含有两个运算对象,按照从左向右的顺序依次求值。首先对左侧的表达式求值,然后将求值结果丢弃掉;逗号运算符真正的结果是右侧表达式的值。
vector::size_type cnt = ivec.size(); //将把从size到1的值赋给ivec的元素 for(vector ::size_type ix = 0; ix != ivec.size(); ++ix, --cnt) ivec[ix] = cnt;
注:重载运算符:当运算符作用于类类型的运算对象时,可以自定义运算符的含义,即为重载
3.类型转换(1)隐式转换(implicit conversion):自动执行的转换。例如:
int ival = 3.141 + 1;
隐式转换中的算术转换:
整型提升:将小整数类型转换成较大的整数类型(如将bool,char等转换为int类型)
无符号类型的运算对象(如unsigned int和int之间的转换)
数组转换为指针(在大多数表达式中数组可以自动转换为指向首元素的指针)
(2)显式转换
强制类型转换,例如:
int i, j; double slope = i/j;
命名的强制类型转换:
cast-name(expression); //命名的强制类型转换形式
其中type是转换的目标类型,expression是要转换的值,cast-name是static_cast, dynamic_cast, const_cast和reinterpret_cast中的一种,指定了执行的是哪一种转换。
//static_cast(除底层const外的任何具有明确定义的类型转换均可用) double slope = static_cast暑期编程PK赛 得CSDN机械键盘等精美礼品!(j) / i; //可用于把一个较大的算数类型赋值给较小的类型 void* p = &d; double *dp = static_cast (p); //可用于执行编译器无法自动执行的类型转换 //const_cast(只能改变运算对象的底层const) const char *pc; char *p = const_cast (pc); //注:常用于由函数重载的上下文中



