zoukankan      html  css  js  c++  java
  • 【C++语法】C ++ 函数后面加 throw() 的作用

    看C++源码时发现,定义某些函数时会在后面加 throw(),如:

     inline HBITMAP CImage::Detach() throw()

    其实,这是函数提供者和使用者的一种君子协定,标明该函数不抛出任何异常,所以在使用该函数时,不必把它置于 try/catch 异常处理块中。

    声明一个不抛出异常的函数后,你有责任保证在你的函数的实现里面不会抛出异常。

    void 
    A::func() throw() 
    {
        // 程序会在这里崩溃.(如果该异常被处理,不会崩溃)
        throw (5); 
    }

    编译器不会认为上面的代码存在错误(vc2005会给出警告:warning C4297: “func”: 假定函数不引发异常,但确实发生了),但是,如果该异常未被上层的异常过滤器捕捉的话,会引发运行时的错误。


    综上述:
    1)  函数后面声明 throw() 只是接口的提供者和接口的使用者间的默契或称协议。
    2)  如果内部直接throw something,编译器会发现并指出;
    3)  如果是内部调用了一个可能throw something的函数,编译器无法发现,运行时一旦这个内部的函数throw,程序会abort。


    同理, 函数后面可以跟上 throw (type),表示该函数可能会抛出指定 type 类型的异常,而不是别的类型的异常。

    • func() throw(type) ,会抛出某种异常
    • func() throw(),不会抛出异常
    • func() throw(...),可能是任何类型的异常
  • 相关阅读:
    FOJ2250 不可能弹幕结界
    寻找最大值
    Haybale Guessing
    MG loves string
    Curious Cupid
    Anton and Permutation
    TLE
    Jzzhu and Numbers
    Divisible Group Sums
    The merchant
  • 原文地址:https://www.cnblogs.com/SchrodingerDoggy/p/14281144.html
Copyright © 2011-2022 走看看