-3

我有一个类和一个返回该类对象的函数,如果我返回 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
}
4

3 回答 3

0

在 C++ 中,没有实际的 null (但是nullptr从新版本开始就有)。这意味着 NULL 的定义如下:

#define NULL 0

因此它具有与数字变量 0 相同的特性。这就是为什么你不能将你的类设置为 0。

于 2012-12-09T23:23:34.870 回答
0

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

如果您想为该类设置一些“不存在”的值,请在类中对其进行编程(例如,作为布尔标志)或使用指针,例如:

someclass* functionname() {

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

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

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

忘记这是C++.

于 2012-12-09T23:36:42.597 回答
0

这个例子更像是一个情景描述,而不是应该实际编译的东西,因此我没有费心去验证它,因为它与答案无关,我怀疑有人会对筛选我定义一个类的 100 行代码和一个函数。

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

于 2012-12-10T15:07:24.340 回答