C ++中的new运算符和数组

时间:2012-09-09 04:58:15

标签: c++ memory

这一行的含义是什么:

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

在以下c ++代码中?

#include <iostream>
using namespace std;

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

3 个答案:

答案 0 :(得分:5)

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

有效地意味着

int* p = new int[2];

使用逗号运算符时,最右边的值被视为最终结果。

答案 1 :(得分:2)

两个2之间的逗号是“逗号运算符”。它在C ++中很少使用,它的语义是评估左边部分,忽略结果,然后评估右边部分。它是保证操作数评估顺序的少数运算符之一(如果不重载它)。

一个好的编译器应该发出警告,因为在你的例子中,第一个表达式没有副作用,new int[2,2]new int[2]完全相同。

请注意,C ++中的其他逗号不是逗号运算符...例如,函数调用中的参数之间的逗号不是逗号运算符,并且不保证参数表达式的求值顺序。更糟糕的是,根本不存在“评估顺序”:

foo(f(g()), h());
在可以调用函数的序列上方的行中的

可以是例如ghf,因此您不能说第一个参数在第二个也不是第二个在第一个之前进行评估。

答案 2 :(得分:0)

它正在创建一个整数指针并将其设置为一个新数组。