如果说我有一个最终会成真的功能我可以这样做吗?
somefunction(data) ? cout << "This is true" << endl : cout << this false << endl;
或者我有点失意?或者这样的操作数是不可能的?或者我可以调用不同的功能吗?最后,我试图找出这个函数的局限性以及c ++教程站点中不明显的其他用法。
的std :: COUT&LT;&LT; (某些功能(数据)?“这是真的”:另一个功能(数据)&lt;
或人们可以想到的其他案例......
答案 0 :(得分:1)
我会看Wikipedia。基本上它的语法是
condition ? trueOutput : falseOutput;
你也可以nest them。您可以输出任何值,但条件必须是布尔值。
所以在你的情况下,它将是:
cout << (someFunction(data) ? "True" : "False") << endl;
然后你可以将它嵌套!
cout << (someFunction(data) ? "True" : (newTernary(data) ? "False, but true" : (finalTernary(data) ? "False, false, and finally true" : "Always false:("))) << endl;
答案 1 :(得分:1)
不是一个&#34;回答&#34;但请记住,几乎总是,使用三元运算符来处理除了最简单的事情之外的任何事情都是&#34;坏&#34;。
合理用法如下:
cout << "There are " << count << " item" << ((count != 1) ? "s":"")
<< " in your basket";
但是如果您的三元运算符是嵌套的,那么您希望使用if
/ else
类型构造。人们会想要阅读这些代码,而不会在将来拔掉头发!
当然,初始语句可以在没有三元运算符的情况下完成,假设结果为bool
[如果不是,则可以使用{bool
进行static_cast<bool>(someFunction(data))
{1}}]。
cout << "This is " << boolalpha << someFunction(data) << endl;
答案 2 :(得分:0)
“限制”是三个参数必须是表达式,并且有关于它们的类型的规则。在你的情况下,由于cout << foo
是一个表达式,所有这些都有效。虽然您需要将this false
替换为“这是假的”。
但正如其他人所指出的那样,最好使用裸字符串作为表达式。我可能写过
std::cout << "This is " << (somefunction(data) ? "true" : "false") << ".\n";