了解极限?操作者

时间:2014-03-29 22:16:05

标签: c++ conditional-statements

如果说我有一个最终会成真的功能我可以这样做吗?

somefunction(data) ? cout << "This is true" << endl : cout << this false << endl; 
或者我有点失意?或者这样的操作数是不可能的?或者我可以调用不同的功能吗?最后,我试图找出这个函数的局限性以及c ++教程站点中不明显的其他用法。

的std :: COUT&LT;&LT; (某些功能(数据)?“这是真的”:另一个功能(数据)&lt;

或人们可以想到的其他案例......

3 个答案:

答案 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";
相关问题