删除的 [] 应该放在哪里?

Where should [] of delete be put?

本文关键字:在哪里 删除      更新时间:2023-10-16

考虑:

int *arr = new int[10];

我已经看到了三种编写释放arr的代码行的方法:delete[] arrdelete [] arrdelete []arr。首先,既然delete[]是运算符的名称,为什么在delete和方括号之间引入空格是合法的?第二,各种方式背后的逻辑是什么,应该首选哪种方式?

为什么在

删除和方括号之间引入空格是合法的?

因为语言语法允许。

通常在大多数上下文中,空格(制表符、换行符、空格(会被忽略。空格用于分隔单词,但如果编译器知道[]是单独的符号,则忽略空格。以下行的含义相同:

delete[]arr;
delete []arr;
delete [] arr;
delete[] arr;
delete                [           ]        arr              ;

换行符或制表符也会被忽略:

delete

[
]
arr
;

他们的意思是一样的,做同样的事情。

各种方式背后的逻辑是什么,应该首选哪种方式?

逻辑是可维护性和可读性。没有人愿意阅读符号之间的数百个换行符并向右滚动文件千列以查找;.程序员负责使代码对其他人来说是可读的,以便以后可以理解代码,以便很容易找到错误,修补它,继续开发。

附言。C++没有这样的事情,但是因为C和C++共享大多数语法规则,我想我可以提到国际混淆C代码竞赛,其目标是用C编写混淆代码.参赛者经常使用规则,您可以在语法标记之间放置空格,例如从其程序的源代码中创建图像或星星或不同的形状。

这取决于您正在处理的项目的编码准则。但是您最常使用delete[],因为它在您删除数组的第一眼就可以看到。

为什么允许拥有这些不同的写作,是你需要问定义语法的人的事情,也许他们不确定最好的风格是什么,因此允许两者兼而有之。