时间:2013-04-20 23:55:40

标签: c++ overloading variable-assignment operator-keyword

我在代码中看到<?=和>?= http://community.topcoder.com/stat?c=problem_solution&rm=151152&rd=5854&pm=2923&cr=310333

我试图在没有包含的情况下进行编译,以测试它是否符合标准,但它没有用。然后我添加了包含,但它仍然给出了同样的错误:

  

question-mark.cpp:15:5:错误:在'?'之前预期的primary-expression   token question-mark.cpp:15:6:错误:期望的primary-expression   在'='之前令牌问号-mark.cpp:15:9:错误:预期':'之前   ';'token question-mark.cpp:15:9:错误:期望的primary-expression   在';'标记之前

#include <stdio.h>
#include <algorithm> 
#include <iostream> 
#include <sstream> 
#include <string> 
#include <vector> 

using namespace std;

int main()
{

    int x = 3;
    int y = 2;
    x >?= y;
    printf("x = %d\n", x);

    return 0;
}

以下是链接代码中的使用方法:

x <?= h[i][j];  // x = (h[i][j] < x) ? h[i][j] : x;

我该如何做到这一点?

2 个答案:

答案 0 :(得分:9)

这些是GCC扩展运营商。 a <?= ba = min(a, b)具有相同的含义(>?=是“max”运算符),但它仅评估其左侧表达式一次。当a是变量时,这并不重要,但当a表示表达式时,它可能会有所不同,尤其是当表达式具有副作用时。例如,在

*dest++ <?= *src++;

++中的dest++只会评估一次。

这两个运营商现在都是deprecated

答案 1 :(得分:3)

这是GCC扩展。 x >?= y相当于:

x = max(x, y);

我有一段时间没见过它。