C++鲜为人知的符号

目录

目录 1

1. 引言 1

2. 少为人知的符号表1 1

2.1. 符号表 1

2.2. 代码示例 2

3. 少为人知的符号表2 2

3.1. 符号表 2

3.2. 代码示例 3

附:C++的59个关键词列表 3

引言

这些鲜为人知的C++符号,可直接在代码中使用,但实践中不推荐这么做,可作为茶余饭后的乐趣了解C++的另一面。

虽然它们鲜为人知,但却不是GNU
g++独有的,而是C++标准定义的,找一本C++标准书或pdf文档看看,就可以见到它们赫然在目。(注:C++17标准已不支持这些鲜为人知的符号)

少为人知的符号表1

符号表

代码中,可用左边的替代右边的:

可选的符号可替代的常见符号
<%{注意不能替代函数定义的{
%>}注意不能替代函数定义的}
<:[
:>]
%:#
%:%:##
and&&
or||
xor^
bitor|
compl~
bitand&
and_eq&=
or_eq|=
xor_eq^=
not!
not_eq!=

代码示例

// GNU g++编译方法:g++ -g -o a a.cpp
#include <stdio.h>

int main()
{
        int N = 2;

        for (int i=0; i<N; ++i)
        <%
                printf("%d\n", i);
        %>

        return 0;
}

少为人知的符号表2

三个字符等同单个字符,GNU
g++编译时需要指定编译参数“-trigraphs”。注意,这个特性从C++2017标准开始已不支持。

符号表

可选的符号可替代的常见符号
??=#
??/\
??’^
??([
??)]
??<{
??>}
??!|
??-~

代码示例

// 注意使用GNU g++编译以下代码,需要指定编译参数“-trigraphs”
// g++ -g -o b b.cpp -trigraphs
#include <stdio.h>

// 下一语句完全等同于:#define index(array, i) array[i]
??=define index(array, i) array??(i??)

int main()
{
        int m[] = { 3, 7 };
        printf("m[0]=%d, m[1]=%d\n", index(m, 0), index(m, 1));
        return 0;
}

附:C++的59个关键词列表

asmdoifreturntypedef
autodoubleinlineshorttypeid
booldynamic_castintsignedtypename
breakelselongsizeofunion
caseenummutablestaticunsigned
catchexplicitnamespacestatic_castusing
charexportnewstructvirtual
classexternoperatorswitchvoid
constfalseprivatetemplatevolatile
const_castfloatprotectedthiswchar_t
continueforpublicthrowwhile
defaultfriendregistertrue
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值