typedefに基づく使い方詳細

2475 ワード

初心者はこのキーワードをあまり使わないかもしれませんが、それは非常に有用なキーワードです。コードモジュール化の度合いをより良くすることができます。つまり、他のコードとの関連が少ないです。C++の中でTraits技術の基礎を実現するのもテンプレートプログラミングの基本的な文法の一つです。変数が変数名として定義されると、typedef(またはタイプ定義)はタイプ名です。名前をつけるからには、似たようなところがたくさんあります。変数定義はみんなが使うと思いますので、タイプ定義も必ず使います。型定義の文法は、変数定義の前にtypedefを加えれば、型定義になります。ここはもともと変数のはずのものが、タイプになりました。例えば、以下の変数定義:int integer;     //型変数int*point;   //整型ポインタ変数int array[5]//配列変数int*p_array[5]///コンパス配列の変数int(*array_)pointer)[5]///配列の指針の変数int function(intparam)//関数の定義は、関数名を関数の変数int*function(int param)//依然として関数ですが、戻り値は整数ポインタint(*function)//現在は関数の指針です。該当するタイプを定義するなら、タイプに名前をつけると、以下のような形になります。t;                      //整型タイプtypedef int*pointer_t;     //整型ポインタタイプtypedef int array_t[5]///配列タイプtypedef int*p_アラリt[5]    //コンパスの配列のタイプtypedef int(*array_)ポライトt)[5]///配列の指針の種類typedef int function_t(int param)     //関数タイプtypedef int*function_t(int param)    //関数タイプtypedef int(*function_t)(int param)//関数のポインタの種類に注意してください。上の関数の種類はCでエラーが発生する可能性があります。Cには関数の種類がないので、その関数変数は自動的に関数のポインタに縮退します。C++の中では可能らしいです。ここでは主に形式的な類似性を説明します。 typedefの一般的な形式は、typedefです。   タイプ     定義名;プログラムでtypedefを使用する目的は、一般的に二つあります。一つは変数に簡単で意味の明確な新しい名前を与えること、もう一つは簡単で複雑なタイプの声明です。実際には、C言語で変数を宣言する時、私たちがよく知っているextern、static、aut、registerを含む記憶タイプのインジケータがあります。ストレージタイプのインジケータが指定されていない場合、コンパイラは約束に従って自動的にデフォルト値をとります。また、格納タイプインジケータの位置も任意である(ただし、変数名とポインタ*の前に要求される)。つまり、以下のいくつかの行のコードは等価である:static const int i。const static int iint const static iconst int static iC言語規範によって、構文分析を行う時、typedefと記憶タイプインジケータは等価です。ですから、上記のstaticを使ったところをtypedef:typedef const int iに変えます。const typedef int iint const typedef iconst int typedef i上記のコードの意味は、iをタイプ名として定義し、等価のタイプはconst intとする。これからiがあれば   aコードは、const int aと同等である。指針があるところについても同じです。例えば、int const typedef*t;コードt   pです。int const*pに相当します。また、typedefはstaticなどの格納タイプインジケータと同時に使用できません。各変数には格納タイプしかないので、コード:typedef static int i;不法です。typedefを使用して複雑な変数宣言を簡略化します。1)10個のポインタがある配列を定義します。このポインタは整形パラメータがあり、整数を返します。第一の方法:int(*a[10])(int);第二の方法:typedef int(*pfunc)(int);             pfunc a[10];2)10個のポインタがある配列を定義し、このポインタは関数ポインタ(パラメータなし、戻り値は空)パラメータを有し、空に戻ります。第一の方法は、void(*a[10])(void(*)(void))である。第二の方法:typedef void(*pfunc Param)(void);               typedef void(*pfunc)(pfunc Param);pfunc a[10];3)10個の関数ポインタ(パラメータなし、戻り値がdouble)配列を指すポインタの最初の方法:double(*)(void)(*p)[10];第二の方法:typedef double(*pfunc)(void);             typedef pfunc(*pfunc Param)[10];             pfunc Param p;まとめ:typedefには二つの用法があります。一、一般的な形式で、既存のタイプの別名typedefを定義します。   タイプ    定義名;二、新しいタイプを作成する     typedef   戻り値の種類   新しいタイプ名(パラメータリスト)