2013-05-21 77 views
56

我看到一些舊的代碼下面的代碼:意義 - `在C++代碼

size_t a = 1 ???- 2 :0; 

是什麼符號???-意味着C++?我應該怎麼理解它?

謝謝!

+6

'???'只能用於評論。 :) –

+1

爲這個操作員提供一個假的含義很有趣。 '??? - '可能是'真的嗎?我感到震驚!'例如,一個'?'向編譯器提示第一個分支很少被使用。 – Patashu

+11

強制性WTF操作員提及:??!??! – chris

回答

96

它實際上是:

size_t a = 1 ? ~2 :0; 

??-trigraph~


三字母是從舊時代......之前我們中的一些人甚至誕生了。

回到過去,有些角色並不總是被支持。一個不知情的程序員會嘗試輸入這樣一個字符,只是發現它並不存在於鍵盤上!

enter image description here
圖片來源:http://www.myoldmac.net/cgi-data/forum/phpBB2/viewtopic.php?t=305

所以加入三字母以允許程序員訪問這些字符的功能時,它們不存在(無論是在編碼或從鍵盤)。

現在,它們已經過時了,並且在混淆讀者方面比在舊標準中混淆更有效。

因此,無論這個代碼是真的老,或作者是一個混蛋。

+0

在點擊之前我看到通知出現了10毫秒,我無法做任何事情:p – chris

+0

謝謝!雖然這對我來說很奇怪。 – taocp

+15

我投(b),作者是一個混蛋。 'a = 1? 〜2:0'被混淆爲'a =〜2'的長手。 Trinary運算符只有一個原因:混淆代碼。添加三角形來混淆代字符只會讓蛋糕變得冰冷。 –

14

??-是用於撇號~字符的三元組;行等效於:

size_t a = 1 ? ~2 :0; 
6

??-~字符三字符。其他一些三字母是:

??= for # 

??/ for \ 

??' for^

??! for | 

現在使用trigraphs非常罕見。

+9

*「三字母的使用現在非常罕見。」* - 不在SO中。 –

+0

也許也在編程謎題和代碼高爾夫球場 – 707

+6

@Yawz我認爲他們會用'〜'去'' - ''如果只用於字符計數。 – TankorSmash