aia*_*iao 18 c++ final pure-virtual c++11
class Foo
{
public:
virtual int foo() final = 0;
};
Run Code Online (Sandbox Code Playgroud)
编译好.
这不Foo只是浪费空间,而是制造事故吗?或者我错过了什么?
Dam*_*mon 14
正如你所说,这几乎完全是对空间的浪费.至少有一个公认的用途.顺便说一句,它编译的事实并不令人惊讶.只要代码是合法的,编译就不需要"有意义".
假设您想Foo用作策略.这意味着它将用作模板参数,但不需要实例化.事实上,你真的不希望任何人实例化这个类(虽然我不知道为什么,它会伤害什么).
这正是你在这里所拥有的.一个类,你可以把手放在一个类,但你不能实例化它(虽然使构造函数私有可能会更直接).
作为额外的好处,您可以enum在类范围内添加s或静态函数.这些可以在没有实际实例化的情况下使用,并且它们将在该类的命名空间内.所以,你有一个主要仅作为类型使用的类,但你仍然以静态函数的形式捆绑了它的"某些功能".
大多数情况下,人们可能只是将这些内容包装到命名空间中,但谁知道,在某些情况下,这可能是理想的方式.
不是Foo只是浪费空间
的确是; 你不能实例化它,因为它是抽象的,你不能覆盖函数来创建一个非抽象的派生类.
它可以用来防止类被实例化,如果你想出于某种原因这样做; 但即便如此,删除默认构造函数可能更有意义.
和制造中的意外?
并不是的.由于你无法对课程做任何事情,你不能对它做任何错误.
如果我正确阅读 9.2 中的语法,这实际上是合法的,尽管我可能错过了禁止它的注释中的某些内容。
成员声明符:声明符 virt-specifier-seq(opt) pure-specifier(opt)
然后它表明virt-specifier-seq可以final并且pure-specifier是= 0
尽管可能有一些特殊情况会使用它,但我看不出这有任何用处。
| 归档时间: |
|
| 查看次数: |
2086 次 |
| 最近记录: |