【问题标题】:Use ternary operator to print different types in a single line使用三元运算符在一行中打印不同的类型
【发布时间】:2014-09-18 09:51:14
【问题描述】:

我想避免这样的代码:

int x = ...;
cout << "x=";
if(x)
  cout << x;
else
  cout << "???";
cout<<"!";

我真的想要这样的东西:

cout << "x=" << (x ? x : "???") << "!";

但这不能编译,因为 x"???" 是不兼容/不同的类型。

有没有办法巧妙地做到这一点?

【问题讨论】:

  • cout &lt;&lt; "x=" &lt;&lt; (x ? to_string(x) : "???") &lt;&lt; "!";吗?
  • to_string() 是什么,我没听说过?
  • 啊,一个新的 C++11 特性。这可能就是我所需要的:)
  • 三元运算符的第二个和第三个操作数必须有一个可以转换为另一个的类型,这是没有办法的

标签: c++ visual-c++ stl visual-studio-2013


【解决方案1】:

您可以将cout 放在三元运算符中:

cout << "x="; 
(x ? cout << x : cout << "???") << "!";

如果您的编译器支持 C++ 11,请使用 std::to_string()

cout << "x=" << (x ? std::to_string(x) : "???") << "!";

Live demo

【讨论】:

  • 如果你没有 to_string,请使用 Boost 的 lexical_cast。
猜你喜欢
  • 1970-01-01
  • 2013-01-17
  • 2021-06-01
  • 2020-12-26
  • 2017-01-18
  • 2021-10-02
  • 1970-01-01
  • 2011-12-17
  • 2019-09-20
相关资源
最近更新 更多