表达式由一个或多个运算对象组成,对表达式求值将会得到一个结果。
if(i =j){//判断条件是 i的值
}
if(i == j){//判断条件是i == j
}
sizeof返回一条表达式或一个类型名字所占的字节数。
- if语句
- while
- 传统for
- 范围for
- switch:switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举类型。
- goto:goto语句的作用是从goto语句无条件跳转到同函数内的另一条语句。不要在程序中使用goto语句。
- TRY:用于处理异常。
有时候需要将一种数据类型强转为其他类型。
一个命名的强制类型的形式如下:
cast-name<type>(expression);
type是转换的目标类型,而expression是被转换的值。
cast-name包括
- static_cast:任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast
- dynamic_cast:运行时的类型识别,通常在基类和派生类之间转换时使用
- const_cast:只能改变运算对象的底层const
- 将常量转换为非常量,我们称为去掉const性质
- 如果一个对象本身不是const的,去掉const性质后获得的写权限是合法的
- 如果一个对象是const的,使用const_cast执行写操作就会产生未定义的效果
- reinterpret_cast:通常为运算对象的位运算模式提供较低层次的重新解释。用于进行没有任何关联之间的转换,比如一个字符指针转换为一个整形数
int *p
char *pc = reinterpret_cast<char*>(p)
早期版本的c++中,包含两种强制类型转换语法:
type(expr)
函数形式的类型转换(type)expr
c风格的类型转换
旧式的类型转换分别具有static_cast、const_cast、reinterpret_cast相似的行为,旧式的转换类型可以替换成命名强制类型转换,如果换成static_cast、const_cast 合法,则其行为与对应的命名转换一致,否则旧式类型转换执行与reinterpret_cast相似的行为。
int *ip;
char *pc = (char*)ip;
效果与reinterpret_cast一样。