CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

什么是内联函数??

楼主ybsoft(☆☆☆☆☆)2003-05-02 02:44:06 在 C/C++ / C语言 提问

同时请教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

相关问题

  • 构造函数是内联函数吗?
  • 内联函数与普通函数有什么区别,另外if和#if有什么区别
  • 关于内联函数
  • 内联函数的问题。
  • 内联函数的问题
  • 关于内联函数
  • 问题解决马上解贴~~~ 什么是"标量用户定义函数"和"内联用户定义函数"
  • 内联函数和宏有什么区别?该怎么取舍?
  • 静态成员函数能做内联函数吗?
  • [讨论]虚函数可以是内联函数吗?

关键词

  • c++
  • 函数
  • 编译器
  • 代码
  • 面向对象
  • 文件
  • 语言
  • 调用
  • 内联
  • 申明

得分解答快速导航

  • 帖主:ybsoft

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo