相关疑难解决方法(0)

cout语句中使用的条件运算符

通过尝试,我开始知道有必要在cout语句中将括号放在条件运算符周围.这是一个小例子:

#include <iostream>

int main() {
  int a = 5;
  float b = (a!=0) ? 42.0f : -42.0f;
  // works fine
  std::cout << b << std::endl;
  // works also fine
  std::cout << ( (a != 0) ? 42.0f : -42.0f ) << std::endl;
  // does not work fine
  std::cout << (a != 0) ? 42.0f : -42.0f;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

42
42
1
Run Code Online (Sandbox Code Playgroud)

为什么这些括号必要?在两种情况下都知道条件运算符的结果类型,不是吗?

c++ conditional-operator

12
推荐指数
2
解决办法
1万
查看次数

为什么三元运算符不支持块?

为什么三元运算符没有块?换句话说,为什么以下代码不起作用并报告{}大括号错误?

int main()
{
    int i = 1;
    (i==1)?{printf("Hello\n")}:{printf("World\n")};
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑

也许这个问题被误解了.原因是:为什么不支持块?为什么只有单一表达?

为什么不允许这样做?

int main()
{
    int i = 1;
    (i==1)?{printf("Hello\n");printf("World\n");}:{printf("Bye\n");printf("World\n");};
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

一个原因可能是三元通常用于左侧的条件赋值,而块将没有这样的返回,或者它会与块内的多个语句混淆.

c ternary-operator language-lawyer

3
推荐指数
2
解决办法
2119
查看次数