2012-04-28 3 views
0

私はC++の初心者です。以下の例の違いを理解したいと思います。私たちは、機能なぜ&(* a)を使用できないのですが、typedefを使用してそれを達成できますか?

void someFunc(int &*a){ 
    int *b=new int; //just for example 
    a=b; 
} 

が、typedefの

typedef int* pint; 

void someFunc(pint &a){ 
    int *b=new int; //just for example 
    a=b; 
} 

すべてのものを使用して作成することはできません

は大丈夫です。

これは単なるコンパイラのトリックなのでしょうか、あるいはそのような振る舞いがより複雑になるのですか?

+2

'pint&a'は' int&* a'ではなく 'int *&a'です。 – Griwes

+1

私は "inside-out"というC宣言を読み出すように訓練されました...変数名で始まり、外側に読んでいます。これにより、int&* aはintへの参照へのポインタとして読み込みます。 int *&aを試してみてください。 – mjfgates

+0

@mjfgates、ありがとう、今私は私の間違いが理解している:) –

答えて

10

pint& aint*& aであり、int&* aではありません。 C++ではポインタへのポインタ型を持つことはできませんが、ポインタへの参照型を使用することはできます。

+0

ありがとう、今私はそれを理解している –

2

参照とポインタの順序です。最初の例では

int &*a 

これは許可されていない参照へのポインタです。第2のものでは

int *&a 

許可されているポインタへの参照です。

関連する問題