37

我观察到在 GCC中有某个时刻 a<?和运算符。>?如何在 GCC 4.5 下使用这些?它们是否已被删除,如果是,何时删除?

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

2 回答 2

38

最近的手册

G++ 最小和最大运算符('<code><?' 和 '<code>>?')及其复合形式('<code><?=')和 '<code>>?=')已被弃用现在已从 G++ 中删除。使用这些运算符的代码应修改为使用std::minandstd::max代替。

快速搜索过去的文档似乎表明它们在 4.0 版左右被删除(3.4.6 包括它们,4.0.4 没有)。

于 2010-08-09T04:55:20.290 回答
8

g++不是C 编译器)的早期迭代使用这些运算符来为您提供最小值或最大值,但长期以来它们已被弃用,取而代之的是std::minand std::max

基本上,它们等同于(但不可能aor进行双重评估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++“扩展”(尤其是那些已被弃用和/或删除的),因为它们将我与该语言的特定实现联系在一起。

你永远不应该使用一个非标准的扩展,其中一个完全足够的标准方法是可用的。

于 2010-08-09T04:57:00.587 回答