我可以在三元运算符的第二个或第三个操作数中使用多个指令吗?

时间:2015-07-22 18:55:45

标签: c++ ternary-operator

我可以制作非常相似的东西吗?

question ? func1(), val=5 : func2()

我想在第一个或第二个参数的位置放置一条以上的指令。 它可以解决吗?

3 个答案:

答案 0 :(得分:1)

如果通过“指令”(当涉及到C ++的措辞时甚至不是这样的话),你的意思是“表达”,那么肯定:括号和逗号运算符来拯救!

SSCCE:

#include <cstdio>

int main()
{
    int x = (1, 0) ? 2, 3 : (4, 5);
    printf("%d\n", x); // prints 5
}

答案 1 :(得分:0)

是看看下面的例子:

#include <iostream>

int main()
{
    int x,y,z;
    double d = 2.5;


    auto f = (d == 2.2) ? (x=5,y=10,z=0,2000) : (x=15,y=0,z=20,1000);

    std::cout << x << " " << y << " " << z << " " << f << std::endl;


    std::cin.get();
    return 0;
}

不太干净所以建议让它更具可读性。

答案 2 :(得分:0)

感谢这些快速有用的答案!

所以我用C ++编写Arduino,它是完整的示例代码:

void setup() {
  Serial.begin(115200);
  bool b = false;
  int val = 0;

  b ? func1() : (func2(), val = 2);

  Serial.println(val);
}

void loop() {}

void func1 (){
     Serial.println("func1");
}

void func2 (){
    Serial.println("func2");  
}

当我从这个答案中了解到,如何正确使用括号和逗号时,我遇到了这些错误:

sketch_jul22a.ino: In function 'void setup()':
sketch_jul22a:8: error: second operand to the conditional operator is of type 'void', but the third operand is neither a throw-expression nor of type 'void'
second operand to the conditional operator is of type 'void', but the third operand is neither a throw-expression nor of type 'void'

我使用int类型函数而不是void类型,问题解决了:

int func1 (){
     Serial.println("func1");
     return 0;
}

int func2 (){
    Serial.println("func2");
    return 0;
}