程序让生活更美好

半亩方塘 天光云影

  C++博客 ::  :: 新随笔 :: 联系 ::  :: 管理 ::
  55 随笔 :: 4 文章 :: 202 评论 :: 0 Trackbacks

三字符组 ( 三字符序列 )

首先我们来看两段简单的程序,如果你不进行编译运行 , 猜一猜结果分别是多少?

程序一

 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著》

posted on 2006-07-30 22:15 北风之神007 阅读(2756) 评论(6)  编辑 收藏 引用 所属分类: c/c++

评论

# re: 三字符组(三字符序列) 2007-03-21 20:27 Nameless
昏迷,这也可以,学习了  回复  更多评论
  

# re: 三字符组(三字符序列) 2007-04-11 08:30 帅哥
强,以前从来都不知道  回复  更多评论
  

# re: 三字符组(三字符序列) 2007-08-02 16:12 zhang
我是查 什么是 三字符序列,查到这网页的。

为什么差?因为我看到日文的misra-c标准一书,第7条规则:
3文字表記は使用してはならない。(3字符记号不得使用)

此条规定是强制性的,而网上查了一下中文的misra-c标准,
上面却说是不得用三目运算符

所以,我为了搞清楚什么是三字符序列,因为那本书上也列出了
楼主的字符集,本来不知道,从来没看到过。。。

多谢楼主,长知识了,嗬嗬,谢谢!!!  回复  更多评论
  

# re: 三字符组(三字符序列) 2008-10-13 09:40 wangxi
好东西,学习了  回复  更多评论
  

# re: 三字符组(三字符序列) 2011-12-09 11:12 飞飞龙
学习了  回复  更多评论
  

# re: 三字符组(三字符序列) 2014-06-05 10:17 luoage
gcc 不识别3字符组

gcc version egcs-2.91.57 19980901 (egcs-1.1 release)

但是识别 //\/

  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理