2016-01-20 37 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类型通常使用初始化表达式而不是构造函数进行初始化。像构造函数一样,初始化器可以抛出异常。但是如果你既没有构造函数也没有初始化器,那么就没有与定义关联的代码,因此也不可能抛出该代码。

相关问题