在C++中,有没有什么方法可以声明一个变量的另一个变量的大小?

问题描述 投票:0回答:1

我真的需要在我的代码中做这样的事情:char str[var+1];但我知道你只能在[]之间放一个常量。所以我只是想问一下,有没有什么方法可以做到我所需要的。

c++ c size
1个回答
6
投票

在C++中只能声明一个编译时常数大小的变量。

但是,动态数组可以有一个动态的大小。创建动态数组的最简单方法是使用 std::vector,如果是字符串,你可以使用 std::string. 例题。

 std::string str(var+1, '\0');

1
投票

问题原来包括C和C++标签,这个答案是C的

在C。var 对于VLA支持标准(c99和c11中的可选支持)来说,可以是非常数。

以下内容在C语言中是有效的(见.C语言)。https:/godbolt.orgzkUockA)

int var=3;
char str[var+1];

然而VLA在C++标准中并没有定义(见。https:/stackoverflow.coma1887178105104)。 ),也不建议在C语言中使用。

因为VLA通常是在堆栈上分配的,而且如果VLA的值是 var 的分配不受控制。str 可能会失败,而且这种失败的恢复可能很困难。此外,它们可能会鼓励创建高度不安全的代码(如果有人想在堆栈分配的变量上进行指针运算的话)。

有一个倡议是让linux内核代码成为无VLA的代码(见.NET Framework 2.0)。https:/www.phoronix.comscan.php?page=news_item&px=Linux-Kills-The-VLA)。 ):

  • 由于需要在运行时确定数组的大小,使用可变长度数组会给代码增加一些小的运行时开销。

  • 结构内的VLAs不被LLVM Clang编译器所支持,因此对于那些想要在GCC之外构建内核的人来说是一个问题,Clang只支持C99风格的VLAs。

  • 可以说最重要的是围绕着内核的栈使用,VLAs可能会有安全方面的影响。

© www.soinside.com 2019 - 2024. All rights reserved.