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 <<”无效
我不明白为什么,正确的方法是什么?我希望空检查尽可能短,因为我希望它们很常见。
第一:是的,您可以将三元运算符用于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 已经解决了这个问题。
| 归档时间: |
|
| 查看次数: |
2132 次 |
| 最近记录: |