Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 嵌套异常和基元类型_C++_C++11 - Fatal编程技术网

C++ 嵌套异常和基元类型

C++ 嵌套异常和基元类型,c++,c++11,C++,C++11,当捕获的异常为基元类型时,是否可以使用嵌套的std::throw\u 据说,新类型是从捕获的异常和新异常派生的。但是我不能从诸如int之类的基元类型派生。因此,我不能对基元类型使用嵌套异常。这是真的吗?我的标准副本上说: 18.8.6/7抛出:如果U是一个非联合类类型,而不是从nested\U exception派生的,则是一个未指定类型的异常,它公开派生自U和nested\U exception,并由std::forward(t)构造,否则std::forward(t) 所以throw_与_嵌

当捕获的异常为基元类型时,是否可以使用嵌套的
std::throw\u


据说,新类型是从捕获的异常和新异常派生的。但是我不能从诸如
int
之类的基元类型派生。因此,我不能对基元类型使用嵌套异常。这是真的吗?

我的标准副本上说:

18.8.6/7抛出:如果
U
是一个非联合类类型,而不是从
nested\U exception
派生的,则是一个未指定类型的异常,它公开派生自
U
nested\U exception
,并由
std::forward(t)
构造,否则
std::forward(t)


所以
throw_与_嵌套(42)
应该
throw 42

标准说明了
throw\U with_嵌套(T&&T)
,with
U=remove\U reference::type

抛出:如果
U
是非联合类类型,而不是从
nested_exception
派生的,则是一种未指定类型的异常,该异常公开派生自
U
nested_exception
,并由
std::forward(t)
构造,否则
std::forward(t)


“否则”子句似乎表示,如果没有类类型,只需抛出原始参数。

抛出的异常是从新异常和
std::nested_异常派生的未指定类型(而不是新的和捕获的异常)。然后,
std::nested_exception
包含捕获异常的
std::exception_ptr
(从
std::current_exception
获取)

因此:

如果新的异常是
int
,那么您将抛出一个
int
,正如其他答案所述

如果捕获一个
int
,则抛出(从中派生的类型)新异常,并在
std::nested_异常中抛出
int