在 C++ 流中使用三元运算符可以吗?

Dra*_*neg 3 cout ternary-operator c++11

下面的代码:

#include <iostream>
using namespace std;
struct A{int number=10;};

int main()
{
   A* a = new A();
   cout<<"A val: "<< a==nullptr?"":a->number<<endl;
}
Run Code Online (Sandbox Code Playgroud)

使用 c++11 在 gcc 4.7 上编译给出:

错误:“int”和“”类型的操作数对二进制“operator <<”无效

我不明白为什么,正确的方法是什么?我希望空检查尽可能短,因为我希望它们很常见。

Kyl*_*fel 6

第一:是的,您可以将三元运算符用于std::ostream,但要注意运算符优先级。如果您打算这样做,您需要执行以下操作:

cout << "My name is: " << (my != nullptr ? my->name() : "don't know") << '\n';
Run Code Online (Sandbox Code Playgroud)

换句话说,将三元表达式封装在括号中。

其次,第二个和第三个操作数必须可转换为相同类型。换句话说,您的示例将不起作用,因为""如果为 null,则您尝试插入字符串文字 ( ) ,或者如果不为 null ,则a尝试插入实际数字(a->number,其类型为int) 。a

第三,您需要修复语法。但@quamrana 已经解决了这个问题。