纯虚函数与常用语法相关:
virtual f() = 0;
Run Code Online (Sandbox Code Playgroud)
然而,从c ++ 11开始,有一种方法可以传达non existence(特殊)成员函数的显式:
Mystruct() = delete; // eg default constructor
Run Code Online (Sandbox Code Playgroud)
为什么这种语法不能扩展到纯虚函数以实现通信这种操作的一致性?:
virtual f() = delete;
Run Code Online (Sandbox Code Playgroud)
我知道明显的答案是because the Standard says so!.我想知道这背后的原因以及是否有这样的建议(或意图).
= delete;意味着与使虚拟功能完全不同的东西.与删除的函数不同,纯虚函数不会使一个错误的程序选择它作为重载解析的结果.
这两件事的含义有很大的不同。粗略地说,不同之处在于:
virtual void f() = 0;
Run Code Online (Sandbox Code Playgroud)
说“我可能没有写过这个函数的实现。”
然而这个:
f() = delete;
Run Code Online (Sandbox Code Playgroud)
说“注意编译器:不要创建这个函数的实现。”
粗略地说,区别在于:
virtual void f() = 0;
Run Code Online (Sandbox Code Playgroud)
说"这个类是抽象的,我可能没有写过这个成员函数的实现"(尽管你被允许).
但是,这个:
void f() = delete;
Run Code Online (Sandbox Code Playgroud)
说"这个成员函数字面上不存在,任何一个都不会通过."