我只能想到以下使用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/