首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11中的纯虚函数

C++11中的纯虚函数
EN

Stack Overflow用户
提问于 2013-12-31 17:51:33
回答 7查看 13.9K关注 0票数 41

在C++98中,空指针由文字0 (或实际上值为零的任何常量表达式)表示。在C++11中,我们更喜欢nullptr。但这并不适用于纯虚拟函数:

代码语言:javascript
复制
struct X
{
    virtual void foo() = nullptr;
};

为什么这不管用?这难道不完全有道理吗?这仅仅是一个疏忽吗?能修好吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-12-31 17:52:31

因为语法上写的是0,而不是表达式或其他一些非终端匹配的nullptr

一直以来,只有0起作用了。即使是0L也会格式错误,因为它与语法不匹配。

编辑

Clang允许= 0x0= 0b0= 00 (31.12.2013)。这是不正确的,当然应该在编译器中修复。

票数 46
EN

Stack Overflow用户

发布于 2013-12-31 17:54:10

用于= 0函数的virtual表示法不是字面上的“赋值空”,而是一种特殊的表示法,它实际上具有欺骗性:纯虚拟函数也可以实现。

对于各种上下文关键字,允许使用abstract而不是= nullptr更有意义,并将abstract作为上下文关键字。

票数 30
EN

Stack Overflow用户

发布于 2013-12-31 17:52:54

= 0在那里有固定的含义。这里并不是整数零。因此,你不能这样简单地替换它。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20861346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档