草庐IT

c++ - C++ final 是否在所有方面都暗示 final?

C++11addedfinal.终于!我了解final做了两件事:使类不可继承。使类中的(虚拟)函数不可覆盖(在派生类中)。这两者似乎是相互独立的。但以以下为例:classFoo{public:virtualvoidbar(){//dosomethingunimportant.}};classBazfinal:publicFoo{public:voidbar()/*final*/override{//dosomethingmoreimportantthanFoo'sbar.}};从上面,我相信Baz是final,我应该不需要指定它的virtual成员函数bar也是final。由于Baz

c++ - C++ final 是否在所有方面都暗示 final?

C++11addedfinal.终于!我了解final做了两件事:使类不可继承。使类中的(虚拟)函数不可覆盖(在派生类中)。这两者似乎是相互独立的。但以以下为例:classFoo{public:virtualvoidbar(){//dosomethingunimportant.}};classBazfinal:publicFoo{public:voidbar()/*final*/override{//dosomethingmoreimportantthanFoo'sbar.}};从上面,我相信Baz是final,我应该不需要指定它的virtual成员函数bar也是final。由于Baz

c++ - C++11 标准容器是 "final"吗?

我们(应该)知道C++标准库容器,包括std::string,并不意味着继承自。但是,C++98/03确实允许我们这样做,即使它会导致错误。既然final关键字可用,那些标准库容器是否标记为final以防止对它们的不良使用继承?如果不是,那是为什么? 最佳答案 LWG在最近于2012年2月6日至10日在科纳举行的session上讨论了这个问题。我是LWGissue2113.LWG决定将LWG2113标记为NAD(不是缺陷),理由是标准已经明确现有类(如容器和std::string不能标记为final)通过实现。讨论包括这样一个事实,

c++ - C++11 标准容器是 "final"吗?

我们(应该)知道C++标准库容器,包括std::string,并不意味着继承自。但是,C++98/03确实允许我们这样做,即使它会导致错误。既然final关键字可用,那些标准库容器是否标记为final以防止对它们的不良使用继承?如果不是,那是为什么? 最佳答案 LWG在最近于2012年2月6日至10日在科纳举行的session上讨论了这个问题。我是LWGissue2113.LWG决定将LWG2113标记为NAD(不是缺陷),理由是标准已经明确现有类(如容器和std::string不能标记为final)通过实现。讨论包括这样一个事实,

c++ - 有没有办法禁止我的类的子类化?

假设我有一个名为“Base”的类,以及一个名为“Derived”的类,它是Base的子类,可以访问Base的protected方法和成员。我现在要做的就是让它没有其他类可以继承Derived。在Java中,我可以通过将Derived类声明为“final”来实现这一点。有什么C++技巧可以给我同样的效果吗?(理想情况下,我想让除Derived之外的任何类都不能继承Base。我不能只将所有代码放入同一个类或使用friend关键字,因为Base和Derived都是模板化,Base的模板参数比Derived少....) 最佳答案 从C++1

c++ - 有没有办法禁止我的类的子类化?

假设我有一个名为“Base”的类,以及一个名为“Derived”的类,它是Base的子类,可以访问Base的protected方法和成员。我现在要做的就是让它没有其他类可以继承Derived。在Java中,我可以通过将Derived类声明为“final”来实现这一点。有什么C++技巧可以给我同样的效果吗?(理想情况下,我想让除Derived之外的任何类都不能继承Base。我不能只将所有代码放入同一个类或使用friend关键字,因为Base和Derived都是模板化,Base的模板参数比Derived少....) 最佳答案 从C++1

c++ - 如何在 C++11 中检测一个类是否是最终的?

代码优先。#includeusingnamespacestd;structAfinal{};structB{};intmain(){cout::value::valueis_final类如何实现? 最佳答案 作为GCC__is_finalintrinisic(forPR51365)的实现者,我很确定它不能在库中完成,它需要编译器支持。您可以使用C++11的SFINAE表达式功能做一些非常聪明的事情,但是要检测一个类是否是最终类,您需要从它派生,并在模板参数推导上下文中实例化派生类型,但是从类派生是在声明而不是表达式中完成的。此外,您

c++ - 如何在 C++11 中检测一个类是否是最终的?

代码优先。#includeusingnamespacestd;structAfinal{};structB{};intmain(){cout::value::valueis_final类如何实现? 最佳答案 作为GCC__is_finalintrinisic(forPR51365)的实现者,我很确定它不能在库中完成,它需要编译器支持。您可以使用C++11的SFINAE表达式功能做一些非常聪明的事情,但是要检测一个类是否是最终类,您需要从它派生,并在模板参数推导上下文中实例化派生类型,但是从类派生是在声明而不是表达式中完成的。此外,您

c++ - 最终类的用例

我正在阅读comments在HerbSutter的GuruoftheWeekredux上关于virtual函数,最后看到他提到这个:[...]“usesoffinalarerarer”–well,theysortofare.Idon’tknowofmany,andduringstandardizationBjarnerepeatedlyaskedforexamplesofproblemsitsolvedandpatternswhereitshouldbeused,andIdon’trecallanymajoronesthatstoodout.TheonlyoneIknowofoffha

c++ - 最终类的用例

我正在阅读comments在HerbSutter的GuruoftheWeekredux上关于virtual函数,最后看到他提到这个:[...]“usesoffinalarerarer”–well,theysortofare.Idon’tknowofmany,andduringstandardizationBjarnerepeatedlyaskedforexamplesofproblemsitsolvedandpatternswhereitshouldbeused,andIdon’trecallanymajoronesthatstoodout.TheonlyoneIknowofoffha