gpt4 book ai didi

c++ - 多态异常处理和编译器警告

转载 作者:行者123 更新时间:2023-11-27 22:53:38 26 4
gpt4 key购买 nike

我有一个小问题,我无法以干净的方式解决。我正在对多态异常处理进行一些试验,所以我在我的异常类中添加了一个 raise 虚函数来执行实际的抛出,并且我用 raise() 调用替换了抛出。一切都按预期工作,但随后我将此解决方案应用于具有以下一般形式的返回类型的函数:

Obj Foo()
{
if(true)
return Obj
else
{
//throw Exception; //With this call everything is fine
Exception e{};
e.raise(); //The compiler warns me that I do not return anything
}
}

当我编译这样一个函数时,GCC 编译器 (v4.9) 提示说 Foo 没有返回就到达了结尾 (-Wreturn-type)有没有办法让编译器相信一切正常,而不隐藏警告?

最佳答案

我假设 Exception.raise() 抛出一个异常并且您使用 true 来表示一些表达式来确定是否不抛出异常(而不是比 C++ 关键字)。 (因为您没有提到编译器提示条件始终为真)。

显而易见的解决方案是在抛出异常后添加一条返回语句。

Exception e{};
e.raise();
return Obj; // this will not be reached

另一种选择是重构代码,以便始终有返回路径

if (!true)
{
Exception e{};
e.raise(); // or, alternatively, throw e
}
return Obj;

这样,对于编译器可以检测到的每个执行路径,都有一个有效的返回语句。

关于c++ - 多态异常处理和编译器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35223680/

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