在C++98中,空指针由文字0 (或实际上值为零的任何常量表达式)表示。在C++11中,我们更喜欢nullptr。但这并不适用于纯虚拟函数:
struct X
{
virtual void foo() = nullptr;
};为什么这不管用?这难道不完全有道理吗?这仅仅是一个疏忽吗?能修好吗?
发布于 2013-12-31 17:52:31
因为语法上写的是0,而不是表达式或其他一些非终端匹配的nullptr。
一直以来,只有0起作用了。即使是0L也会格式错误,因为它与语法不匹配。
编辑
Clang允许= 0x0、= 0b0和= 00 (31.12.2013)。这是不正确的,当然应该在编译器中修复。
发布于 2013-12-31 17:54:10
用于= 0函数的virtual表示法不是字面上的“赋值空”,而是一种特殊的表示法,它实际上具有欺骗性:纯虚拟函数也可以实现。
对于各种上下文关键字,允许使用abstract而不是= nullptr更有意义,并将abstract作为上下文关键字。
发布于 2013-12-31 17:52:54
= 0在那里有固定的含义。这里并不是整数零。因此,你不能这样简单地替换它。
https://stackoverflow.com/questions/20861346
复制相似问题