其中,按值传递参数时会引发异常

问题描述 投票:3回答:1

复制时我抛出了类型:

struct A { A(const A&) { throw 1; } };

void doit(A)
{
}

int main()
{
    A a;
    doit(a);
    return 0;
}

是在函数内部还是外部抛出异常?我可以将函数声明为noexcept吗?

c++ exception language-lawyer pass-by-value noexcept
1个回答
3
投票

请参见C ++ 17 [expr.call] / 4

...每个参数的初始化和销毁​​发生在调用函数。 [示例:在调用函数的调用点检查构造函数,转换函数或析构函数的访问。如果函数参数的构造函数或析构函数抛出异常,则在调用函数的范围内开始搜索处理程序。特别是,如果调用的函数具有function-try-block(第18条),并且带有可以处理异常的处理程序,则此处理程序不考虑过的。 — 最终示例]

因此,正如您将其说的那样,例外是在“函数外部”抛出的。您可以将其声明为noexcept

© www.soinside.com 2019 - 2024. All rights reserved.