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++ 11之 && 右值引用

最近在看cocos2dx的源代码,发现了一个模板类有一个奇怪的语法&&: inline RefPtr(RefPtr && other) { _ptr = other._ptr...
  • fenghen777
  • fenghen777
  • 2015年07月03日 15:10
  • 4390

C++11中的String&&

String&&并不是指“引用的引用”,也不存在“引用的引用”这种东西。String&& 和 String&是两码事。   String&&是C++11中的特性,叫做“右值引用”。它只能绑定到右值,即...
  • Yeluorag
  • Yeluorag
  • 2016年09月03日 15:30
  • 661

C++中的表达式

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

C++ 语句,表达式的区别

语句:每条完整的计算机指令称为语句,语句是要执行的操作,所有的语句都已分号结束 语句分类:声明语句,赋值语句,消息语句,函数调用,函数原型,返回语句 声明语句:定义函数中使用的变量的名称和类型 ...
  • stokisyd
  • stokisyd
  • 2015年07月09日 20:01
  • 875

c++11的右值引用&&

在pixhawk中看到如下代码:   template OwnPtr& operator=(OwnPtr&& other) { T *old = _ptr; ...
  • u011583798
  • u011583798
  • 2017年02月22日 16:28
  • 821

C++11

转自 https://zh.wikipedia.org/wiki/C%2B%2B11 C++11,先前被称作C++0x,即ISO/IEC 14882:2011,是目前的C++编程语言的正式标准...
  • arau_sh
  • arau_sh
  • 2013年05月08日 21:20
  • 1233

C++11系列-常量表达式

http://towriting.com/blog/2013/09/17/constexpr/ C++11系列-常量表达式 2013-09-17 C++11有一些这样...
  • love_hot_girl
  • love_hot_girl
  • 2014年03月13日 01:46
  • 586

C++ - 表达式求值顺序

在C++里,表达式求值顺序一直是一个大坑,这是由于为了给编译器更大的优化空间,C++对表达式的求值做了许多非常灵活的规定(其实就是不规定,编译器愿意怎么实现都可以)。这些灵活的规定也给C++带来了许多...
  • fefe82
  • fefe82
  • 2014年07月15日 22:35
  • 2943

图说函数模板右值引用参数(T&&)类型推导规则(C++11)

图说函数模板右值引用参数(T&&)类型推导规则(C++11) 见下图: 规律总结: 只要我们传递一个基本类型是A④的左值,那么,传递后,T的类型就是A&,形参在函数体中的类型就是...
  • linuxheik
  • linuxheik
  • 2017年06月16日 11:29
  • 585

c++之指针&&引用

引用
  • xxpresent
  • xxpresent
  • 2016年09月24日 16:03
  • 1949
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++中的古怪表达式
举报原因:
原因补充:

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