将对象作为 null 返回内容

Returning object as null returns what?

本文关键字:返回 null 对象      更新时间:2023-10-16

我有一个类和一个返回该类对象的函数,如果我返回 NULL,到底返回什么?

例:

class someclass {
    int a;
    int b;
    someclass::someclass(int a, int b) {
        this->a = a; this->b = b;
    }
};
someclass functionname() {
    return NULL;
}
someclass foo = functionname();

由于我没有类的默认构造函数,因此返回了什么?它是实际可用的对象吗?还是只是胡言乱语?为什么我不能这样检查?

if (foo == NULL) {
    something
}

在C++中,没有实际的空值(但是自新版本以来有nullptr)。这意味着 NULL 的定义如下:

#define NULL 0

因此它具有与数字变量 0 相同的品质。这就是您不能将类设置为 0 的原因。

编译器

不接受此代码。 C++Java不同,C# 不将类实例视为指针(或引用)。因此,对于此返回,它将尝试使用代码someclass(NULL)创建新的someclass实例。由于您没有合适的构造函数,因此将发生错误。

如果要为类

提供一些"不存在"的值,请在类中对其进行编程(例如,作为布尔标志)或使用指针,例如:

someclass* functionname() {
    if( ??? ) { 
        return new someclass(2,3);
    }
    else {
       return NULL;
    }
}

请记住,C++没有抓取收集器,因此您需要在不需要时自行删除new ed 对象。

someclass *a;
a = functionname();
...
delete a;

忘记这是C++中最烦人的错误。

该示例更像是情境描述,而不是应该实际编译的内容,因此我没有费心验证它,因为它与答案无关,我怀疑有人会有兴趣筛选我定义的 100 行类和函数。

无论如何,答案是,如果类有任何接受 1 个变量(可选或其他)的构造函数,它将使用该构造函数并在它可以放入的第一个变量中用 0 初始化对象