类型双关

科技工作者之家 2020-11-17

类型双关是计算机科学的术语,指任何编程技术能颠覆或者绕过一门程序设计语言的类型系统,以达成在形式语言内部难以甚至不可能实现的效果。

简介C语言与C++语言,语法结构如类型转换与union,以及C++增加的reinterpret_cast运算符,用于实现类型双关。

Pascal语言使用records与variants来按照多种方法处理特定数据类型。1

Socket例子Berkeley sockets使用类型双关来处理IP地址。函数bind绑定一个位初始化的套接字到一个IP地址,其声明如下:

int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);bind函数通常如此使用:

struct sockaddr_in sa = {0};int sockfd = ...;sa.sin_family = AF_INET;sa.sin_port = htons(port);bind(sockfd, (struct sockaddr *)&sa, sizeof sa);这是因为struct sockaddr_in与struct sockaddr有相同的内存布局。两个类型的指针可以互相转换。1

浮点例子类型双关不仅限于struct。对于浮点数,判断其是否为负值:

bool is_negative(float x) { return x

科技工作者之家

科技工作者之家APP是专注科技人才,知识分享与人才交流的服务平台。