2017年11月01日
《その101》 "異なる型のオブジェクト" や "定数" への参照
"異なる型のオブジェクト" や "定数" への参照
異なる型のオブジェクトへの参照や、定数への参照は const でなけれはなりません。
例えば、次の例では (A), (B) はエラーになります。
(A)の場合は、int型の q は double型の b への参照。
また、(B)の場合は、int型の r は定数 3 への参照です。
このように、異なる型のオブジェクトへの参照や、定数への参照は const でないとエラーになります。
int a = 1;
double b = 2.0;
int& p = a; // (@)
int& q = b; // (A) エラー
int& r = 3; // (B) エラー
次のプログラムは、以上のことを踏まえて作ったものです。
#include <iostream>
using namespace std;
class C {
int x_;
public:
C(int x = 0) : x_(x) { } // ※ 変換コンストラクタ
operator int() const { return x_; } // ※ 変換関数
};
int main() {
int a = 1;
double b = 2.0;
int& p = a; // (@)
const int& q = b; // (A)
const int& r = 3; // (B)
const C& s = 4; // (C)
cout << p << '\n';
cout << q << '\n';
cout << r << '\n';
cout << s << '\n';
}
このプログラムの
const C& s = 4; // (C)
では、C型のクラス s にint型定数 4 を代入しています。
C型の変数への代入であれば、変換コンストラクタが働くので 全く問題ありません。
上の場合は、そうではなくて、C&型の s への代入です。
C& s = 4;
は定数 4 への参照ですから、異なるオブジェクトへの参照ということになり、
const C& s = 4;
でないとエラーになります。
--
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/6920151
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック