源代码如下:
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。我想知道这种差异的根源
发布于 2022-06-16 18:53:08
VLAs不是C++,编译器对它们的支持也不同。在C语言中,不支持初始化VLAs,这似乎也是clang在c++中所做的。另一方面,gcc对VLAs的支持也有所扩展。您的下一个编译器可能根本没有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};
https://stackoverflow.com/questions/72641705
复制相似问题