我不太了解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();
}
答案 0 :(得分:5)
这是UB的一个例子。它可能会也可能不会崩溃。但这是错误的代码。 UB意味着一切皆有可能。虽然正如其他帖子所暗示的那样,这个简单的代码片段在许多平台上都不会崩溃。
答案 1 :(得分:0)
这在C ++中很常见,该函数不是实例的一部分,而是类定义的一部分。
如果您尝试访问该功能中的this
,那么您将崩溃。
正如下面提到的@YSC,这被认为是未定义的行为,你不应该认为这会起作用。但它会主要起作用,我听说这在C ++访谈问题中甚至被问到。