当我声明condition_variable
时,它可能会抛出std::system_error
。
但是当我宣布POD类型时(例如int
,double
或float
)会如何?
与下面的代码一样:
int main()
{
//do something
int i; //will here throw exception?
}
如果声明POD类型可能会引发异常,我该如何保证
void test() noexcept
{
//do something
int i;
}
是noexcept
?
答案 0 :(得分:2)
但是如何声明一个基本类型(例如,int,double或float)?
声明POD type个对象不会导致抛出异常。
非POD类型的构造函数可以抛出异常。只有这些类型的文档/源代码可以帮助您确定特定类型是否会发生这种情况。
答案 1 :(得分:0)
std::condition_variable
的{{3}}可以抛出异常。像int
和double
这样的原始类型没有任何构造函数。它们只是为它们分配了一些堆栈空间,并且在初始化变量时加上一个值。这可能导致异常的唯一方法是,如果您溢出堆栈并且随后的未定义行为恰好抛出一个。
答案 2 :(得分:0)
POD类型通常使用初始化表达式而不是构造函数进行初始化。与构造函数一样,初始化程序可以抛出异常。但是如果你既没有构造函数也没有初始化程序,那么就没有与定义相关的代码,因此也不可能抛出该代码。