在 class 中将数组的容量声明为它自己的变量的好处?

The benefit of declaring the capacity of an array as a variable of it's own in a class?

我看到了这些代码和关于我们应该如何在 C++ 中创建 class 的解释。 示例 class 是关于一个袋子的,它有一个用于保存整数的数组和一个用于计算其中有多少整数的变量:

class Bag {
public: 
  //...
private:
  int data[20];
  size_t count;
  //...
}

然后它给出了另一个代码(改进的):

class Bag {
public:
  static const size_t CAPACITY = 20;
  //...
private:
  int data[CAPACITY];
  size_t count;
  //...
} 

解释说第二种方式更“灵活”。

这让我开始思考“灵活”的含义。

所以我一直在思考 + 搜索 Google 等等,这就是我想出的:

  1. 因为 CAPACITY 是一个静态常量,编译器只声明它一次,所以在第二种方法中不会有大量内存损失。 + 即使我选择第一种制作 class 的方法,我最终还是会创建一个 public 方法来检查容量(例如:printCapacity()),所以我最好还是选择第二种方式。

  2. 仅通过查看代码就可以更轻松地了解 Bag class 实际有多大。 (虽然我不认为有人会觉得第一个很难。)

我试图找出为什么第二种方法比第一种方法 'flexible' 多,但我无法得到可以让 'flexible' 这个词从我脑海中消失的答案。

也许有关于此的编程约定? 任何更多的解释都会很有帮助+如果我的想法有任何问题,知道也会很有帮助。

为什么要使用静态常量?

  1. 赋予字面数字更多的意义。例如,CAPACITYPARAMS_PER_PHASE * NUMBER_OF_PROJECT_PHASES 不同。
  2. 这样当你以后想根据那个大小写代码时,它可以是read_nums_from_file(my_file, Bag::CAPACITY)而不是read_nums_from_file(my_file, 20 )read_nums_from_file(my_file, sizeof(Bag::data)/sizeof(int))。后者并不可怕,但读起来还是比较麻烦

如图所示,它并没有真正更灵活。如果您将 CAPACITY 用于第二个目的,例如定义循环的范围,那么好处就会来。然后,如果您将 CAPACITY 从 20 更改为 30,您只需在一个地方进行更改。

也就是说,使用 std::vector.

这样的东西通常会更加灵活(性能开销非常小)