Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何理解兼容类型与严格的别名规则?

如何理解兼容类型与严格的别名规则?

提问于 2018-03-15 20:44:33
回答 1关注 0查看 178

C中的一种常见策略是将一种类型转换为另一种类型,这取决于C结构的布局有一定的保证。

像GLib这样的库依靠这个实现面向对象的继承,基本上:

代码语言:javascript
运行
AI代码解释
复制
struct Base
{
  int x;
  int y;
};

struct Derived
{
  struct Base b;
  int z;
};

这使得Base*指针能够被分配给Derived对象的地址。但我也意识到“ 严格别名 ”规则,这是编译器隐含的假设,即不同类型的指针不能指向相同的地址。(这使编译器能够执行某些优化。)

那么,这两件事情是如何协调的呢?许多C库,包括Glib,CPython等,都使用上述策略在类型之间进行转换。他们都只是简单地编译像no-strict-aliasing

回答 1

幽幽77

回答已采纳

发布于 2018-03-16 06:17:56

在这种情况下,没有违反严格的别名。

struct Derived 包含一个struct Base。这种行为是语言标准明确允许的。来自C11 6.7.2.1结构和联合说明符,第15段:

指向适当转换的结构对象的指针指向其初始成员(或者如果该成员是位域,则指向它所在的单位),反之亦然。

和开发者交流更多问题细节吧,去 写回答
相关文章
严格别名规则“-fstrict-aliasing”和“-fno-strict-aliasing”及类型双关
“-fstrict-aliasing”表示启用严格别名规则,“-fno-strict-aliasing”表示禁用严格别名规则,当gcc的编译优化参数为“-O2”、“-O3”和“-Os”时,默认会打开“-fstrict-aliasing”。
一见
2019/03/14
2K0
如何优雅地实现浏览器兼容与CSS规则回退
读完了《Visual Studio Code权威指南》,前端方面书籍不能停,于是捡起「CSS一姐」 Lea Verou 的《CSS魔法》。
Piper蛋窝
2021/07/23
5010
如何优雅地实现浏览器兼容与CSS规则回退
类型别名与字面量类型_TypeScript笔记10
这种类型完整性补充让TypeScript能够更细致地“理解”(静态分析)代码含义,进而发现一些不那么直接的潜在问题
ayqy贾杰
2019/06/12
1.2K0
TypeScript类型别名
var str1:string|number="10"; 通过如上代码我们既可以是字符串也可以是数值 那么通过类型别名进行定义,那么下面我们可以是我们定义的类型 type strType=string|number|boolean; var str2:strType="10"; str2=10; str2=true; 当然我们可以对我们的接口也采用类型别名方式 interface muchType1{ name:string } interface muchType2{ age:number
HueiFeng
2020/04/09
1.1K0
TypeScript-类型别名和类型别名、接口异同
如上代码的含义为给 string 类型起了一个别名叫做 MyString, 那么将来无论是 MyString 还是 string 都表示 string 也就是说将来你使用 MyString 别名作为变量的类型那么改变量就只能存储字符串类型的数据像如上的示例代码我赋值了其它类型的数据其实在编译器当中已经报错了如下:
杨不易呀
2023/09/28
2520
TypeScript-类型别名和类型别名、接口异同
(十二)类型别名与限定值
通过类型别名我们可以把一长串的类型别名起一个简短的名字,这样既方便我们编写代买,也方便我们复用
老怪兽
2023/02/22
1950
TypeScript类型别名
var str1:string|number="10"; 通过如上代码我们既可以是字符串也可以是数值 那么通过类型别名进行定义,那么下面我们可以是我们定义的类型 type strType=string|number|boolean; var str2:strType="10"; str2=10; str2=true; 当然我们可以对我们的接口也采用类型别名方式 interface muchType1{ name:string } interface muchType2{ age:number
HueiFeng
2020/04/10
6350
TypeScript类型别名
TypeScript 强大的类型别名
类型别名会给一个类型起个新名字。类型别名有时和接口很像,但是可以作用于原始值,联合类型,元组以及其它任何你需要手写的类型。
coder_koala
2019/11/20
3.4K0
2.1.1c++更严格的类型检查
用户3519280
2023/07/08
1120
Kotlin Vocabulary | 类型别名 typealias
有时候一些可读性差、不够明确或者名字太长的类型声明会干扰代码的 "自我表达"。这种情况下,可以使用 Kotlin 特别针对这个问题提供的特性: Typealias (本文下称 "类型别名")。类型别名可以使您在不增加新类型的情况下,为现有类或函数类型提供替代名称。
Android 开发者
2020/04/22
7610
Python - typing 模块 —— 类型别名
Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html
小菠萝测试笔记
2021/08/23
8920
C++为类型建⽴别名的⽅式
预处理器在编译程序时用char替换所有的BYTE;等价于使BYTE成为char的别名
Alan_1
2023/04/30
3940
TypeScript中使用类型别名
在很多打包工具或者使用cli创建的项目中都会提供类型别名,例如Vue-cli中使用@可以代表绝对路径src。
用户6256742
2022/07/06
8980
TypeScript中使用类型别名
【C 语言】数据类型本质 ( 数据类型别名 | typedef 关键字 | 为复杂数据类型设置别名 | 为简单数据类型设置别名 )
使用 typedef 关键字为 复杂数据类型 定义别名 : 结构体前面加上 typedef 关键字 , 结构体类型声明最后带上 数据类型别名 ;
韩曙亮
2023/03/29
6220
【C 语言】数据类型本质 ( 数据类型别名 | typedef 关键字 | 为复杂数据类型设置别名 | 为简单数据类型设置别名 )
如何通俗理解类和类型的差别?
我们日常编程经常遇到类和类型的概念,有时不免会对这两个东西产生纠结,它们究竟是同一种东西呢?还是有什么差别?
高一峰
2020/09/22
2K0
如何通俗理解类和类型的差别?
如何理解 String 类型值的不可变?
String不可变很简单,如下图,给一个已有字符串"abcd"第二次赋值成"abcedl*,不是在原内存地址上修改数据,而是重新指向一个新对象,新地址。
chenchenchen
2021/09/06
1.1K0
【Rust 基础篇】Rust类型别名:为类型赋予新的名字
Rust是一种以安全性和高效性著称的系统级编程语言,其设计哲学是在不损失性能的前提下,保障代码的内存安全和线程安全。在Rust中,类型别名是一种常见的编程特性,它允许为现有类型赋予新的名字,从而提高代码的可读性和可维护性。通过类型别名,我们可以使用更具有描述性的名称来代替复杂的类型,并且在代码中统一使用新的名称,使代码更加清晰和易于理解。本篇博客将深入探讨Rust中的类型别名,包括类型别名的定义、使用场景、使用方法以及注意事项,以便读者了解如何在Rust中使用类型别名来赋予类型新的名字。
繁依Fanyi
2023/10/12
3540
React路由的模糊匹配与严格匹配
模糊匹配是React Router的默认匹配方式。在模糊匹配中,路由会根据URL的路径部分进行匹配。当URL的路径部分与路由的路径部分部分匹配时,就会触发匹配。
堕落飞鸟
2023/05/20
2K0
攀爬TS之路(六) 类型别名、字面量类型、枚举
上面的例子中,使用了类型别名,所以后续可以直接使用类型别名Name来当成string使用。
赤蓝紫
2023/03/16
4740
攀爬TS之路(六)    类型别名、字面量类型、枚举
点击加载更多

相似问题

腾讯COS与小程序不兼容?

2474

Flink与TBDS的集成和兼容情况?

2716

兼容性问题最新版本是否与历史版本兼容?

1584

1.7.0的直播SDK是否与1.8.0的IM SDK兼容?

1232

Git:更新路径与交换分支不兼容?

2410
相关问答用户
腾讯云TDP | TDP会员擅长3个领域
平安资管 | 架构师擅长4个领域
擅长3个领域
擅长5个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档