2016-01-20 67 views
1

當我聲明condition_variable時,它可能會拋出std::system_error可以聲明POD類型拋出異常嗎?

但是當我聲明POD類型時(如int,doublefloat)怎麼樣?

像下面的代碼:

int main() 
{ 
    //do something 
    int i; //will here throw exception? 
} 

如果聲明一個POD類型可能會拋出異常,我怎麼保證

void test() noexcept 
{ 
    //do something 
    int i; 
} 

noexcept

+0

你問有沒有辦法通過聲明一個變量來拋出異常? – AustinWBryan

+0

是的。這就是我的意思。 – Caesar

+3

聲明POD(普通舊數據:'int'等)類型不會拋出異常;但是,任何其他構造函數_may_都會拋出異常。檢查文檔。你可以看到['std :: condition_variable'](http://en.cppreference.com/w/cpp/thread/condition_variable/condition_variable)的構造函數可以拋出異常。 – Tas

回答

2

但是,如何聲明基本類型(例如,int,double或float)?

聲明POD type對象不會引發異常。

非POD類型的構造函數可能會拋出異常。只有這些類型的文檔/源代碼可以幫助您確定這是否會發生特定類型。

0

這是std::condition_variableconstructor可以拋出異常。原始類型如intdouble沒有任何構造函數。他們只是爲他們分配了一些堆棧空間,就是這樣,加上一個值,如果你初始化變量。這可能會導致異常的唯一方法是如果你溢出堆棧並且隨後的未定義的行爲發生了拋出一個。

0

POD類型通常使用初始化表達式而不是構造函數進行初始化。像構造函數一樣,初始化器可以拋出異常。但是如果你既沒有構造函數也沒有初始化器,那麼就沒有與定義關聯的代碼,因此也不可能拋出該代碼。

相關問題