![]() |
1
3
C指定了从指针到限定指针的转换,但不是反过来,C11 6.3.2.3/2:
然而,C允许以下内容,C11 6.3.2.3/7:
简单地说, 任何 指针类型可以转换为 任何其他 指针类型和返回。如果指针本身没有对齐问题,则此类代码是可以的,除非指针转换为不兼容的类型,然后取消引用。指向类型的限定指针始终是指向类型的兼容指针类型。 (请注意,这是指指向对象类型的指针——函数指针是一种特殊情况。) 因此,这是否是UB实际上取决于指针最初指向的位置。在以下情况下调用UB,C11 6.7.3/6:
如果指针最初指向只读位置,则会调用未定义的行为。但如果它指向一个非const的分配变量,那就没问题了。例如,这段代码很好,不会调用未定义的行为:
否则,正如有人在评论中指出的那样,一些C标准库函数将从根本上被破坏,例如
|
![]() |
2
0
不,铸造a
以下任何一种都不会导致UB
然而,以下 做 调用UB。。。
为了避免这种可能性,编写2个函数,一个是另一个的包装器。
|
![]() |
Utkonos · 如何将Python枚举公开为不带类名的“常量” 1 年前 |
![]() |
Yugraaj Sandhu · 把const作为引用和值有什么区别? 1 年前 |
![]() |
user246392 · 泛型参数在中没有匹配的注释。净8 AOT 1 年前 |
![]() |
Fyodor · 避免GCC编译器“不兼容的指针类型”警告 1 年前 |
![]() |
semicolon_missing · 指针的常量引用 1 年前 |
![]() |
Sasha · C: void*作为句柄,失去const表达能力 1 年前 |
![]() |
ÐÐ³Ð¾Ñ Ð¢ÑиÑонов · 忽略字符常量 1 年前 |