C++ 如何将这个特定的“if/else”块转换为三值运算符?

C++ 如何将这个特定的“if/else”块转换为三值运算符?,c++,parsing,ternary-operator,code-readability,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.e

有人能指导我或者把这个转换成三元运算符形式吗?我正在使用堆栈制作一个文本编辑器,在其中它将检查代码中的括号,但我只需要使用三元运算符缩短代码的帮助

            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;
                }
        }

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


三元运算符通常不应有副作用,只需选择要使用的值即可。min是三元运算符的一个很好的用法,即a三元运算符用于在值之间进行选择,而不是在运算之间进行选择

如果你有一个只分配给同一个变量的条件,重写是有意义的。 比如说,

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

int x = something ? 12 : 34;
在代码中使用运算符不会使代码变得更短,只会使代码更加复杂和不可读。 目前还不清楚其结果会是什么。 唯一可能的候选值是分配给v的值,但不是在每个分支中都分配给v,所以它是不存在的

明显的简化是将三个条件加上| |,但更好的方法可能是将测试完全抽象出来,例如

bool matching_brackets(char p1, char p2)
{
    return (p1 == '(' && p2 == ')')
        || (p1 == '{' && p2 == '}')
        || (p1 == '[' && p2 == ']');
}

// ...
if(s.at(i)==y.at(j))
{
    if (list.empty())
    {
        v = 0;
        error_position = i + 1;
    }
    else if (matching_brackets(list.back(), s.at(i)))
    {
        v = 1;
        list.pop_back();
    }
    else
    {
        error_position = i + 1;
    }            
}
// ...

如果我是你,我会避免使用条件运算符来缩短代码,因为这只会让一切更难理解。清除代码>>>>>>>>>短代码。为什么要这样做?有一个。没有任何收获。这会使代码变得相当不可读。我真的不明白这一点,因此不是免费的代码服务/pls做我的作业网站。如果你需要在两个选项中选择,只使用三元代码。用于其他任何操作,它会使您的代码变得凌乱。此外,千万不要像您在这里要求的那样使用三元运算符来执行副作用。这完全违背了三元运算符的目的。