gpt4 book ai didi

c++ - 在 C++ 中,对象可以为 null 吗?

转载 作者:太空宇宙 更新时间:2023-11-04 14:40:01 25 4
gpt4 key购买 nike

这是我所做的:我有一个简单的类(class):

class Person{
public:
Person();
}

And in my main:

int main() {
Person myPer = NULL;
}

这是不可能的,因为 C++ 不允许这样做,但是:

int main() {
Person* perPtr = NULL;
Person myPer = *perPtr; // corrected, it was &perPtr(typo error) before answers
}

这编译得很好,正如我所见,我确实能够拥有一个 NULL 对象。那么是不是违反了C++中只有指针可以为null的规定呢?或者C++中有这样的规则吗?第二个是在我写完这段代码之后,我添加了一个 if 语句来检查 myPer 是否为 NULL,但这给了我错误。那么它是否表明 C++ 并不真正喜欢 NULL 对象的想法,无论你做什么使对象为 NULL...

最佳答案

对象不能为空,只有指针可以。您的代码不正确并且无法编译,因为它试图从指向 Person 的指针初始化 Person。如果您要将代码更改为

Person* perPtr = NULL;
Person myPer = *perPtr;

然后它将尝试从一个指向 Person 的取消引用的空指针中初始化一个 Person,这是未定义的行为(很可能是崩溃)。

如果您需要在对象可能处于NULL 状态时使用习语,您可以使用Boost.Optional:

boost::optional< Person > myPer = boost::none;
if( myPer )
{
myPer->do_something();
}

这是对通常用指针完成的事情的概括,只是它不使用动态分配。

关于c++ - 在 C++ 中,对象可以为 null 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7932381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com