C++,那些可爱的小陷阱(三)
生活随笔
收集整理的這篇文章主要介紹了
C++,那些可爱的小陷阱(三)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們沿襲忠于標準的傳統,還是首先來看一個標準中的例子
??=define arraycheck(a,b) a??(b??) ??!??! b??(a??)
這真是一段XE的代碼,你看懂什么意思了么?好吧這次厚道點立刻上答案:
#define arraycheck(a,b) a[b] || b[a]
這個代碼盡管是用來演示三元轉義符的,但是我看到這個宏定義暗示另一個非常古怪的語法,在沒有重載[]運算符的情況下,a[b]和b[a]總是完全等價的。所以在任何你使用了a[1]的時候,你都可以替換成1[a],盡管這看起來非常詭異。似乎這一點頗得標準編寫者的喜愛,居然在一個完全無關的場合明里暗里地提了一下這個事情。
好吧我們言歸正傳,這些詭異的用法是C++的三元轉義符,所幸它們數量不多,請看下表:
| 三元符 | 用以替代 | 三元符 | 用以替代 | 三元符 | 用以替代 |
| ??= | # | ??( | [ | ??< | { |
| ??/ | \ | ??) | ] | ??> | } |
| ??' | ^ | ??! | | | ??- | ~ |
int?main()
{
????//Isn't?it?right??????????????????????????????/
????printf("Hello?world!\n");
} 跟三元轉義符相似,C++里面還有一種token替代語法,跟三元轉義符相比,它們不是純文本替換,它們自己是token的一種,可以算作對應token的別名,數量則稍微多了點:
| 替代的 | 原有的 | 替代的 | 原有的 | 替代的 | 原有的 |
| <% | { | and | && | and_eq | &= |
| %> | } | bitor | | | or_eq | |= |
| <: | [ | or | || | xor_eq | ^= |
| :> | ] | xor | ^ | not | ! |
| %: | # | compl | ~ | not_eq | != |
| :% | ## | bitand | & | ? | ? |
from: http://www.cnblogs.com/winter-cn/archive/2009/11/19/1606479.html
總結
以上是生活随笔為你收集整理的C++,那些可爱的小陷阱(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++,那些可爱的小陷阱(二)
- 下一篇: 今天碰到一道比较有趣的面试题,大家来探讨