【问题标题】:shorthand c++ if else statement速记 c++ if else 语句
【发布时间】:2014-09-07 18:09:39
【问题描述】:

所以我只是好奇是否有一个简短的声明:

if(number < 0 )
  bigInt.sign = 0;
else
  bigInt.sign = 1;

我看到所有这些关于 if a

我不确定如何正确执行此操作,希望对此提供一些意见。

谢谢!

其实在你们回答之前我就想通了。

最短的解决方案是bigInt.sign = (number &lt; 0) ? 0 : 1

【问题讨论】:

  • 感谢所有回答此问题的人。我很感激,这真的是我第一次使用速记 if-else 语句,所以我只是想习惯它
  • @kevorski bigInt.sign = (number &lt; 0) ? 1 : 0 - 这与您原来的 if/else 代码相反,但其他方面都不错。
  • @πάνταῥεῖ 不完全是,这与性能有关。虽然我确定在某处有重复。

标签: c++ if-statement


【解决方案1】:

使用三元运算符的基本语法如下:

(condition) ? (if_true) : (if_false)

你的情况是这样的:

number < 0 ? bigInt.sign = 0 : bigInt.sign = 1;

【讨论】:

    【解决方案2】:

    试试这个:

    bigInt.sign = number < 0 ? 0 : 1
    

    【讨论】:

    • 什么,省略空格使其成为“速记”?
    • 只是一个风格选择,所以我没有反对,但恕我直言,这不是在这里使用条件运算符的最干净的方式......bigInt.sign = number &lt; 0 ? 0 : 1 被更好地考虑,并强调? 的使用在值之间进行选择,而不是将其用于流量控制。
    • 您也可以将?:分别替换为&amp;&amp;||
    【解决方案3】:

    是的:

    bigInt.sign = !(number < 0);
    

    ! 运算符的计算结果始终为 truefalse。当转换为int 时,它们分别变为10

    当然这相当于:

    bigInt.sign = (number >= 0);
    

    这里的括号是多余的,但为了清楚起见,我添加了它们。所有比较和关系运算符的计算结果为 truefalse

    【讨论】:

    • Tbh,我只需要 number &gt;= 0,但我会输入 static_cast&lt;decltype(bigInt)&gt; 以明确表示需要 0 或 1。
    • @chris 这是我为学校制作的非常基本的 c++ 程序。现在刚学c++。
    • @MattMcNabb,这是多余的,但演员表清楚地表明你并没有意外地将它存储在 bool 或类似的任何愚蠢的东西中。为了清楚起见,我冒险输入bigInt 的文字类型。隐式 boolint 转换在一般情况下很糟糕。
    • +1,但有一个小问题:我会使用bigInt.sign = (0 &lt;= number);,以便从左到右读取顺序。如果您有多重比较,例如0 &lt;= number &amp;&amp; number &lt; SomeUpperBound,这将变得更有吸引力
    【解决方案4】:

    根据您在代码中使用它的频率,您可以考虑以下几点:

    #define SIGN(x) ( (x) >= 0 )
    

    内联函数

    inline int sign(int x)
    {
        return x >= 0;
    }
    

    那你就走吧:

    bigInt.sign = sign(number); 
    

    【讨论】:

    • 宏应该是#define SIGN(x) ( (x) &gt;= 0 )
    • 我建议修改宏为#define SIGN(x) ((x) &gt;= 0)
    • 谢谢,下次我会记住这一点。我认为我只会在创建两个 BigInts 时使用它,所以此时不​​会为我做太多
    【解决方案5】:

    你也可以试试这个:

    bigInt.sign = (number<0)*0 + (number>=0)*1;
    

    如果我们需要分配除01 之外的其他值,则可以使用以下代码:

     bigInt.sign = (number<0)*(replacement_of_0) + (number>=0)*(replacement_of_1);
    

    【讨论】:

    • 基于性能的if-else 代码比我认为的其他方法要好。
    猜你喜欢
    • 2019-05-28
    • 1970-01-01
    • 2019-04-09
    • 2023-03-15
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2012-02-12
    • 2013-04-21
    相关资源
    最近更新 更多