C 函式後面的throw

2021-08-07 07:51:35 字數 510 閱讀 6685

看智慧型指標auto_ptr實現的時候發現了這麼個東東

explicit auto_ptr(_ty *_ptr = 0) _throw0()

: _myptr(_ptr)

巨集_throw0():#define _throw0() throw ()

函式後面的這個throw ()代表什麼意思呢?

它是函式提供者和使用者的一種君子協定,標明該函式不丟擲任何異常。

之所以說是君子協定,是因為實際上內部實現是需要人肉確保。

如果乙個標明throw()的函式內部發生了throw:

1,如果內部直接throw something,編譯器會發現並指出;

如果是內部呼叫了乙個可能throw something的函式,編譯器無法發現,執行時一旦這個內部的函式throw,程式會abort。

func() throw(type) ,會丟擲某種異常

func() throw(),不會丟擲

func() throw(…),可能是任何型別的異常

C 建構函式後面的冒號

建構函式後加冒號是初始化表示式 有四種情況下應該使用初始化表示式來初始化成員 1 初始化const成員 2 初始化引用成員 3 當呼叫基類的建構函式,而它擁有一組引數時 4 當呼叫成員類的建構函式,而它擁有一組引數時。在程式中定義變數並初始化的機制中,有兩種形式,乙個是我們傳統的初始化的形式,即賦值...

C 建構函式後面的冒號

建構函式後加冒號是初始化表示式 有四種情況下應該使用初始化表示式來初始化成員 1 初始化const成員 2 初始化引用成員 3 當呼叫基類的建構函式,而它擁有一組引數時 4 當呼叫成員類的建構函式,而它擁有一組引數時。在程式中定義變數並初始化的機制中,有兩種形式,乙個是我們傳統的初始化的形式,即賦值...

C 建構函式後面的冒號

建構函式後加冒號是初始化表示式 有四種情況下應該使用初始化表示式來初始化成員 1 初始化const成員 2 初始化引用成員 3 當呼叫基類的建構函式,而它擁有一組引數時 4 當呼叫成員類的建構函式,而它擁有一組引數時。在程式中定義變數並初始化的機制中,有兩種形式,乙個是我們傳統的初始化的形式,即賦值...