首先我們來看兩段簡單的程序,如果你不進行編譯運行 , 猜一猜結果分別是多少?
程序一
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
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
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。