c++ - 如何在一行中使用三元运算符来做到这一点?

标签 c++ operator-keyword ternary

考虑 int num 的 const 声明:

int main() {
    bool a = true, b = false;
    // ...
    const int num = a ? (b? 2 : 4) : 4;
    std::cout << num;
}

我想要的是 const int num 遵循这个真值表(我很抱歉已经根据我原来的问题进行了编辑以反射(reflect)我程序中的模式):

              b
  a      true   false
true      2      4
false     4      2

如何修改上面的 const int num 声明以使用三元运算符实现此目的?我知道如何使用 lambda 函数和嵌套的 if 语句或 lambda 函数内的 switch 语句将这样的 num 声明为 const,但我只是想知道如何使用三元运算符来实现。作为奖励,如果要使用 3 个或更多这样的 bool 值(真值表中没有特定模式)怎么办?

最佳答案

const int num = a ? (b? 2 : 3) : (b? 4: 5);

编辑:

As a bonus, what if 3 or more such bool values were to be used?

我根本不会使用这样的语法。 我会将我的表声明为

int truthTable[2][2]..[2] = {{..},...{..}}

现在只需:
int res = truthTable[!true][!false]..[!true]

!true 会变成 0 , !false 会变成 1 , 那么正确的值就是从阵列中拉出。

关于c++ - 如何在一行中使用三元运算符来做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31100910/

相关文章:

ruby - 为什么 return 会跳过我的三元运算符中产生的值?

c++ - 文件输入/输出 C++

c++ - 传递函数对象时编译器错误

C++ 没有运算符 ">>"匹配这些操作数(<string> 包含在 header 中)

javascript - 如何重置输入值

java - 将 if else 替换为三元不起作用

c++ - 无法从C++中的抽象类绑定(bind)函数

c++ - C++ 中的运算符重载 ( & -> )

C++类,友元运算符与外部运算符有什么区别

c++ - 什么 !在值之前初始化变量时做