数组的大小由非常量变量定义
Array of size defined by not constant variable
有这样的代码:
#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中不可用,所以第二个选项对于跨平台代码来说更好
相关文章:
- 通过多个头文件使用常量变量
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 非常量变量只读位置的赋值
- 使用大量已知常量变量的正确方法
- 无法在具有常量变量大小的类中创建堆栈分配数组
- 这些语句是否等效(静态变量、常量变量和泛型)
- 包含常量变量并包含在多个文件中的标头的链接错误
- 我们如何修改常量变量的值
- 如何在模板类中设置静态常量变量
- 为什么常量变量是模板特殊化所必需的,而不是常量
- 如何在函数中传递常量变量?
- 定义常量变量的最佳方法
- C++ 声明常量变量,但推迟其初始化?
- 如何初始化具有常量变量的结构数组
- 使用常量变量作为维度将矩阵声明为类成员时出现编译器错误
- 使用指针 c++ 更改常量变量
- c++ 类中的静态常量变量和常量变量在存储方面是否有区别
- 为什么 lambda 对象中的局部变量是常量变量?
- 使用常量变量作为数组的大小
- 为许多类可能需要的所有常量变量制作独立的头文件是否是一种很好的做法?