三字符組 ( 三字符序列 )
首先我們來看兩段簡單的程序,如果你不進行編譯運行 , 猜一猜結果分別是多少?
程序一
1 #include <iostream>
2 #include <iomanip>
3 using namespace std;
4
5 int main()
6 {
7 int x=1;
8 // 結果是多少 ?遞增?????/
9 ++x;
10 cout<<x<<endl;
11 return 0;
12 }
13
程序二
1 #include <iostream>
2 #include <iomanip>
3 using namespace std;
4
5 int main()
6 {
7 int x=1;
8 // 結果是多少 ?遞增?????/
9
10 ++x;
11 cout<<x<<endl;
12 return 0;
13 }
14
你猜出運行結果了么?現在我們就來揭示謎底,第一個程序的結果是1,第二個程序的運行結果是2。
哈哈,你或許會不解吧,這里就是我們需要講的“三字符組”,也叫著“三字符序列”。
三字符序列不太常見,但C++標準允許把某些字符指定為三字符序列。三字符序列就是用于表示另一個字符的三個字符序列。以前為了表示鍵盤上沒有的字符,這是必不可少的一種方法。
具體的三字符序列轉義的對應關系如下表:
字符串
|
轉義后的含義
|
??=
|
#
|
??(
|
[
|
??)
|
]
|
??/
|
\
|
??<
|
{
|
??>
|
}
|
??'
|
^
|
??!
|
|
|
??-
|
~
|
我們現在已經基本知道什么是三字符組了,那么我們在來分析一下前面遇到的程序。
程序1中,在第8行,那是一行注釋,//讓后面的部分編程注釋,但是問題就在這里了,??/,這其實就是一個三字符組了,前面兩個??就意味著這里后面就會發生轉義。這個程序中,“??/”就會被轉義成“\”, 而把這個符號放在一行的末尾就相當于將接下來的一行粘貼到這一行的末尾,所以本程序中的“++x”也就成了注釋的一部分,那么我們的結果是1就不足為奇了,而第二個程序的三字符組后面跟的是一行空白,所以不影響到下面的一行代碼,“++x”照常執行,所以結果就是2。
此文完。
參考自《Exceptional C++ style中文版/Herb Sutter著》