如果有的话,C++数组运算符和*(数组+索引)之间有什么区别?

Dan*_*son 1 c++ arrays indexing c++11

我经常使用如下代码来索引数组中的项目,只是为了提醒自己数组值是指向数组第一个元素的指针.

int array[] = {0,1,2,3,4,5};
*(array + 2) = 42;
Run Code Online (Sandbox Code Playgroud)

虽然它看起来有点难看,但实际上我更喜欢传统的[]操作员.

int array[] = {0,1,2,3,4,5};
array[2] = 42;
Run Code Online (Sandbox Code Playgroud)

除了让将来可能会读取我的代码的其他人有点生气之外,使用指针算法在[]运算符上索引数组有什么后果吗?

Nem*_*emo 9

C++规范的5.2.1节[expr.sub]说:

......表达式E1[E2](根据定义)相同*((E1)+(E2))

因此,根据定义,它们完全相同.

有关旧版本的规范,请参见http://www.open-std.org/jtc1/sc22/open/n2356/expr.html.所有这些措辞都出现了相同的措辞.

[更新]

请注意,"数组值是指向数组的第一个元素的指针"并不完全正确,因为sizeof(array)(除其他外)将演示.数组在许多上下文中衰减为指针,但这不是一回事.所以我会说你在这里的风格选择简直令人困惑,对其他人甚至对你自己......另外,正如其他评论者指出的那样,你违反了非常普遍和有用的"容器访问"抽象.也就是说,你要排除用一个std::vectorstd::deque任何其他容器替换阵列.只是穷人的风格,IMO.