我怎样才能使这段 C++ 代码现代化?

How can I modernify this piece of C++ code?

我有一个算法,它是我正在编写的数学方程式解析函数的一部分。它位于当前字符(c*it)已被确定为右括号 ( 的部分内,并且应该递增 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 应该表示 "opening paranthesis iterator",nrfp 应该表示 "number of right-facing paranthesis",而 offend 是 [= 的迭代器我正在遍历的字符串的 18=]。

我怎样才能在可读性、性能和现代性方面提高它,同时又不在这三者之间做出任何妥协?是否有我应该利用的标准库算法?

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

例如。替换为:

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

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

std::logic_error 的实例,或其他一些(更具体的)class。此修改将使您能够优雅地捕获异常。详细了解异常。