什么叫内联函数
1个回答
展开全部
问题一:C++中内联函数是什么意思? 内联函数具有一般函数的特性,它与一般函数所不同之处只在于函数调用的处理。一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换。在使用内联函数时,应注意如下几点:
1.在内联函数内不允许用循环语句和开关语句。
如果内联函数有这些语句,则编译将该函数视同普通函数那样产生函数调用代码,递归函数(自己调用自己的函数)是不能被用来做内联函数的。内联函数只适合于只有1~5行的小函数。对一个含有许多语句的大函数,函数调用和返回的开销相对来说微不足道,所以也没有必要用内联函数实现。
2.内联函数的定义必须出现在内联函数第一次被调用之前。
3.本栏目讲到的类结构中所有在类说明内部定义的函数是内联函数。
问题二:什么是内联函数 楼主有意思,我觉得楼上的答案已经够“官方”的了么...
内联函数就是小型函数,牺牲空间来节省函数调用的开销,一般用作比较小的函数,即函数内部没有循环、开关语句等。内联函数被发明出来就是为了取代C中的宏,因为宏是单纯的替换而没有类型检查所以经常出毛病,比如:
#define MAX(a, b) (a) > (b) ? (a) : (b)
如果你在代码中这样写:
int a = 5, b = 10;
int max = MAX(++a, b); a自增了两次
int max = MAX(++a, b+10); a自增了一次
a的自增次数竟然由与其比较的数字的大小来决定!?这肯定不是你想要的结果。
所以最好的办法是这样:
template
inline T max(const T& t1, const T& t2)
{
return t1 > t2 ? t1 : t2;
}
这样的话如果你这样写:
int max = max(a, b);
其实就被替换为了:
int max = a > b ? a : b;
虽然看起来宏差不多,但是比宏多了类型检查,而且内联函数使用的是真正的函数的特性,而不是宏的function-like,模拟函数的功用。
内联函数是为频繁使用、并且过程不大的小型函数设计的,我说了它是以牺牲代码空间来节省函数调用的开销,内联函数使用不当就会造成代码膨胀,所以使用它一定要小心。
建议(书上抄的):
For function-like macros, prefer inline functions to #defines.
楼主有时间还是多看看书好,这里毕竟专家不多,而且也没多少人有太多的时间和精力来帮你解决这些基础性的问题,好好地读几本书吧,一定会让你获益匪浅的...
问题三:内联函数和成员函数的区别是什么? 成员函数是属于对象的, 静态函数才是属于类的. 如果在类体内定义的函数,则会被编译器默认为内联函数, 如果把函数的定义放在外面,且在函数的声明的时候加上关键字inline,则函数变为内联函数,否则为成员函数.
问题四:内联函数的定义 内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。
问题五:C++内联函数具体有什么作用? 内联函数在编译的时候将不进行函数调用,编译器将内联函数的代码粘贴在调用(形式上调用)处,可以提高效率。
内联函数只能是代码很少很简单的函数,因为如果一个很大很复杂的函数即使设为内联,编译器也将自动设置该函数为非内联。
问题六:内联函数与C语言函数调用有什么区别?? 首先讲一下函数调用,C语言函数调用的过程是:
①将参数压栈,一般是从右往左。
②使用call指令,调用函数。call指令会将当前指令所在的内存位置压栈以便函数结束后返回。
③进入函数体(跳转到另一块内存中),执行,执行完后,使用通用寄存器或者栈来存储返回值,使用ret指令返回。
可以看到,函数调用是发生了跳转的,考虑一下跳转大小和指令预取这些东西,调用函数会加长执行时间。如果只是调用几次,时间差异可能感觉不出来,不是特别情况也不需要在乎。但函数被反复调用时,性能就会差很多。
所以有了内联函数这玩意,编译器会直接将对内联函数的调用扩展为整个函数的代码(几种情况除外,这个看书,我也记不住),也就是说,不会使用call和ret指令。所以,这样做的缺点就是每个调用函数的位置都被扩展成了函数的代码,会加大生成的可执行文件的大小。所以才会提倡,将调用频繁而函数本身却很小的函数声明为内联函数。
它们的区别就在这里,跳转和不跳转,牺牲时间还是牺牲空间。
问题七:C++中,什么是隐式内联函数?能举个例子吗 class A{ ..... int fun_inline(){ return 0;} .....};就是实现直接写在类的声明中了的函数
问题八:C++中内联函数是什么意思? 内联函数具有一般函数的特性,它与一般函数所不同之处只在于函数调用的处理。一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换。在使用内联函数时,应注意如下几点:
1.在内联函数内不允许用循环语句和开关语句。
如果内联函数有这些语句,则编译将该函数视同普通函数那样产生函数调用代码,递归函数(自己调用自己的函数)是不能被用来做内联函数的。内联函数只适合于只有1~5行的小函数。对一个含有许多语句的大函数,函数调用和返回的开销相对来说微不足道,所以也没有必要用内联函数实现。
2.内联函数的定义必须出现在内联函数第一次被调用之前。
3.本栏目讲到的类结构中所有在类说明内部定义的函数是内联函数。
问题九:什么是内联函数 楼主有意思,我觉得楼上的答案已经够“官方”的了么...
内联函数就是小型函数,牺牲空间来节省函数调用的开销,一般用作比较小的函数,即函数内部没有循环、开关语句等。内联函数被发明出来就是为了取代C中的宏,因为宏是单纯的替换而没有类型检查所以经常出毛病,比如:
#define MAX(a, b) (a) > (b) ? (a) : (b)
如果你在代码中这样写:
int a = 5, b = 10;
int max = MAX(++a, b); a自增了两次
int max = MAX(++a, b+10); a自增了一次
a的自增次数竟然由与其比较的数字的大小来决定!?这肯定不是你想要的结果。
所以最好的办法是这样:
template
inline T max(const T& t1, const T& t2)
{
return t1 > t2 ? t1 : t2;
}
这样的话如果你这样写:
int max = max(a, b);
其实就被替换为了:
int max = a > b ? a : b;
虽然看起来宏差不多,但是比宏多了类型检查,而且内联函数使用的是真正的函数的特性,而不是宏的function-like,模拟函数的功用。
内联函数是为频繁使用、并且过程不大的小型函数设计的,我说了它是以牺牲代码空间来节省函数调用的开销,内联函数使用不当就会造成代码膨胀,所以使用它一定要小心。
建议(书上抄的):
For function-like macros, prefer inline functions to #defines.
楼主有时间还是多看看书好,这里毕竟专家不多,而且也没多少人有太多的时间和精力来帮你解决这些基础性的问题,好好地读几本书吧,一定会让你获益匪浅的...
问题十:内联函数的定义 内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。
1.在内联函数内不允许用循环语句和开关语句。
如果内联函数有这些语句,则编译将该函数视同普通函数那样产生函数调用代码,递归函数(自己调用自己的函数)是不能被用来做内联函数的。内联函数只适合于只有1~5行的小函数。对一个含有许多语句的大函数,函数调用和返回的开销相对来说微不足道,所以也没有必要用内联函数实现。
2.内联函数的定义必须出现在内联函数第一次被调用之前。
3.本栏目讲到的类结构中所有在类说明内部定义的函数是内联函数。
问题二:什么是内联函数 楼主有意思,我觉得楼上的答案已经够“官方”的了么...
内联函数就是小型函数,牺牲空间来节省函数调用的开销,一般用作比较小的函数,即函数内部没有循环、开关语句等。内联函数被发明出来就是为了取代C中的宏,因为宏是单纯的替换而没有类型检查所以经常出毛病,比如:
#define MAX(a, b) (a) > (b) ? (a) : (b)
如果你在代码中这样写:
int a = 5, b = 10;
int max = MAX(++a, b); a自增了两次
int max = MAX(++a, b+10); a自增了一次
a的自增次数竟然由与其比较的数字的大小来决定!?这肯定不是你想要的结果。
所以最好的办法是这样:
template
inline T max(const T& t1, const T& t2)
{
return t1 > t2 ? t1 : t2;
}
这样的话如果你这样写:
int max = max(a, b);
其实就被替换为了:
int max = a > b ? a : b;
虽然看起来宏差不多,但是比宏多了类型检查,而且内联函数使用的是真正的函数的特性,而不是宏的function-like,模拟函数的功用。
内联函数是为频繁使用、并且过程不大的小型函数设计的,我说了它是以牺牲代码空间来节省函数调用的开销,内联函数使用不当就会造成代码膨胀,所以使用它一定要小心。
建议(书上抄的):
For function-like macros, prefer inline functions to #defines.
楼主有时间还是多看看书好,这里毕竟专家不多,而且也没多少人有太多的时间和精力来帮你解决这些基础性的问题,好好地读几本书吧,一定会让你获益匪浅的...
问题三:内联函数和成员函数的区别是什么? 成员函数是属于对象的, 静态函数才是属于类的. 如果在类体内定义的函数,则会被编译器默认为内联函数, 如果把函数的定义放在外面,且在函数的声明的时候加上关键字inline,则函数变为内联函数,否则为成员函数.
问题四:内联函数的定义 内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。
问题五:C++内联函数具体有什么作用? 内联函数在编译的时候将不进行函数调用,编译器将内联函数的代码粘贴在调用(形式上调用)处,可以提高效率。
内联函数只能是代码很少很简单的函数,因为如果一个很大很复杂的函数即使设为内联,编译器也将自动设置该函数为非内联。
问题六:内联函数与C语言函数调用有什么区别?? 首先讲一下函数调用,C语言函数调用的过程是:
①将参数压栈,一般是从右往左。
②使用call指令,调用函数。call指令会将当前指令所在的内存位置压栈以便函数结束后返回。
③进入函数体(跳转到另一块内存中),执行,执行完后,使用通用寄存器或者栈来存储返回值,使用ret指令返回。
可以看到,函数调用是发生了跳转的,考虑一下跳转大小和指令预取这些东西,调用函数会加长执行时间。如果只是调用几次,时间差异可能感觉不出来,不是特别情况也不需要在乎。但函数被反复调用时,性能就会差很多。
所以有了内联函数这玩意,编译器会直接将对内联函数的调用扩展为整个函数的代码(几种情况除外,这个看书,我也记不住),也就是说,不会使用call和ret指令。所以,这样做的缺点就是每个调用函数的位置都被扩展成了函数的代码,会加大生成的可执行文件的大小。所以才会提倡,将调用频繁而函数本身却很小的函数声明为内联函数。
它们的区别就在这里,跳转和不跳转,牺牲时间还是牺牲空间。
问题七:C++中,什么是隐式内联函数?能举个例子吗 class A{ ..... int fun_inline(){ return 0;} .....};就是实现直接写在类的声明中了的函数
问题八:C++中内联函数是什么意思? 内联函数具有一般函数的特性,它与一般函数所不同之处只在于函数调用的处理。一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换。在使用内联函数时,应注意如下几点:
1.在内联函数内不允许用循环语句和开关语句。
如果内联函数有这些语句,则编译将该函数视同普通函数那样产生函数调用代码,递归函数(自己调用自己的函数)是不能被用来做内联函数的。内联函数只适合于只有1~5行的小函数。对一个含有许多语句的大函数,函数调用和返回的开销相对来说微不足道,所以也没有必要用内联函数实现。
2.内联函数的定义必须出现在内联函数第一次被调用之前。
3.本栏目讲到的类结构中所有在类说明内部定义的函数是内联函数。
问题九:什么是内联函数 楼主有意思,我觉得楼上的答案已经够“官方”的了么...
内联函数就是小型函数,牺牲空间来节省函数调用的开销,一般用作比较小的函数,即函数内部没有循环、开关语句等。内联函数被发明出来就是为了取代C中的宏,因为宏是单纯的替换而没有类型检查所以经常出毛病,比如:
#define MAX(a, b) (a) > (b) ? (a) : (b)
如果你在代码中这样写:
int a = 5, b = 10;
int max = MAX(++a, b); a自增了两次
int max = MAX(++a, b+10); a自增了一次
a的自增次数竟然由与其比较的数字的大小来决定!?这肯定不是你想要的结果。
所以最好的办法是这样:
template
inline T max(const T& t1, const T& t2)
{
return t1 > t2 ? t1 : t2;
}
这样的话如果你这样写:
int max = max(a, b);
其实就被替换为了:
int max = a > b ? a : b;
虽然看起来宏差不多,但是比宏多了类型检查,而且内联函数使用的是真正的函数的特性,而不是宏的function-like,模拟函数的功用。
内联函数是为频繁使用、并且过程不大的小型函数设计的,我说了它是以牺牲代码空间来节省函数调用的开销,内联函数使用不当就会造成代码膨胀,所以使用它一定要小心。
建议(书上抄的):
For function-like macros, prefer inline functions to #defines.
楼主有时间还是多看看书好,这里毕竟专家不多,而且也没多少人有太多的时间和精力来帮你解决这些基础性的问题,好好地读几本书吧,一定会让你获益匪浅的...
问题十:内联函数的定义 内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询