条件运算符的奇怪用法 (>?=)



我正在看一些代码,看到这样的东西:

int d = 1;
int somethingbigger = 2;
d >?= somethingbigger;
cout << d << endl;

我认为这应该输出2。但是我甚至不能用gcc 4.5.2编译这个。代码是在2005年编写的,并使用gcc 3.4.4编译(不是100%确定)。

谁能解释一下这是如何工作的,为什么我不能用最近的编译器编译这个

这是"maximum"赋值操作符,一个GCC扩展。

  • 如果扩展未启用,那么您将无法使用此功能。

  • 从4.0.1开始:

    g++最小和最大算子 (<?>?) 及其复合形式(<?=)和>?=)已被弃用,并将被使用在未来版本中删除。使用这些操作符的代码应该是修改为使用std::min和std::max。

  • 看起来它们在4.0.4就消失了

这不是c++代码

它使用的是gnu扩展,并且是完全不可移植的。

只需将其替换为符合标准的代码:

if (d < somethingbigger) d = somethingbigger;

IIRC,这是d = max(d, somethingBigger)的缩短版本;或者

d = (d < somethingbigger) ? somethingbigger : d;

有段时间没看到这个了,我很确定这是GCC的GNU扩展

最新更新