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

标签 c++ exception casting

  • 在下面提到的代码中,当我使用 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/

相关文章:

python - 更改 Pandas 中的列类型

C - 将 "h_addr_list"数组转换为类型 "struct in_addr **"

c++ - 将字符串文字传递给函数并分配给成员变量

java - C++(可能还有 Java)如何为同步锁定对象?

c++ - QStyledItemDelegate::paint - 为什么我的文本没有正确对齐?

python - 我可以在 python 中故意引起异常吗?

java - Java 中的异常

c# - 流套接字错误处理 winRT

c# - 如果对象不能将 float 转换为 int

c++ - 无法删除 C++ 中的列表元素