C++ 如何正确检查多次状态

C++ 如何正确检查多次状态,c++,C++,这样做正确吗 我已经找到了解决我的问题的其他方法,但我想知道以后该如何做如果你所有的都是离散变量,那么你就必须用这种方法进行检查 有一些事情你会考虑: 反复使用'b'是不好的做法。将其指定为常量或将所有其他变量与第一个变量进行比较,这样,如果需要将'b'更改为'c',则只需在代码中执行一次 if(a=='b' && b=='b' && c=='b' ...) 此外,还有很多代码需要维护。根据链的长度(您是向上到a==g&&a==h&&a==i还是更高?),您可能

这样做正确吗


我已经找到了解决我的问题的其他方法,但我想知道以后该如何做

如果你所有的都是离散变量,那么你就必须用这种方法进行检查

有一些事情你会考虑:

反复使用
'b'
是不好的做法。将其指定为常量或将所有其他变量与第一个变量进行比较,这样,如果需要将
'b'
更改为
'c'
,则只需在代码中执行一次

if(a=='b' && b=='b' && c=='b' ...)
此外,还有很多代码需要维护。根据链的长度(您是向上到
a==g&&a==h&&a==i
还是更高?),您可能希望将这些变量包装到
向量中,并反复检查它们

if(a=='b' && a == b && a == c && a == d/*...*/)

你的方式看起来很得体。一些编码标准需要这样的额外参数

bool equal = std::find_if_not(
    characters.begin(), characters.end(), 
    [](const char & c) {return c == 'b';}
    ) == characters.end();

我个人不认为这是必要的,如果你知道你的操作符优先级的话。请参阅并搜索优先级。

如果您希望以简洁的方式描述意图,则一对小模板函数可以帮助您:

if((a=='b') && (b=='b') && (c=='b') ...)
模板
布尔全等(X&&X,Y&&Y)
{
返回(x==y);
}
模板
布尔全等(X&&X,Y&&Y,Rest&&……Rest)
{
返回所有相等的值(标准::前进(x),标准::前进(y))
&&全部相等(x,标准:正向(剩余)…);
}
允许这样的代码:

template<class X, class Y>
bool all_equal(X&& x, Y&& y)
{
    return (x == y);
}

template<class X, class Y, class...Rest>
bool all_equal(X&& x, Y&& y, Rest&&...rest)
{
    return all_equal(std::forward<X>(x), std::forward<Y>(y))
    && all_equal(x, std::forward<Rest>(rest)...);
}
intmain()
{
INTA=10;
int b=10;
int c=10;
int d=11;

std::cout你想做什么?验证所有这些变量都等于
'b'
?你这样做没有错。就个人而言,我会将检查封装在paren中,即使它们不是严格必需的,例如:
((a='b')&(b='b')&&……)
。但是,如果您可以选择将所有这些变量放入某种类型的集合中,那么您可以对它们进行迭代,这将使代码更易于维护。“我已经找到了解决问题的其他方法,但希望将来知道如何做”因此您应该首先在这里的答案中记录这一点。如果(('a'==a)&&('b'==b)&&('c'==c)&&&……//发动宗教战争;)如果你要把兴趣字符放在一个容器中,那么你也应该考虑使用<代码> STD::查找。你也可以考虑使用<代码> STD::String ,并使用它的查找成员函数。@ JAMEADKEISY,我不建议使用<代码> STD::String ,只要它混淆了容器的用途。OP是指离散字符,对于该情况,<代码> STD::vector容器的目的比 STD::String DI.+,1,公平点关于“代码> STD::String 。也可以考虑使用<代码> STD::SET或<代码> STD::unOrdEdEdSt/<代码>避免线性搜索。(如果这可能成为一个问题的话)。
int main()
{
    int a = 10;
    int b = 10;
    int c = 10;
    int d = 11;

    std::cout << std::boolalpha << all_equal(a, b) << std::endl;
    std::cout << std::boolalpha << all_equal(a, b, c) << std::endl;
    std::cout << std::boolalpha << all_equal(a, b, c, d) << std::endl;
}