2012-10-04 88 views
2

在C++中,對於將要拋出的對象的構造函數是否有效會引發異常?換句話說,當我們還在構建要拋出的對象時,我們還處於投擲狀態嗎?可以拋出一個對象的構造函數拋出異常嗎?

struct Error { 
    Error() { 
    if (someCondition()) { 
     throw anotherObject(); 
    } 
    } 
}; 

void test() { 
    throw Error(); 
} 

回答

9

投擲表達式需要是throw Error();,但是,這是有效的。

Error對象可以被拋出之前,它必須被構造。也就是說,必須評估子表達式Error(),才能在完整表達式中評估throw運算符。如果對子表達式Error()的評估本身引發異常,則將不評估完整表達式的其餘部分(即,throw)。