|
|
1
33
不,你可能在混合不同的东西。 严格的别名规则与C99标准完全无关。严格的混叠规则是从标准化的开始以来,在C和C++中存在的部分标准。C89/90中有一个子句禁止通过另一个类型的左值访问一个类型的对象( 和C++ 98一样( 3.10/15 ). 这就是严格别名的意义所在,不多不少。只是,并不是所有的编译器都希望(或敢于)实施或依赖它。C语言和C++语言有时被用作“高级汇编”语言,严格的混叠规则经常干扰这种用法。正是GCC做出了这一大胆举动,并决定在优化中开始依赖严格的别名规则,这常常会招致那些“程序集”类型的抱怨。
|
|
2
4
|
|
|
3
2
Cpp中的概念是相同的;在这种情况下,您可以使用C样式转换来指导您完成被认为是安全的wrt严格别名。 简言之:不,使用Cpp铸造的方法(您已经概述)不会安全地涵盖所有情况。打破规则的一种常见方法是使用静态\u cast来转换指针。 应该 |
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |