如何转换这个特定的" if / else"阻止三元运算符?

时间:2016-10-10 11:07:43

标签: c++ parsing ternary-operator code-readability

有人可以指导我或将其转换成三元运算符吗?我正在使用堆栈来创建一个文本编辑器,它将在其中检查代码中的括号,但我只需要帮助使用三元运算符来缩短此代码。

            if(s.at(i)==x.at(j))
            {
                list.push_back(s.at(i));
            }

            if(s.at(i)==y.at(j))
            {
                if(!list.empty())
                {

                    if(list.back()=='('  && s.at(i)==')')
                    {
                        v=1;
                        list.pop_back();
                    }
                    else if(list.back()=='{'  && s.at(i)=='}')
                    {
                        v=1;
                        list.pop_back();
                    }
                    else if(list.back()=='['  && s.at(i)==']')
                    {
                        v=1;
                        list.pop_back();
                    }

                    else
                    {
                        error_position=i+1;
                    }
                }
                else
                {
                    error_position=i+1;
                    v=0;
                }
        }

2 个答案:

答案 0 :(得分:3)

三元运算符用于选择,而不是操作。

如果你有条件只分配给同一个变量,那么重写是有意义的 例如,

int x = 0;
if (something)
{
    x = 12;
}
else
{
    x = 34;
}

更好

int x = something ? 12 : 34;

在代码中使用运算符不会使其更短,只会更复杂且不可读。
它还不清楚它的结果是什么。
唯一可信的候选人是分配给v的值,但您并未在每个分支中分配给v,因此它已经结束。

明显的缩短是将{3}加入你的三个条件,但更好的途径可能是完全抽象出测试,例如

||

答案 1 :(得分:2)

您的代码应该清晰易读,这里引入的三元操作会使其不那么清晰,而不是更好,也不会提高性能。

三元运算符通常不应有副作用,只需选择要使用的值即可。 min()很好地利用了三元,即(a<b)?a:b

我的代码中没有可以通过三元运算符更好地表达的块。我通常不会在()中使用at,并且在同一块中多次使用()肯定不一样。因此,计算一次s.at(i),将其放入一个有意义的变量并使用它。