关于 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++ 版本不允许这样做。
我在一个游戏的开源实现中找到了以下代码。
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++ 版本不允许这样做。