在OOP中,调用函数返回值或直接调用值是否更快?

时间:2018-04-17 16:21:43

标签: c++ oop object

如果我有课程File

class File {
    public:
        File(int length);
        getLength();  //returns length int value
        int length;
}

File.value之间(暗示它不是私有/其他任何东西,因此可以直接访问)和File.getValue()之间,有哪些选项会影响性能?

1 个答案:

答案 0 :(得分:3)

如果没有优化,吸气剂的成本会更高。可以使用单个'mov'指令访问一个值,但函数调用(对于getter)将需要更多指令(至少需要额外的'call'和'ret')。

如果将getter定义为'inline',那么大多数编译器将删除函数调用,性能将与直接访问成员变量相同。 “内联”方法和函数很可能在头文件中实现(因为每个翻译单元都需要访问函数源)。

如果启用了优化,大多数现代编译器甚至会将未标记为“内联”的内联getter。有些编译器会在同一模块(.cpp文件)中在线删除调用函数调用。至少Visual C ++删除了函数调用,即使它是从另一个模块调用的,甚至是项目,如果“链接时间代码生成”(LTCG)对两个部分都有效。

注意:即使现代编译器不使用'inline'关键字来决定是否应该内联一个方法,它仍然可以避免在头文件中实现方法时通常会遇到的“多个定义”链接器错误。用于多个模块。

如果对成员变量的公共访问权限适用于您,则很可能根本不需要getter(和/或setter)。