C++对and、or等运算符的支持

原创 2014年12月01日 10:50:04
// 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写多了是么?


版权声明:本文为博主原创文章,未经博主允许不得转载。微信hustos联系博主。 https://blog.csdn.net/maray/article/details/41644235

C++语言基础

C++是一门高效而实用的程序设计语言,本课详细介绍C++语言中的封装、数据隐藏、继承、多态的实现,主要包括类的声明、对象定义、构造函数和析构函数、运算符重载、继承和派生、多态性实现等。课程需要有C语言程序设计的基础(可以利用本人开出的《C语言与程序设计》系列课学习)。课程继续关注学习者能够通过实践的方式,学会利用C++语言解决问题,具备进一步学习利用C++开发应用程序的基础。
  • 2015年03月01日 10:55

C++中运算符 &和&&、|和|| 的区别

简介:&&是逻辑与运算符,||是逻辑或运算符,都是逻辑运算符,两边只能是bool类型 &与| 既可以进行逻辑运算,又可以进行位运算,两边既可以是bool类型,又可以是数值类型区别:if (A && ...
  • violet_echo_0908
  • violet_echo_0908
  • 2015-08-10 11:08:36
  • 34481

C++ 编译时'setw' was not declared in this scope问题

学习C++时,对cout输出设定域宽时,使用setw()后编译报错:'setw' was not declared in this scope 在网上查询,发现是需要include一个文件:#incl...
  • u012655611
  • u012655611
  • 2016-04-08 13:23:40
  • 4598

C++11新特性之and, and_eq, or, or_eq, xor, xor_eq, not, not_eq操作符

在C++11标准中,新增了一些关键字,这些关键字也是操作符:and, and_eq, or, or_eq, xor, xor_eq, not, not_eq, bitand, bitorand表示逻辑...
  • oyoung_2012
  • oyoung_2012
  • 2017-12-05 11:56:45
  • 391

C++ 按位与、或、异或等运算方法

位运算
  • SenyeLicone
  • SenyeLicone
  • 2016-08-12 23:01:55
  • 16906

C++ 异或运算

c/c++的|、||、&、&&、异或、~、!运算  (2011-09-16 15:19:50) 转载▼ 标签:  运算符   右移   二进制  ...
  • tangyanzhi1111
  • tangyanzhi1111
  • 2014-03-21 09:58:52
  • 60516

C++ 中的异或操作^

好好的利用异或可以产生神奇的效果。 异或运算的性质: 任何一个数字异或它自己都等于0。也就是说,如果我们从头到尾依次异或数组中的每一个数字,那么最终的结果刚好是那个只出现一次的数字,因为那些出现两次的...
  • u012192662
  • u012192662
  • 2015-04-02 15:45:38
  • 4692

让C++直接支持and/or操作符

只要包含头文件#include 就可以直接使用and/or操作符,而不是丑陋的 &&/ || 。这是在看OpenPhase源码的时候发现的。...
  • SinjoyWong
  • SinjoyWong
  • 2016-12-28 11:41:36
  • 197

C++ 位运算总结

关于逻辑移位、算术移位可参见迅雷深大笔试题部分。的一道题。 以前看到C++标准上说,移位运算符(>)出界时的行为并不确定: The behavior is undefined if the...
  • zhang2531
  • zhang2531
  • 2016-09-09 16:59:28
  • 3075

如何混合使用C和C++(上)

32] How to mix C and C++ 如何混合使用C和C++ (Part of C++ FAQ Lite, Copyright © 1991-2006, Marshall Cline, ...
  • xjbclz
  • xjbclz
  • 2016-07-02 15:23:11
  • 1914
收藏助手
不良信息举报
您举报文章:C++对and、or等运算符的支持
举报原因:
原因补充:

(最多只允许输入30个字)