为什么当返回类型为 int 时不能使用返回 NULL
why can't return NULL be used when the return type is int
我的函数的返回类型为 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。例如,您可以通过返回一个带有布尔值的结构来轻松模拟这一点,该结构指示值是否已设置。
相关文章:
- 如何在映射中返回null
- 为什么返回 NULL 不会破坏函数?
- fopen 在 gdb 中返回 NULL
- 为什么要从main()返回NULL?
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- Box2D World.GetBodyList() 返回 NULL,但 World 显然正在更新对象
- boost::p ython:PyErr_Fetch始终返回 NULL 回溯
- 如何在 Visual C++ 中从返回类型为 map 的函数返回 null?
- 如何在C++中返回Null作为引用
- 从模板化函数返回Null对象
- GDALOpen 在 GEOTiff 文件上返回 null
- PyThreadState_GET() 从 PyImport_GetModuleDict() 中返回 NULL
- (位图)LoadImage() 返回 NULL,GetLastError() 返回 0
- 在构造函数处将类对象强制转换为接口始终返回 NULL
- 如何为迭代器返回"null"值?
- 具有 4 个指针的节点的递归插入函数返回 null
- winAPI FindResource 仅在 DLL 中返回 NULL
- 使用 dlopen/dlsym 打开C++共享库 - dlsym 返回 NULL
- SetWindowsHookEx 在挂接到其他线程时返回 NULL
- 尚未归shared_ptr所有的实例的 shared_from_this() 总是返回 null?