cout中的C ++ if-else语句

时间:2015-11-17 20:19:15

标签: c++ if-statement ternary-operator cout ostream

我想做这样的事情:

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

现在我的主要问题是,我不需要else声明。即使我不能使用没有else的三元运算符,我也需要发送" "之类的空格。我真的想使用" "但我的obj.getFoo不返回任何字符串值(它返回一个整数)。对于整数,没有“空间”。

有没有办法在if-else内获得cout声明(显然没有else)?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

我个人会这样做:

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

[E.g。 printf语句]

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

 a << b << c;

与:

相同
 a << b; a << c; 

[好吧,尽管如此,无论如何]

答案 2 :(得分:0)

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