C++ 递归出现unsequenced-modification-and-access-to

C++ 阶乘递归出现unsequenced modification and access to

出现问题的代码:

/***      利用递归实现阶乘         ***/
int fact(int val)
{
    if(val == 1)
        return 1;
    else
        return val*fact(--val);
}

​  我利用的编译器是MinGW1,出现问题的代码在return val *fact(–val)。由于编辑器的不同会出现不同的结果,编辑器可能会出现以下两种结果:

一.从右向左运行
    val--;
    val*fact(val);

  此时左右的val是同一值。

二.从左向右运行(理想)
   int temp = --val;
   val*fact(temp);

  上面的运行结果为24;也就是4!。之所以导致这样的结果就是因为编辑器以第一种运行。而且我在VS Studio上运行也是这个结果。问题就出现在了编译器的运行顺序不确定,我在C++ primer的书籍中也找到的答案。
  书里说到:大多数运算符没有规定运算符的求值顺序,一般情况不会有什么影响,但是当一条子表达式改变了某个运算符的值,另外一个子表达式又要使用该值,运算符的顺序就很重要了。所以应该提防复合表达式错用两个运算符。(参见4.6节

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值