我只能想到以下使用std :: exception :: what()的情况:


用于调试目的。在我的Visual Studio中,要查看e.what(),我必须将其手动添加到监视列表。拥有成员std :: string更好吗(调试器直接在对象检查器中显示它),并且仅将其包括在非NDEBUG生成中?至少他们应该禁用NDEBUG构建中的what()。
输出它,例如MessageBox(e.what())cout << e.what()。据我所知,这些消息对许多用户都没有用。例如,当我尝试重命名一个不存在的文件时:


  boost::filesystem::rename: 系统找不到指定的文件。: "D:\MyDesktop\4", "D:\MyDesktop\5"


(中文意思是“系统找不到指定的文件。”)用户如何解密混合的内容?另外,它是一个const char*而不是const platform_char*之类的东西,在Windows中可能会出现unicode问题。
从中提取数据,例如std::regex_match(e.what()...)。我认为这是一个可怕的想法,显示出设计缺陷。


所以我应该在哪里使用std :: exception :: what()?它没用吗?

最佳答案

程序员应该从std::exception和taylor what()派生一个类来满足特定要求。然后它会非常有用。

返回某些内容(例如以纯文本格式记录)也很有用,这就是该标准要求使用具体的std::exception::what()而不是纯虚函数的原因。

关于c++ - std::exception::what()的目的是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20497601/

10-15 04:31