有人可以告诉我为什么在使用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 );
但是当尝试从其中一个表达式返回时,编译器的问题是什么?
答案 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
语句不是表达式。