我不太熟悉异常处理,所以有人可以帮我解决这个问题吗?所以对于这个程序,在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()'。我建议你使用[标准异常类之一](http://en.cppreference.com/w/cpp/error),可能是基于标准类自己编写的。 –
同样供您参考:如果不引发任何异常,使用异常对性能的影响可以忽略不计,但如果抛出并捕获异常,则C++中的异常确实会对性能产生相当大的影响。例外情况只应用于*特殊*情况。未能验证用户输入通常不是这种特殊情况。 –
我认为这是异常处理的一个坏例子。你根本不需要try-catch块。 –