2014-02-10 82 views
1

考慮下面的代碼(它編譯和運行上的VisualStudio 2012)訪問C++一維數組像arr [1,2,3] - 這是什麼意思?

#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 <- 
} 

我不明白什麼是標有<線的意義 - 我期望的編譯錯誤。 實際結果就像只指定[]中的最後一個數字

那麼, 這是什麼意思?到底有什麼好處呢?

回答

5

這不是一些特殊的數組下標語法。方括號內的表達式將被計算爲單個值,然後該值用於索引該數組。因此,最後一行代碼相當於:

int a4 = arr[(5,10,7,2)]; 

那麼如何評估該表達式?它使用逗號運算符。逗號運算符評估其左操作數並丟棄它,然後評估其右操作數。表達式的值是右操作數的值。當你有彼此相鄰那樣的一羣人,該值是最右邊的值 - 在上述情況下,2所以現在也就相當於:

int a4 = arr[2]; 

逗號操作符具有相當有限的使用,但是some of its uses are outlined on Wikipedia。通常,當封閉塊不可用時(例如在靜態初始化程序中),對於評估兩個不同的表達式非常有用。但是,在這種情況下,使用它不起作用。

+0

你有一個逗號運算符有用的例子嗎? – Daniel

+1

@Daniel in for for循環,你可以使用'i ++,j ++'。 –

2

這就是逗號運算符 - 將對所有表達式求值,並使用最後一個表達式。這裏沒有理由,它只會妨礙可讀性。代碼與

int a = arr[10]; // 10 
int a1 = arr[10]; // 10 <- 
int a3 = arr[7]; // 7 <- 
int a4 = arr[2]; // 2 <-