什么是内联函数??
同时请教C++面向对象思想体现在什么地方? 问题点数:0、回复次数:18Top
1 楼greening(逆风寒翎)回复于 2003-05-02 04:47:33 得分 0
在程序调用点就地展开的函数,节省调用函数的开销。Top
2 楼swotcoder(苦 丁 www.help2u.org)回复于 2003-05-02 04:53:56 得分 0
inline 申明的C99的新特性(C++早有了?) 要注意只能在同一个文件中申明,调用。
这种类型的函数最大的特点,他不是调用。而是复制,当一个内联函数被调用的时候会将函数体整个复制到调用到位置。这种函数不要用的太多,虽然都说快,但那时只有1、2个的时候!Top
3 楼wangyangcheng(矛盾)回复于 2003-05-02 08:07:07 得分 0
一般在頭文件中申明﹐然后在代碼文件中使用時compiler直接把它"copy"一份在調用點了。
提高了效率﹐多是一些共用的函數。Top
4 楼skyse(为VC而死)回复于 2003-05-02 09:26:31 得分 0
回复人: swotcoder(苦 丁)
inline 申明的C99的新特性(C++早有了?) 要注意只能在同一个文件中申明,调用。
这种类型的函数最大的特点,他不是调用。而是复制,当一个内联函数被调用的时候会将函数体整个复制到调用到位置。这种函数不要用的太多,虽然都说快,但那时只有1、2个的时候!
并且函数要比较小,并且比较常被调用,才把它定义为内联函数!Top
5 楼EnjoySun(朝阳)回复于 2003-05-02 09:42:25 得分 0
按照你的说法,它与宏在本质上是没有差别的?Top
6 楼firstCCC(分特)回复于 2003-05-02 10:03:51 得分 0
与宏有差别
因为inline是直接引用
但宏有时会自己先运算一下Top
7 楼ymlianming(ymlianmjing)回复于 2003-05-02 11:10:22 得分 0
内联函数也称内嵌函数,它主要解决程序的运行效率。
#####################问题#########################################
函数调用需要建立栈内存环境,进行参数传递,并产生程序执行转移,这些转移都需要时间开销。
有些函数在程序中使用率较高,但代码却很短。
我们可以在程序当中用表达式替换函数调用,但是降低了函数的可读性。
######################解决方法#################################################
使用内联函数
内联函数必须在被调用前声明或定义。因为内联函数的代码必须在被替换之前已经声称被替换的代码。
注意:
1。递归函数是不能用来做内联函数的。
2。内联函数只适合于1-5行的小函数。对于一个含有很多语句的大函数,函数调用和返回的开销相对来说是微不足道的。
#include<iostream.h>
inline int isnumber(char); // inline 函数声名
void main()
{
char c;
while((c=cin.getc())!='\n')
{
if( isnumber(c) ) //调用一个小函数
cout<<"you entered a digit \n";
else
cout<<"you entered a non-digit \n";
}
}
int isnumber (char ch) //此处无inline,视为inline
{
return (ch>='0'&& ch<='9')?1:0;
}
Top
8 楼fullsail(远航)回复于 2003-05-02 13:31:49 得分 0
1.inline函数可以加快运行程序速度,(有的书说得是大大)其长度不一定有限制。但内联的权利在编译器。C++的标准没有确定如何实现inline。
2.inline函数声明和定义最好的都写在.h文件中,特别是在多工程的程序中。
3.inline函数只是一种声明,但决定是否将此函数真正内联的权利在编译器,不是所有的编译器都支持inline函数。
4.不是所有的函数都能内联,递规,虚函数,都不能。
Top
9 楼swotcoder(苦 丁 www.help2u.org)回复于 2003-05-03 06:47:09 得分 0
inline 是C++ 标准(ISO/IEC 14882;1998)定义的特性,其设计原型正是来自C语言的宏,如果你的宏具备函数的行为,我建议你将采用老式方式#define定义的宏转化为内联函数。另外,将老式方法#define定义的常量改用const申明。使用内联函数需要在函数声明、函数定义时使用inline关键词。目前,这两个特性在C99中标准中已经加入,因此这里的建议同样适用于C程序员。
:)
Top
10 楼swotcoder(苦 丁 www.help2u.org)回复于 2003-05-03 07:12:44 得分 0
牵扯到语言标准解释这个东西是什么,那么东西是什么我觉得很头痛。如果要我用一句话归结什么是inline,我会说,"The inline functons as fast as a macro,but it't not a macro."Top
11 楼helpall(was jl)回复于 2003-05-03 07:36:33 得分 0
切记一点:
即使你声明一个inline函数,最终的代码中该函数不一定是内联的, 很多考试都会考到这点。
就如fullsail(远航)兄所述的第三点Top
12 楼swotcoder(苦 丁 www.help2u.org)回复于 2003-05-03 08:07:33 得分 0
>切记一点:
> 即使你声明一个inline函数,最终的代码中该函数不一定是内联的, 很多考试都会考到这
> 点。
这没错,虽然你说的不规范。如果考试中出现的话,应该是考察学生会标准支援度的了解。
>就如fullsail(远航)兄所述的第三点
他的第三点是错的,关键不在于编译器是否实现。而在于你的内联函数体的设计,当函数体多大或者层次过多时,编译器有权将其转化为普通函数处理(这是标准建议部分)。如果说编译器不支持的话,那么inline关键词你连用都没得用,直接报错。
Top
13 楼tchatcha(沧桑,孤独,浪漫,但执着!)回复于 2003-05-03 08:15:03 得分 0
不知道帮你顶一下涨涨人气
Top
14 楼gwsr(咩咩)回复于 2003-05-03 11:09:14 得分 0
内联函数也不能用的太多吧,经常调的提提速还行Top
15 楼ybsoft(☆☆☆☆☆)回复于 2003-05-04 16:43:37 得分 0
内联函数是怎么实现高效率的??Top
16 楼yiminggw(某某鸟人)回复于 2003-05-04 17:02:06 得分 0
inline函数一般只用在几行的小程序上
太大速度反而下降Top
17 楼wahao(哇好)回复于 2003-05-04 17:23:39 得分 0
C++面向对象思想体现是不是体现在类的运用上面,请牛人指点!
还有不是你用inline定义的函数就是inline函数了
还要编译器审定,如果它认为你的函数太大或复杂,
编译器只把它当作一般的函数,
只有它小简单的时候才是。Top
18 楼gwsr(咩咩)回复于 2003-05-06 13:23:50 得分 0
>>C++面向对象思想体现是不是体现在类的运用上面,请牛人指点!
我不是牛人,现在开发也一直不用C++,只是爱好它,所以常来看看。
我认为:最能体现OO的是java语言,而C++是一种非常低级的语言,唯有利用多多地利用类库才能写出高层次的程序来,即要多多使用现成的标准库。引用国际著名C++专家Rarbara Moo的话说:“库优于语言细节”。Top




