C++初始化常量和继承

标签 c++ inheritance constants

我想在子类而不是基类中初始化常量。并使用它来摆脱动态内存分配(我已经知道数组大小,并且会有一些具有不同常量的子类)。
所以我尝试:

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/

相关文章:

c++ - 包含 'const'的头文件包含在多个源文件中

c++ - 如何在 C++ 中为 std::chrono::steady_clock 设置纪元?

c++ - 访问冲突读取位置 0xCDCDCDD1

c# - WebService、WebMethod 和继承

Java,继承,泛型 - 在模板方法实现中使用子类型的参数

c++ - 在 C++ 中将非 const 转换为 const

c++ - 使用可能抛出的表达式初始化 const 变量的推荐方法

c++ - 是否存在 "int"会导致结构填充的环境?

c++ - 为什么这个 scanf 返回 false?

Javascript - KineticJS 创建自己的类