VC++使职能范围内实施类声明的内联的职能。

如果我宣布一类 Foo 如下,则是构造和DESTRUCTOR内联职能?

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

{
    Foo f;
    (f);
}
有帮助吗?

解决方案

定义的主体的构造内部的类具有相同效果的放置的功能外流的"内联"的关键词。

在这两种情况下,它是一个暗示来编译器。一个"内联"的功能并不一定意味着该功能将内联。这取决于复杂的功能和其他的规则。

其他提示

简短的回答是肯定的。任何功能,可以宣布联,并把功能的身体在这类定义的一种方式这样做。你也可以做到:

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

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

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

然而,它是编译器,如果它实际上没有内嵌的功能。VC++相当多的忽略你的请求为内联。它只会内联的一个函数,如果它认为这是一个好主意。最近版本的编译器也将内联东西都是单独的.obj文件和没有申报的内联(例如从码在不同的。cpp文件)如果您使用 链接时间代码.

你可以使用 __forceinline 关键字告诉编译器,你真的真正的意思,当你说"内联此函数",但它的功能不值得的。在许多情况下,编译器真的不知道最好的。

把功能的定义类体equivelent为标志的功能的内联的关键词。这意味着该功能可以或不可以通过内联编译器。所以我想最好的答案将是"也许"?

到同一程度上,我们可以做任何其他功能的内联的,是的。

内联或不是主要决定由你编译器。内联的代码中仅提示来编译器。
一个规则,你可以指望的是,虚拟功能将永远不会是内联。如果你的基类具有虚拟的构造/析构你可能永远不会是内联。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top