运算优先级问题

来源:互联网 发布:mac移除windows分区 编辑:程序博客网 时间:2024/06/06 03:30

int i = f1() * f2();//f1()和f2()肯定会在乘号之前执行,可是我们并不知道先执行的是哪个

cout<<i<<i++;//此时,并不知道先执行i++和是i 即称该表达式的行为是不可预知的

只有四种运算符明确规定了运算对象的求值顺序 && || ?: 和 , (先左后右)

求值顺序、优先级、结合律

int i = f() + f1() * f2();//
  • 优先级规定:f1()和f2()的返回值的乘积
  • 结合律规定:上述乘积与f()的结果相加
  • 而其中函数的调用顺序并没有规定
    因此,如果这些函数影响同一对象,则它是一条错误的表达式,将产生未定义的结果
    所以:拿不准的优先级最好用强制使用括号
    如果改变了某个运算对象的值,在表达式的其他地方不要再使用这个运算对象

一元运算符的优先级最高,接下来是乘除,最后是加减
解引用优先级别小于自增运算:(*p)++ *p++
解引用优先级别小于点运算 *p.size()

0 0
原创粉丝点击