C++可以构造和destructor以内联职能?
-
09-06-2019 - |
题
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为标志的功能的内联的关键词。这意味着该功能可以或不可以通过内联编译器。所以我想最好的答案将是"也许"?
到同一程度上,我们可以做任何其他功能的内联的,是的。
内联或不是主要决定由你编译器。内联的代码中仅提示来编译器。
一个规则,你可以指望的是,虚拟功能将永远不会是内联。如果你的基类具有虚拟的构造/析构你可能永远不会是内联。
不隶属于 StackOverflow