C ではすべてのポインターは同じサイズですか?
この質問は議論の対象となっており、一部の情報源はすべてのポインターが同じであると主張しています。
C 標準によれば、
- void は以下と同じサイズであることが明示的に保証されています。 char
- CV 修飾ポインター (例: T const、T volatile、T const volatile) は T
基になる型が同じである列挙型へのポインタは同じサイズになります-
標準ではすべてのポインタが同じサイズであるとは明示的には規定されていませんが、実際にはすべてのクラス型へのポインタが同じであることが一般的に当てはまります。 、関数ポインター、データ メンバー ポインター、および関数メンバー ポインターは同じサイズです。
ただし、コンパイラーには技術的にトリックが許可されているため、この仮定は 100% 保証されません。たとえば、特定のプレフィックスで始まるクラスに対して、またはそれらのクラスに対してガベージ コレクションを実装することにした場合、より長いポインターを作成できます。
実際のシナリオでは、コンパイラーがこの自由を利用する可能性はほとんどありません。したがって、開発者は一般に、異なるクラス型および上記の他の型へのポインターは同じサイズであると想定できます。さらに確実性を高めるために、static_assert ステートメントを実装して、潜在的な違反にフラグを立てることができます。
ただし、near ポインターと far ポインターを持つセグメント化されたアーキテクチャでは、これらのタイプのポインターのサイズが同じでない可能性があります。これは、ポインターのサイズが均一であるという通常のルールの例外として機能します。
以上がC ではポインターは常に同じサイズになりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。