ベストアンサー
型チェックは、構造の型を検証する型チェッカーによって行われます(定数、変数、配列、リスト、オブジェクト)は、その使用状況で予想されるものと一致します。これにより、特定のタイプのプログラミングエラーが検出されて報告されます。たとえば、モジュロ演算子8%3.5を含む次の式について考えてみます。モジュロ演算子は、2つの整数を予期しているため、この式はエラーになります。型チェッカーは知っておく必要があります–言語の構文構造(例:演算子)–言語の基本型(int、real)–構造に型を割り当てるための規則例:「+の両方のオペランドがintの場合、結果はintです」
タイプチェックには2つのタイプがあります静的と動的
静的型チェック:コンパイル時に行われる型チェック。これらの言語を使用する場合、変数を使用する前に変数の型を宣言する必要があります(コンパイラ変数がどのデータ型に属しているかを知る必要があります)。たとえば、c ++ int a = 10のステートメントについて考えてみます。ここで、コンパイラは変数「a」を使用する前にそのデータ型を知る必要があります。たとえば、C、C ++、JAVA、C#は、いくつかの静的に型指定された言語
動的です。型チェック:実行時に行われる型チェック。これらの言語を使用する場合、変数の型を指定または宣言する必要はありません。代わりに、コンパイラ自体が、最初に値を割り当てたときに変数の型を判断します。ここで、Pythonのいくつかのステートメントについて考えてみます。str= “Python” str2 = 10ここでは、データ型を宣言する必要はありません。コンパイラ自体は、最初に値を割り当てたときに、変数がどのタイプに属しているかを認識します(str1は「String」データ型で、str2は「int」型です)。たとえば、VBScript、Pythonは動的に型指定された言語です。
回答
型チェックでは、操作が変数は互換性のある型を使用します。言語が異なれば、変数の互換性のレベルも異なります。厳密に型チェックされた言語には、式の変数型に関する厳格な規則があります。コインの反対側には、さまざまな種類の混合を可能にする言語があります。これらの言語は、変数変換のいくつかのルールを使用して、混合型をある程度補正します。
たとえば、一部の厳密な型言語では、2つの整数または2つの浮動小数点数しか追加できませんが、試行するとエラーにフラグを立てます。浮動小数点数に整数を追加します。他の言語では、整数をfloatに追加すると、暗黙的に整数をfloatに変換してから、追加を実行する場合があります。
C ++は中間のどこかにあります。 C ++では、いくつかの暗黙的な変換が可能です。 CおよびC ++には、いくつかの抜け穴があります。まず、キャスティングと呼ばれます。キャストとは、基本的に、宣言された値ではなく、変数を「この型」としてコンパイラーに指示することです。たとえば、上記の例で、floatをintとして処理する場合は、floatをintにキャストできます。
例:int x、a; float y、b;
b = x + y;
a = x +(int)y;または、a =(int)(x + y);
ポインタは一般的に型指定されているため、キャストを使用して、ある構造体を別のタイプの構造体のように見せることができます。
typedef struct {/ *メンバー* /} A;
typedef struct {/ *メンバー* /} B;
A ax;
B * bp;
bp = &ax; //エラー:さまざまな種類のポインター!
bp =(B *)&ax; //ユニオンのようにオーバーレイAとBを効果的に定義します
ポインターには、ワイルドカードポインターであるvoid *もあります。 memタイプの関数など、任意のタイプのポインタが許可されている場所での使用を許可します。 memcpy。