cout中的C++if-else语句

C++ if-else statement inside cout

本文关键字:语句 C++if-else 中的 cout      更新时间:2023-10-16

我想做这样的事情:

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

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

有没有办法在cout中获得if-else语句(显然没有else)?

如果使用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;
}

现场演示

我个人只想做:

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);

[例如打印报表]

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

 a << b << c;

与相同

 a << b; a << c; 

[好吧,无论如何都差不多]

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