我想在C ++代码中比较这三个术语

时间:2018-08-31 09:32:35

标签: c++ operators

如果C ++中有这样的代码。

j = 5;
k[i] = j * ((k[i] > 0));

然后,如果k [i]1,则(k [i]> 0)变成1

所以最后一个k [i]5

如果k [i]-1,则(k [i]> 0)变成0

所以最后一个k [i]为零。

那我想知道

j = 5;
k[i] = j * ((10 > k[i] > 0));

这里

如果k[i] = 5,则k[i]大于0但小于10

还有(10> k [i]> 0) = 1j * 1 = 5吗?

我可以同时使用三个比较运算符吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

它将编译,但是将不起作用。您需要写(10 > k[i] && k[i] > 0)

答案 1 :(得分:1)

没有c ++不支持同时将变量与多个值进行比较。 令人困惑的是,您的比较甚至可能会编译,但不会像您认为的那样进行。例如:

#include <iostream>
#include <string>

int main()
{
    int b = 21;
    if ( 5 < b < 20 )
    {
        std::cout << "OK";
    }
    else
    {
        std::cout << "Fail";
    }
}

将编译(带有警告),但将打印OK而不是Fail。发生的事情是您实际上已经拥有:

if ( (5 < b) < 20 )

评估为:

if ( true < 20 )

true小于20,因此比较返回true。您需要完整说明要执行的比较:

#include <iostream>
#include <string>

int main()
{
    int b = 21;
    if ( (5 < b) && (b < 20) )
    {
        std::cout << "OK";
    }
    else
    {
        std::cout << "Fail";
    }
}