gpt4 book ai didi

c++ - 嵌套 if 中没有返回评估

转载 作者:行者123 更新时间:2023-11-27 22:37:07 24 4
gpt4 key购买 nike

仔细观察下面的代码后,我不明白为什么编译器会警告我“警告:控制到达非空函数的末尾”。

bool Foam::solidMagnetostaticModel::read()
{
if (regIOobject::read())
{
if (permeabilityModelPtr_->read(subDict("permeability")) && magnetizationModelPtr_->read(subDict("magnetization")))
{
return true;
}
}
else
{
return false;
}
}

我看不出问题出在哪里,else 语句应该注意在第一个 if 不正确的每种情况下返回 false。

最佳答案

regIOobject::read() 为真时跟踪代码路径,但是 permeabilityModelPtr_->read(subDict("permeability")) magnetizationModelPtr_->read(subDict("magnetization")) 为假。在这种情况下,您输入了顶部的 if block (不包括输入其附加的 else block 的可能性),但随后无法输入嵌套的 if 阻止:

bool Foam::solidMagnetostaticModel::read()
{
if (regIOobject::read())
{
// Cool, read() was true, now check next if...
if (permeabilityModelPtr_->read(subDict("permeability")) && magnetizationModelPtr_->read(subDict("magnetization")))
{
return true;
}
// Oh no, it was false, now we're here...
}
else
{
// First if was true, so we don't go here...
return false;
}
// End of function reached, where is the return???
}

最简单的解决方法是只删除 else { } 包装,所以任何失败都以 return false; 结束:

bool Foam::solidMagnetostaticModel::read()
{
if (regIOobject::read())
{
// Cool, read() was true, now check next if...
if (permeabilityModelPtr_->read(subDict("permeability")) && magnetizationModelPtr_->read(subDict("magnetization")))
{
return true;
}
// Oh no, it was false, now we're here...
}
// Oh, but we hit return false; so we're fine
return false;
}

或者,完全避免特别提及 truefalse,因为您的函数在逻辑上只是 and 三个条件结合在一起的结果:

bool Foam::solidMagnetostaticModel::read()
{
// No need to use ifs or explicit references to true/false at all
return regIOobject::read() &&
permeabilityModelPtr_->read(subDict("permeability")) &&
magnetizationModelPtr_->read(subDict("magnetization"));
}

关于c++ - 嵌套 if 中没有返回评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52846150/

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