可能重复:
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扩展:<?和>?运算符
看看这个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中无法编译。请问<?=
是什么意思?
这是gcc的扩展:C扩展:<?和>? 运算符
近期的手册说:
G++中的最小和最大运算符(“
<?
”和“>?
”)及其复合形式(“<?=
”)和“>?=
”已被弃用,并从G++中删除。使用这些运算符的代码应被修改以使用std::min
和std::max
代替...
这不是有效的C++代码。<可能表示小于号,也可能表示模板参数列表的开放角括号,或者是双字母符号的开始,但是它们都不能跟随?,然后再加上=。
这是一种现已弃用的 g++ 扩展,用于 c++ 语言。
a <? b
是返回数字值 a 和 b 中较小的一个;
a >? b
是返回数字值 a 和 b 中较大的一个。
还有复合版本
<?=
和
>?=
也可以进行赋值操作。
即使使用GCC编译,它也无法编译,并且我从未听说过运算符<?=
。
无论如何,我猜测a<?=b
可能具有类似于a = (a<b) ? b : a
的语义,但这只是一个猜测。