函數簽名後使用throw(type-list)
是這樣你還是誰將會閱讀你的代碼程序員都知道,這個功能只能扔掉,你在type-list
specifed的類型。
void f()throw(){};// This function can not throw any object of any type.
void f()throw(A){}; // you can throw any A object +
// any object of a type drived from A if A is a User-defined Type
如果拋出一個類型,它是不是在異常規範的對象,std::unexpected()
函數將被調用。
2-這裏沒有catch塊。函數簽名後的throw(type-list)
只是保險,該函數不會拋出除type-list
類型的對象之外的任何類型。
什麼你正在使用被稱爲異常規範,它的一個例子是使用是這樣的:
int f(int x)throw(int){
if (x==0) throw 0;
return x;
}
int main(){
try{
f(0);
}
catch(int e){
// something
}
}
你可以記住兩兩件事:
我)不要使用異常規範因爲它們已被棄用。
ii)如果您必須使用它們,那麼現在您必須知道一些編譯器會因爲它有異常規範而拒絕內聯函數。
更新:
void f()throw(int){
try{
// code goes here ...
throw 1.1; // note this is throwing a float
}
catch(float){
// exception handled
}
}
在這個例子中,你不會得到任何錯誤,即使你扔float
類型的異常,這是不是在功能異常規範規定只允許你拋出int
類型的對象。這是因爲你在函數內處理了異常。
void f()throw(int){
throw 1;
}
int main(){
try{
f();
}
catch(int){// exception handled}
}
你應該始終把你認爲可能拋出try-block
內異常的函數,上面的代碼將得到自f()
執行罰款拋出int
,它得到了處理。
void f()throw(int){
throw 1.1; // note this is throwing a float
}
int main(){
try{
f();
}
catch(...){//}
}
這將導致std::unexpected()
函數調用,因爲你的函數f()
扔float
類型的異常是不是在功能異常規範。
-1這不回答任何問題。 –