游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3549|回复: 9

关于C++中的内联函数

[复制链接]

5

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2006-7-10 11:05:00 | 显示全部楼层 |阅读模式
本人正在学习《C++编程思想》,在学到第八章时第151页产生了很大的困诱,是这样的:
class forward{
int i;
public:
  forward():i(0){}
  int f() const { return g()+1;}
  int g() const {return i;}
};
main(){
forward F;
F.f();
}
它下面有这样一段话:虽然函数g()还没有定义,但在函数f()里对函数g()进行了调用。这是可行的因为“语言定义规定非内联函数直到类声明结束了才赋值”。我对那个引号中的话真的搞不懂,书上说了在类中声明部分,只要给出了定义的都是内联函数,在这段代码里哪里跑出来了一个非内联函数。
还有就是关于后面一页中说“预处理器的特点”时,我也搞不懂,特别是那个“#”指示的含义,一头雾水。
  请大家能够帮忙我,谢谢! [em24] [em24]

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2006-7-10 11:16:00 | 显示全部楼层

Re:关于C++中的内联函数

那段话我也不知道在说什么,但内联函数是指加 inline关键字的函数
inline void foo(void){}
不是指函数体写在类定义里的函数

1

主题

177

帖子

198

积分

注册会员

Rank: 2

积分
198
QQ
发表于 2006-7-10 12:18:00 | 显示全部楼层

Re:关于C++中的内联函数

在类声明中的函数如果有定义(比较短,无循环),编译程序会根据性能得失考虑将此函数当作内联函数。STL就是如此操作的。使用inline关键字的函数如果语句太复杂,会被视为普通函数。
“语言定义规定非内联函数直到类声明结束了才赋值”: 可能是指程序编译时调用内联函数处将会直接展开成语句,替代内联函数名,而非内联函数只提供函数指针,不展开成语句。

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20737
发表于 2006-7-10 13:34:00 | 显示全部楼层

Re:关于C++中的内联函数

如果我没记错。。。。大前提。

forward类中的两个函数f() g()都属于内联函数,排出编译器做的优化,记得C++标准关于内联的语法定义中有这样一项说明,如果函数是在类的定义中实现,这个函数将被默认为内联函数。

class forward{
public:
  int f(); // 非内联
  int g() {return 1;} // 内联
};

int forward::f()
{
  return 1;
}

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-7-10 16:05:00 | 显示全部楼层

Re:关于C++中的内联函数

站长同志正解......
这是C++的入门问题了,定义在类声明中的函数被默认为inline.

10

主题

95

帖子

95

积分

注册会员

Rank: 2

积分
95
QQ
发表于 2006-7-10 21:53:00 | 显示全部楼层

Re:关于C++中的内联函数

#将变量的标识符看做一个字符串

0

主题

50

帖子

164

积分

注册会员

Rank: 2

积分
164
发表于 2006-7-11 00:21:00 | 显示全部楼层

Re:关于C++中的内联函数

“虽然函数g()还没有定义” ???
不是已经定义了么?

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-7-12 17:15:00 | 显示全部楼层

Re:关于C++中的内联函数

看英文原版吧,一本好书能提高你的内力,但一本翻译得很差的书却误人子弟!

0

主题

202

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
发表于 2006-8-1 01:24:00 | 显示全部楼层

Re:关于C++中的内联函数

# 变为string

13

主题

978

帖子

978

积分

高级会员

Rank: 4

积分
978
发表于 2006-8-1 22:09:00 | 显示全部楼层

Re:关于C++中的内联函数

记得是否inline全看编译器……
要是定义在class定义中的函数是个递归函数的话编译器一样不会内联
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 01:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表