看看这个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中编译。<?=
是什么意思?
答案 0 :(得分:19)
这是一个gcc扩展名:C extension: <? and >? operators
最近的手册say:
G ++最小和最大运算符('
<?
'和'>?
')及其复合形式('<?=
')和'>?=
')已弃用,现已从G ++中删除。应修改使用这些运算符的代码,以使用std::min
和std::max
代替...
答案 1 :(得分:3)
这根本不是有效的C ++。 <
可能小于,模板参数列表的开放角括号,或者有向图的开头,但不是?
,然后是=
。
答案 2 :(得分:3)
这是c ++语言现在已弃用的g ++扩展。
a <? b
是最小值,返回数值a和b中较小的一个;
a >? b
是最大值,返回数值a和b中较大的一个。
还有复合版本
<?=
和
>?=
也可以进行作业。
答案 3 :(得分:0)
它也不能用GCC编译,我从未听说过运算符<?=
。
无论如何,我会猜测a<?=b
可能有一个像a = (a<b) ? b : a
这样的语义,但同样,这只是猜测。