C++中的<?=是什么?

13

可能重复:
C扩展:<?和>?运算符

看看这个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中无法编译。请问<?=是什么意思?


这可能是C++0x的代码吗?如果是,那么它无法在VS2008中编译。 - Rafid
我不知道,文件扩展名是CPP。我几年前就失去了对C++语言的接触。 - ripper234
一定是打错了,g++和clang++都无法识别它。 - ismail
我的第一反应是它可能是一个digraph或trigraph,但它看起来不像任何已知的序列。 - Péter Török
哇,一個重複的問題竟然有10個投票! - ripper234
4个回答

19

这是gcc的扩展:C扩展:<?和>? 运算符

近期的手册说:

G++中的最小和最大运算符(“<?”和“>?”)及其复合形式(“<?=”)和“>?=”已被弃用,并从G++中删除。使用这些运算符的代码应被修改以使用std::minstd::max代替...


2
+1:从链接页面的答案中可以看出,这个功能在大约4版本左右的GCC中被移除了。 - xk0der

3

这不是有效的C++代码。<可能表示小于号,也可能表示模板参数列表的开放角括号,或者是双字母符号的开始,但是它们都不能跟随?,然后再加上=。


3

这是一种现已弃用的 g++ 扩展,用于 c++ 语言。

a <? b 是返回数字值 a 和 b 中较小的一个;

a >? b 是返回数字值 a 和 b 中较大的一个。

还有复合版本

<?=

>?=

也可以进行赋值操作。


0

即使使用GCC编译,它也无法编译,并且我从未听说过运算符<?=

无论如何,我猜测a<?=b可能具有类似于a = (a<b) ? b : a的语义,但这只是一个猜测。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接