今天,我发现您可以在C++中编写并编译以下代码:
这是什么目的?我当然知道动态的
int* ptr = new int(5, 6);
这是什么目的?我当然知道动态的
new int(5)
,但在这里我有点迷茫。有线索吗?int* ptr = new int(5, 6);
new int(5)
,但在这里我有点迷茫。有线索吗?只需这样做:
int* ptr = new int(6);
就逗号运算符而言,只有在没有它无法完成所需任务时才使用它。没有必要应用诸如以下的技巧:
int* ptr = new int(5, 6);
我的编译器 g++ 在尝试执行此操作时会返回一个错误。
你在哪个编译器或代码中看到这个问题的?
我认为这是一个错误,本意是要分配某种2D数组。然而,在C++中你不能这样做。这段代码实际上可以编译,因为它利用了逗号运算符,该运算符返回最后一个表达式并忽略所有其他表达式的结果。这意味着该语句等同于:
int* ptr = new int(6);
5被忽略了。这将在堆上分配一个int并将其初始化为(5,6)。
由逗号运算符分隔的一组语句的结果是最后一个语句的值,因此int被初始化为6
int* ptr = new int((5, 6));
。int(5,6)
应该会导致错误,但将其放在括号中会将其转换为6,然后使用它。话虽如此,这看起来很丑陋。 - GManNickG