#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 в комментариях, одним из допустимых проявлений неопределенного поведения является отказ компилятора компилировать такой код.
Комментариев нет:
Отправить комментарий