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

Jas*_*per 4 c++ compiler-construction conditional

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

int d = 1;
int somethingbigger = 2;

d >?= somethingbigger;

cout << d << endl;
Run Code Online (Sandbox Code Playgroud)

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

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

Lig*_*ica 13

这是"最大"赋值运算符,是GCC扩展.

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

  • 从4.0.1开始:

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

  • 看起来他们已经走了4.0.4.


Ben*_*igt 5

那不是C++代码.

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

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

if (d < somethingbigger) d = somethingbigger;
Run Code Online (Sandbox Code Playgroud)