首页 > TAG信息列表 > strict-aliasing

c – 如何实现没有未定义行为的快速逆sqrt?

参见英文答案 > What’s a proper way of type-punning a float to an int and vice-versa?                                    7个 根据我对strict aliasing rule的理解,fast inverse square root的此代码将导致C中的未定义行为: float Q_r

c – `reinterpret_cast`是`T *`到’T(*)[N]`是不确定的行为?

请考虑以下情形: std::array<int, 8> a; auto p = reinterpret_cast<int(*)[8]>(a.data()); (*p)[0] = 42; 这是未定义的行为吗?我觉得是这样的. > a.data()返回一个int *,它与int(*)[8]不同 > cppreference上的type aliasing rules似乎表明reinterpret_cast无效>作为程序员,我知道

c – placement new的返回值与其操作数的转换值之间是否存在(语义)差异?

放置new的返回值与其操作数的转换值之间是否存在(语义)差异? struct Foo { ... }; char buffer[...]; Foo *a = new(buffer) Foo; Foo *b = reinterpret_cast<Foo *>(buffer); a和b在某种程度上有所不同吗? 编辑:根据DaBler的评论,这个问题告诉我们,如果使用const / reference成员

c – 什么时候类型惩罚指针在实践中是安全的?

我的一位同事正在研究与二进制数据阵列一起使用的C代码.在某些地方,他的代码就像 char *bytes = ... T *p = (T*) bytes; T v = p[i]; // UB 这里,T有时可以是short或int(分别假设为16和32位). 现在,与我的同事不同,我属于“没有UB,如果可能的话”阵营,而他更像是“如果有效,那就