关于 C++ 构造函数

On C++ constructors

我在一个游戏的开源实现中找到了以下代码。

struct Renderable {
    std::shared_ptr<UniformInput> uniform;
    std::shared_ptr<Geometry> geometry;
    bool alpha_blending = true;
    bool depth_test = true;
};


struct ShaderUpdate : Renderable {
    ShaderUpdate(std::shared_ptr<UniformInput> const& uniform)
        : Renderable{uniform, nullptr} {}

    ShaderUpdate(std::shared_ptr<UniformInput> && uniform)
        : Renderable{std::move(uniform), nullptr} {}
};

ShaderUpdate 继承自 'Renderable' 并在对象创建期间调用其基础 class 构造函数。但是 'Renderable' 没有定义 2 参数构造函数。结构中存在“初始化”值是否与此有关?

实际上这里发生的是 Renderable 正在默认构建,然后设置 uniform 和 geometry 的值。编译器生成默认构造函数,然后您只需设置值。我猜你使用的是 c++14/11 或更高版本,否则这将无法工作,因为旧的 c++ 版本不允许这样做。