首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >g++和clang++在c++中处理VLAs定义和初始化的区别

g++和clang++在c++中处理VLAs定义和初始化的区别
EN

Stack Overflow用户
提问于 2022-06-16 07:01:42
回答 1查看 64关注 0票数 0

源代码如下:

代码语言:javascript
运行
复制
using namespace std;

int main()
{
        int m = 4;
        int arr[m] = {1, 2, 3, 4};
        printf("%d\n", arr[2]);
        return 0;
}

当我使用g++编译时,它成功地编译为一个可执行文件。但是,当我使用clang++编译时,会得到以下错误:

代码语言:javascript
运行
复制
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。我想知道这种差异的根源

EN

回答 1

Stack Overflow用户

发布于 2022-06-16 18:53:08

VLAs不是C++,编译器对它们的支持也不同。在C语言中,不支持初始化VLAs,这似乎也是clang在c++中所做的。另一方面,gcc对VLAs的支持也有所扩展。您的下一个编译器可能根本没有VLA。

那么,如果C++在这方面有更好的机制,那么为什么要费心呢?

代码语言:javascript
运行
复制
#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};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72641705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档