c++ std::exception ..请再给我一些好吗?



我已经浏览了http://en.cppreference.com/w/cpp/error/exception &http://en.cppreference.com/w/cpp/io/basic_fstream寻找我可能抛出的I/O异常。我知道我可以创建一个自定义异常类,有很多网站提供示例代码,但我想要一些关于最佳实践的指导。

还有,有没有一个我应该集中精力使用的库让我的生活更轻松?

c++ 11为低级错误引入了新的头文件system_error。可以编写自己的错误分类。

这可能是在现代c++中编写自己的错误处理的良好起点。

要回答问题的库部分,请查看boost::exception

Boost异常可以从一个线程移动到另一个线程,并且可以在捕获(和可选的重新抛出)异常时动态地将信息附加到异常上——使用operator<<。此外,BOOST_THROW_EXCEPTION宏记录表达式中的文件、行和函数名,以便美观打印。

否则,通常的做法是为您的项目定义自己的异常。但是很难给出更具体的答案,因为我不熟悉你所说的"类似java的实用程序"。

作为一个更一般的说明,c++的设计原则之一是做你要求的,而不是更多的,这在某些情况下是一种祝福,在某些情况下意味着更多的工作——这与java完全不同。异常的主要目的是用throw/catch中断正常的程序流,c++就是这样做的。

如果你只想要一个简单的字符串消息:

struct E: std::exception {
  const char* msg;
  E(const char* msg_): msg(msg_) {}
  const char* what() const { return msg; }
};
// ...
throw E("invalid operation name");

有很多预定义的异常,但通常,您要么定义自己的异常,要么抛出std::runtime_error作为第一近似。

一般来说,你会扩展std::runtime_error,或者std::exception的另一个更合适的导数。

例如,

class io_error : public std::runtime_error {
public:
    using std::runtime_error::runtime_error;
};

最新更新