可以声明POD类型会抛出异常吗?

时间:2016-01-20 05:47:31

标签: c++ exception noexcept exception-safety

当我声明condition_variable时,它可能会抛出std::system_error

但是当我宣布POD类型时(例如intdoublefloat)会如何?

与下面的代码一样:

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

如果声明POD类型可能会引发异常,我该如何保证

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

noexcept

3 个答案:

答案 0 :(得分:2)

  

但是如何声明一个基本类型(例如,int,double或float)?

声明POD type个对象不会导致抛出异常。

非POD类型的构造函数可以抛出异常。只有这些类型的文档/源代码可以帮助您确定特定类型是否会发生这种情况。

答案 1 :(得分:0)

std::condition_variable的{​​{3}}可以抛出异常。像intdouble这样的原始类型没有任何构造函数。它们只是为它们分配了一些堆栈空间,并且在初始化变量时加上一个值。这可能导致异常的唯一方法是,如果您溢出堆栈并且随后的未定义行为恰好抛出一个。

答案 2 :(得分:0)

POD类型通常使用初始化表达式而不是构造函数进行初始化。与构造函数一样,初始化程序可以抛出异常。但是如果你既没有构造函数也没有初始化程序,那么就没有与定义相关的代码,因此也不可能抛出该代码。