内联函数的问题

vincen_cn 2008-07-10 05:29:39
既然不存在函数压栈,出栈的过程,为什么下面这个函数还是不行?
inline int& func()
{
int a;
return a;
}
...全文
108 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Y神圣 2008-07-11
  • 打赏
  • 举报
回复
就算你用了forceinline,能否内联还是编译器说了算的。
我叫司马懿 2008-07-11
  • 打赏
  • 举报
回复
还有,如果是void的函数,也不能有return语句。
我叫司马懿 2008-07-11
  • 打赏
  • 举报
回复
当程序使用内联函数的时候,是将该函数直接插入到每个调用语句处。而不象一般的函数调用,在调用一般函数时是转去执行该函数,函数执行结束后返回到宿主函数中调用语句的下一语句。

内联函数可加快代码执行速度,减少调用开销,但这是以增加代码为代价来求得的速度。

注意:内联函数不能包含任何静态变量,不能使用任何循环语句,switch语句,和goto语句,不能递归,也不能有数组说明。
herman~~ 2008-07-10
  • 打赏
  • 举报
回复
inline 随时可以被优化

而且建议不要这样做
K行天下 2008-07-10
  • 打赏
  • 举报
回复
你返回了局部对象的引用 局部对象的作用域是什么?
windsting 2008-07-10
  • 打赏
  • 举报
回复
你倒是说说怎么个不行法啊,

看你的帖,有两点要说:
1、绝对不要让函数返回局部对象的引用,因为return以后,该对象就已经被销毁了,
2、好好看书,很少有什么书不会告诉你inline只是一个给编译器的建议,至于是否能确实成为内联,
还要看该函数的复杂度等条件。

另外,提问也不是张嘴就问的,提问其实是需要技巧的。
hjessica 2008-07-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 foxyz 的回复:]
不要把局部变量的引用返回.
[/Quote]
yikai100 2008-07-10
  • 打赏
  • 举报
回复
内联只是编译器的一种编译方式,把局部变量引用返回,结果可想而知(即使编译通过)
donwmufromdying 2008-07-10
  • 打赏
  • 举报
回复
不要把局部变量的引用返回.
donwmufromdying 2008-07-10
  • 打赏
  • 举报
回复
请改成
inline int func()
{
int a;
return a;
}
coverallwangp 2008-07-10
  • 打赏
  • 举报
回复

#include <iostream.h>
inline int& func()
{
int a=1;
return a;
}

void main()
{
int a = func();
cout<<a<<endl;
}


怎么个不行法?
DarknessTM 2008-07-10
  • 打赏
  • 举报
回复
inline 只是给编译器建议,编译器不一定照办……

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧