C++对and、or等运算符的支持
// test.c // gcc test.c --- compile error #include <stdio.h> int main() { int a = (0) or (0); printf("%d", a); return a; }
上面这段c代码能编译通过吗?答案是不能。gcc test.c
增加一个头文件,换成这样呢:
// test.c // gcc test.c --- compile success #include <stdio.h> #include <iso646.h> int main() { int a = (0) or (0); printf("%d", a); return a; }答案是能!
对于C++,不增加头文件,依然能编译过下面的test.cpp文件。
// test.cpp // g++ test.cpp ---- compile success<pre name="code" class="cpp">#include <stdio.h> #include <stdio.h> int main() { int a = (0) or (0); printf("%d", a); return a; }
Oh shit, g++什么时候自动支持这么”牛逼“的运算符了,这不是php和python的专利吗?不光是and or,ISO646标准一口气支持了一堆运算符:
宏 | 定义为 |
---|---|
and |
&& |
and_eq |
&= |
bitand |
& |
bitor |
| |
compl |
~ |
not |
! |
not_eq |
!= |
or |
|| |
or_eq |
|= |
xor |
^ |
xor_eq |
^= |
为什么这么做:http://zh.wikipedia.org/wiki/Iso646.h
做到了什么程度:http://zh.wikipedia.org/wiki/ISO/IEC_646
之所以发本文,是发现OceanBase代码中我写了一个or,被千拂同学review的时候发现。不过,居然没有被编译器发现。最近php写多了是么?