hands さんが書きました: ↑6年前
例えばconst string& tという部分のtは参照オブジェクトでよろしいのでしょうか。
この場合、何を何で初期化してるのでしょうか、titleをtで初期化でしょうか、それとも代入でしょうか。
「参照オブジェクト」という用語が私には理解できません。
const string& t と仮引数宣言された t は参照です。
メンバ関数 store の呼び出し元に stringオブジェクトが存在し、
そのオブジェクトを参照します。
title = t; により、呼び出し元の stringオブジェクトの値が
title に代入(コピー)されます。
呼び出し元は、
book1.store("Dune", ...
となっていて、
"Dune" は stringオブジェクトではないので、
ここで、string(const char *) というコンストラクタにより
一時的な stringオブジェクトが生成されてから
store が呼ばれます。
void store(string t, string name, int num); と宣言しても
プログラムは正しく動きます。
この場合、t は参照ではなく、stringオブジェクトです。
呼び出し時に string(const char *) コンストラクタで
t が初期化され、
title = t; により、t の値が title に代入されます。
呼び出し元が
string dune = "Dune";
book1.store(dune, ...
となっているとしたら、
const string& t の場合、t は dune そのものですが、
string t の場合、t は
コピーコンストラクタstring(const string&) により
dune のコピーとして初期化されます。