C には強い型システムがありません。
C++ はやや強力な型付けですが、実際には真の強力な型システムではありませんreinterpret_cast
。
型システムがバッファ オーバーフローを防止するには、型情報が (1) 任意の長さの文字列を示すか、(2) 型自体のバッファ長をエンコードする必要があります。さらに、型判定システムは、変換の buffer-length が以下であることを保証する必要があります。
編集:
ある程度の注意を払い、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
。これは、厳密に型指定されたシステムでできることの例です (C++ では、キャストによって型指定が 100% 破壊される可能性があることにも注意してください)。