Turbo C ++ и GCC (с использованием кодовых блоков на окнах) по-разному оценивают одно и то же троичное выражение

У меня есть это выражение

(*p % 3 != 0) ? *p = (*p) + 1 : *p = (*p) + 2;

В Turbo C ++ это значение равно 14, если * p равно 11, и 35, если * p равно 33

В GCC (Windows) он составляет 12 и 35 соответственно, что и ожидается

Он работает нормально, если заключить в скобки следующий формат:

(*p % 3 != 0) ? (*p = (*p) + 1) : (*p = (*p) + 2);

Есть ли объяснение этой разнице? Я предполагаю, что это сводится к различиям в порядке приоритетов, используемых компиляторами, но не может точно определить причину

0

Решение

Тернарный условный оператор различен в C и в C ++. Выражение a ? b : c = d анализируется …

  • как (a ? b : c) = d в С и

  • как a ? b : (c = d) в C ++.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]