2012-03-22 6 views
0

可能性の重複:
What are the differences between pointer variable and reference variable in C++?
When to pass by reference and when to pass by pointer in C++?ポインタよりも参照を使用するのはいつですか?

ポインタをより柔軟かつ基準と基本的に同じであるように思わ。参照をnullにすることはできませんが、ポインタを参照してnullにするとどうなりますか?その場合、「ヌルにすることはできません」の利点を否定しませんか?とにかくそれは本当に利点ですか?

なぜポインタを使用するだけではないのですか? (私は本当に頼んでいる、私は正直にこれについて私の心を作っていない)

+0

ポインタを使用する状況と参照を使用する状況があります。どのような状況に興味がありますか? –

+0

[参照渡しのタイミングとC++でポインタを渡すタイミング]の複製が可能ですか?(http://stackoverflow.com/questions/3613065/when-to-pass-by-reference-and-when-to-pass -by-pointer-in-c)またはhttp://stackoverflow.com/questions/57483/what-are-the-differences-between-pointer-variable-and-reference-variable-in-cまたは... any他の多くのトンの。 –

+0

これはおそらく前に尋ねられたと思いましたが、この正確な質問をしている人はいませんでした。 – SirYakalot

答えて

1

参照を使って、あなたは明示的にそれが0であることができないと述べています。コードの一部の値を初期化できない場合は意味があります。一方、ポインタは、valueが初期化されているか、初期化されていない場合に便利です。 0と比較すると確認できます。

1
  • 参照は、nullにすることはできません。

  • 参照は常に初期化されます。 NULL以外のポインタはまだ初期化されていない可能性があります。

  • 参考文献は安定しています。参照先を最初にAに、次にBにすることはできません。初期化されると、それは1つの同じオブジェクトのエイリアスになります。

  • 参照の構文はやや控え目です。

1

nullにすることができるポインタへの参照は、実際の値またはオブジェクトへの参照と同じではありません。ポインタの値はnullでもかまいませんが、実際のポインタはNULLではありません!

参考文献を使用すると、安全で奇妙なことは起こらないという安心感が得られます。だからあなたが実際のポインタの機能を必要としないときは、常に参照を使用する必要があります。一般的に(そして常に例外があります)、次の場合にのみポインタを使用します。

a。実行中に動的にメモリを割り当てる必要があります。

b。ポインタ演算(p ++)が実際に必要です

cです。割り当てられたオブジェクトをコンテナ内に保存する必要がありますが、この場合はポインタをshared_ptrのようにラップするのが一般的です。

1

ポインタの柔軟性には価格が付いています。あなたがそのポインタを参照するたびに、その柔軟性をどこかで使用している可能性があると考える必要があります。それはもっと気にする必要があります...もっとデバッグするなど...参考文献は、シンプルでフィーリングが弱く、精神的な手荷物が少なくて済む。

これに加えて、構文は*->であふれにくいです。 :)

0

通常、参考文献はポインタの構文的な砂糖です。これはあなたが1つを使用していることを意味し、他のものも同様に使用できます(常にそうとは限りません)。しかし、時には参照がポインタよりも意味をなさないことがあります。特に、引数がnullでない関数を定義したり、null引数を調べることが優雅です。そのような場合は、単に参照するだけです。その一例がswap機能である:

template<typename T> 
void swap(T & a, T & b) 
{ 
     T temp(a); 
     a = b; 
     b = temp; 
} 

1は、ポインタを使用している場合、それは、このなる:

template<typename T> 
void swap(T * a, T * b) 
{ 
     //do you want to check for null here? 
     T temp(*a); 
     *a = *b; 
     *b = temp; 
} 

私が思うに、ほとんどのC++プログラマは、エレガントな参照を使用して最初の解決策を見つけること、第二になります解決策不必要に煩わしい。

+0

「時には」参照がポインタよりも意味がありますか?むしろ「ほとんどの時間」と言いたい。 – leftaroundabout

+0

@leftaroundについて:私は、ほとんどの場合、文法的な砂糖ですが、砂糖も重要ではないと思うので、人生は非常に苦いので、私はちょっとあなたに同感します。 – Nawaz

1

疑いで、ソース(Stroustrup氏)に行く:http://www2.research.att.com/~bs/bs_faq2.html#pointers-and-references

参照は、演算子のオーバーロードやコピーコンストラクタに適しています。

参考文献はヌルではなく、初期化されることが保証されています。

ポインタを引数として使用すると、引数がオプションである場合や、値がNULLの場合に無視できる場合にうまく機能します。

関連する問題