首页 > 解决方案 > 将三元运算符用作 cout 的参数时添加/不添加括号的区别

问题描述

这个问题显然不是这个的重复。在原始页面中,我发现这两个代码片段似乎给出了相互矛盾的原因,我的目的是弄清楚这一点,而不仅仅是了解this中给出的内容。

我必须编辑这个问题多少次才能让大家相信这个问题不是这个问题的重复。请完整阅读我的问题以及我提供的参考页面。他们在那里解释错了,我需要澄清一下。不只是一般地了解 cout 。

我在此页面中遇到了以下两个代码片段。

第一个片段:

#include <iostream>
using namespace std;

int main()
{
  int test = 0;
  cout << test ? "A String" : 0 << endl;

  return 0;
}

第二个片段:

#include <iostream>
using namespace std;

int main()
{
  int test = 0;
  cout << (test ? "A String" : 0) << endl;

  return 0;
}

它在那里说第一个代码片段肯定会引发编译错误,但第二个代码片段可能会或可能不会编译。

我看不出两者有什么区别。如果有区别,请解释一下。在页面的解释中,他们似乎给出了相互矛盾的理由。我需要澄清这一点。

我不明白为什么这个问题一直得到反对票,而没有人将其标记为重复,也没有人正确回答。

标签: c++

解决方案


具有运算符优先级,

cout << test ? "A String" : 0 << endl;

(cout << test) ? "A String" : (0 << endl);

无效0 << endl(并且不是三元的预期条件)。

然而

cout << (test ? "A String" : 0) << endl;

是你所期望的。

三元运算符的类型将const char*是以下常见类型:

  • "A String"( const char[9])。
  • 字面 0量(static_cast<const char*>(nullptr)在这种情况下是这样,而不是int)。

推荐阅读