关于C++类型安全 木灵的炼金工作室

最近在读STL源码剖析,读到了“类型安全”这一词汇,不是很理解,所以就查了一下。

于是就知道原来这么一个原则会有“类型安全”这一名称。

类型

C和C++对于类型的定义和实现是这样的:类型和变量地址头记录于符号表中,代表着每一个变量的长度和解释模式。所谓长度就是这个变量拥有的位长度,即这个变量可以访问到的位限制;所谓解释模式就是这个量应该遵照什么样的法则被程序操作,它反映了真实的数据种类。比如一串位序列0xFFFF,如果被解释为16位无符号整数,就会变成65535,而以补码模式解释为有符号整数就会变成-1。

类型安全

所谓类型安全即:进程所属的虚拟内存中的每一个位序列都会被程序以正确的长度和模式正确地解释。类型安全需要编译器/解释器与工程师共同正确操作。
那么,什么是类型不安全的呢?比如下述的程序:

int i = 5;
printf("%ld", i);

就是类型不安全的,其中printf函数会以long int的位长度(32位)来读取int类型i(我们假定是16位),此时就会多读取16位它本该不可见的内容,此时程序很有可能会触发严重的错误从而终止,或者输出错误的结果。


Copyright AmachiInori 2017-2021. All Right Reserved.
Powered By Jekyll.
amachi.com.cn