0

不必要な逆参照や、それぞれの使用に固有の規則など、ポインターを介した参照の提供された利便性に関係なく、

ポインタと参照として 2 つの言語構造を提供する論理的な理由はありますか、それとも単なる構文糖ですか?

(私は、コンパイラが、言語によって参照用に定義されたルールを暗示/チェックして、ポインターの場合と同じ手順を参照に使用するという究極の基本的な実装を推測します。)

注:問題は、「参照はC ++ではNULLを割り当てることはできませんが、ポインター」などの参照について言語によって定義されたルールに関するものではありません。

4

2 に答える 2

3

私が正しく理解している場合、あなたは2つの質問をしています

  1. ポインタと参照の違いは何ですか
  2. 両方のデータ型をサポートする理由

ここに行きます:

  1. ポインタは、データ型が存在するメモリ内の場所を参照します。ポインタのサイズは、実際に何を指しているかに関係なく、基礎となるハードウェア、通常は 4 バイトまたは 8 バイトに固定されています。さらに、無効な値を使用してポインタを関数に渡すことができます - foo(reintepret_cast<int *>(0xDEADBEEF) );。対照的に、参照は基礎となるデータが有効であることを保証します - 参照はオブジェクト自体のエイリアスであり、そこから移動することはできません (参照されたオブジェクトがまだスコープ内にある場合 -以下のコメントに従って編集されます)。
  2. 両方のタイプをサポートする理由あります。最初の理由は、関数に渡されるデータが有効であることを確認するためです。ポインターの有効性をテストするサイクルを無駄にすることはありません (not NULL)。2 つ目の理由は、データが有効な場所を指しているだけでなく、有効なデータ オブジェクトも指していることを確認できるからです。しかし、主な理由は、参照を使用すると、引数を値で渡すことなく関数を呼び出す利点を享受できると同時に、引数が有効な値を参照しているという保証を維持できるためです。
于 2013-07-07T12:07:40.717 に答える
0

Bjarne Stroustrup に、C++ に参照がある理由を尋ねる必要があります。とりわけ、189 ページのセクション 7.7 リファレンス、C++ プログラミング言語、第 4 版で彼の理論的根拠を示しています。The Design and Evolution of C++ の 86。

于 2013-07-07T12:50:09.830 に答える