2014-10-09 2 views
-3

Мой друг и я наткнулись на интересную шутку C > C++, так как ему нравится C над C++. Тем не менее, мне любопытно, насколько выполняется выполнение этого сегмента кода. Я побежал и составилПочтовый оператор оценки

int C; 
C = 1;std::cout << (C++ < C) << "\n"; 
C = 1;std::cout << (C < C++) << "\n"; 
C = 1;std::cout << (C++ > C) << "\n"; 
C = 1;std::cout << (C > C++) << "\n"; 

выход был 1 0 0 1, используя C++ 98/C++ 11, и истина, ложь, ложь, ложь для Java.

Мой вопрос в том, как работает процесс оценки этих утверждений? Я особенно смущен, потому что C++ < C и C > C++ противоречат друг другу в Java, оставаясь постоянными на C++, а также логикой C++ < C, где, предположительно, левая и правая стороны равны или левая сторона больше правой.

+0

Противоречит друг другу как? –

+0

C++ половина этого вопроса является дубликатом; это определяют некоторые другие языки. – o11c

+0

Также https://stackoverflow.com/questions/949433/why-are-these-constructs-undefined-behavior – Boann

ответ

2

Результат не определен для C/C++ по спецификации, потому что порядок оценки не указан. См. this answer.

+0

http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points – o11c

Смежные вопросы