【发布时间】:2020-02-04 15:39:51
【问题描述】:
我知道 C++ 标准不允许这样做,并且它不能在 gcc 上编译,但我想知道为什么它可以在 Visual Studio 中工作。
#include <iostream>
struct A
{
A()
{
std::cout << \"A()\" << std::endl;
}
~A()
{
std::cout << \"~A()\" << std::endl;
}
};
int main()
{
int n;
std::cin >> n;
A* arr = new A[n];
delete[n] arr;
}
它与delete[] arr;、delete[n+5] arr;、delete[n/2] arr;、delete[-54] arr; 甚至delete[A{}] arr; 的行为相同。
-
我也没有看到,这就是我创建这个问题的原因。
-
使用 Visual Studio 2019(版本 16.4.4)我收到警告
warning C4208: nonstandard extension used: delete [exp] - exp evaluated but ignored -
首先知道引入这个的原因会很有趣。 MSDN:docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/… 及其作用:stackoverflow.com/questions/1747976/…
标签: c++ visual-studio