码迷,mamicode.com
首页 > 其他好文 > 详细

第四章:表达式

时间:2015-09-22 21:41:26      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

1、求值顺序:运算对象的求值顺序与优先级和结合律无关

i = f(i) + g(i)*h(i) + j(i);        //如果这里的各个函数与i无关,则无所谓,如果内部都改变了i则会出错
  • 如果几个函数影响同一个对象,则会产生未定义的行为

2、当拿不准求值顺序时,用括号来强制组合

3、赋值运算符:左侧运算对象必须是一个可修改的左值

4、对于++、--;最好使用前置版本,这样避免后置版本的复制副本的性能消耗

5、位运算:

  • 因为在移位中,符号位没有规定如何处理,所以最好使用无符号类型来处理位移运算
  • 右侧运算对象一定不能为负,而且要小于结果的位数,否则会出现未定义行为
  • char类型的运算对象,首先会被提升为int类型

6、sizeof运算符:返回一个表达式或一个类型名字所占的字节数

const char *s = "hello";
sizeof(*s) = 1;        //*s为第一个char:h;所以返回为1
sizeof(s) = 4;        //为一个指针,返回为4
const char st[] = "hello";
sizeof(st) = 6        //对于一个数组,sizeof会返回大小的和;其中包括最后的‘\0’
  • 对于string类型和vector类型sizeof只会返回该类型固定部分的大小;
  • 测试结果sting类型固定为28;vector类型固定为16

7、类型转换:在大多数表达式中,小的形值会自动转换为大整型再计算

8、类型转换:除了在重载函数中使用const_cast外,其他地方应该避免使用强制类型转换

第四章:表达式

标签:

原文地址:http://www.cnblogs.com/dylqt/p/4830408.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!