gpt4 book ai didi

C++ 检测 0 到类的隐式转换

转载 作者:行者123 更新时间:2023-11-30 00:59:45 24 4
gpt4 key购买 nike

我在 API 中调用一个返回 Answer 对象的函数。在某些情况下,API 将返回 EMPTY_answer,其定义如下:

 #define EMPTY_answer ((Answer)0)

当然,尝试从 EMPTY_answer 对象访问 Answer 变量或函数会使应用程序崩溃。

尝试使用 if(lAnswer == EMPTY_answer) 对其进行测试也会使应用程序崩溃。有什么方法可以检测 API 是否返回 EMPTY_answer

编辑:

我没有编写 api 代码,也无法以任何方式修改它,我只是在挖掘 .h 文件试图弄清楚这个问题。是的,我知道将 0 强制转换为一个类有点创造性,不能委婉地说。我刚刚注意到 == 运算符被覆盖了

(...)
class ExportedByJS0CORBA Answer
{
(...)
int __stdcall operator==(Answer *ipt) const;
}

被调用的函数是

static SubClassOfAction Query();

我正在简化名称和相当多的继承层更准确地说,它因段错误而崩溃。

最佳答案

与其做一个几乎肯定会触发未定义行为的非常丑陋的转换,不如创建一个用作“空”答案的静态全局变量。您不需要以任何方式使用此对象,只需使其存在即可用作哨兵。

在 Answer.h 中:

extern const Answer EMPTY_answer;

在 Answer.cpp 中:

const Answer EMPTY_answer;  // use any constructor parameters that will be appropriate

关于C++ 检测 0 到类的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3823711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com