Законно ли это в C ++?
Нет.Константа должна быть инициализирована в конструкторе базового класса.
Решение состоит в том, чтобы предоставить соответствующий конструктор в базовом классе - иначе его нельзя использовать.Кроме того, нет причин не предоставлять этот конструктор.
class Base {
int const constant;
public:
virtual ~Base() = 0; // Makes this an abstract base class.
protected:
Base(int c) : constant(c) { }
};
// Must be implemented!
Base::~Base() { }
class Derived : public Base {
public:
Derived() : Base(42) { }
};