关于inline函数的调用

flight_lcf 2007-06-17 11:17:11
情况1
//A.h
class A
{
public:
void Foo(int x, int y);
}
//A.cpp
inline void A::Foo(int x, int y)
{

}

//B.cpp
void B::Fun()
{
A a;
a.Foo(0,0);//这里编译不过去
}
//////////////////////////////////////////////////////////////
情况2
如下可以正确编译,也就是说把Foo函数的定义放到了A.h中
//A.h
class A
{
public:
void Foo(int x, int y);
}

inline void A::Foo(int x, int y)
{

}

//B.cpp
void B::Fun()
{
A a;
a.Foo(0,0);//这里编译不过去
}

如下是我的理解:当把某一函数声明为inline的话,在调用处必须可以找到函数的实现,这样感觉结构很不好,能否像一般函数那样,把inline函数也分成.h和.cpp文件呢?

如上,不知道说清楚了吗,哪里不请指出
...全文
400 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jasonshark 2007-06-18
  • 打赏
  • 举报
回复
不准确,应该是: 只要不是在一个模块里调用就需要把定义放在头文件里面
这主要是针对一个类的实现体可能分散在不同cpp的情况
flight_lcf 2007-06-18
  • 打赏
  • 举报
回复
我的理解:
1、当需要其它类调用
把声明和定义都放在头文件中
2、当只本类调用
把函数的定义放在A.cpp中

flight_lcf 2007-06-18
  • 打赏
  • 举报
回复
To WizardK():
我认为是不对的,从编译器来看,inline函数有选择是否将定义的inline函数是否inline化,但define不管什么样,都会进行源代码替换
WizardK 2007-06-18
  • 打赏
  • 举报
回复
你把inline看成define就行了
eduyu 2007-06-18
  • 打赏
  • 举报
回复
这是c++标准,不过没有理由说不能其它方式做,只要编译器支持。
flight_lcf 2007-06-17
  • 打赏
  • 举报
回复
也就是说没有办法像一般函数那样分为.h和.cpp文件

以下摘自高质量C++:

定义在类声明之中的成员函数将自动地成为内联函数,例如
class A
{
public:
void Foo(int x, int y) { … } // 自动地成为内联函数
}
将成员函数的定义体放在类声明之中虽然能带来书写上的方便,但不是一种良好的编程风格,上例应该改成:
// 头文件
class A
{
public:
void Foo(int x, int y);
}
// 定义文件
inline void A::Foo(int x, int y)
{

}

这里类A所谓的头文件和定义文件不是指不同的文件吗?
jasonshark 2007-06-17
  • 打赏
  • 举报
回复
我就说LS的文字怎么这么熟悉,原来是摘自effective C++的啊~ 呵呵
Stefine 2007-06-17
  • 打赏
  • 举报
回复
inline 函数一般必须在头文件内,因为大多数构建环境在编译期间进行 inline 化。为了用被调用函数的函数本体替换一个函数调用,编译器必须知道函数看起来像什么样子
(有一些构建环境可以在连接期间进行 inline 化,还有少数几个——比如,基于 .NET Common Language Infrastructure (CLI) 的控制环境——居然能在运行时 inline 化。然而,这些环境都是例外,并非规则。inline 化在大多数 C++ 程序中是一个编译时行为。)

http://dev.yesky.com/260/2095260.shtml

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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