我想做这样的事情:
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
)?
答案 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;
}
答案 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(" ")
。