2012-09-09 109 views
2

這是什麼線的含義:新的運營商和陣列C++

int* p = new int[2,2]; 
在以下C++代碼

#include <iostream> 
using namespace std; 

int main() 
{ 
    int* p = new int[2,2]; 
} 
+2

無法編譯,所以它並沒有太大的意義。 – chris

+3

@克里斯,[它編譯](http://ideone.com/XgS5l)。 – iammilind

+0

@iammilind,哎呀,我離開了'new',它得到過去編譯時確定數組大小的誤差。難怪我驚訝地發現它沒有編譯;我做了int int [2,2];'。 – chris

回答

5
int* p = new int[2,2]; 

實際上意味着

int* p = new int[2]; 

當使用逗號操作,最右邊的值被認爲是最終的結果。

0

它創建的整數指針並將其設置爲一個新的數組。

+1

建議您撤回此,因爲它不是一個非常完整的答案。示例中逗號的含義太重要,不能省略。 – Bryan

2

這兩個2之間的逗號是一個「逗號操作符」。它在C++中很少使用,其語義是評估左側部分,忽略結果,然後評估右側部分。它是保證操作數評估順序的少數幾個操作符之一(如果不超載)。

一個好的編譯器應該發出警告,因爲在你的例子中第一個表達式沒有副作用,而new int[2,2]new int[2]完全一樣。

注意,在C++其他逗號並不是逗號運算...例如在函數調用的參數之間的逗號並不是逗號運營商和表達不保證的參數評價的順序。在該函數可以被稱爲例如可爲gh序列上方的線

foo(f(g()), h()); 

f所以你不能:更糟的是可能是一個「評價規程」不存在於所有既不說第一個參數在第二個之前被評估過,也沒有說第二個參數在第一個之前被評估過。