这条线是什么意思:
int* p = new int[2,2];
在下面的 C++ 代码中?
#include <iostream>
using namespace std;
int main()
{
int* p = new int[2,2];
}
int* p = new int[2,2];
有效地意味着
int* p = new int[2];
使用逗号运算符时,最右边的值被视为最终结果。
两者之间的逗号2
是“逗号运算符”。它在 C++ 中很少使用,其语义是评估左侧部分,忽略结果,然后评估右侧部分。它是少数几个保证操作数求值顺序的运算符之一(如果你不重载它)。
一个好的编译器会发出警告,因为在您的示例中,第一个表达式没有副作用并且new int[2,2]
与new int[2]
.
请注意,C++ 中的其他逗号不是逗号运算符...例如,函数调用中的参数之间的逗号不是逗号运算符,并且不保证参数表达式的评估顺序。比这更糟糕的是根本不存在“评估顺序”:
foo(f(g()), h());
例如,在上面的行中,可以调用函数的顺序可能是g
, h
,f
因此您不能说第一个参数在第二个参数之前进行了评估,也不能说第二个参数在第一个参数之前进行了评估。
它正在创建一个整数指针并将其设置为一个新数组。