类中的内联函数成员

时间:2012-02-21 00:31:36

标签: c++ class methods

我知道当函数定义对于性能来说很小并且节省编译时间时,将内联函数(正常函数而不是类中的方法)声明为内联是一种很好的做法。但是如何在类中内联方法 我不理解类中内联方法的概念?如何定义它们以及它们如何工作。

3 个答案:

答案 0 :(得分:54)

  

但是类中的内联方法怎么样?

内联函数的两种语法(使用显式inline和在类定义中定义成员函数)仅提供有关编译器内联的提示。从效果的角度来看,它们是平等的。

如果在类声明中定义了一个成员函数,后者的可读性应该是你主要考虑的问题:对于具有多行实现细节的垃圾类接口来说真的很痛。因此,如果你的成员函数是多个语句,请避免这样做:return stuff或简单转发应该没问题,但通常不会超过这个。

class MyClass
{
public:
    int f() const { return m_i; }
    int g() const;

private:
    int m_i;
};

inline int MyClass::g() const
{
    return m_i;
}

// both member-functions behave equally (except for naming)

答案 1 :(得分:20)

在类中指定函数/过程为inline,暗示编译器不是创建代码来调用函数并传递参数,而是将函数的内容放在调用点。< / p>

当在不必传递参数的情况下执行函数变得更有效时,它可以提高已编译二进制文件的性能。它也可能对性能造成损害,因为重复每个调用位置的函数中的代码会导致膨胀,从而减少代码在更快的高速缓存中找到的可能性。

答案 2 :(得分:18)

为编译器提供内联类函数有两种选择:

(1)在声明中定义一个函数(在头文件中)

class Human {

public:

    Human(const char* name);
    Human();

    // is implicit inline
    void lookAt(const char* name) const {
        std::cout << "I'm looking at " << name << std::endl;

    }

private:
    char _name[30]; 

}; 

(2)在函数定义中明确使用inline关键字(在头文件中)

    // is explicit inline 
    inline void lookAt(const char* name) const {
        std::cout << "I'm looking at " << name << std::endl;

    }