1

当我声明 acondition_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

4

3 回答 3

2

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

声明POD 类型对象不会引发异常。

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

于 2016-01-20T05:54:06.500 回答
0

它的构造函数std::condition_variable可以抛出异常。原始类型喜欢int并且double没有任何构造函数。它们只是为它们分配了一些堆栈空间,仅此而已,如果您初始化变量,则会写入一个值。这可能导致异常的唯一方法是如果您溢出堆栈并且随后的未定义行为恰好抛出一个。

于 2016-01-20T05:54:25.117 回答
0

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

于 2016-01-20T09:57:43.197 回答