目录
引言
这些鲜为人知的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个关键词列表
asm | do | if | return | typedef |
---|---|---|---|---|
auto | double | inline | short | typeid |
bool | dynamic_cast | int | signed | typename |
break | else | long | sizeof | union |
case | enum | mutable | static | unsigned |
catch | explicit | namespace | static_cast | using |
char | export | new | struct | virtual |
class | extern | operator | switch | void |
const | false | private | template | volatile |
const_cast | float | protected | this | wchar_t |
continue | for | public | throw | while |
default | friend | register | true |