2013-05-21 33 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