为什么当返回类型为 int 时不能使用返回 NULL

why can't return NULL be used when the return type is int

本文关键字:返回 NULL 不能 返回类型 int 为什么      更新时间:2023-10-16

我的函数的返回类型为 int。我想在一种情况下什么都不返回。使用返回 NULL 似乎是错误的。使用什么来代替返回 NULL?

您不能返回任何内容。只能使用指针类型执行此操作。即使你让它编译,它也会返回0,而不是什么都没有

自 C++11 以来,NULL可以定义为计算结果为零的整数常量表达式,也可以定义为 nullptr 。如果是后者,那么您的程序格式不正确nullptr因为无法转换为int

NULL 是一个过时的宏,用于以惯用方式表示空指针常量。它不表示"空"对象。为此,可以使用其他技术(如boost::optional)。
但是,这肯定不是您所需要的,因此只需重新考虑您的设计以及如何返回超出正常输出范围并指示空返回值的值。(例如 -1 .)

如果你有这样的函数:

int GetPrice (const char* product)
{
    if (FindProduct (product)) {
        return GetProduct (product)->price;
    } else {
        return NULL;
    }
}

这不会达到您的预期。即使将 NULL 定义为 NULL(就像某些较旧的编译器一样),您也会返回数值 0,因此对于调用您的函数的人来说,将无法了解产品是否免费(价格为 0)或未找到产品。

在C++中,例如,您可以使用引用来解决此问题:

bool GetPrice (const char* product, int& price)
{
    if (FindProduct (product)) {
        price = GetProduct (product)->price;
        return true;
    } else {
        return false;
    }
}

在未来的标准中,您可以使用optional值来实现所需的值:http://en.cppreference.com/w/cpp/experimental/optional。例如,您可以通过返回一个带有布尔值的结构来轻松模拟这一点,该结构指示值是否已设置。