抛出异常后无法退出方法

Cannot Exit Method after throwing Exception

请注意,我不太了解 throw 的工作原理。现在我有一种方法可以检查一个变量是否大于或等于另一个变量,如果不是,则抛出一个字符串异常。

问题是我不知道如何在抛出异常后退出该方法而不会出现未处理的异常错误。

CircleSquare Square::operator+ (const Circle& op2)
{
    /// Variables
    CircleSquare ret;

    /// Sets the temporary Square object's characteristics to LHS's colour, the sum of LHS sideLength + RHS sideLength, and Square name
    ret.SetName((char *)"Square-Circle");
    ret.SetColour((char *)this->GetColour());

    if (sideLength >= (op2.GetRadius() * 2))
    {
        ret.SetSideLength(sideLength);
    }
    else
    {
        throw ("The sideLength of square is smaller than the diameter of the contained circle.");
        return ret; // <--- Here is where the error occurs
    }

    if ((op2.GetRadius() * 2) <= sideLength && op2.GetRadius() >= 0.0)
    {
        ret.SetRadius(op2.GetRadius());
    }
    else
    {
        throw ("The radius of contained circle is larger than the sideLength of the square.");
        return ret;
    }

    return ret;
}

我想要它做的是抛出异常,然后退出方法并在我的 try-catch 块中处理异常,但相反,它在 "Unhandled Exception" return ret;

如何在不出现错误的情况下退出此方法?

您需要catchthrow正在做的事情。此外,当您 throw 时,return 语句永远不会发生。 (您应该删除以下行:

return ret; // <--- Here is where the error occurs

您很可能会看到编译器的一些警告(那是永远不会执行的代码)。您的代码应该可以毫无警告地编译。总是。 (-Werror 编译标志对此非常有用)。

throw 表示:return 但不是正常方式

您需要执行以下操作:

try {
    Square a;
    Circle b;
    CircleSquare sum= a + b; // You try to sum
    // If you can, the return statement will give a value to sum
    // If you throw, sum will not get constructed, 
    // b and a will be destroyed and the catch 
    // will be executed instead of anything below
    // the call to operator+
    std::cout << "Sum is: " << sum << std::endl;
} catch (std::string s) {
    // Will only catch exceptions of type std::string
    std::cerr << "Error: " << s << std::endl;
}

如果您对 catch 块执行了 goto,但清除了所有内容,则为 "like"。

如果你不处理它,它仍然会异常终止每个函数,直到它找到一个正确类型的catch块或者直到它退出main