C++ 两种语法new(int[size])和new int[size]之间的差异

C++ 两种语法new(int[size])和new int[size]之间的差异,c++,C++,此文本运行时没有任何警告或错误 int*iPtr; 无符号整数大小; cin>>尺寸; iPtr=新的整数[大小]; 这一个返回警告但效果很好为什么 警告:必须在类型id[-Wvla]周围不带括号地指定非常量数组新长度 iPtr=新(整数[大小]) int*iPtr; 无符号整数大小; cin>>尺寸; iPtr=新(整数[大小]); < > >此特殊警告是因为C++中不允许使用可变长度数组而发出的。括号使编译器将int[size]视为可变长度数组 这就是警告中对应的-Wvla 如果为size

此文本运行时没有任何警告或错误

int*iPtr;
无符号整数大小;
cin>>尺寸;
iPtr=新的整数[大小];
这一个返回警告但效果很好为什么

警告:必须在类型id[-Wvla]周围不带括号地指定非常量数组新长度 iPtr=新(整数[大小])

int*iPtr;
无符号整数大小;
cin>>尺寸;
iPtr=新(整数[大小]);

< > >此特殊警告是因为C++中不允许使用可变长度数组而发出的。括号使编译器将
int[size]
视为可变长度数组

这就是警告中对应的
-Wvla

如果为
size
指定常量值而不是用户指定的值,则可以使用括号

int main() {
    unsigned int* iPtr;
    constexpr unsigned int size = 10;
    iPtr = new (unsigned int[size]);
}

<> > <>强> >/P>> P>,因为C++中不允许使用可变长度数组,所以发出了这个特殊警告。括号使编译器将
int[size]
视为可变长度数组

这就是警告中对应的
-Wvla

如果为
size
指定常量值而不是用户指定的值,则可以使用括号

int main() {
    unsigned int* iPtr;
    constexpr unsigned int size = 10;
    iPtr = new (unsigned int[size]);
}

参见

这只是
new
的规则这只是
new
的规则可以,但仍然不应该<代码>新建
不是一个函数。可以,但仍然不应该<代码>新建不是一项功能。