【发布时间】:2011-07-10 14:44:37
【问题描述】:
我在 C++ 代码中有以下函数(这只是一个例子)
Object& XYZ::getObject(InObj obj) {
try{
return obj.getObj();
}
DC_THROW_ERROR(ExceptionObj, "Object Not Found"); // Macro which throws an exception
}
当我编译上面的代码时,我得到警告(即控制到达非空函数的结尾)..宏在编译之前被扩展。所以编译器知道,如果它没有返回一些东西,它就会抛出异常。如果是这样,为什么编译器会发出警告?这些类型的功能在我的项目中无处不在。为了摆脱这些警告,我在宏之后写在下面一行。
return *(static_cast<Object*>(0));
这是修复它的正确方法吗?我知道它有点狡猾。我无法更改代码,因为我必须更改大约 1000 个函数。那么谁能告诉我是否有更好的修复方法?
谢谢
【问题讨论】:
-
能否提供宏的定义?
-
OT:我想知道为什么你可以从声明为返回
Object&的函数中返回Object*... -
请根据 Oli 提供宏的定义,以及您使用的编译器。
-
@David:什么?不存在 NULL 引用之类的东西。取消引用 NULL 是 UB。此外,在 Martin 发布时,他确实返回了一个 Object*。
-
不,没有。引用是对象的别名。产生未定义行为的不是“创造一个”。它取消引用 NULL 指针。你永远不会“创造一个”。这里没有要被引用别名的对象。
标签: c++ warnings return-type