gpt4 book ai didi

c++ - 构造函数设置的 "const variables"用于表示 C++ 数组的边界?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:23 25 4
gpt4 key购买 nike

下面的代码可以编译并且运行良好:

class Test {
private:
const unsigned MAX;

public:

Test (const unsigned int n) : MAX(n) { }

void foo () {
int array[MAX];
...
}

};

但是真的可以吗?我的意思是:

Test a (3);
Test b (8);

array 实际上分别有 3 个和 8 个单元格吗?

如果是这样,是不是因为 array 是一个自动 var 并使用适当的维度进行实例化?

谢谢

最佳答案

你写的在有效但有效 .

当然是在谈论您对 VLA 的使用的,而不是完整的片段。


当使用 g++ -pedantic -ansi -Wall 编译时,我们收到以下警告;

foo.cpp: In member function 'void Test::foo()':
foo.cpp:18:23: warning: ISO C++ forbids variable length array 'array' [-Wvla]

如上述警告中所述,您使用的模式通常称为使用可变长度数组,这在 C99 中是标准,在 C++ 中是“允许的”通过 g++ 扩展。

出于一个原因,我建议您使用 STL 容器而不是这些 hacks;你所做的是不合法的,因此不能保证是可移植的交叉编译器。

关于c++ - 构造函数设置的 "const variables"用于表示 C++ 数组的边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9718924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com