1. ホーム
  2. c++

[解決済み] C++で参照が再利用できない理由

2023-07-27 22:27:12

質問

C++の参照には2つのプロパティがあります。

  • これらは常に同じオブジェクトを指します。
  • 0にすることはできません。

ポインターはその逆です。

  • 異なるオブジェクトを指し示すことができる。
  • 0にすることができる。

なぜC++には"non-nullable, reseatable reference or pointer"がないのでしょうか?参照が再利用可能であってはならない良い理由が思いつきません。

編集してください。 この質問はよく出てくるのですが、私は通常、quot;association"(ここではquot;reference"やquot;pointer"という言葉は避けています)が決して無効ではないことを確認したいときにリファレンスを使用します。

私は、quot;この参照は常に同じオブジェクトを参照していることが素晴らしい"と思ったことはないと思います。もし参照が再利用可能であれば、まだこのような現在の動作を得ることができます。

int i = 3;
int& const j = i;

これは既に合法なC++ですが、無意味です。

私は私の質問をこのように言い直しました。 は オブジェクトである」設計の根拠は何ですか?なぜ、参照 は常に として宣言されたときだけでなく、常に同じオブジェクトであることが重要だと考えられたのはなぜですか?

乾杯、フェリックス

どのように解決するのですか?

C++ が参照の再束縛を許さない理由は、Stroustrup の "Design and Evolution of C++" に記載されています。

初期化後に参照が参照するものを変更することはできない。つまり、C++ の参照は一度初期化されると、後で別のオブジェクトを参照するようにすることはできず、再バインドすることはできません。私は過去にAlgol68の参照に噛まれたことがあります。 r1=r2 を通して割り当てることができます。 r1 を通して参照されるオブジェクトに割り当てるか、新しい参照値を r1 (に新しい参照値を代入する(再バインディング r1 ) のタイプに応じて r2 . C++ではこのような問題を避けたいと思いました。