具有模板参数相关大小的固定大小C数组

问题描述:

我正在使用一个模板类,我希望包含大小取决于模板参数的固定大小的数据数组。一个简单的例子是具有模板参数相关大小的固定大小C数组

template<int D> 
class Foo 
{  
    private: 
     int m_array[D*(D+1)];    
}; 

虽然可变大小的C数组在一般理解的皱起了眉头,在这里,他们可能是合理的,因为D小,这是很好的和明确的m_array多少价值持有(以及它不能改变尺寸)。我的问题是

  1. 这实际上是一个合理的使用变量大小的数组呢?
  2. 这是否总是不好的做法,因为这些数组并未得到编译器的普遍支持?
  3. 有没有干净的选择?人们可以使用std::vector并在构造函数中设置大小,我认为这会使代码变得不那么清晰。是否最好使用C++ 11的std::array,从而将上例中的相关行更改为std::array<int,D*(D+1)> m_array;
+5

1.'m_array'不是一个可变长度的数组。所以问题的其余部分是没有意义的。 – juanchopanza 2013-03-18 18:31:58

+0

他不是在询问一般的可变长度数组,而是模板参数相关的数组大小。 – 2013-03-18 18:33:41

+2

@ user1654209 OP问题肯定是在询问VLA,以及在这种情况下是否合理。 – juanchopanza 2013-03-18 18:35:28

你的例子不是可变长度数组,就像C99中存在的那样。在那里,数组的大小只有在运行时才知道。

在这里,您使用编译时常量来设置数组的大小。这样做没有问题。出去享受。

+0

但是,考虑使用'std :: array '而不是C数组。 – ildjarn 2013-03-20 17:00:55