C++ 将派生 class 的常量值传递给基本意外行为的构造函数

C++ passing const value of derived class to constructor of base unexpected behavior

我认为这是相当基本的,但我在这里找不到任何来源。

派生 class 包含需要传递给基 class 的初始化信息。在这种情况下,它是一个内存预留。

class Derived: public Base
{
private:
  const unsigned short memorySize= 100;    
public:  
  inline Derived() : Base(memorySize) {}
  void DoStuff();
};

这惨遭失败。我希望在派生构造函数之前调用基构造函数,并且仅在调用派生构造函数时才分配 memorySize。

#define memorySize 100

class Derived: public Base
{
private:

public:  
  inline Derived() : Base(memorySize) {}
  void DoStuff();
};

这按预期工作。

我的问题: 我假设第一个示例中的 memorySize 在调用基本构造函数时尚未初始化,还是这里发生了其他事情?

我了解到常量的#define 在 C++ 中是不可取的,最好使用 const 值。这是这个规则的例外,还是有更合适的方法来处理这种情况?

这两个例子完全没有可比性。在第一个示例中,Derived 的每个实例都有自己的 memorySize 副本。如您所料,Derived 的构造函数会处理此问题。

你根本不想要那个。 class 只有一个常量,而不是每个实例都有一个单独的常量。写成

class Derived: public Base
{
private:
  static const unsigned short memorySize = 100;