C++中的古怪表达式

原创 2015年08月06日 13:33:41

今天偶然发现了一个古怪的表达式


为什么说古怪呢,请大家先看一下以下代码,是不是觉得有什么不对


int a[5] = {1,2,3,4,5};
int b = 4;
auto c = b[a];

如果你觉得没问题,那c是什么?



哈,如果你一看就觉得没问题并知道c的值是5,那你C/C++语法掌握得可谓相当透彻大笑


这代码我在VS2012通过了编译,并且c为int类型,值为5


其实b[a]如果写成a[b]相信大家就都明白了,b[a]会被编译器理解为:*(b+a), 而a[b]则是:*(a+b)


我个人认为编译器应该是这样理解了,所以出现了这种奇怪的写法


同理发现,4[a]  、  (2+2)[a] 之类的、表达式仍可以通过编译,并且也代表a[4]


不知VS之后的版本或者其他编译器是否允许这种用法,但无论是否允许,我认为这种语法需要定义为非法,同时不建议大家这样使用,因为这也容易导致错误的理解

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

关于C++语法的各种稀奇古怪的测试

 #define  MACRO1(a, b)  a(b);  namespace test_old{     class C0     {};      struct S0     {};      ...

C++中的表达式

表达式是由一个或者多个运算对象构成,运算对象之间可以通过运算符连接起来。对表达式求值最后都会得到一个结果。...
  • xholes
  • xholes
  • 2017年03月30日 01:08
  • 379

C++虚继承的古怪行为

在使用菱形继承的时候,虚继承是一种非常管用的办法,可以避免从同一个祖先继承来两份数据。但是从实践看来,虚继承并不仅仅是这一点区别于普通的继承。     虚继承对基类的构造函数的调用和一般的继承是不一...

后处理ug 古古怪怪

  • 2013年05月24日 09:23
  • 1.77MB
  • 下载

古怪的VARIANT_BOOL类型

在进行MFC的ActiveX控件编程时,肯定会遇到布尔型的属性。在VC7中对应的内部类型为VARIANT_BOOL,实际上是一个short型的数据。实际使用过程中最容易碰到以下3个问题 1.在控件的...

古怪的开平方法易语言源码

  • 2015年03月30日 18:52
  • 2KB
  • 下载

小古怪文章系统

  • 2005年06月18日 04:11
  • 0B
  • 下载

Python 列表推导式 一些小的古怪写法 if else for in join

c = a if a>b else b //如果a>b返回a,否则返回b>>> a = 1 >>> b = 2 >>> c = a if a>b else b >>> c 2c = [b,a][...

九个古怪的面试题.

  • 2012年04月11日 22:45
  • 957B
  • 下载

小古怪文章系统

  • 2004年08月27日 10:00
  • 252KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++中的古怪表达式
举报原因:
原因补充:

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