当getter返回引用时,访问成员变量的代价有多高?
例如,如果一个类需要经常使用这样的访问器,将该引用存储在需要使用它的类中并仅初始化一次,效率会提高多少?
当getter返回引用时,访问成员变量的代价有多高?
例如,如果一个类需要经常使用这样的访问器,将该引用存储在需要使用它的类中并仅初始化一次,效率会提高多少?
一般情况下,函数不应该返回引用。原因是这会使成员变量对外公开 - 如果你想这样做,请将其设置为公共成员。
class foo {
int bar;
public:
int& get_bar() { return bar; } // this is silly! Just make bar public!
}
无论如何,如果像 get_bar
这样简单,它将被内联为类似 foo.bar
的东西。正如 Oli 所指出的那样,您也可以将其作为常量引用,但对于像 int
这样的小型类型,您应该继续按值返回。
对于更昂贵的类型,引用开始变得有益。您可以假设:
例如:
foo x;
x.get_value().func(); // calls copy constructor at least once and destructor
x.get_reference().func(); // may require dereference when using
const int &
。但更重要的是,这将内部细节和接口耦合在一起。(不过我不会给它点赞,因为它并没有回答问题...) - Oliver Charlesworth