c++ - C++ 捕获错误“抛出 'std::out_of_range' 的实例”
问题描述
这将是我在这里的第一个问题。我遇到了一个我想在我正在处理的程序中解决的问题(执行一些实习生/开发人员跟踪任务)。
我有一个 std::map 数据结构。每次我从 cmd 行传递一个未映射的值时,我都会得到:在抛出 'std::out_of_range' 的实例后调用终止 what(): map::at Aborted (core dumped)
没关系,这就是它应该的方式。但是,我想要实现的是验证用户输入,如果地图中不存在该值,则例如在变量中捕获上述事件,然后将其打印出来。
我尝试的每个条件语句都没有按我的意愿工作,因为它会立即抛出“终止调用...”广告,从而关闭整个程序。
解决方案
你应该把你的std::map::at(key)
电话放在try
/catch
块内,如
std::map<std::string, int> my_map = {{"one",1}, {"two":2}};
try
{
auto val = my_map.at("three");
std::cout << "my value at 'three' is " << val << "\n";
}
catch(std::out_of_range const & e)
{
std::cerr << "oops 'three' is not in your map\n";
}
推荐阅读
- node.js - 需要使用 PM2 服务器托管多个节点?
- javascript - 如何在 JavaScript 中合并两个数组的数组元素?
- sql - 带有 IF 语句的 SQL 中的动态消息
- javascript - 如何设置输入限制?
- c# - Unity3d - 更改天空盒颜色时反射不会更新
- perforce - perforce:如何检查最近(半年期间)修改的文件以及修改这些文件的人
- haskell - 如何返回在 Haskell 编程中交替组合两个函数列表产生的函数?
- android - 我可以在执行航点任务时向任何方向旋转飞机偏航吗?
- python - Django中多对多字段的PATCH
- ios - 使用 Socket 从浏览器读取请求后如何发送响应?(我正在使用 SwiftSocket)