C++中的<?=运算符是什么?

3

可能是重复问题:

我想知道在C++代码中经常看到的<?=运算符是什么意思。它在我的系统上无法编译,但我确定它是正确的。它被用在这样的地方:a <?= something;

另外,我需要做些什么才能编译它呢?

编辑帖子:

请参见此源代码(这是一个Google Code Jam比赛的获胜者的问题Square Fields(问题B)的解决方案--请参见此处)。我也在其他一些提交中看到了相同的字符模式。

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<numeric>
#include<cmath> using namespace std;

#define ALL(t) t.begin(),t.end()
#define FOR(i,n) for (int i=0; i<(int)(n); i++)
#define FOREACH(i,t) for (typeof(t.begin()) i=t.begin(); i!=t.end(); i++) typedef vector<int> vi; typedef long long int64;

int t[15][1<<15]; int main() {   int N;cin>>N;   for(int c=1;c<=N;c++){
    int n,k,x[30],y[30];
    cin>>n>>k;
    FOR(i,n)cin>>x[i]>>y[i];
    FOR(take,1<<n)if(take){
      int minx=1000000,maxx=-1,miny=1000000,maxy=-1;
      FOR(i,n)if(take&1<<i)minx<?=x[i],maxx>?=x[i],miny<?=y[i],maxy>?=y[i];
      t[1][take]=(maxx-minx)>?(maxy-miny); //      cout<<take<<" "<<t[1][take]<<endl;
    }
    for(int kk=2;kk<=k;kk++)FOR(take,1<<n){
      t[kk][take]=t[kk-1][take];
      for(int take2=take;take2;take2=(take2-1)&take)
        t[kk][take]<?=t[kk-1][take-take2]>?t[1][take2];
    }
    cout<<"Case #"<<c<<": "<<t[k][(1<<n)-1]<<endl;   }   return 0; }

3
这一定是笔误,在一个合理的符合C++标准的编译器上不可能通过编译。它既不是三连字符也不是双连字符,而且在我多年从事C++编程的经历中,我从未见过<?= 。你能提供更多背景信息吗?(比如包含这个代码片段的文本)有可能你正在查看的代码根本就不是C++代码。 - In silico
1
它在我的系统上无法编译,但我确信它是正确的。难道它无法编译的事实不足以证明它是错误的吗?学会相信你的编译器 - 它在这些方面通常是正确的,比你更加准确... :) - Mac
1
刚刚发现这是旧版本的GCC C++编译器中存在的扩展,这可能就是为什么我从未见过这样的运算符。已标记为重复。 - In silico
不,Mac,很抱歉但在一个系统上编译失败并不一定意味着它是错误的。有许多具有略微不同功能的不同编译器。 - Grega Kešpret
@Grega:尽管在某些情况下它可能会编译,但这并不一定意味着它是正确的。标准是评判编译器行为是否正确的方式,而这不是符合标准的特性。话虽如此,我承认“正确”的实际定义比“符合标准”要广泛一些,在这方面我不能说我完全不同意你。无论如何,应该避免使用它,因为它不可移植。 - Mac
显示剩余3条评论
3个回答

4

编辑:

这是旧版本的GCC中的一个扩展。请参见此链接:

什么是 >?= 运算符的含义?

但是,这些扩展是 <?>?。我仍然没有看到 <?=

C++中的最小值和最大值运算符


之前的帖子:

我向您保证,在C++中没有这样的运算符。这肯定是一个打字错误。

程序员很可能想要输入 <= 或者 ?:

或者也许您在这里打错了,实际上您想要输入一个双字符或三字符序列(但您输入的既不是双字符也不是三字符)。

正如您自己所说的 它在我的系统上无法编译。那怎么可能呢?这是个打字错误。


1
看起来 a <?= b 的意思是 a = min(a, b),也就是说它是 <? 运算符的赋值形式。 - hammar
@hammar: 但是a<?b返回最小值,因此在<?= 中进行赋值不会有任何区别。 - Nawaz
<? 就像 <?=, + 就像 += 一样。因此它不仅计算最小值,还将结果分配给 a - hammar
@hammar:哦,现在有意义了。 - Nawaz

1

我本来想说它是一个三字符运算符,但它甚至都不是。这可能是一个打字错误。


0

你是否可能把这个运算符搞混了: a ? b : c。 否则,请发布一些包含该运算符的代码链接,因为它绝对不是正常的C++。 它可以是另一种编程语言,但在谷歌上搜索它会彻底什么都没有,所以我认为那不是答案。


我发布了一个示例代码,但由于我的问题已经得到解答,所以不再需要。 - Grega Kešpret

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