2

这条线是什么意思:

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

在下面的 C++ 代码中?

#include <iostream>
using namespace std;

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

3 回答 3

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

有效地意味着

int* p = new int[2];

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

于 2012-09-09T05:01:54.523 回答
2

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

一个好的编译器会发出警告,因为在您的示例中,第一个表达式没有副作用并且new int[2,2]new int[2].

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

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

例如,在上面的行中,可以调用函数的顺序可能是g, hf因此您不能说第一个参数在第二个参数之前进行了评估,也不能说第二个参数在第一个参数之前进行了评估。

于 2012-09-09T05:24:56.733 回答
0

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

于 2012-09-09T05:06:16.723 回答