lang支持__null吗?

Pen*_*ala 1 c++ llvm-clang clang++ c++14

当我使用clang ++ 5.0版编译以下程序时,结果是

错误:函数的初始值设定项看起来不像纯说明符

extern void print(void *ptr);

#define NULL __null

class IInterface
{
public:
    virtual void method1() = NULL;
};


int main()
{
    void *ptr = NULL;
    print(ptr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

似乎__null不被clang支持吗?但是stackoverflow中的一些帖子建议clang支持__null。如果是这样,我为什么会收到此错误。有人可以建议这里发生了什么吗?

链接:https//godbolt.org/z/-f3Kf9

Gui*_*cot 10

纯虚函数的语法仅为= 0。例如,virtual void do_stuff() = 0允许,但virtual void do_stuff() = nullptr不允许。

Clang确实支持,__null但是编译器内部并不意味着声明虚函数。

纯虚拟功能NULL 可能起作用的唯一原因是某些系统将其定义为0,但是您不应依赖于此。一些编译器可能还会使用0LL(void*)0

如果可以,则应使用nullptr而不是NULL声明空指针。这是最好的解决方案,可以在较早的标准中进行仿真。

要声明纯虚函数,请使用= 0。这是声明纯虚函数的最简单且通常的方法。

  • [根据C ++的神圣法则](/sf/ask/16014841/),任何包含两个下划线的内容行是不可移植的实施细节,在您升级工具时可能会消失。那或它是潜在的编程错误,可能会导致非常混乱的错误或运行时行为。 (2认同)