给定以下示例代码:
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()
涉及额外的间接级别,因为我们需要遵循对房间的引用。它是否正确?如果可以内联调用(通过显式内联或链接器级别的整个程序优化),是否会删除额外的间接调用?或者,换一种说法,是否可以通过将 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(); }
}
或者,更一般地说,如果持有对对象的引用,是否存在通过引用直接访问其成员而不是通过引用然后访问成员的间接级别?
谢谢