2011-08-07 14 views
4

私はいくつかのコードを見て、このような何かを見た:奇妙な使用法は

int d = 1; 
int somethingbigger = 2; 

d >?= somethingbigger; 

cout << d << endl; 

は、私は、これは出力2しかし、私はしても、GCC 4.5でこれをコンパイルすることはできませんすべきだと思うが.2。 コードは2005年に書かれ、gcc 3.4.4(100%は確実ではない)でコンパイルされました。

これがどのように動作するのか、最近のコンパイラでこれをコンパイルできない理由を説明できる人がいますか?

+5

http://stackoverflow.com/questions/3437410/c-extensionの複製としてクローズされたhttp://stackoverflow.com/questions/4734396/what-is-in-c/4734502#4734502の重複 - と - 演算子 – IronMensan

答えて

13

これは、「最大」代入演算子a GCC extensionです。

  • 拡張機能が有効になっていない場合は、この機能を使用できません。

  • As of 4.0.1

    G ++最小および最大演算子<?>?およびそれら 化合物形態(<?=)と>?=)が推奨されていると 将来のバージョンでは削除されます。これらの演算子を使用するコードは、 をstd :: minとstd :: maxを代わりに使用するように変更する必要があります。

  • they were gone by 4.0.4のように見えます。

+0

*****はこれです***** ??? – Mehrdad

+0

@Mehrdad:すみません。 –

+0

ああ申し訳ありませんが、私はちょうどGCCでこのようなものの存在に驚いていました。いい答え。 :) +1 – Mehrdad

5

これはC++コードではありません。

これはgnu-only拡張を使用しており、完全に移植できません。

ただ、標準に準拠したコードに置き換えます

if (d < somethingbigger) d = somethingbigger; 
0

をIIRC、これはD = MAX(D、somethingBigger)の短いバージョンです。または

d = (d < somethingbigger) ? somethingbigger : d; 

これはしばらくは見たことがありませんでしたが、GCCのGNU拡張機能については確信しています。