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

标签 c++ arrays class constants

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

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/

相关文章:

c# - 如果其他构造函数创建它,我应该处置通过构造函数传递的对象吗?

cocoa - 不同 cocoa 类别之间可用的 slider 值

C++ - 临时变量及其生命周期

c++ - 一个愚蠢的 rand() 未找到错误

javascript - 如何使用对象的键返回过滤后的对象数组

php - 将值添加到数组中

c++ - std::list 模板在其实例类型中是否需要复制构造函数(或等价物)?

c++ - BST 插入 C++ 帮助

javascript - 了解带有对象的 map 函数 : Keys and Values

c++ - 你如何在类里面使用字符串?