本文共 1251 字,大约阅读时间需要 4 分钟。
C.52: Use inheriting constructors to import constructors into a derived class that does not need further explicit initialization
C.52:使用继承的构造函数功能将构造函数导入不再需要进一步明确初始化的派生类
Reason(原因)
If you need those constructors for a derived class, re-implementing them is tedious and error-prone.
如果派生类需要那些构造函数,重新实现它们的工作单调乏味而且容易发生错误。
Example(示例)
std::vector has a lot of tricky constructors, so if I want my own vector, I don't want to reimplement them:
std::vector有大量的构造函数很难用,因此如果我需要自己的vector,我不会重新实现它们。
class Rec { // ... data and lots of nice constructors ...};class Oper : public Rec { using Rec::Rec; // ... no data members ... // ... lots of nice utility functions ...};
Example, bad(反面示例)
struct Rec2 : public Rec { int x; using Rec::Rec;};Rec2 r {"foo", 7};int val = r.x; // uninitialized
这就是需要进一步初始化的例子。如果派生类没有增加数据成员只是增加一些功能,就可以使用using Rec::Rec这种方法导入基类的构造函数。对于上面的例子也可以考虑使用类内初始化器初始化数据成员x。
Enforcement
Make sure that every member of the derived class is initialized.
保证派生类的所有成员都被初始化。
原文链接
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c52-use-inheriting-constructors-to-import-constructors-into-a-derived-class-that-does-not-need-further-explicit-initialization
觉得本文有帮助?欢迎点赞并分享给更多的人。
阅读更多更新文章,请关注微信公众号【面向对象思考】
转载地址:http://eyixf.baihongyu.com/