gpt4 book ai didi

c++ - 对于这个 if 语句,哪个表达式更好?

转载 作者:行者123 更新时间:2023-11-28 07:53:43 26 4
gpt4 key购买 nike

我听说有一个 ffmpeg 补丁可以修复流式传输到 FLV 播放器时的一个问题。

rtmpproto.c 的第 2314 行附近有如下表达式:

if (rt->flv_header_bytes < 11)
break;

解决方法是更改​​它以包含此附加要求:

if (rt->flv_header_bytes < 11 && !rt->flv_off)
break;

不过我很好奇这句话的逻辑。第一个语句检查 FLV header 是否小于 11 个字节,但是在检查 header 有多少字节之前先检查 flv 流是否打开不是更有效吗?

if (!rt->flv_off && rt->flv_header_bytes < 11)
break;

或者将语句更改为这样怎么样?

if (rt->flv_off || (!rt->flv_off && rt->flv_header_bytes < 11)
break;

那样会更有效率还是会以某种方式破坏代码?

最佳答案

这取决于最常失败的条件,以及编译器是否遵循您键入条件的顺序。假设后者为真(一个很大的假设),首先检查 header 大小可能更有效,因为 FLV 播放器通常是打开的。

完整的评估需要更多的细节......尽管这些可能都不重要,因为(a)“浪费”的时间几乎可以肯定是微不足道的,并且(b)编译器很可能会做得更好优化比你会的。

如果您想在第三个陈述中使用 OR,只需应用 DeMorgan 定律并编写

if(rt->flv_off || rt->flv_header_bytes >= 11)

但同样,这并不是真正值得担心的事情。

关于c++ - 对于这个 if 语句,哪个表达式更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13205861/

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