【问题标题】:Weird usage of conditional operator (>?=) [duplicate]条件运算符(>?=)的奇怪用法
【发布时间】:2011-10-21 21:48:30
【问题描述】:

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

int d = 1;
int somethingbigger = 2;

d >?= somethingbigger;

cout << d << endl;

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

谁能解释一下它是如何工作的以及为什么我不能用最近的编译器编译它。

【问题讨论】:

标签: c++ compiler-construction conditional


【解决方案1】:

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

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

  • As of 4.0.1:

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

  • 看起来像they were gone by 4.0.4。

【讨论】:

  • 这是什么*********???
  • 哦,对不起,我只是对 GCC 中存在这样的东西感到惊讶。不错的答案。 :) +1
  • @Mehrdad:好吧,它不再是了:P
【解决方案2】:

那不是 C++ 代码。

它使用了一个仅限 gnu 的扩展,并且完全不可移植。

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

if (d < somethingbigger) d = somethingbigger;

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-13
      • 2019-11-17
      • 2015-02-01
      • 2011-12-10
      • 2010-12-16
      • 1970-01-01
      • 2011-04-05
      • 2012-07-29
      • 1970-01-01
      相关资源
      最近更新 更多