我想在子类而不是基类中初始化常量。并使用它来摆脱动态内存分配(我已经知道数组大小,并且会有一些具有不同常量的子类)。
所以我尝试:
class A {
public:
const int x;
A() : x(0) {}
A(int x) : x(x) {}
void f() {
double y[this->x];
}
};
class B : A {
B() : A(2) {}
};
很简单,但是编译器说:
error C2057: expected constant expression
我怎么能告诉编译器,它真的是一个常量?
最佳答案
虽然它不是一个常数。它仍然可以被构造函数修改。数组的大小只允许使用编译时常量。当编译器说“常量表达式”时,它不是指返回常量值的表达式,而是常量,例如“52”或“45”或类似的东西。
改用std::vector
。
编辑:响应“我已经知道数组大小,并且会有一些具有不同常量的子类”
做到这一点的唯一方法是使用模板。
template<size_t x>
class A {
public:
void f() {
double y[x];
}
};
typedef A<2> B;
关于C++初始化常量和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3057845/