RT
内联不是直接扩展吗??
像这样扩展之后一样不长,能否调用呢?
请问,调用了内联函数后,此内联函数还能内联吗?
C++内联函数可以调用内联函数吗
答案:5 悬赏:0
解决时间 2021-03-22 12:57
- 提问者网友:追忆成伤
- 2021-03-21 17:26
最佳答案
- 二级知识专家网友:风格单纯
- 2021-03-21 17:52
称为成员函数。前面讲过一般的成员函数,它是根据某种类的功能的需要来定义的。又讲述了一些特殊的成员函数:构造函数、析构函数、拷贝初始化构造函数等。还有一些成员函数后面还会介绍。
成员函数除了说明和定义在类中之外,还有些什么特性,这是本节讨论的问题。
一、内联性和外联函数
类的成员函数可以分为内联函数和外联函数。内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。而说明在类体内,定义在类体外的成员函数叫外联函数。外联函数的函数体在类的实现部分。
内联函数在调用时不是像一般的函数那样要转去执行被调用函数的函数体,执行完成后再转回调用函数中,执行其后语句,而是在调用函数处用内联函数体的代码来替换,这样将会节省调用开销,提高运行速度。
内联函数与前面讲过的带参数的宏定义进行一下比较,它们的代码效率是一样的,但是内联函数要优于宏定义,因为内联函数遵循函数的类型和作用域规则,它与一般函数更相近,在一些编译器中,一旦关上内联扩展,将与一般函数一样进行调用,调试比较方便。
外联函数变成内联函数的方法很简单,只要在函数头前面加上关键字inline就可以了。
#include <iostream>
using namespace std;
class A
{
public:
A(int x, int y) //内联函数
{
X=x;Y=y;
}
int a() //内联函数
{
return X;
}
int b() //内联函数
{
return Y;
}
int c();
int d();
private:
int X,Y;
};
//inline定义内联函数
inline int A::c()
{
return a()+b();
}
inline int A::d()
{
return c();
}
void main()
{
A m(3,5);
int I=m.d();
cout<<"d()return:"<<I<<endl;
}
输出结果:
d()return:8
说明:类A中,直接定义了3个内联函数,又使用inline定义了2个内联函数。内联函数一定要在调用之前进行定义,并且内联函数无法递归调用。
区别就在于,运行时侯的效率与定义的方法不同。
成员函数除了说明和定义在类中之外,还有些什么特性,这是本节讨论的问题。
一、内联性和外联函数
类的成员函数可以分为内联函数和外联函数。内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。而说明在类体内,定义在类体外的成员函数叫外联函数。外联函数的函数体在类的实现部分。
内联函数在调用时不是像一般的函数那样要转去执行被调用函数的函数体,执行完成后再转回调用函数中,执行其后语句,而是在调用函数处用内联函数体的代码来替换,这样将会节省调用开销,提高运行速度。
内联函数与前面讲过的带参数的宏定义进行一下比较,它们的代码效率是一样的,但是内联函数要优于宏定义,因为内联函数遵循函数的类型和作用域规则,它与一般函数更相近,在一些编译器中,一旦关上内联扩展,将与一般函数一样进行调用,调试比较方便。
外联函数变成内联函数的方法很简单,只要在函数头前面加上关键字inline就可以了。
#include <iostream>
using namespace std;
class A
{
public:
A(int x, int y) //内联函数
{
X=x;Y=y;
}
int a() //内联函数
{
return X;
}
int b() //内联函数
{
return Y;
}
int c();
int d();
private:
int X,Y;
};
//inline定义内联函数
inline int A::c()
{
return a()+b();
}
inline int A::d()
{
return c();
}
void main()
{
A m(3,5);
int I=m.d();
cout<<"d()return:"<<I<<endl;
}
输出结果:
d()return:8
说明:类A中,直接定义了3个内联函数,又使用inline定义了2个内联函数。内联函数一定要在调用之前进行定义,并且内联函数无法递归调用。
区别就在于,运行时侯的效率与定义的方法不同。
全部回答
- 1楼网友:没感情的陌生人
- 2021-03-21 23:23
可以的,内联函数也是函数,函数本身就可以调用函数。
- 2楼网友:情战辞言
- 2021-03-21 22:15
可以的,内联函数本身就是C的宏转化过来的而已,调用是可以的,不用像宏一样那么麻烦
- 3楼网友:情窦初殇
- 2021-03-21 20:56
c++的inline关键字只是对编译器提出inline的建议。
不是所有加上了inline关键字的函数都能成为inline函数。
而有些没有加inline关键字的函数也可能被编译器变成了内联函数。
这应该是一个取决于编译器问题。
- 4楼网友:夢想黑洞
- 2021-03-21 19:22
问题。
函数是一种更高级的抽象。它的引入使得编程者只关心函数的功能和使用方法,而不必关心函数功能的具体实现;函数的引入可以减少程序的目标代码,实现程序代码和数据的共享。但是,函数调用也会带来降低效率的问题,因为调用函数实际上将程序执行顺序转移到函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。特别是对于一些函数体代码不是很大,但又频繁地被调用的函数来讲,解决其效率问题更为重要。引入内联函数实际上就是为了解决这一问题。
在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替换。显然,这种做法不会产生转去转回的问题,但是由于在编译时将函数休中的代码被替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间代销上不象函数调用时那么大,可见它是以目标代码的增加为代价来换取时间的节省。
内联函数的定义方法
定义内联函数的方法很简单,只要在函数定义的头前加上关键字inline即可。内联函数的定义方法与一般函数一样。如:
inline int add_int (int x, int y, int z)
{
return x+y+z;
}
在程序中,调用其函数时,该函数在编译时被替代,而不是像一般函数那样是在运行时被调用。
使用内联函数应注意的事项
内联函数具有一般函数的特性,它与一般函数所不同之处公在于函数调用的处理。一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换。在使用内联函数时,应注意如下几点:
1.在内联函数内不允许用循环语句和开关语句。
2.内联函数的定义必须出现在内联函数第一次被调用之前。
3.本栏目讲到的类结构中所有在类说明内部定义的函数是内联函数。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯