gpt4 book ai didi

c++ - 从条件(或三元)运算符返回

转载 作者:太空狗 更新时间:2023-10-29 23:41:16 25 4
gpt4 key购买 nike

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

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 );

但是编译器在试图从其中一个表达式返回时有什么问题呢?

最佳答案

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

只需将其重写为嵌套的 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;

但是,如果您迷恋三元运算符并且必须使用它,您可以:

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

关于c++ - 从条件(或三元)运算符返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12357322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com