如果我有课程File
class File {
public:
File(int length);
getLength(); //returns length int value
int length;
}
在File.value
之间(暗示它不是私有/其他任何东西,因此可以直接访问)和File.getValue()
之间,有哪些选项会影响性能?
答案 0 :(得分:3)
如果没有优化,吸气剂的成本会更高。可以使用单个'mov'指令访问一个值,但函数调用(对于getter)将需要更多指令(至少需要额外的'call'和'ret')。
如果将getter定义为'inline',那么大多数编译器将删除函数调用,性能将与直接访问成员变量相同。 “内联”方法和函数很可能在头文件中实现(因为每个翻译单元都需要访问函数源)。
如果启用了优化,大多数现代编译器甚至会将未标记为“内联”的内联getter。有些编译器会在同一模块(.cpp文件)中在线删除调用函数调用。至少Visual C ++删除了函数调用,即使它是从另一个模块调用的,甚至是项目,如果“链接时间代码生成”(LTCG)对两个部分都有效。
注意:即使现代编译器不使用'inline'关键字来决定是否应该内联一个方法,它仍然可以避免在头文件中实现方法时通常会遇到的“多个定义”链接器错误。用于多个模块。
如果对成员变量的公共访问权限适用于您,则很可能根本不需要getter(和/或setter)。