如何对这段C ++代码进行现代化改造?

时间:2015-03-06 01:54:29

标签: c++ algorithm c++98

我有一个算法,它是解析函数I的一个数学方程式。它位于当前字符(c*it)被确定为面向右侧的paranthesis (的部分内,并且应该增加it直到它找到闭幕式。

       /* Iterate until the current character is the closing paranthesis or is off the end of the equation string */
        std::string::const_iterator opi = it;
        ++it;
        for (int nrfp = 1; nrfp > 0 && it != offend; c = *++it)
        {
            if (c == ')') --nrfp;
            else if (c == '(') ++nrfp;
        }
        if (it == offend) throw "Unbalanced parantheses";

        /* If we're here, the current character is the closing paranthesis, meaning the characters in the range (opi, it) are the inside of the paranthesis */

        /* Check that the paranthesis are not empty */
        if ((it - opi) == 1) throw "Empty paranthesis";

作为参考,opi应该表示"打开paranthesis iterator"并且nrfp应该表示"面向右边的paranthesis的数量"并且offend是I' m iteratring through的字符串end()的迭代器。

如何在可读性,性能和现代性方面改进这一点,而不会在3中有任何妥协?是否有我应该利用的标准库算法?

1 个答案:

答案 0 :(得分:1)

我认为你唯一需要做的就是:不要抛出字符串文字。而是抛出一个异常类的对象(最终)派生自std::exception

例如。替换这个:

 if (it == offend) throw "Unbalanced parantheses";

 if (it == offend) throw std::runtime_error("Unbalanced parantheses");

std::logic_error或其他(更具体)类的实例。此修改将允许您优雅地捕获异常。阅读有关例外的更多信息。