2011-11-12 15 views

答えて

8

タイプ「二int Sを取り、intを返す関数への参照」を定義します。その型の変数は初期化する必要がありますが、初期化子をtypedefに入れることはできません。これは、例えばint

int i; 

typedef int& intref; // no initializer allowed 
intref ri(i); // initializer required 

int f(int, int); 

typedef int (&rifii) (int,int); // no initializer allowed 
rifii rf(f); // initializer required 
+0

「初期化子が必要です」とはどういう意味ですか? – Nawaz

+2

@ Nawaz: "Initialier required"とは、定義で初期化する必要があることを意味します。たとえば 'int a = 3;'の '= 3 '部分は初期化子です。 int b(5);の '(5)'と同じです。上記の場合、 'intref ri;'はイニシャライザがないのでエラーになりますが、 'intref ri(i);'はイニシャライザ( '(i)')があるのでOKです。 – celtschk

+0

@celtschk:thanks ....... – bhuwansahni

2

それは「初期化」することはできませんので、それは、typedefだ、それだけのタイプ「int型を返すと、引数として2つのintを取る関数への参照」の新しい名前を紹介します。

0

からの参照番号の機能です。 typedefは初期化できません。 typedef int rank_t;は初期化もどちらもないと考えてください。

1

それは、戻り値の型のtypedefが初期化されていませんint

2つの引数とを取る関数への参照です:

typedef int (&rifii) (int,int); 

あなただけにしてタイプrifiiの参照を宣言初期化する必要があります。 「fooは」関数である

rifii r = foo; 

int foo(int, int);

-2

typedefはディナーパーティーに行くと言ってようなものですこんにちは、私はエド - その皿の上ノー肉。その定義は肉をその骨に与えます。

+0

隠喩を理解できない人のために。それは宣言です。 –

+2

いいえ、そうではありません。宣言は 'extern int(&rifii)(int、int);'を読みます。 typedefは異なるものです。 – celtschk

+1

私のコメント編集が失敗したので、私はそれを追加して(そしてここでat-attributionをここに追加しています)、これを次のように追加しています:「私はSlartibartfastです。余分なコメント:実際には、私のより良いメタファーはまだ1つのオブジェクトを示唆しているので、まだ良いものではありません。より良い隠喩は、生物学者であると言っています: "私たちは犬狼瘡familiarisについて話すつもりですが、ただ犬と言いましょう。" – celtschk

関連する問題