【发布时间】:2014-01-21 02:48:19
【问题描述】:
我的班级中有一个doubles 的静态数组,我希望它是const,但我需要以某种方式对其进行初始化。确保构造函数返回后它将是“const”的最佳方法是什么?
class DFTDriver {
public:
static const size_t tblsize = 16384;
DFTDriver() {
for (unsigned i = 0; i != tblsize; ++i) {
sintbl[i] = std::sin(i * TAU / tblsize);
costbl[i] = std::cos(i * TAU / tblsize);
}
}
private:
static double sintbl[tblsize];
static double costbl[tblsize];
};
我知道我需要一个计算来初始化它们,所以要求它们是const 是不合理的;但是,该数组显然是“语义上的 const”。
我看到here 如果我正在初始化一个向量而不是一个数组,就会有一个答案。是否可以使用类似的方法?
我希望能够在不诉诸新的 C++11 结构的情况下做到这一点,但如果不可能,那就让 C++11 来做吧。
【问题讨论】:
-
如果它是静态的......为什么要在构造函数中初始化它(即非静态函数)
-
您可以像定义中的任何其他数组一样使用初始化列表。不过,您必须计算这些值。
-
没错,我应该在 main() 函数中初始化它,或者类似的东西。无论如何,我的问题仍然存在,如何在“初始化”之后使它们成为“常量”(这看起来像一个分配,但应该是一个初始化)?
-
初始化后不要将其设为 const 。您将其声明为 const ,这意味着您决定其值的唯一机会是在初始化时。顺便说一句, main 是错误的地方。 P.S:我建议您使用矢量并遵循您链接的问题中的技术。
标签: c++ arrays static initialization