美文网首页
C++类里面的哪些成员函数是内联函数?

C++类里面的哪些成员函数是内联函数?

作者: 普朗tong | 来源:发表于2020-05-03 22:25 被阅读0次

C++类里面的哪些成员函数是内联函数

1.隐式内联

class Person
{
public:
    Person(const string &name)
    {
        Name = name;
    }
    void printName()//printName 定义在类里面是隐式内联函数
    {
        cout << Name << endl;
    }
private:
    string Name;
};

2.在类里面显示声明,在类外面定义

class Person
{
public:
    Person(const string &name)
    {
        Name = name;
    }
    inline void printName();//成员被函数前加了inline是显式内联函数
    //在类里面显式声明
private:
    string Name;
};
void Person::printName()
{//在类外面定义
    cout << Name << endl;
}

3.“追加”内联。表示在类里面没有显式声明,在类外显示定义了内联。

class Person
{
public:
    Person(const string &name)
    {
        Name = name;
    }
    void printName();
    //在类里面没有显式声明
private:
    string Name;
};
inline void Person::printName()//成员被函数前加了inline是显式内联函数
{//在类外面显式定义
    cout << Name << endl;
}

4.第四种常见的成员函数不是内联函数。定义不再类里面,且声明和定义都没有inline。

class Person
{
public:
    Person(const string &name)
    {
        Name = name;
    }
    void printName();
    //在类里面没有显式声明
private:
    string Name;
};
void Person::printName()//不是内联函数
{//在类外面也没有显式定义
    cout << Name << endl;
}

C++内联函数

c 语言中有宏函数的概念。宏函数的特点是内嵌到调用代码中去,避免了函数调用的开销。

但是由于宏函数的处理发生在预处理阶段,缺失了语法检测和有可能带来的语意差错。

比如以下几种情况:

//定义一个计算平方的宏函数
#define SQUARE(X) (X*X)
//这不是通过传递参数,而是通过文本替换的方式来实现的
a=SQUARE(5.0)      //会被替换为5.0*5.0
b=SQUARE(4.5+7.5)  //会被替换为4.5+7.5*4.5+7.5
c=SQUARE(c++)      //会被替换为c++*c++
//上述示例只有第一个能正常工作,可以通过使用括号来改进
#define SQUARE(X) ((X)*(X)
//但依然存在问题:不能按值传递,如第三个中,会先将c++然后计算c平方,不符合预期结果(先计算c平方,再指向c++)

因此有了内联函数(inline function)

要使用该特性,必须采取下列措施之一:

  • 在函数声明前加关键字inline;

  • 在函数定义前加关键字inline;

    通常做法是省略原型,将整个定义(函数头和实现代码)放在函数声明的地方。

评价

优点:避免函数调用时的额外开销

缺点:由于内联函数的函数体在代码段中会出现多个“副本”,因此会增加代码段的空间。

本质:以牺牲代码段空间为代价,提高程序的运行时间的效率。

适用场景:函数体很“小”,且被“频繁”调用。

参考
C++类里面的哪些成员函数是内联函数?
C++ Prime Plus

相关文章

  • C++类里面的哪些成员函数是内联函数?

    C++类里面的哪些成员函数是内联函数 1.隐式内联 2.在类里面显示声明,在类外面定义 3.“追加”内联。表示在类...

  • 1.2.07_C++ 内联函数

    C++ 类 & 对象 C++ 内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代...

  • Kotlin 内联函数 inline

    Kotlin 中新增了「内联函数」,内联函数起初是在 C++ 里面的。 那在 Kotlin 中加入内联函数,是有什...

  • C++内联函数inline

    C++内联函数inlineC++ 内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数...

  • C++ 的inline关键字

    首先理解内联函数: ​ C++ 内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器...

  • C++ - 成员函数的重载及内联成员函数

    内联成员函数 inline+ 成员函数 整个函数体出现在类定义内部 成员函数的重载及参数缺省 重载成员函数 成员函...

  • 面向对象

    面向对象技术的基本概念是:对象,类,继承。C++中的空类默认产生哪些类成员函数?默认产生构造函数,析构函数,拷贝构...

  • [C++之旅] 9 内联函数、类内定义与类外定义

    [C++之旅] 9 内联函数、类内定义与类外定义 内联函数:编译时将函数体代码和实参代替函数调用语句。在函数前加i...

  • [初学C++]构造和析构函数

    什么是构造函数定义C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数.C++对类提...

  • 类&对象(一)

    C++成员函数 类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类成员函数是类的...

网友评论

      本文标题:C++类里面的哪些成员函数是内联函数?

      本文链接:https://www.haomeiwen.com/subject/rzajghtx.html