首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C++中,构造函数和析构函数可以是内联函数吗?

在C++中,构造函数和析构函数可以是内联函数吗?
EN

Stack Overflow用户
提问于 2008-08-21 22:02:58
回答 5查看 86.2K关注 0票数 83

VC++使在类声明中实现的函数成为内联函数。

如果我像下面这样声明一个类Foo,那么构造函数和析构函数是内联函数吗?

代码语言:javascript
复制
class Foo 
{
    int* p;
public:
    Foo() { p = new char[0x00100000]; }
    ~Foo() { delete [] p; }
};

{
    Foo f;
    (f);
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-08-21 22:11:00

在类内定义构造函数的主体与使用"inline“关键字将函数放在类外具有相同的效果。

在这两种情况下,这都是对编译器的一个提示。一个“内联”函数并不一定意味着这个函数是内联的。这取决于函数和其他规则的复杂性。

票数 81
EN

Stack Overflow用户

发布于 2008-08-21 22:12:21

简短的回答是肯定的。任何函数都可以内联声明,将函数体放在类定义中就是一种方法。你也可以这样做:

代码语言:javascript
复制
class Foo 
{
    int* p;
public:
    Foo();
    ~Foo();
};

inline Foo::Foo() 
{ 
    p = new char[0x00100000]; 
}

inline Foo::~Foo()
{ 
    delete [] p; 
}

然而,这取决于编译器是否真的内联了函数。VC++几乎忽略了你的内联请求。只有当它认为这是一个好主意时,它才会内联一个函数。如果您使用link time code generation,则最新版本的编译器还将内联单独的.obj文件中未声明的内容(例如,来自不同.cpp文件中的代码)。

您可以使用__forceinline关键字来告诉编译器,当您说“内联此函数”时,您确实是认真的,但这通常是不值得的。在许多情况下,编译器确实知道得最清楚。

票数 34
EN

Stack Overflow用户

发布于 2008-08-21 22:11:43

将函数定义放在类主体中相当于使用inline关键字标记函数。这意味着编译器可能会内联也可能不会内联该函数。所以我想最好的答案是“也许”?

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档