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