Same code, different output in C# and C++

c#, c++, sequence-points

Solution

In C# your code is well defined and is equivalent to the following:

a = a - (b = b - (a = a - (b = b + (b = b - a))));

The innermost assignments are not relevant here because the assigned value is never used before the variable is reassigned. This code has the same effect:

a = a - (b = b - (a - (b + (b - a))));

This is roughly the same as:

a = a - (b = (b * 3) - (a * 2));

Or even simpler:

b = (b * 3) - (a * 2);
a -= b;

However, in C++ your code gives undefined behaviour. There is no guarantee at all about what it will do.

Problem

C#: ``` using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int a = 11; int b = 2; a -= b -= a -= b += b -= a; System.Console.WriteLine(a); } } } ``` Output:27 C++: ``` #include "stdafx.h" #include<iostream> int _tmain(int argc, _TCHAR* argv[]) { int a = 11; int b = 2; a -= b -= a -= b += b -= a; std::cout<<a<<std::endl; return 0; } ``` Output:76 Same code has differernt output, can somebody tell why is this so ? Help appreciated!!

Original source

Related problems