У меня есть это выражение
(*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);
Есть ли объяснение этой разнице? Я предполагаю, что это сводится к различиям в порядке приоритетов, используемых компиляторами, но не может точно определить причину
Тернарный условный оператор различен в C и в C ++. Выражение a ? b : c = d
анализируется …
как (a ? b : c) = d
в С и
как a ? b : (c = d)
в C ++.
Других решений пока нет …