<?= operator C++ greater less question mark equals sign

て烟熏妆下的殇ゞ 提交于 2019-12-07 00:50:10

问题


I saw <?= and >?= used in a code: http://community.topcoder.com/stat?c=problem_solution&rm=151152&rd=5854&pm=2923&cr=310333

I tried to compile without the includes to test if it's standard, but it didn't work. I then added the includes, but it still gives the same error:

question-mark.cpp:15:5: error: expected primary-expression before ‘?’ token question-mark.cpp:15:6: error: expected primary-expression before ‘=’ token question-mark.cpp:15:9: error: expected ‘:’ before ‘;’ token question-mark.cpp:15:9: error: expected primary-expression before ‘;’ token

#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;
}

Here's how it is used in the code from the link:

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

How can I make this work?


回答1:


These are GCC extensions operators. a <?= b has the same meaning as a = min(a, b) (>?= is the "max" operator), but it evaluates its left-hand side expression only once. This is not important when a is a variable, but it may make a difference when a represents an expression, especially when the expression has a side effect. For example, in

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

the ++ in dest++ would be evaluated only once.

Both operators have now been deprecated.




回答2:


It's a GCC extension. x >?= y is equivalent to:

x = max(x, y);

I haven't seen it used in a while though.



来源:https://stackoverflow.com/questions/16126507/operator-c-greater-less-question-mark-equals-sign

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!