gpt4 book ai didi

C++初始化常量和继承

转载 作者:太空狗 更新时间:2023-10-29 20:07:25 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com