次のコード例を考えます。
class Room {
Room() : switch(*this) { }
Lamp lamp;
Switch switch;
void TurnOn() { lamp.TurnOn(); }
}
class Switch {
Switch(Room& room) : room(room) { }
Room& room;
void TurnOn() { room.lamp.TurnOn(); }
}
ここでの私の理解では、TurnOn()部屋への参照に従う必要があるため、2 番目の方法には余分なレベルの間接性が含まれます。これは正しいです?呼び出しをインライン化できる場合 (明示的なインライン化またはリンカー レベルでのプログラム全体の最適化のいずれか)、その余分な間接化は削除されますか? または、別の言い方をすれば、Switch の TurnOn 機能を次のように変更することで高速化できます。
class Room {
Lamp lamp;
Switch switch;
Room() : switch(*this,lamp) { }
void TurnOn() { lamp.TurnOn(); }
}
class Switch {
Room& room;
Lamp& lamp;
Switch(Room& room,Lamp& lamp) : room(room),lamp(lamp) { }
void TurnOn() { lamp.TurnOn(); }
}
または、より一般的には、オブジェクトへの参照を保持している場合、参照を介してメンバーに直接アクセスするのではなく、参照を介してメンバーに直接アクセスすることにあまり関与しないレベルの間接性はありますか?
ありがとう