c++ - C++ 数组运算符和 *(array + index)(如果有)有什么区别?

标签 c++ arrays c++11 indexing

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

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

虽然它看起来有点难看,但有时我实际上更喜欢它而不是传统的 [] 运算符。

int array[] = {0,1,2,3,4,5};
array[2] = 42;

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

最佳答案

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

... The expression E1[E2] is identical (by definition) to *((E1)+(E2))

所以根据定义,它们完全相同。

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

[更新]

请注意,“数组值是指向数组第一个元素的指针”并不完全正确,sizeof(array)(以及其他内容)将证明这一点。在许多情况下,数组衰减 为指针,但这不是一回事。所以我想说你在这里的风格选择简直令人困惑,对其他人甚至对你自己......另外,正如其他评论者指出的那样,你违反了非常普遍和有用的“容器访问”抽象。也就是说,您排除了用 std::vectorstd::deque 或任何其他容器替换数组。 IMO,风格很差。

关于c++ - C++ 数组运算符和 *(array + index)(如果有)有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28976327/

相关文章:

c++ - 如何获取两个 boost ptime 之间的每个单独日期

c++ - 为什么孙类的父类不处理祖类的初始化?

javascript - 输入到文本字段的一系列数字的总和和平均值

c++ - Java 和 C++11 中的枚举方法?

c++ - VS2012、C++11 和内存泄漏检测(VLD 与 CRTDBG)

c++ - weak_ptr、make_shared 和内存释放

c++ - 队列反转的渐近分析

c - 如何检索 3D 数组的用户输入

php - 通过与 MySQL 数据比较来填充 PHP 数组

c++ - std::move 和 std::forward 有什么区别