Qt C++ 在windows上三目运算不断增加内存

今天在做摄像头项目的时候,运行程序很卡
打开任务管理器发现程序内存一直在增加
函数内部无任何的 new 和 malloc操作
最后在nv12转rgb像素转换函数发现是因为三目运算导致内存不断增长

r = r > 255 ? 255 : (r < 0 ? 0 : r);
g = g > 255 ? 255 : (g < 0 ? 0 : g);
b = b > 255 ? 255 : (b < 0 ? 0 : b);

最后替换了if
解决了这个问题

if (r > 255) r = 255; if (r < 0) r = 0;
if (g > 255) g = 255; if (g < 0) g = 0;
if (b > 255) b = 255; if (b < 0) b = 0;

由于平时测试的摄像头分辨率都比较低,所以这个问题不太突出
今天换了个高分辨率的镜头才出现了这个问题
找了很久才定位到三目运算的问题
所以记录一下此问题

### C++ 中三运算符与位运算 #### 三运算符的使用方法 在 C++ 中,三运算符是一种简洁的方式来进行条件判断并返回相应的值。其基本形式如下: ```cpp condition ? expression_if_true : expression_if_false; ``` 当 `condition` 成立时(即为真),整个表达式的值将是 `expression_if_true`; 否则,如果 `condition` 不成立,则取 `expression_if_false` 的值作为最终结果[^1]。 例如,在实际编程中可以这样应用三运算符来简化代码逻辑: ```cpp int max_value = (a > b) ? a : b; // 如果a大于b, 则max_value等于a;否则等于b ``` #### 位运算的操作方式 不同于三运算符用于条件选择的功能,位运算是直接操作二进制数位上的每一位。常见的几种位运算包括按位与(&),按位或(|), 按位异或(^),左移(<<) 和右移(>>) 等操作[^2]。 下面是一些具体的例子展示如何运用这些位运算符: ```cpp // 假设变量x=5 (0101), y=3 (0011) cout << "x & y =" << (x&y); // 输出: x & y = 1 (0001) cout << "x | y =" << (x|y); // 输出: x | y = 7 (0111) cout << "x ^ y =" << (x^y); // 输出: x ^ y = 6 (0110) cout << "x << 1=" << (x<<1); // 输出: x << 1= 10 (1010) cout << "y >> 1=" << (y>>1); // 输出: y >> 1= 1 (0001) ``` #### 两者之间的主要差异 - **功能不同**: 三运算符主要用于根据给定条件决定两个可能的结果之一;而位运算则是针对整型数据内部的具体比特位执行特定类型的计算。 - **适用场景各异**: 当需要基于某个布尔表达式做出简单决策时可以选择前者;后者更适合处理低级硬件接口、优化算法性能等情况下的数值转换需求.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值