矢量下标标准C/C++?

ems*_*msr 2 c++ gcc g++

一个补丁被发布到gcc,它提供了一个叫做向量订阅g ++的东西(gcc已经有了它).

如果a是一个数组并且i是一个int则i[a]是合法的并且等于a[i].

double a[]{0.0, 1.0, 2.0, 3.0}; // C++11 style but would work in C++98 style too.
assert(a[2] == 2.0);
assert(2[a] == 2.0);
Run Code Online (Sandbox Code Playgroud)

那么,这是合法的标准C/C++还是gcc扩展?

实际上,谷歌显示MS Developer Studio也有这个.我查看了C++标准并没有看到它.

Mik*_*our 11

补丁与i[a]等同于无关a[i]; 两种语言都是如此.除非涉及用户定义的类型,否则a[i]定义为等效*(a+i),并且添加是可交换的.

该补丁涉及矢量数据类型(不要与C++ std::vector类模板混淆),这是一种支持矢量处理指令的GCC语言扩展.根据补丁说明,它们可以像C中的数组一样订阅而不是C++,这个补丁将该功能添加到C++中.


unw*_*ind 5

在C中,这是从a[b]相当于的事实得出的*(a + b),因为+它当然是可交换的,当然是相同的*(b + a).