【问题标题】:conditional operator in c++ [duplicate]C ++中的条件运算符[重复]
【发布时间】:2014-08-09 13:07:50
【问题描述】:

我对以下代码感到困惑,并尝试理解它们的含义。

 if( (root->left == NULL) || (root->right == NULL) )
 {
    Node *temp = root->left ? root->left : root->right;
 }

这意味着if root->left ==NULL 然后是temp = root->leftelse temp = root->right?

【问题讨论】:

    标签: c++


    【解决方案1】:

    您并不完全正确,但您明白了。这是一个接受三个操作数的条件运算符

     var = condition ? expression1 : expression2
    

    等价于

    if( condition )
      var = expression1
    else
      var = expression2
    

    你的意思是

    如果 root->left != NULL 那么 temp = root->left,否则 temp = root->right

    而不是

    如果 root->left ==NULL 那么 temp = root->left,否则 temp = root->right

    【讨论】:

    • 问题中以“它意味着...”开头的部分是错误的(条件应该是!= NULL),所以说“你是对的”是不正确的。
    • 此外,运算符的真实名称是 条件运算符,如 OP 的问题(参见 5.16 条件运算符 [expr.cond]。)
    • @DCoder,感谢您的纠正。我忽略了==operator。
    • 三元运算符?: 返回一个值,而if 语句不返回。
    【解决方案2】:

    你错了。这意味着如果root->left == NULL 那么*temp = root->right,
    else if root->right == NULL then *temp = root->left,
    否则不会设置*temp

    有 4 种可能的情况:

    1. root->left == NULLroot->right != NULL*temp 将是 root->right
    2. root->left == NULLroot->right == NULL*temp 将是 root->right
    3. 不会设置root->left != NULLroot->right != NULL*temp
    4. root->left != NULLroot->right == NULL*temp 将是 root->left

    现在您可以看到第 2 种和第 3 种情况可能是潜在的问题。

    【讨论】:

      【解决方案3】:

      意思如下:如果leftrightNULL,那么temp等于NULL,否则如果leftNULL,那么temp等于right,否则如果rightNULL,那么temp 等于left

      【讨论】:

        猜你喜欢
        • 2021-04-22
        • 1970-01-01
        • 2017-05-22
        • 2018-03-21
        • 1970-01-01
        • 2012-08-21
        • 1970-01-01
        • 2017-05-08
        • 2010-10-12
        相关资源
        最近更新 更多