6

今天,我发现你可以用 C++ 编写这样的代码并编译它:

int* ptr = new int(5, 6);

这样做的目的是什么?我当然知道动态new int(5)的东西,但在这里我迷路了。有什么线索吗?

4

5 回答 5

13

您正在使用逗号运算符,它只计算一个值(最右边)。

逗号运算符 (,) 用于分隔两个或多个表达式,这些表达式包含在只需要一个表达式的情况下。当必须对一组表达式求值时,只考虑最右边的表达式。

来源

指针指向的内存地址被初始化为上面的值 6。

于 2010-02-26T23:42:44.803 回答
1

我的编译器 g++ 在尝试执行此操作时返回错误。

你在什么编译器或代码中看到了这个?

于 2010-02-26T23:43:44.553 回答
1

我相信这是一个错误,它意味着分配某种二维数组。但是,您不能在 C++ 中做到这一点。该片段实际上可以编译,因为它使用了逗号运算符,它返回最后一个表达式并忽略所有其他表达式的结果。这意味着该语句等效于:

int* ptr = new int(6);
于 2010-02-26T23:44:57.937 回答
1

5 被忽略。这会在堆上分配一个 int 并将其初始化为 (5,6)。

逗号分隔的一组语句的结果是最后一条语句的值,所以int初始化为6

于 2010-02-26T23:45:10.437 回答
1

只需这样做:

int* ptr = new int(6);

就逗号运算符而言,如果没有它就无法完成所需的任务,请使用它。应用以下技巧是没有用的:

int* ptr = new int(5, 6);
于 2010-02-27T05:08:34.287 回答