布尔逻辑问题

时间:2012-04-30 01:28:11

标签: c++ logic boolean

我想知道是否有更短的写作方式

if (test != 'e' || test != 'd')

我想把它写成

if (test != ('e' || 'd'))

或类似的东西,所以我不必重复“test!=”

由于

3 个答案:

答案 0 :(得分:2)

这就是语言的语法。你可以做的事情并不多......如果你不喜欢它的外观,你可以创建一个包含测试的布尔函数,然后调用该函数:

bool isEOrD(char test)
{
    return (test != 'e' || test != 'd')
}

...

if (isEOrD(test)) 

编辑:还有其他方法来编写此代码(请参阅此答案的评论),但您原来的方法可能是最干净的方法。

答案 1 :(得分:1)

可以使用旧的C函数strchr

if (!strchr("de", test))
{
    // test is not 'd' or 'e'
}

但是我不知道看看是否更好......我个人可能只有两个!=

答案 2 :(得分:0)

C或C ++必须评估您在语言语法中编写的表达式。表达式('e'或'd')总是返回true,因为'or-ing'是通过比较永远不会相同的值的位来完成的。编译器如何知道你想要什么,因为在C / C ++中,原始字符只是对整数的解释。这就是你可以合法写作的原因:

char aChar = 'a';
// or
char aChar = 0x41; // hex 41 = ascii 'a'

让他们都工作。