pre*_*eys 3 c++ ternary operator-keyword
考虑这个int的const声明num:
int main() {
bool a = true, b = false;
// ...
const int num = a ? (b? 2 : 4) : 4;
std::cout << num;
}
Run Code Online (Sandbox Code Playgroud)
我想要的是const int num遵循这个真值表(我道歉已经从我原来的问题编辑,以反映我的程序中的模式):
b
a true false
true 2 4
false 4 2
Run Code Online (Sandbox Code Playgroud)
如何修改上面的const int num声明来实现这个使用三元运算符?我知道如何在numlambda函数中使用lambda函数和嵌套的if语句或切换状态来声明这样的const,但我只是想知道如何使用三元运算符来完成它.作为奖励,如果要使用3个或更多这样的bool值(真值表中没有特定的模式)怎么办?
const int num = a ? (b? 2 : 3) : (b? 4: 5);
Run Code Online (Sandbox Code Playgroud)
编辑:
作为奖励,如果使用3个或更多这样的bool值怎么办?
我根本不会使用这样的语法.我会把我的桌子宣布为
int truthTable[2][2]..[2] = {{..},...{..}}
Run Code Online (Sandbox Code Playgroud)
现在简单地说:
int res = truthTable[!true][!false]..[!true]
!true将成为0,!false将成为1,然后,正确的值将从阵列中拉出.
David Haim的答案非常适合真值表中的许多其他值.然而,在这个特定的例子中,我们可以利用以下容易识别的数学关系:
const int num = (a ? 2 : 4) + (b ? 0 : 1);
Run Code Online (Sandbox Code Playgroud)
但是,我们在真值表中可能并不总是具有这种易于识别的关系.
上面的表达式基于问题的原始真值表,如下所示:
b
a true false
true 2 3
false 4 5
Run Code Online (Sandbox Code Playgroud)
鉴于此真值表:
b真假2 2 4 4 2
还有另一种方法可以为这个返回正确的值:
const int num (a == b) ? 2 : 4
Run Code Online (Sandbox Code Playgroud)
这个并不是真正的数学.它只是简单地认识到我们想要的时间a和时间b是相同的2,但是当我们想要的时候a和b不同时4.这个真值表与==运算符的真值表完全相同,我们只是返回2/ 4而不是true/ false.