Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 637
Leandro Avatar asked Apr 20 '13 23:04

Leandro


1 Answers

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.

like image 51
Sergey Kalinichenko Avatar answered Sep 22 '22 07:09

Sergey Kalinichenko