代码之家  ›  专栏  ›  技术社区  ›  Mr. Smith

如果在C中,则使用回程和短手#

  •  9
  • Mr. Smith  · 技术社区  · 15 年前

    为什么下面的代码行不能在方法中工作?

    return (count > 0) ? true : false;
    

    如果我这样做的话,它会很好地工作:

    bool ret = (count > 0) ? true : false;
    return ret;
    

    红利问题 :它真的比标准if语句更快或更有效吗?

    bool ret = false;
    if(count > 0)
        ret = true;
    return ret;
    

    你推荐哪一个?

    4 回复  |  直到 15 年前
        1
  •  41
  •   Jon Skeet    15 年前

    我建议:

    return count > 0;
    

    没有必要明确返回 true false .

    这么说,你的编译错误引起了我的兴趣。乍一看,它似乎能起作用。你能发布一个简短但完整的未能编译的例子吗?条件表达式的类型应为 bool 没有问题。我的猜测是,你有一个更复杂的场景,通过简化这个例子,你就消除了真正的问题。

    至于奖金问题:我不知道哪一个更快,99.99%的情况下我也不在乎。我会 吃惊的 发现它造成了任何明显的延迟,除非它出于某种原因禁止了内联。走得最远 可读的 解决方案-这是简单的返回语句,imo。

        2
  •  10
  •   Makach    15 年前

    试试这个:

    return count > 0;
    

    返回之前,将计算表达式count>0并给出true或false。

    这也应该有效:

    return (count > 0 ? true : false); 
    

    但我建议你不要这样做。

    我总是尽量减少水平操作的数量,我相信这会使代码更容易阅读。

    想象一下下面的场景,它会让人困惑:)

    return count > 0 ? false : true; 
    
        3
  •  5
  •   ema    15 年前

    从C的角度看#

    return count > 0;
    

    它的可读性更好。

    但是编译器会调整代码的大小,所以编译后的三个选项实际上是相同的。您可以尝试查看要验证的IL代码!

        4
  •  1
  •   sindre j    15 年前

    这作品

    return (count > 0 ? true : false);
    

    然后可以使它返回除true和false之外的其他值。在您的特定情况下,我希望其他建议;返回计数>0;