我的函数的返回类型是in。我希望在一种情况下不返回任何内容。使用return NULL似乎是错误的。用什么来代替返回NULL?
发布于 2014-12-14 20:44:13
您不能返回任何内容。您只能使用指针类型来执行此操作。即使你编译它,它也会返回0,而不是什么都不返回。
发布于 2014-12-14 20:44:20
因为C++11 NULL可以定义为计算结果为零的整型常量表达式,也可以定义为nullptr。如果是后者,那么您的程序就是病态的,因为无法将nullptr转换为int。
NULL是一个过时的宏,用于以惯用的方式表示空指针常量。它并不代表一个“空”对象。为此,可以使用其他技术,如boost::optional。
但是,这肯定不是您需要的,所以只需重新考虑您的设计,以及如何返回一个超出正常输出范围并表示为空的返回值。(例如,-1。)
发布于 2014-12-14 20:54:48
如果你有一个这样的函数:
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来实现您想要的结果。例如,您可以通过返回一个带布尔值的结构来很容易地模仿这一点。
https://stackoverflow.com/questions/27469393
复制相似问题