gpt4 book ai didi

c++ - 在 C++ 中,是否可以强制用户捕获异常?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:55 25 4
gpt4 key购买 nike

简而言之,是否有可能让 C++ 强制方法的调用者放置一个 try...catch block ?

(澄清一下:我不一定是指直接调用者,我的意思是强制它在某处被捕获的事实。另外,我说的是编译时的强制。)

长:

我读到它不建议使用异常规范并且无论如何它都不能正常工作 (http://4thmouse.com/mystuff/articles/UsingExceptionsEffectively.html)

但普遍的共识似乎更倾向于使用异常来返回错误,而不是用户编写返回错误代码的方法。

因此,如果我正在编写一个库,如何阻止用户在不放置任何 try...catch block 的情况下调用我的方法,然后在我的代码抛出异常时让他的程序崩溃?

(明确地说,我只需要在用户堆栈中的某处捕获异常,而不一定是在立即调用代码中,如果不是这种情况,编译器 会提示。)

最佳答案

不,不是。

确实,没有任何机制可以强制函数的调用者(调用堆栈中的任何位置)处理任何类型的错误。至少,不是通过编译失败。可以丢弃返回值。即使将错误代码与返回值捆绑在一起(通过 expected<T, E> ),如果用户在获取值之前没有实际检查该值是否可用,也不会发出编译时错误。

C++17 可能会给我们 [[nodiscard]]属性,它允许编译器在返回值(可能是错误代码)被调用者丢弃时发出警告。但是编译时警告将尽可能接近。

关于c++ - 在 C++ 中,是否可以强制用户捕获异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35298182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com