三字符组 ( 三字符序列 )

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

  #include <iostream>
  #include <iomanip>
  using namespace std;
  
  int main()
  {
      int x=1;
      // 结果是多少 ?递增?????/
      ++x;
     cout<<x<<endl;
     return 0;
 }

程序二

  #include <iostream>
  #include <iomanip>
  using namespace std;
  
  int main()
  {
      int x=1;
      // 结果是多少 ?递增?????/
  
     ++x;
     cout<<x<<endl;
     return 0;
 }

你猜出运行结果了么?现在我们就来揭示谜底,第一个程序的结果是1,第二个程序的运行结果是2。 哈哈,你或许会不解吧,这里就是我们需要讲的“三字符组”,也叫着“三字符序列”。

三字符序列不太常见,但C++标准允许把某些字符指定为三字符序列。三字符序列就是用于表示另一个字符的三个字符序列。以前为了表示键盘上没有的字符,这是必不可少的一种方法。

具体的三字符序列转义的对应关系如下表: 字符串 转义后的含义 ??=

??( [ ??) ] ??/
??< { ??> } ??' ^ ??! | ??- ~

我们现在已经基本知道什么是三字符组了,那么我们在来分析一下前面遇到的程序。 程序1中,在第8行,那是一行注释,//让后面的部分编程注释,但是问题就在这里了,??/,这其实就是一个三字符组了,前面两个??就意味着这里后面就会发生转义。这个程序中,“??/”就会被转义成“\”, 而把这个符号放在一行的末尾就相当于将接下来的一行粘贴到这一行的末尾,所以本程序中的“++x”也就成了注释的一部分,那么我们的结果是1就不足为奇了,而第二个程序的三字符组后面跟的是一行空白,所以不影响到下面的一行代码,“++x”照常执行,所以结果就是2。

此文完。 参考自《Exceptional C++ style中文版/Herb Sutter著》

转载于:https://my.oschina.net/jack088/blog/967777

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值