C++第五章表达式
时间:2010-07-29 来源:静止的流水
最简单的表达式仅包含一个字面值常量或变量
不允许为表达式赋值
C++提供一元操作符和二元操作符还有唯一的一个三元条件表达式
有些操作符既可以表示一元也可以表示二元,如*号
优先级
结合性:一般除了赋值操作符是右结合的,都是左结合的
求值顺序:操作符并没有规定两个表达式的求值顺序,比如fa()+fb();fa和fb哪个先执行并没有规定,当左右两个表达式都涉及到同一个对象的时候并改变其值的时候(未定义的行为)
如果两个操作数是负数,则除法结果是正数,求模结果是负数
不能串接使用关系操作符类似于if(x<y<z) x<y返回bool值,然后与z比较的时候bool值转化为int值0或1
位操作符:~求反,<<左移(补0),>>右移(补符号位或0),&位与,^位异或,|位或
不要混淆了赋值操作符和相等操作符
前自增自减返回的是左值,后自增自减返回的是右值
Sizeof用于表达式的时候,并没有计算表达式的值,获得的是表达式结果的类型长度
数组名在用于sizeof和对数组引用初始化的时候和取地址操作的时候没有退化为指针
逗号操作符,表达式从左向右计算,结果是最右边表达式的值,如果最右边是左值,则逗号表达式的值也是左值
Int a(5),b(6);
Cout<<(a,b)<<endl;//6
(a=20,b)=10;
Cout<<a<<endl;//20
Coub<<b<<endl;//10
&&||当右边表达式确实影响整个表达式求值的时候,才对右表达式求值
New表达式返回新创建对象的指针,可以用初始化变量的方式实现初始化int *p = new ine(1023);如果不提供显示初始化,与内置类型在函数内定义有相同的初始化规则。0或调用默认构造函数。
Int *p = new int;//没初始化
Int *p = new int();//初始化为0
删除0值的指针式合法的
但是删除不是new分配的内存的指针,行为时未定义的
删除指针后,指针为悬垂指针,应当立即置为0
Const int *p = new const int();
Delete p;
隐式类型转换
1.混合类型的表达式中2。 条件表达式中专为bool。3。初始化某个变量4。 函数调用的时候
整形提升,char signed char ,unsigned char ,short ,unsigned short相运算的时候,都转换为int类型
显示类型转换static_cast,dynamic_cast,reinterpret_cast,const_cast;