【发布时间】:2016-12-09 07:43:08
【问题描述】:
我对异常处理不太熟悉,所以有人可以帮我解决这个问题吗?所以对于这个程序,如果 std::map 中有一个不存在的键,我想抛出一些东西,但我不知道是什么。
如果存在,则映射键将是电话号码(字符串),但如果不存在,它会是什么??
class SmartCarrier{
private:
string carrier_name_;
map<string,vector<Message*>> accounts_map;
public:
Search();
}
void phone::Search{
string phone_number;
map<string,vector<Message*>>::iterator iter;
cout << "Enter a phone number: ";
getline(cin,phone_number);
try{
iter = phone_map.find(phone_number);
if (iter ==phone_map.end()) {
//Incase of a non-existing phone number what do I throw?
throw iter;
}
}
catch(/*iter ??? what should the block catch as a value?*/){
cout << "Phone number not found." << endl;
}
【问题讨论】:
-
iter的类型是什么?这就是你需要抓住的。对你来说这并不重要,因为它总是等于phone_map.end()。我建议你使用one of the standard exception classes,也许你可以根据一个标准类来制作自己的。 -
另外供您参考:如果没有抛出异常,则使用异常对性能的影响可以忽略不计,但如果您抛出并捕获异常,则 C++ 中的异常确实会对性能产生相当大的影响。异常只能在异常的情况下使用。验证用户输入失败通常不是例外情况。
-
我认为这是异常处理的一个坏例子。你根本不需要 try-catch 块。
-
如果我的手指很粗并且输入了错误的电话号码怎么办?你会为这种情况抛出异常吗?正如前面的评论所指出的,人类输入错误不是例外情况。
-
虽然这可以以更简单的方式完成,但我的作业规范告诉我这样做。我猜我的教授希望我习惯异常处理。老实说,我不知道何时使用它以及在这种情况下“例外情况”指的是什么。
标签: c++ exception-handling try-catch stdvector stdmap