C расширение: <? и>? операторы - PullRequest
37 голосов
/ 09 августа 2010

Я заметил, что в какой-то момент в GCC был оператор <? и >?. Как я могу использовать их в GCC 4.5? Были ли они удалены, и если да, то когда?

Offset block_count = (cpfs->geo.block_size - block_offset) <? count;
cpfs.c:473: error: expected expression before ‘?’ token

Ответы [ 2 ]

38 голосов
/ 09 августа 2010

Последние руководства скажем :

Операторы минимума и максимума G ++ (‘<?’ и ‘>?’) и их составные формы (‘<?=’) и ‘>?=’) устарели и теперь удалены из G ++. Код, использующий эти операторы, должен быть изменен для использования std::min и std::max вместо.

Быстрый поиск последних документов, похоже, указывает на то, что они были удалены в версии 4.0 (3.4.6 включает их, 4.0.4 - нет).

8 голосов
/ 09 августа 2010

Более ранние итерации g++ (, а не компилятор C) использовали эти операторы для предоставления вам минимальных или максимальных значений, но они давно устарели в пользу std::min и std::max.

В основном они приравниваются (но без к возможности двойной оценки a или b):

a <? b       -->       (a < b) ? a : b
a >? b       -->       (a > b) ? a : b

С точки зрения их замены (и вы действительно должны заменить их), вы можете использовать что-то вроде:

Offset block_count = cpfs->geo.block_size - block_offset;
if (block_count > count) block_count = count;

или эквиваленты, использующие std::min.

Я не большой поклонник использования "расширений" C / C ++ (особенно тех, которые устарели и / или удалены), так как они привязывают меня к конкретной реализации языка.

Никогда не следует использовать нестандартное расширение, если доступен совершенно адекватный стандартный метод.

...