gpt4 book ai didi

c++ - 类型转换和异常处理

转载 作者:行者123 更新时间:2023-12-01 14:38:14 24 4
gpt4 key购买 nike

  • 在下面提到的代码中,当我使用 float 参数调用“方法”时,它会自动转换为 int 并执行必要的任务。但是当我抛出 float 类型并且立即 catch 期望 int 参数时,它不起作用?为什么?

  • 另一件事,如果没有带有 floatcatch 语句,那么它应该转到通用 catch 并且如果我从那里开始重新抛出哪个 catch 会处理它?<​​/p>

    int method(int i)
    {
    return i--;
    }
    void main()
    {
    try {
    cout<<method(3.14);
    throw string("4");
    }
    catch(string& s){
    try{
    cout << s;
    throw 2.2;
    }
    catch(int i)
    cout<<i;

    catch(...)
    throw;

    cout<<"s"+s;
    }
    catch(...)
    cout<<"all";
    }

最佳答案

函数调用在编译时解析,编译器能够检查类型,找到最接近的匹配(重载解析),然后进行适当的转换。传播异常时,运行时不会发生此类事情。异常由与类型完全匹配的 catch 或异常的明确基础之一捕获。在您的情况下 int 根本不匹配 double

关于你的第二个问题:你的 rethrow 没有包含在 try block 中,所以它没有被最后一个 catch(...) 。最后一个 catch(...) 对应于第一个 try block 。

关于c++ - 类型转换和异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14598751/

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