次のコードがあります。
struct Y {
string& s1; //string s1; throws no error
Y( string src ) : s1(src) { cout<<"s1: "<<s1<<endl; }
void show(){ cout<<s1<<endl; }
};
int main()
{
Y y1("Krypton");
y1.show(); //run-time error
}
y1.show() は「Krypton」を表示するはずですが、実行時エラーが発生します (y1.show() が呼び出されているときに s1 が初期化されていないためですか?)。
Q1. コンストラクターの初期化リストで既に初期化されているのに、s1 が初期化されないのはなぜですか? Q2. 文字列 s1 を使用しても同じエラーが発生しないのはなぜですか。参照の代わりに?
どんな助けでも大歓迎です。
よろしく、
ジェイ。