14 条回复  ·  1562 次点击
liuidetmks 楼主 小成 2025-10-11 21:34:49
@metalvest c @ysc3839 全局作用域不会 ub 吧 比较的话是比较两个指针地址,性能不存在问题的 @xuanbg 有时候业务变化了,魔数可能哪里弄漏了,这里把结构体匿名,提供一个统一构造方法,方便处理一点。 @aprikyblue c
kneep 小成 2025-10-11 22:26:53
@liuidetmks @ysc3839 可能是在说全局指针地址的读取可能会多产生一条指令,而常量通常不需要。应该不是在说你比较了指针指向的内容。
ysc3839 小成 2025-10-11 22:56:52
@liuidetmks 地址数值是存在全局变量里的,要先读全局变量,再比较数值
geelaw 小成 2025-10-12 03:11:08
@aprikyblue #3 楼主写的是 C 不是 C++,没有 enum class 。(当然,换成 C++ 似乎是比较好的选择。)这一点可以从这段代码可以编译知道(见下面第二点)。 ———— 几个可以挑剔的点: 一双下划线是保留标识符。 二是初始化的时候 constness 不合适,注意 const BizTypeRef 是 struct __BizType * const 而不是 struct __BizType const *,于是这里会丢失 const ,如果实现方(很容易无意间)尝试修改只读复合字面量的 .value 的话会有 UB 。 三是,如果实现方不需要数据,那么实际上没有必要使用 value ,用 non-const 复合字面量本身就可以确保几个表达式的对象不占据相同的位置(但是 const 复合字面量可能会是同一个对象)。 ———— @ysc3839 #7 楼主的版本有不同的值,所以无法是同一个位置。在文件作用域的复合字面量是静态存储期。
cybort 初学 2025-10-12 03:23:29
代码静态扫描能解决的问题,为什么要通过编码解决?
12
返回顶部