Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Почему две одинаковые математические операции в двух языках возвращают разное значение?

#c_sharp #cpp #инкремент


C#:    

int a = 3;
Console.WriteLine(++a * --a);




12


C++:

int a = 3;
std::cout << ++a * --a << std::endl;




9

    


Ответы

Ответ 1



Ничего "одинакового" в этих "операциях" нет. Это не говоря уже о том, что не стоит назвать операции с побочными эффектами "математическими". Язык C# (или, например, Java) однозначно определяет семантику выражения ++a * --a. В языке С++ поведение выражения ++a * --a не определено, ибо такое выражение содержит две неупорядоченных (unsequenced) относительно друг друга модификации одной и той же переменной a. То есть в языке С++ у этого выражения нет никакого конкретного результата или поведения. Как правильно заметил @VTT в комментариях, одним из допустимых проявлений неопределенного поведения является отказ компилятора компилировать такой код.

Комментариев нет:

Отправить комментарий