cout 中的 C++ if-else 语句

C++ if-else statement inside cout

我想做这样的事情:

ostream& table(ostream& os, myClass& obj, bool foo1, bool foo2) {
    os << (foo1 ? obj.getFoo1() : "") << (foo2 ? obj.getFoo2() : "");
    return os;
}

现在我的主要问题是,我不需要 else 声明。即使我不能在没有 else 的情况下使用三元运算符,我也需要像 " " 一样发送 space。我真的很想使用 " " 但我的 obj.getFoo 没有 return 任何字符串值(它 return 是一个整数)。对于整数,没有 'space'。

有什么方法可以在 cout 中获取 if-else 语句(显然没有 else)?

使用foo1 ? std::to_string(obj.getFoo1()) : std::string(" ").

如果你使用to_string就可以做到:

ostream& table(ostream& os, myClass& obj, bool foo1, bool foo2) {
  os << (foo1 ? std::to_string(obj.getFoo1()) : "") 
     << (foo2 ? std::to_string(obj.getFoo2()) : "");

  return os;
}

LIVE DEMO

我个人会简单地做:

ostream& table(ostream& os, myClass& obj, bool foo1, bool foo2) {
   if (foo1)
      os << obj.getFoo1();
   if (foo2)
      os << obj.getFoo2(); 
  return os;
}

生成的代码无论如何都会几乎相同,并且会避免打印空字符串,这将需要一些代码。

三元运算符非常适合当你有一组非常长的函数参数并且只想改变一点点时:

func(arg1, arg2, arg3, (flag)?arg4a:arg4b, arg5, arg6, arg7);

[例如printf语句]

但是对于流输出的情况,它实际上没有任何用处,因为代码用于:

 a << b << c;

等同于:

 a << b; a << c; 

[好吧,无论如何]