我想使用"和"和"或"在定义变量的值时, 比如
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){}
}
答案 0 :(得分:3)
C ++不是Lua。
在Lua中,true and 5
表达式会产生5
。这就是Lua如何使用布尔表达式。
这不是C ++如何使用布尔表达式。在C ++中,布尔表达式产生布尔值。也就是说,true
或false
。
如果要根据条件在两个值之间进行选择,我们有一个运算符:
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开始(它将and
和or
关键字作为&&
和||
的同义词,我们几乎可以强化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;
}
我的建议是你不要在工作中尝试这种事情。