C++鲜为人知的符号.pdf
1. 引言
这些鲜为人知的C++符号,可直接在代码中使用,但实践中不推荐这么做,可作为茶余饭后的乐趣了解C++的另一面。
虽然它们鲜为人知,但却不是GNU g++独有的,而是C++标准定义的,找一本C++标准书或pdf文档看看,就可以见到它们赫然在目。
2. 少为人知的符号表1
2.1. 符号表
代码中,可用左边的替代右边的:
| 可选的符号 |
可替代的常见符号 |
|
|
|
{ |
注意不能替代函数定义的{ |
| %> |
} |
注意不能替代函数定义的} |
| <:> |
[ |
|
| :> |
] |
|
| %: |
# |
|
| %:%: |
## |
|
| and |
&& |
|
| or |
|| |
|
| xor |
^ |
|
| bitor |
| |
|
| compl |
~ |
|
| bitand |
& |
|
| and_eq |
&= |
|
| or_eq |
|= |
|
| xor_eq |
^= |
|
| not |
! |
|
| not_eq |
!= |
|
2.2. 代码示例
| // GNU g++编译方法:g++ -g -o a a.cpp #include
int main() { int N = 2;
for (int i=0; i
printf("%d\n", i); %>
return 0; } |
3. 少为人知的符号表2
三个字符等同单个字符,GNU g++编译时需要指定编译参数“-trigraphs”。
3.1. 符号表
| 可选的符号 |
可替代的常见符号 |
| ??= |
# |
| ??/ |
\ |
| ??’ |
^ |
| ??( |
[ |
| ??) |
] |
| ?? |
{ |
| ??> |
} |
| ??! |
| |
| ??- |
~ |
3.2. 代码示例
| // 注意使用GNU g++编译以下代码,需要指定编译参数“-trigraphs” // g++ -g -o b b.cpp -trigraphs #include
// 下一语句完全等同于:#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 |
|