C 没有强类型系统。
C++ 在某种程度上是强类型的,但并不是真正的强类型系统,因为它具有reinterpret_cast
.
对于防止缓冲区溢出的类型系统,类型信息必须(1)表示任意长的字符串或(2)在类型本身中编码缓冲区长度。此外,类型判断系统应确保缓冲区长度小于或等于转换。
编辑:
稍加注意,并忽略 C++ 的强制转换能力,您可以在 C++ 中编写一个“相当强大”的无溢出缓冲区类。但是,根据该术语的一般定义,这不是强类型的,因为可以尝试在无效点访问缓冲区并仍然对其进行编译。比我更擅长模板的人可能会编写一个真正模板类型的 SafeBuffer。
这是我的观点:
template<int Length>
class SafeBuffer
{
unsigned char[Length];
public:
unsigned char& operator[](int index); //when implemented, throws exception on out-of-range access.
};
SafeBuffer<10> buf, foo;
SafeBuffer<9> bar;
buf = foo; //pass
buf = bar; //compile-time error.
buf[100]; //compiles, but generates error at runtime.
请注意,我们正在利用模板的类型判断系统来强制buf = bar
. 这是强类型系统可以做什么的一个例子(另请注意,强制转换可以 100% 破坏类型 - 在 C++ 中)。