纯虚函数的语法仅为= 0
。例如,允许virtual void do_stuff() = 0
,但不允许virtual void do_stuff() = nullptr
。
Clang确实支持__null
,但是编译器内部并不用于声明虚函数。
NULL
可能可以用于纯虚函数的唯一原因是某些系统将其定义为0
,但您不应依赖于此。某些编译器可能还会使用0LL
或(void*)0
。
如果可以的话,应使用nullptr
而不是NULL
来声明空指针。这是最好的解决方案,可以在较早的标准中进行仿真。
要声明纯虚函数,请使用= 0
。这是声明纯虚函数的最简单且通常的方法。
,
这似乎是一种误解。使虚拟函数纯净与将其初始化为空指针不同。实际上,某些编译器会将纯函数的vtable条目设置为指向名为__cxa_pure_virtual
或类似名称的特殊函数。
由于实际上并未初始化指针,因此不能在此处使用__null
。 Not even GCC 4.1 allows it.也不能使用nullptr
,它是__null
的标准替代品。只需在此处写= 0;
。
,
这是怎么回事:
-
由于某种原因,您使用的是内部编译器(__null
)而不是标准的nullptr
(最糟糕的是,旧的NULL
已经在标准中,不需要您定义)
-
由于某种原因,您试图将__null
(或NULL
(或nullptr
)用作纯虚函数说明符 。你不能那样做。应该是= 0
。我相信GCC允许或曾经允许您做为扩展的工作;叮当声没有。
就这么简单!
您的下一步:
- 停止使用
__null
作为空指针;改用nullptr
。
- 对于纯虚函数说明符,请停止使用空指针。是
= 0
。
本文链接:https://www.f2er.com/3149816.html