1.基础
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<int>::size_type cnt = ivec.size();
//将把从size到1的值赋给ivec的元素
for(vector<int>::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<type>(expression); //命名的强制类型转换形式其中type是转换的目标类型,expression是要转换的值,cast-name是static_cast, dynamic_cast, const_cast和reinterpret_cast中的一种,指定了执行的是哪一种转换。
//static_cast(除底层const外的任何具有明确定义的类型转换均可用)
double slope = static_cast<double>(j) / i; //可用于把一个较大的算数类型赋值给较小的类型
void* p = &d; double *dp = static_cast<double*>(p); //可用于执行编译器无法自动执行的类型转换
//const_cast(只能改变运算对象的底层const)
const char *pc;
char *p = const_cast<char*>(pc); //注:常用于由函数重载的上下文中
版权声明:本文为weixin_52464584原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。