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

时间:2014-12-14 12:42:10

标签: c++

我的函数有返回类型int。我想在一种情况下不返回任何内容。使用return NULL似乎是错误的。什么是使用而是返回NULL?

3 个答案:

答案 0 :(得分:4)

您无法返回没有。您只能使用指针类型执行此操作。即使你进行编译,也会返回0,而不是没有

答案 1 :(得分:4)

由于C ++ 11 NULL可以定义为求值为零的整数常量表达式,或nullptr。如果是后者,那么您的程序格式不正确,因为nullptr无法转换为int

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

答案 2 :(得分: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。您可以通过返回一个带有bool的结构来轻松模仿这一点,该bool指示值是否已设置。