首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当返回类型为int时,为什么不能使用return NULL

问当返回类型为int时,为什么不能使用return NULL
EN

Stack Overflow用户
提问于 2014-12-14 20:42:10
回答 3查看 1.2K关注 0票数 0

我的函数的返回类型是in。我希望在一种情况下不返回任何内容。使用return NULL似乎是错误的。用什么来代替返回NULL?

EN

回答 3

Stack Overflow用户

发布于 2014-12-14 20:44:13

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

票数 4
EN

Stack Overflow用户

发布于 2014-12-14 20:44:20

因为C++11 NULL可以定义为计算结果为零的整型常量表达式,也可以定义为nullptr。如果是后者,那么您的程序就是病态的,因为无法将nullptr转换为int。

NULL是一个过时的宏,用于以惯用的方式表示空指针常量。它并不代表一个“空”对象。为此,可以使用其他技术,如boost::optional。

但是,这肯定不是您需要的,所以只需重新考虑您的设计,以及如何返回一个超出正常输出范围并表示为空的返回值。(例如,-1。)

票数 4
EN

Stack Overflow用户

发布于 2014-12-14 20:54:48

如果你有一个这样的函数:

代码语言:javascript
复制
int GetPrice (const char* product)
{
    if (FindProduct (product)) {
        return GetProduct (product)->price;
    } else {
        return NULL;
    }
}

这不会像您期望的那样。即使NULL被定义为NULL (对于一些较旧的编译器也是如此),您将返回数值0,因此对于调用您的函数的人来说,将无法了解产品是免费的(价格是0)还是没有找到该产品。

在C++中,你可以通过引用来解决这个问题:

代码语言:javascript
复制
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来实现您想要的结果。例如,您可以通过返回一个带布尔值的结构来很容易地模仿这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27469393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档