Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有try-catch和异常抛出的方法_C++_Loops_Types_Try Catch - Fatal编程技术网

C++ 具有try-catch和异常抛出的方法

C++ 具有try-catch和异常抛出的方法,c++,loops,types,try-catch,C++,Loops,Types,Try Catch,所以我有以下方法: template <class DT> //needs testing DT& LinkedSortedArrays<DT>::find (const DT& key) { list<SortedArray<DT>>::iterator it = SAList.begin(); for( ; it != SAList.end(); ++it){ try{ i

所以我有以下方法:

template <class DT> //needs testing
DT& LinkedSortedArrays<DT>::find (const DT& key)
{
    list<SortedArray<DT>>::iterator it = SAList.begin();
    for( ; it != SAList.end(); ++it){
        try{
            if (it == SAList.begin() && key < (*it)[0]) throw Exception();
            return (*it).find(const_cast<DT&> (key));
        } catch (ArrayException e) {

        }
    }
    throw Exception();
}
模板//需要测试
DT&linkedSortedarray::find(常量DT&key)
{
list::iterator it=SAList.begin();
for(;it!=SAList.end();++it){
试一试{
if(it==SAList.begin()&&key<(*it)[0])抛出异常();
return(*it).find(const_cast(key));
}捕获(阵列异常e){
}
}
抛出异常();
}
我以前定义过类
Exception
arrayeexception
(*it).find(const_cast(key))
每次在当前搜索的特定数组类中未找到
key
时,都会抛出一个ArrayException
SAList
是一个
STL列表
。代码编译得很好。但是我还没有在我的程序中尝试过。为什么?我需要有人确认或纠正我所做的以下假设:

  • 每当
    if(it==SAList.begin()&&key<(*it)[0])抛出异常()抛出异常,这意味着它将抛出for循环之外,甚至方法之外,对吗
  • 我几乎可以肯定最后一行
    抛出异常()
    将在方法外部引发异常
  • for循环的排列方式不会跳过SAList的第一个元素,对吗?我的意思是,我在互联网上看到过这个特定的代码,它可以迭代列表中的所有元素,好像它是标准的或完美的,但是。。。那
    ++it
    让我绞尽脑汁。帮忙
  • 我收到一个错误,
    无法将常量int转换为int&
    (因为
    中的
    find()
    (*it)。find(const_cast(key))
    不是属于
    LinkedSortedArray
    的那一个,而是另一个需要DT&variable和
    LinkedSortedArray
    find()
    具有const DT&)类型的参数,我发现一个可能的解决方案可能是将其写成
    const_cast(key)
    。我需要第二个意见
  • 最后,我明白如果这不是一个具体问题,因此我会获得否决票和/或问题结束。我真的不知道还有什么好问的。 如果是这样的话,我问错了地方。我道歉

  • 是的,它将沿着堆栈向上移动,直到找到合适的
    catch
    处理程序。如果没有找到这样的处理程序,程序将终止

  • 是的,会的

  • 不,它不会,因为
    end
    应该返回一个迭代器到结束处,而不是最后一个元素。除非那个容器的设计也很糟糕,但你必须查阅文档才能确定

  • 这是一个糟糕的设计,
    find
    应该通过
    const
    引用获取其参数。因为你不能,除非你想冒未定义行为的风险,否则你必须复制一份:

    DT nonconstkey = key;
    return it->find(nonconstkey);
    

  • 为什么
    find
    不通过常量引用获取其参数?Profesor希望这样:/它基本上是属于另一个类的
    find
    ,数据结构由
    LinkedSortedArray
    组成。您对
    ArrayException
    Exception
    之间的关系做了哪些假设?是的,我知道,我非常清楚副本的需要。幸运的是,目前我只使用
    int
    s。所以现在没有什么令人头痛的。@MooingDuck只是说
    Exception
    不是
    ArrayException
    的子类。我忘了提一下,
    ArrayException
    Exception
    的子类。Yokhen没关系,它不会改变答案。