前两个是等价的。您没有将任何东西称为函数,您只是在表达式的一部分周围放置了一组多余的括号——大约相当于1+2*3
vs.1+(2*3)
或(太常见的)return(23);
vs.return 23;
在第二个中,您在[]
添加括号时省略了,导致未定义的行为。
后者的典型(但绝对不能保证)结果将释放内存块本身,但无法为数组中的项目调用析构函数。在您的情况下(char
该数组没有析构函数),虽然无法检测到。不过,您也可能会得到其他副作用,例如操作系统停止执行程序。
例子:
#include <iostream>
struct item {
item() { std::cout << "create\n"; }
~item() { std::cout << "destroy\n"; }
};
int main() {
std::cout << "test 1\n";
item *items = new item[5];
delete [] items;
std::cout << "test 2\n";
item *items2 = new item[5];
delete items2;
}
结果:
test 1
create
create
create
create
create
destroy
destroy
destroy
destroy
destroy
test 2
create
create
create
create
create
destroy
...随后执行被操作系统暂停。