会是什么x的计算顺序

会是什么x的计算顺序

本文介绍了会是什么x的计算顺序= X + + + + X;是?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能重复:结果
  Could谁能解释这些不确定的行为,(I = I + + + + I,I = I ++等…)

在Java的指定的评价为了被左到右。这是C和C ++的情况下,也还是依赖于实现?我记得,评价顺序是不确定的函数参数,而是分前pressions什么?

In Java the evaluation order is specified to be left-to-right. Is this the case for C and C++ as well, or is it implementation dependent? I do remember that the evaluation order is unspecified for function arguments, but what about sub-expressions?

推荐答案

这是不确定的,其中的参数 + 首先计算 - 但也不至于连事,因为在C和C ++,修改两次相同的对象,而无需插入顺序点是完全不确定的行为。

It is unspecified which of the arguments to + is evaluated first - but that doesn't even matter, because in C and C++, modifying the same object twice without an intervening sequence point is completely undefined behaviour.

在这里,您正在修改 X 的时间中间没有顺序点,所以你富裕的保留;)

Here you're modifying x three times without an intervening sequence point, so you're well off the reservation ;)

C99标准的相关部分是6.5防爆pressions

The relevant part of the C99 standard is "6.5 Expressions":

2的previous和下一间
  序列点的对象应具有
  其存储的值修改最多一次
  由前pression的评价。
  此外,前值应为
  只读确定该值是
  储存。

3算子的分组和
  操作数由表示
  句法。除指定后
  (对于函数调用(),放大器;&放;, ||,?,
  顿号运营商)的顺序
  SUBEX pressions和评价
  顺序的副作用发生
  都是不确定的。

这是可能的代写法律code演示评估未指定的顺序 - 例如:


It's possible to write legal code that demonstrates the unspecified order of evaluation - for example:

#include <stdio.h>

int foo(void)
{
    puts("foo");
    return 1;
}

int bar(void)
{
    puts("bar");
    return 2;
}

int main()
{
    int x;

    x = foo() + bar();
    putchar('\n');

    return x;
}

(不管你得到的输出是不确定的 foobar的 barfoo )。

这篇关于会是什么x的计算顺序= X + + + + X;是?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-26 11:19