为什么用nullPtr调用函数不会导致我的应用程序崩溃?

时间:2018-04-17 07:58:07

标签: c++

我不太了解C ++中的某些东西 - 我在类上创建了一些指针并将其设置为null。

现在我用这个空指针调用一些函数,函数成功。为什么不崩溃?

class Entity
{
public:
    void Print() const
    {
        std::cout << "Print" << std::endl;
    }
};

int main()
{
    Entity* ptr = nullptr;
    Entity& _ref = *ptr;    // No crash here - I expected a null pointer exception

    _ref->Print();  
}

2 个答案:

答案 0 :(得分:5)

这是UB的一个例子。它可能会也可能不会崩溃。但这是错误的代码。 UB意味着一切皆有可能。虽然正如其他帖子所暗示的那样,这个简单的代码片段在许多平台上都不会崩溃。

答案 1 :(得分:0)

这在C ++中很常见,该函数不是实例的一部分,而是类定义的一部分。

如果您尝试访问该功能中的this,那么您将崩溃。

正如下面提到的@YSC,这被认为是未定义的行为,你不应该认为这会起作用。但它会主要起作用,我听说这在C ++访谈问题中甚至被问到。