虚拟方法在C 0x中不能“删除”吗?

当我们尝试删除虚拟方法时,错误消息似乎与方案有点错误.

prog.cpp:4:16: error: deleted function 'virtual void Test::foo()'
prog.cpp:8:2: error: used here

struct Test : public Base
{
  Test() {}
  virtual void foo () = delete;  // error
};

由于同样的原因虚拟方法是不可删除的,为什么它们不能在C 03中保持未实现?有没有办法提到测试故意不实现虚拟foo()?

术语“使用”在标准中有一个具体的定义,特别是对于虚函数,odr-used的定义是:

§3.2/2 (C++0x FDIS) […]A virtual member function is odr-used if it is not pure.[…]

odr-used是即将推出的标准中的新术语,指的是前一个标准所称的明确使用的术语:

§3.2/2 (current standard) […]A virtual member function is used if it is not pure.[…]

我的看法是错误消息使用了用于指代在这种特定情况下使用的odr的术语,是的,这是违规的原因与您不能使非纯虚拟成员函数未实现的原因完全相同.

相关文章
相关标签/搜索