[英]The difference between g++ and clang++'s handling of VLAs definition and initialization in c++
源代码如下:
using namespace std;
int main()
{
int m = 4;
int arr[m] = {1, 2, 3, 4};
printf("%d\n", arr[2]);
return 0;
}
当我使用g++编译时,它会成功编译为可执行文件。 但是当我用clang++编译时,我得到以下错误:
VLAs.cpp:8:10: error: variable-sized object may not be initialized
int arr[m] = {1, 2, 3, 4};
^
1 error generated.
经过测试,发现clang++可以支持定义VLB( int arr[m];
),但是不支持在初始化的时候定义VLB。 我想知道这种差异的根本原因
VLA 不是 C++,编译器对它们的支持不同。 在 C 中不支持初始化 VLA,这似乎也是 clang 在 C++ 中所做的。 另一方面,gcc 稍微扩展了对 VLA 的支持。 您的下一个编译器可能根本没有 VLA。
那么,如果 C++ 有更好的机制来解决这个问题,为什么还要费心呢:
#include <vector>
#include <array>
constexpr int n = 4;
std::array arr{1, 2, 3, 4};
std::array<int, n> arr2 = {1, 2, 3, 4};
std::vector<int> arr3 = {1, 2, 3, 4};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.