2017-11-15 14 views
-5

ここで私は簡単な解答(24)について説明したいと思います。しかし、私はこのコードをjava.Iで試してみましたが、Javaで答えは23でした。 C++でインクリメントとデクリメントC++とJavaの違い

#include <iostream> 

using namespace std; 

int main() 
{ 

    int a=10,b=2,c=0; 
    c=(++a + ++a); 
    cout <<c<<endl; 
    return 0; 
    //Here how to get answer 24 

} 
+1

[C++のタグwiki](https://stackoverflow.com/tags/c%2b%2b/info)(読んでおくべきです)では、この質問をしないように明示的に求めています。 – StoryTeller

答えて

1
c=(++a + ++a); 

、それは未定義の動作です。私はJavaでそのコードの動作を知らない。

C++ 03 5式[式]:
パラグラフ4:

....
前および次のシーケンスポイントとの間のスカラーオブジェクトが格納されていなければなりません値は、式の評価によって最大で1回修正されました。さらに、事前値は、格納される値を決定するためにのみアクセスされるものとする。。この段落の要件は、完全な 式の部分式の許容可能な順序ごとに満たされなければならない。 それ以外の場合、動作は定義されていません

C++ 11は§1.9/ 14言う:

フル発現に関連するすべての値の計算と副作用が次のフルに関連付けられたすべての値の計算と側 効果の前に配列決定されます - 評価される式。

C++ 17、それは不特定挙動です。

関連する問題