Visual c++ 在这个C+;中,我是否可以使用exception作为递归函数而不是goto+;程序 你可以在C++中做很多事情。这并不意味着你应该这样做。将异常用于非异常事件就是其中之一。正如书中所说: P>将错误处理与“普通代码”分开,C++的实现往往基于异常是罕见的假设来优化。

Visual c++ 在这个C+;中,我是否可以使用exception作为递归函数而不是goto+;程序 你可以在C++中做很多事情。这并不意味着你应该这样做。将异常用于非异常事件就是其中之一。正如书中所说: P>将错误处理与“普通代码”分开,C++的实现往往基于异常是罕见的假设来优化。,visual-c++,c++17,Visual C++,C++17,简而言之,异常处理非常慢。异常对于许多C++程序员来说是有用的,因为它们能够实现不降低正常执行的错误处理;只有在错误实际发生时才需要花费时间。您显然不明白try-catch语句是如何工作的。当程序的执行流到达throw语句时,将考虑最近输入的try-catch语句的相应catch()块。在您的情况下,您有一个无条件的抛出,因此您的函数相当于此代码,不需要try-catch: Enter a: 6 Enter b: 0 Enter b again : 0 Enter b again : 7 E

简而言之,异常处理非常慢。异常对于许多C++程序员来说是有用的,因为它们能够实现不降低正常执行的错误处理;只有在错误实际发生时才需要花费时间。

您显然不明白
try-catch
语句是如何工作的。当程序的执行流到达
throw
语句时,将考虑最近输入的try-catch语句的相应catch()块。在您的情况下,您有一个无条件的
抛出
,因此您的函数相当于此代码,不需要try-catch:

Enter a: 6
Enter b: 0
Enter b again : 0 
Enter b again : 7 
Enter b again : 5 
Enter b again :
请注意,这仍然存在一个缺陷,不能解释用户输入错误的非数字输入的情况


try-catch
很慢,因为它可以释放调用堆栈,并且不适合作为流控制语句<代码>抛出可以在任何地方调用的任何函数中遇到,在
尝试
捕获
之间的任何嵌套级别上,但是从捕获返回将在将执行传递到
捕获

之前优雅地退出堆栈中所有函数的作用域,为什么需要
转到
?为什么要通过抛出异常来启动函数?您希望程序具体做什么?我知道这种方法,也知道do while方法是有效的方法,但我想知道使用try-catch异常处理可以解决这个问题。
Enter a: 6
Enter b: 0
Enter b again : 0 
Enter b again : 7 
Enter b again : 5 
Enter b again :
int exp(int b)
{
    cout<<"Enter b again : ";
    cin>>b;

    if(b==0)
        exp(b);    //this is the part where I think a logical error is occuring
    return b;
}
void exp(int& b)
{
    while(b==0) {
        std::cout << "Enter b again : ";
        std::cin >> b;
    }
}