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

时间:2011-08-07 17:15:10

标签: c++ compiler-construction conditional

我正在查看一些代码并看到类似这样的内容:

int d = 1;
int somethingbigger = 2;

d >?= somethingbigger;

cout << d << endl;

我认为这应该输出2.但我甚至无法用gcc 4.5.2编译它。 该代码编写于2005年,使用gcc 3.4.4编译(不是100%肯定)。

有人可以解释这是如何工作的,以及为什么我不能用最近的编译器编译它。

3 个答案:

答案 0 :(得分:13)

这是“最大”赋值运算符a GCC extension

  • 如果未启用扩展程序,则您将无法使用此功能。

  • As of 4.0.1

      

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

  • 看起来像they were gone by 4.0.4

答案 1 :(得分:5)

那不是C ++代码。

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

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

if (d < somethingbigger) d = somethingbigger;

答案 2 :(得分:0)

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

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

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