【问题标题】:What is <?= in C++? [duplicate]什么是 C++ 中的 <?=? [复制]
【发布时间】:2011-06-11 16:30:27
【问题描述】:

可能重复:
C extension: <? and >? operators

看看这个Google Code Jam的问题D的最佳答案(通过sclo)。是C++代码,一定是编译过的,里面有这样的语句:

double& ret = F[mask][cur][b];
if(j==cur) {
  ret<?=f(tmp,j,b||bad[i])+M[cur][i];   // WTF is <?=   ???
}

这在我的 Visual Studio 2008 中无法编译。&lt;?= 是什么意思?

【问题讨论】:

  • 会不会是C++0x代码?!如果是,则在VS2008中无法编译。
  • 我不知道,文件扩展名是CPP。几年前我与 C++ 语言失去了联系。
  • 一定是错字,g++和clang++都认不出来。
  • 我的第一个预感是它会是digraph or trigraph,但它看起来不像任何已知序列。
  • 哇,10 票投给了一个重复的问题!

标签: c++


【解决方案1】:

这是一个 gcc 扩展:C extension: <? and >? operators

近期手册say

G++ 最小和最大运算符(‘&lt;?’和‘&gt;?’)及其复合形式(‘&lt;?=’)和‘&gt;?=’)已被弃用,现在已从 G++ 中删除。使用这些运算符的代码应修改为使用std::minstd::max...

【讨论】:

  • +1:从版本 4 左右的 GCC 中删除(来自链接页面上的答案)。
【解决方案2】:

这根本不是有效的 C++。 &lt; 可能小于,用于模板参数列表的左尖括号,或有向图的开头,但这些都不能跟随 ?,然后是 =

【讨论】:

    【解决方案3】:

    这是一个现已弃用的 g++ 对 c++ 语言的扩展。

    a &lt;? b 是最小值,返回数值 a 和 b 中较小的一个;

    a &gt;? b 是最大值,返回数值 a 和 b 中的较大者。

    还有复合版本

    &lt;?=

    &gt;?=

    也做任务。

    【讨论】:

      【解决方案4】:

      它也不能用 GCC 编译,我从未听说过运算符 &lt;?=

      无论如何,我会大胆猜测a&lt;?=b 的语义可能类似于:a = (a&lt;b) ? b : a,但同样,这只是一个猜测。

      【讨论】:

        猜你喜欢
        • 2011-08-06
        • 1970-01-01
        • 2012-03-17
        • 1970-01-01
        • 2011-10-24
        • 2011-04-04
        • 1970-01-01
        • 1970-01-01
        • 2013-01-23
        相关资源
        最近更新 更多