访问C++一维数组,如arr [1,2,3] - 这是什么意思?

asa*_*rob 1 c++ arrays syntax

考虑这段代码(它在VisualStudio 2012上编译并运行)

#include "stdafx.h"
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])
{
    int arr[100];
    for (int i = 0; i < 100; ++i)
        arr[i]=i;

    int a = arr[10]; // 10
    int a1 = arr[10,10]; // 10 <-
    int a3 = arr[5,10,7]; // 7 <-
    int a4 = arr[5,10,7,2]; // 2 <-
}
Run Code Online (Sandbox Code Playgroud)

我不明白标有< - 我期望编译错误的行的含义是什么.实际结果就像仅指定[]中的最后一个数字一样

那么,这意味着什么?到底有什么好处呢?

Jos*_*eld 5

这不是一些特殊的数组下标语法.方括号内的表达式被计算为单个值,然后该值用于索引数组.所以你的最后一行相当于:

int a4 = arr[(5,10,7,2)];
Run Code Online (Sandbox Code Playgroud)

那个表达式如何评估呢?它使用逗号运算符.逗号运算符计算其左操作数并将其丢弃,然后计算其右操作数.表达式的值是右操作数的值.当你有一堆像这样的彼此相邻时,值是最右边的值 - 在上面的例子中,2.所以现在它相当于:

int a4 = arr[2];
Run Code Online (Sandbox Code Playgroud)

逗号运算符的使用相当有限,但它的一些用途在维基百科上列出.通常,当封闭块不可用时(例如在静态初始化器中),它可用于评估两个不同的表达式.但是,在这种情况下,使用它没有任何效果.