代码之家  ›  专栏  ›  技术社区  ›  ttemple

首选if(x!=0)大于if(x)对于浮点,int值?[关闭]

c++
  •  5
  • ttemple  · 技术社区  · 6 年前

    在C++中,我想测试传递给函数的值为非零,并在该条件下建立一些行为。

    void do_something(float x){
        if(x)          //        <-- prefer this format?
            do_a();
        else
            do_b();
    }
    

    与:

    void do_something(float x){
        if(x != 0)        //     <-- or this format?
            do_a();
        else
            do_b();
    }
    

    其他形式:

    void do_something(int x){
        x? do_a() : do_b();      //  <-- prefer this?
        x!=0? do_a() : do_b();   //  <-- or this?
    }
    

    这两种行为都是“格式良好”的吗?或者在某些情况下,这两种行为中的任何一种都是未定义的行为,这是有原因的吗?

    我测试了godbolt.org网站,两种形式产生完全相同的汇编代码。我测试了int、float、三元运算符和if(),在所有情况下,这两种形式的代码看起来都一样。

    我现在倾向于使用 if(x != 0) 对于 float double ,和 if(x) int ,有些是由于NaN的复杂性,以及其他特殊值中的浮点值。

    0 回复  |  直到 6 年前