gpt4 book ai didi

C++ 按位或运算符

转载 作者:行者123 更新时间:2023-11-30 02:57:41 24 4
gpt4 key购买 nike

bool OrderUtils::shouldCptyAutoexecute(int Id)
{

bool res =
dummyCache::instance().getVal(Id).getWhitelabelType() == "ABCD";
if (!res)
res |= dummyCache::instance().getVal(Id).getIsPlc() == 1;

return res;
}

以上代码检查 2 个 ID,如果数据库中存在任何一个 ID,则返回 true 给 res。

您能否建议一种方法,使我可以比较数据库表中的另一个值并将 true 返回给值 res..您还可以解释一下第二个 if 语句和按位或运算符的作用吗?

最佳答案

先生,让短路评估为您做这件事吧:

return dummyCache::instance().getVal(Id).getWhitelabelType() == "ABCD" ||
dummyCache::instance().getVal(Id).getIsPlc() == 1;

如果第一个为真,则第二个不会触发。此外,我向您保证,如果返回的对象在 getWhitelabelType() 之间没有改变,那么远程合理的优化编译器将不会重新触发 instance().getVal(id)getisPlc() 调用。事实上,如果 getWhiteLabelType()const,我几乎可以保证。 (看起来确实应该如此)。

关于位工作。表情几乎被打断了。虽然它会工作。除非我读错了(相信我,会告诉我我是的人的名单会很快让我知道)它正在执行 bool 值评估,将生成的 true/false bool 提升为 int,将 res 的当前值从 bool 提升为 int(为零,因此没有什么特别之处),将其与表达式 int 按位或运算,然后将最终的 int 降级回 bool 以存储在 res 中。我很惊讶这至少没有在编译器上标记警告。

它可能应该是 if (!res) res ||= expr,即便如此,它也毫无意义,因为您可以像这个答案顶部那样使用短路评估完全切断本地 res。考虑 res 是否为 false。那么等效的表达式将是 res = false ||表达式。但这只是 res = expr。在它执行的 !res 状态下,您也可以只使用赋值。

最后,关于向您的 eval 添加第三个字段,这完全取决于您希望如何添加它。对于额外的逻辑或,它非常简单。

对于像 (A || B || C) 这样的表达式,你可以

return dummyCache::instance().getVal(Id).AField() == ATestValue ||
dummyCache::instance().getVal(Id).BField() == BTestValue ||
dummyCache::instance().getVal(Id).CField() == CTestValue;

对于更复杂的操作,明智地使用括号会大有帮助。例如,要返回 (A || B) && C:

return (dummyCache::instance().getVal(Id).AField() == ATestValue ||
dummyCache::instance().getVal(Id).BField() == BTestValue) &&
dummyCache::instance().getVal(Id).CField() == CTestValue;

或者(A && C) || (B && !C)(好吧这有点过火了...)

return (dummyCache::instance().getVal(Id).CField() == CTestValue) 
? (dummyCache::instance().getVal(Id).AField() == ATestValue)
: (dummyCache::instance().getVal(Id).BField() == BTestValue);

关于C++ 按位或运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14313832/

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