今天,我发现你可以用 C++ 编写这样的代码并编译它:
int* ptr = new int(5, 6);
这样做的目的是什么?我当然知道动态new int(5)
的东西,但在这里我迷路了。有什么线索吗?
今天,我发现你可以用 C++ 编写这样的代码并编译它:
int* ptr = new int(5, 6);
这样做的目的是什么?我当然知道动态new int(5)
的东西,但在这里我迷路了。有什么线索吗?
您正在使用逗号运算符,它只计算一个值(最右边)。
逗号运算符 (,) 用于分隔两个或多个表达式,这些表达式包含在只需要一个表达式的情况下。当必须对一组表达式求值时,只考虑最右边的表达式。
指针指向的内存地址被初始化为上面的值 6。
我的编译器 g++ 在尝试执行此操作时返回错误。
你在什么编译器或代码中看到了这个?
我相信这是一个错误,它意味着分配某种二维数组。但是,您不能在 C++ 中做到这一点。该片段实际上可以编译,因为它使用了逗号运算符,它返回最后一个表达式并忽略所有其他表达式的结果。这意味着该语句等效于:
int* ptr = new int(6);
5 被忽略。这会在堆上分配一个 int 并将其初始化为 (5,6)。
逗号分隔的一组语句的结果是最后一条语句的值,所以int初始化为6
只需这样做:
int* ptr = new int(6);
就逗号运算符而言,如果没有它就无法完成所需的任务,请使用它。应用以下技巧是没有用的:
int* ptr = new int(5, 6);