Mar*_*hrs 5 c++ exception pass-by-value language-lawyer noexcept
复制时我有一个类型抛出:
struct A { A(const A&) { throw 1; } };
void doit(A)
{
}
int main()
{
A a;
doit(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
异常是在函数内部还是外部抛出?我可以将该函数声明为 noexcept 吗?
参见 C++17 [expr.call]/4
... 每个参数的初始化和销毁发生在调用函数的上下文中。[示例:在调用函数的调用点检查构造函数、转换函数或析构函数的访问。如果函数参数的构造函数或析构函数抛出异常,则在调用函数的范围内开始搜索处理程序;特别是,如果被调用的函数有一个函数尝试块(第 18 条)和一个可以处理异常的处理程序,则不考虑该处理程序。—结束示例]
因此,正如您所说,例外是“在函数之外”抛出。你可以声明它noexcept。
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |