当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在C++中,构造函数和析构函数可以是内联函数吗?》经验,为你挑选了2个好方法。

VC++生成在类声明内联函数中实现的函数.

如果我Foo按如下方式声明一个类,那么是CONSTRUCTOR和DESTRUCTOR内联函数吗?

class Foo 
{
    int* p;
public:
    Foo() { p = new char[0x00100000]; }
    ~Foo() { delete [] p; }
};

{
    Foo f;
    (f);
}

小智.. 65

定义构造函数的主体INSIDE类与使用"inline"关键字将函数OUTSIDE放在类中具有相同的效果.

在这两种情况下,它都是编译器的提示."内联"函数并不一定意味着函数将被内联.这取决于功能和其他规则的复杂性.



1> 小智..:

定义构造函数的主体INSIDE类与使用"inline"关键字将函数OUTSIDE放在类中具有相同的效果.

在这两种情况下,它都是编译器的提示."内联"函数并不一定意味着函数将被内联.这取决于功能和其他规则的复杂性.


它不仅仅是一个提示:内联允许您在多个翻译单元中定义相同的功能.这是在调用站点上内联函数(没有链接时优化)的先决条件,这是关键字获取其名称的位置.
@FredNurk我完全同意你的观点 - 然而Stroustrup本人(C++的设计和演变)引用了"内联"作为编译器的"提示"

2> Wilka..:

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

class Foo 
{
    int* p;
public:
    Foo();
    ~Foo();
};

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

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

但是,它取决于编译器是否实际内联函数.VC++几乎忽略了你的内联请求.如果它认为这是一个好主意,它只会内联一个函数.如果使用链接时间代码生成,编译器的最新版本还将内联单独的.obj文件中的内容,而不是内联声明(例如,来自不同.cpp文件中的代码).

当你说"内联这个函数"时,你可以使用__forceinline关键字告诉编译器你真正的意思,但它通常不值得.在许多情况下,编译器确实最了解.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有