数组的大小由非常量变量定义

Array of size defined by not constant variable

本文关键字:常量 变量 定义 非常 数组      更新时间:2023-10-16

有这样的代码:

#include <iostream>
int main()
{
  int size;
  std::cin >> size;
  size = size + 1;
  int tab3[size];
  tab3[0] = 5;
  std::cout << tab3[0] << " " << sizeof(tab3) << std::endl;
  return 0;
}

结果是:

$ g++ prog.cpp -o prog -Wall -W 
$ ./prog
5
5 24

为什么这段代码可以编译?数组的长度不应该是一个常量变量吗?

c++中的变长数组在GCC中作为扩展可用。使用所有警告进行编译应该会提醒您注意这个事实(包括-pedantic)。

这是C99的一个特性,不是c++的一部分。它们通常被称为VLAs(可变长度数组)。

如果您运行g++-pedantic,它将被拒绝。

查看GCC文档获取更多信息。

请参见:VLAs是邪恶的

GCC提供的VLA或可变长度数组。更好的做法是创建一个指针并使用new关键字来分配空间。VLA在MSVC中不可用,所以第二个选项对于跨平台代码来说更好