c++ - 为什么我不能用 `= delete;` 声明一个纯虚函数?

标签 c++ c++11

简介

纯虚函数使用通用语法声明:

virtual f() = 0; 

然而,自 c++11 以来,有一种方法可以传达(特殊)成员函数的显式不存在:

Mystruct() = delete; // eg default constructor

为什么不将此语法扩展到纯虚函数以实现通信此类操作的统一性? :

virtual f() = delete; 

注意事项

我知道显而易见的答案是因为标准是这么说的!。我想知道这背后的原因,以及是否有过这样的提议(或意图)。

最佳答案

粗略地说,区别在于:

virtual void f() = 0; 

说“这个类是抽象的,我可能没有编写这个成员函数的实现”(尽管你被允许)。

但是,这:

void f() = delete;

说“这个成员函数字面上不存在,没有通过。”

关于c++ - 为什么我不能用 `= delete;` 声明一个纯虚函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24958270/

相关文章:

C++ 类型特征概述

c++ - 即使成员没有移动构造函数,移动构造函数也会自动生成?

c++ - switch 语句中的控制结构

C++ 递归段错误

Python:ctypes加载的dll是否共享相同的内存空间

multithreading - 将异常抛出到另一个线程

c++ - 我应该使用 SQLite + MySQL 来提供高性能和数据存储吗?

c++ - 两个单精度浮点 vector 的点积在 CUDA 内核中产生与在主机上不同的结果

c++ - 右值数据成员初始化 : Aggregate initialization vs constructor

c++ - 返回对特定大小数组的引用,而不在返回类型中明确说明大小