赋值表达式的值是左操作数的值,其结果的类型为左操作数的类型。
赋值操作具有右结合性 。 EX: int ival,jval; ival=jval=0;
建议: 只有在必要是才使用后置操作符。++; --
前置操作不用保存原来操作数的未修改值,操作更少。
*iter++ 等价于 *(iter++) : 后自增操作的优先级高于解引用操作。
注: 后置操作的优先级高于前置操作。。。这就是C++ 为啥不叫++C (纯属个人猜测)
sizeof 操作符:
sizeof 对数组等效于整个数组在内存中的存储长度。 sizeof 的单位是字节。
sizeof(ia)/sizeof(*ia) 可以获得数组的长度。
逗号操作符: 结果是其最右边表达式的值,如果最右边的操作数是左值,则逗号表达式的值也是左值。
new 操作:
注: new 表达式返回指向新创建对象的指针。
动态创建对象的初始化。 直接初始化的方法!
int *pi= new int(1024);string *ps=new string(10,'9');
默认初始化: int *pi=new int;
值初始化 : int *pi=new int():
以上两者区别: 前者的值是不确定的,后者的值为0.
delete :删除指针后,指针变成悬垂指针。 所以一旦删除指针后,应该立即将指针置为0。
const 对象的new 和 delete:
new : const int *pi = new const int(1024);
const string *pcs= new const string;
delete : delete pi;
显示转换:
命名的强制类型转换符号 形式如: cast-name<type>(expression)
cast-name: static_cast ; dynamic_cast; const_cast; reinterpret_cast
dynamic_cast: 支持运行时识别指针或引用所指向的对象。
const_cast: 转换去掉表达式的const 性质。 EX:
const char* pc_str;
char *pc = string_copy(const_cast<char *>(pc_str));
static_cast : 编译器隐式执行的任何类型转换都可以由static_cast 显示完成。
可通过static_cast 将存放在void* 中的指针值强制转换成原来的指针类型。
EX: void *p = &d;
double *dp = static_cast<double*>(p);
reinterpret_cast:为操作数的位模式提供较低层次的重新解释。 用来处理无关类型之间的转换,会产生一个新值,这个值会有与原始参数(expression)有完全相同的比特位。 大多数用于指针类型之间的交换。
-----六章-----------------------------------------------------------------------------------------------------------------------------------------------------------
switch 表达式是 case 标号不能单独出现,其后面一定要有语句,如果没什么操作,就用空语句 ( ; // null statement)
case 标号必须是整型常量表达式;而且不能两个标号具有相同的值;
注意: 在循环条件中定义的变量在每次循环里都要经历创建和撤消的过程。
goto 语句和获得所转移的的控制权带标号的语句必须位于同一个函数内。
函数在寻找处理代码的过程中退出。
抛出一个异常后,首先搜索的是抛出异常的函数,如果没有找到匹配的catch,则终止这个函数的执行;并在调用这个函数的函数中寻找匹配的catch,如果依然没有,则继续终止;依此类推,直到找到匹配的catch。