并且,或定义值时的语句

时间:2016-03-26 21:11:48

标签: c++

我想使用"和"和"或"在定义变量的值时, 比如

int i = true && 5 || 3;

就像您在语言中所做的那样,例如Lua,您可以在其中编写

i = true and 5 or 3

这可能吗?

我尝试使用基于控制台的简单C ++项目,但这两个值都返回为1

#include "stdafx.h"
#include <iostream>

void main()
{
    int test = (true && 5) || 1;
    int test2 = (false && 6) || 2;

    std::cout << "Test: " << test << std::endl << "Test2: " << test2;
    while(true){}
}

4 个答案:

答案 0 :(得分:3)

C ++不是Lua。

在Lua中,true and 5表达式会产生5。这就是Lua如何使用布尔表达式。

这不是C ++如何使用布尔表达式。在C ++中,布尔表达式产生布尔。也就是说,truefalse

如果要根据条件在两个值之间进行选择,我们有一个运算符:

int i = true ? 5 : 3;

如果条件为真,则获得:之前的值。如果它为假,则在:之后得到值。

答案 1 :(得分:1)

我怀疑你正在寻找int test = true ? 5 : 1;

答案 2 :(得分:1)

您需要的是条件表达式:

  int i = true ? 2 : 5;

在这种情况下,i将是2。

答案 3 :(得分:0)

如果我们真的想要,从c ++ 11开始(它将andor关键字作为&&||的同义词,我们几乎可以强化c ++编译器的合规性,并让它编译:

int x = when_true(b) and 5 or 6;

为了做到这一点,我们需要提供一些脚手架:

#include <iostream>

struct maybe_int {
    bool cond;
    int x;

    operator int() const { return x; }
};

int operator || (const maybe_int& l, int r) {
    if (l.cond) return l.x;
    return r;
}

struct when_true {
    when_true(bool condition)
    : _cond(condition)
    {}

    auto operator&&(int x) const {
        return maybe_int { _cond, x };
    }

    bool _cond;

};


int main()
{
    using namespace std;

    auto b = false;
    int x = when_true(b) and 5 or 6;
    cout << x << endl;
    return 0;
}

我的建议是你不要在工作中尝试这种事情。