类返回对象类型,但如何返回和检查 null
Class returning an object type but how can null be returned and checked
我对C++相当陌生,我正在做一个项目,我有一个声明如下的方法:
SupportTicket SupportProcessor::getSupportTicket(int supportRef)
上面的方法在数据库中查找记录,如果找到,将返回类型为SupportTicket
的对象。但是,如果现在找到它,要么是因为找不到 supportRef,要么是因为数据库错误,我不想返回任何内容,即NULL
.尽管该方法本身不会抱怨,但当我检查返回的值是否为 NULL 时,我会收到错误。
例如,我调用我的方法如下:
SupportTicket supportTicket = this->getSupportTicket(1);
if (supportTicket != NULL)
{
//The record was found
}
else
{
//The record was not found or an error occurred
}
我得到的错误是:
no operator "!=" matches these operands
binary '!=' no operator found which takes a left-hand operand of type 'SupportTicket' (or there is no acceptable conversion)
在方法getSupportTicket中,我尝试了返回NULL和nullptr
我来自 C# 背景,所以这通常完全没问题,所以我如何在 c++ 中做到这一点。我知道在该方法中,我可以通过执行return new SupportTicket()
然后在返回到的方法中删除它来分配堆上的返回值,但这似乎有点矫枉过正,或者这是唯一的方法。
首先,错误。这可能是因为您的SupportTicket
类既不能与NULL
进行比较,也不能与nullptr
进行比较。我什至无法弄清楚您如何从函数中返回空票证,因为它无法从您发布的代码中轻松推断出来。
无论如何,C++与 C# 或 Java 等其他语言非常不同,您不能简单地从函数返回 null 引用来指示您不想/不能返回指定类型的对象。
如果SupportTicket
支持两种有效状态,例如正确初始化和绝对未初始化,则可以定义该类或isValid
成员函数的operator bool()
,并直接在保护中使用它们作为:
if(myTicket) {
// ...
}
或:
if(myTicket.isValid()) {
// ...
}
在 C++17 中,您可以改用std::optional
作为返回类型:
类模板 std::optional 管理一个可选的包含值,即可能存在也可能不存在的值。
它有一个operator bool()
来测试对象是否已正确初始化。有关更多详细信息,请参阅链接的文档。
在 C++11/14 中,您可以使用std::unique_ptr<SupportTicket>
并在失败时返回未初始化的指针。缺点是必须在动态存储上创建对象本身。对你来说好不好主要取决于实际问题,我不能这么说。
否则,您可以在 github 上寻找std::optional
的替代实现(这里是一个例子),或者如果您的编译器提供了它,请参考<experimental/optional>
。
一个不太用户友好的解决方案是抛出异常,但它迫使调用者在try/catch
块中嵌入任何调用,这通常很烦人。
- 检查函数返回类型是否与STL容器类型值相同
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- 如何检查 log2 'inbuilt c++ function'是否返回 '-inf'?
- cpp 检查抱怨危险使用 c_str(). c_str() 返回的值在本次调用后无效,如何解决?
- 如何检查 range:: 算法(如 find_if)是否返回了值?
- 字符串检查总是返回假的Palidrome
- 检查 std::string.c_str() 的返回值
- 如何检查 CNG Windows API 是否返回符合 FIPS 的算法实现
- 如何检查从 C++ 中的函数返回的空数组
- 如何获取有关 Visual Studio 代码分析中未经检查的函数返回值的警告
- c++ 一遍又一遍地对函数返回相同的检查
- 返回其参数或检查 nullptr 的函数
- 检查成员函数是否返回临时对象或数组对象
- 类返回对象类型,但如何返回和检查 null
- 特征:返回对具有编译时间尺寸检查的矩阵块的引用
- 检查数字在C 中未返回正确结果的功能
- 如何检查dllmain函数正在返回错误
- 检查Windows激活状态返回错误的值
- 如何检查正确操作数以通过参考返回功能
- 优化的范围检查并返回值