从有条件(或三元)运算符返回

时间:2012-09-10 18:19:46

标签: c++ visual-studio-2010

有人可以告诉我为什么在使用Ternary运算符时无法返回表达式的原因吗?

while( root != nullptr )
{
    if( current->data > v ) {
        ( current->left == nullptr ) ? return false : current = current->left;
    } else if( current->data < v ) {
        current->right == nullptr ? return false : current = current->right;
    } else if( current->data == v ) {
        return true;
    }
}
return false;

当我尝试返回false时,为什么会出错?我知道我可以这样做:

return ( ( 0 == 1 ) ? 0 : 1 );

但是当尝试从其中一个表达式返回时,编译器的问题是什么?

2 个答案:

答案 0 :(得分:8)

问题是return语句没有定义的值(它不是表达式),而三元运算符的右边两个元素中的每一个都应该有一个值。你的代码中还有一个错误:循环应该测试current不是nullptr; <{1}}不会在循环中发生变化,因此循环永远不会正常退出。

只需将其重写为嵌套的root语句:

if

事实上,对于这个特定的逻辑,你根本不需要内部current = root; while( current != nullptr ) { if( current->data > v ) { if( current->left == nullptr ) return false; current = current->left; } else if( current->data < v ) { if( current->right == nullptr) return false; current = current->right; } else if( current->data == v ) { return true; } } return false; 语句:

return

但是,如果你迷恋三元运算符而只是必须使用它,你可以:

current = root;
while( current != nullptr )
{
    if( current->data > v ) {
        current = current->left;
    } else if( current->data < v ) {
        current = current->right;
    } else if( current->data == v ) {
        return true;
    }
}
return false;

答案 1 :(得分:2)

三元运算符从多个子表达式创建一个新表达式。 return语句不是表达式。