【发布时间】:2012-01-13 09:53:55
【问题描述】:
给出以下示例代码:
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(); }
}
或者,更一般地说,如果持有对对象的引用,是否存在通过引用直接访问其成员而不是先通过引用再访问成员的间接级别?
谢谢
【问题讨论】:
-
switch是关键字,不能作为变量使用。 -
不要使用 switch(实际上,你不能。它是为 switch 构造保留的。)
-
抱歉,选错了一个例子……我显然在考虑电灯开关
-
如有疑问,请测量。除非你有具体的理由,否则不要以性能的名义丑化你的代码。
标签: c++ indirection