【问题标题】:Uunderstand the limits of the ? operator了解极限?操作员
【发布时间】:2014-03-29 22:16:04
【问题描述】:

如果说我有一个最终会实现的功能,我可以做这样的事情吗?

somefunction(data) ? cout << "This is true" << endl : cout << this false << endl; 

还是我有点过分了?还是说这样的操作数是不可能的?或者我可以调用不同的函数吗?最终,我试图找出这个函数的局限性以及在 c++ 教程站点中不明显的其他用途。

std::cout

或者其他大家能想到的案例……

【问题讨论】:

  • std::cout&lt;&lt; (somefunction(data) ? "This is true" : "this is false") &lt;&lt;std::endl;
  • std::cout &lt;&lt; "This is " &lt;&lt; std::boolalpha &lt;&lt; somefunction(data) &lt;&lt; '\n';
  • 实验没问题,但在实践中,对这种代码使用 if 语句。
  • @NeilKirk 为什么?我不认为这是一个坏习惯,除非你像我的回答那样荒谬地嵌套
  • 你会把示例代码写在一行而不是if (somefunction(data)) .. ??就个人而言,不是我的风格。

标签: c++ conditional-statements


【解决方案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;

【讨论】:

    【解决方案2】:

    不是一个“答案”,但请记住,几乎总是将三元运算符用于最简单的事情之外的任何事情都是“不好的”。

    合理的用法是这样的:

    cout << "There are " << count << " item" << ((count != 1) ? "s":"") 
         << " in your basket";
    

    但是,如果您的三元运算符是嵌套的,那么您想改用 if/else 类型构造。将来人们会希望阅读代码而不费吹灰之力!

    当然,初始语句可以在没有三元运算符的情况下完成,假设结果是bool [如果不是,您可以使用static_cast&lt;bool&gt;(someFunction(data)) 将其变为bool]。

    cout << "This is " << boolalpha << someFunction(data) << endl;
    

    【讨论】:

      【解决方案3】:

      “限制”是三个参数必须是表达式,并且有关于它们的类型的规则。在您的情况下,这一切都解决了,因为 cout &lt;&lt; foo 是一个表达式。虽然您需要将this false 替换为“这是错误的”。

      但正如其他人所指出的,最好使用裸字符串作为表达式。我可能已经写了

      std::cout << "This is " << (somefunction(data) ? "true" : "false") << ".\n";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-19
        • 2015-07-10
        • 1970-01-01
        • 2017-01-07
        • 2019-06-09
        • 1970-01-01
        • 1970-01-01
        • 2012-12-03
        相关资源
        最近更新 更多