全部博文(2759)
分类: C/C++
2015-01-23 11:11:04
原文地址:C++鲜为人知的符号 作者:Aquester
这些鲜为人知的C++符号,可直接在代码中使用,但实践中不推荐这么做,可作为茶余饭后的乐趣了解C++的另一面。
虽然它们鲜为人知,但却不是GNU g++独有的,而是C++标准定义的,找一本C++标准书或pdf文档看看,就可以见到它们赫然在目。
代码中,可用左边的替代右边的:
可选的符号 |
可替代的常见符号 |
|
<% |
{ |
注意不能替代函数定义的{ |
%> |
} |
注意不能替代函数定义的} |
<: |
[ |
|
:> |
] |
|
%: |
# |
|
%:%: |
## |
|
and |
&& |
|
or |
|| |
|
xor |
^ |
|
bitor |
| |
|
compl |
~ |
|
bitand |
& |
|
and_eq |
&= |
|
or_eq |
|= |
|
xor_eq |
^= |
|
not |
! |
|
not_eq |
!= |
|
// 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; } |
三个字符等同单个字符,GNU g++编译时需要指定编译参数“-trigraphs”。
可选的符号 |
可替代的常见符号 |
??= |
# |
??/ |
\ |
??’ |
^ |
??( |
[ |
??) |
] |
??< |
{ |
??> |
} |
??! |
| |
??- |
~ |
// 注意使用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; } |
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 |
|