标记为noexcept的函数中是否有异常? [英] Can a function marked as noexcept have exceptions inside?

查看:110
本文介绍了标记为noexcept的函数中是否有异常?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有一个标记为 noexcept 的函数,但是有一行代码可以抛出。这行代码将在try块中,异常将被捕获。这是否会导致什么?

Let's say that I have a function marked as noexcept but there's a line of code inside that can throw. That line of code will be in a try block and the exception will be caught. Does that cause anything?

void MyFunc() noexcept
{
    try {
        throw std::exception("...");
    } catch (const std::exception & e) {
        // I'll deal with it here...
    }
}


推荐答案

是的,这是完全合法的,只要异常不漏出函数。

Yes, this is perfectly legal, as long as the exception doesn't leak out of the function.


一个实现不应该拒绝一个表达式,只是因为执行时它抛出或可能抛出
一个异常,函数不允许。

An implementation shall not reject an expression merely because when executed it throws or might throw an exception that the containing function does not allow.

[C ++ 11中的except.spec / 11]

[except.spec/11 in C++11]

这篇关于标记为noexcept的函数中是否有异常?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆