对于此语句,这是一个更好的表达
Which is a better expression for this if statement?
我已经被告知FFMPEG的补丁程序在流向FLV播放器时解决了问题。
rtmpproto.c 的第2314行周围有以下表达式:
if (rt->flv_header_bytes < 11)
break;
修复程序是将其更改为包括此附加要求:
if (rt->flv_header_bytes < 11 && !rt->flv_off)
break;
但是,我对此语句的逻辑感到好奇。第一个语句检查以查看FLV标头是否小于11个字节,但是检查FLV流是否先打开之前,在检查标头有多少个字节之前,是否更有效地检查FLV流?
if (!rt->flv_off && rt->flv_header_bytes < 11)
break;
另外,将语句更改为呢?
if (rt->flv_off || (!rt->flv_off && rt->flv_header_bytes < 11)
break;
这会更有效,还是可以以某种方式打破代码?
这取决于哪个条件最常失败,以及编译器是否尊重您输入条件的顺序。假设较晚是正确的(一个很大的假设),首先检查标头大小可能更有效,因为大概是FLV播放器通常都在。
对于完整的评估来说,更多的细节是必不可少的……尽管无论如何这都不重要,因为(a)(a)"浪费"几乎可以肯定并不重要,而且(b)编译器很可能会做得更好。优化比您的优化。
如果您想在第三份语句中使用或使用或使用Demorgan定律并写
if(rt->flv_off || rt->flv_header_bytes >= 11)
但是,这不是真正担心的事情。
相关文章:
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 在类的第一个/最后一个实例存在之前/之后调用一对函数.有没有更好的方法?
- 做一个unordered_multimap键的平均值是更好的方法吗?
- 静态常量与常量局部变量,哪一个性能更好
- 试图为命名数组元素创建一个更好的循环
- 在 C 和 C++ 编程中使用哪一个更好?
- 哪一个更好?使用C 代码中的System()函数或使用源代码
- 如何将输入与文件中的内容相匹配?我需要一个更好的解释
- 一个更好的实数生成器
- 对于此语句,这是一个更好的表达
- 这是一个更好的Get成员方法
- 在 c++ 中选择有序映射的最后一个条目时,哪一个更好
- 为可变函数设计一个更好的API
- 重载一个方法只是为了在C++中报告一个更好的错误.有更好的方法吗
- typecasting与memcpy():哪一个更好
- c++的一个更好的低级别int交换
- 哪一个更好,自动&&,自动或自动常量
- 3D模型移动,找到一个更好的方式来移动3D模型
- 在QGraphicsView中设置QGraphicsScene的精确视图区域(rect) -一个更好的fitInView