3

こんにちは私はすることの違いは何ですか知りたいです

template <typename T> class List :
   T& getData();        
AND
   T getData();
};     
4

2 に答える 2

9

それTが型でT&あるとすると、は型のオブジェクトへの参照Tです。

T getData();タイプのオブジェクトを返す関数Tです。これは、関数が返すものはすべてコピーされ、呼び出し元はこのコピーを受け取ることを意味します。これは「コピーによる返品」と呼ばれます。実際には、コピーを作成する必要は必ずしもなく、コンパイラーはそれを最適化することができます(これは「コピーの省略」と呼ばれます)。

T& getData();タイプのオブジェクトへの参照を返す関数Tです。これは、当然のことながら「参照による戻り」と呼ばれ、返されたオブジェクトがコピーされないことを意味します。代わりに、元のオブジェクトにアクセスできるメモリ内のその場所への参照を返すだけです。これを使用するときは、返された参照が、それが参照するオブジェクトの存続期間を超えて使用されないように注意する必要があります。

参照が何であるかを正確に知らない場合、それは本質的に、ある変数を参照するために使用されるエイリアスです。ポインタとは異なり、それ自体はオブジェクトではなく、参照自体を参照することはできないため、参照内容を変更することはできませんが、ポインタのより安全な代替手段としてよく使用されます。

詳細を知りたい場合は、ウィキペディアのページが驚くほど役に立ちます。

于 2013-01-19T10:45:50.293 に答える
2
 T& getData(); returns a reference to T        

 T getData(); returns a copy of T

C ++リファレンスとは:リンク

于 2013-01-19T10:31:12.407 に答える