上面的代碼是段合法的cpp代碼嗎? 答案當然是是的. 這些 問號 是個什麼鬼?它們就是cpp標準中定義的 "Trigraph(MS)" .之所以出現這些神奇的符號,主因主要是字元集的問題.簡單來說可以理解為某些老外的鍵盤沒有"{","|","\"這些符號.所以需要用這種類似"轉義字元"的東東來表達c ...
??=include <stdio.h>
class HelloWolrd
??<
public:
void Trigraph()
??<
printf("Hellow Trigraph");
??>
??>;
static bool DemoBools ??(1 ??) = ??< false ??>;
int main()
??<
HelloWolrd* Trig = new HelloWolrd();
if (??-DemoBools??(0??) )
??<
Trig->Trigraph();
??>
return 0;
??>
上面的代碼是段合法的cpp代碼嗎?
答案當然是是的.
這些問號是個什麼鬼?它們就是cpp標準中定義的Trigraph(MS).之所以出現這些神奇的符號,主因主要是字元集的問題.簡單來說可以理解為某些老外的鍵盤沒有"{","|",""這些符號.所以需要用這種類似"轉義字元"的東東來表達cpp語法里所需要的符號.
所謂Trigraph一共只有這9種,沒有其他的.
Trigraph | Punctuation Character |
---|---|
??= | # |
??( | [ |
??/ | \ |
??) | ] |
??' | ^ |
??< | { |
??! | |
??> | } |
??- | ~ |
所以在cpp代碼里,以上符號是等價的. 其實除了Trigraph,還有Digraphs.
有興趣的同學可以參考以下兩個連接:
Purpose of Trigraph sequences in C++?
Why are there digraphs in C and C++
上述代碼通過vs2015-v140編譯,你問我為什麼你編就不行?你試試/Zc:trigraphs :)