Учитывая следующий пример кода:
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()
предполагает дополнительный уровень косвенности, так как нам нужно следовать ссылке на комнату. Это правильно? Будет ли эта дополнительная косвенность удалена, если вызов можно будет встроить (либо посредством явного встраивания, либо путем оптимизации всей программы на уровне компоновщика)? Или, другими словами, можно ли ускорить функцию TurnOn в Switch, изменив ее на:
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(); }
}
Или, в более общем смысле, если имеется ссылка на объект, существует ли уровень косвенности, менее связанный с доступом к его членам напрямую через ссылку, а не через ссылку, а затем член?
Спасибо
switch
– это ключевое слово, его нельзя использовать как переменную. - person Nawaz   schedule 05.12.2011