复制时我抛出了类型:
struct A { A(const A&) { throw 1; } };
void doit(A)
{
}
int main()
{
A a;
doit(a);
return 0;
}
是在函数内部还是外部抛出异常?我可以将函数声明为noexcept吗?
请参见C ++ 17 [expr.call] / 4
...每个参数的初始化和销毁发生在调用函数。 [示例:在调用函数的调用点检查构造函数,转换函数或析构函数的访问。如果函数参数的构造函数或析构函数抛出异常,则在调用函数的范围内开始搜索处理程序。特别是,如果调用的函数具有function-try-block(第18条),并且带有可以处理异常的处理程序,则此处理程序不考虑过的。 — 最终示例]
因此,正如您将其说的那样,例外是在“函数外部”抛出的。您可以将其声明为noexcept
。