VC++生成在类声明内联函数中实现的函数.
如果我Foo
按如下方式声明一个类,那么是CONSTRUCTOR和DESTRUCTOR内联函数吗?
class Foo { int* p; public: Foo() { p = new char[0x00100000]; } ~Foo() { delete [] p; } }; { Foo f; (f); }
小智.. 65
定义构造函数的主体INSIDE类与使用"inline"关键字将函数OUTSIDE放在类中具有相同的效果.
在这两种情况下,它都是编译器的提示."内联"函数并不一定意味着函数将被内联.这取决于功能和其他规则的复杂性.
定义构造函数的主体INSIDE类与使用"inline"关键字将函数OUTSIDE放在类中具有相同的效果.
在这两种情况下,它都是编译器的提示."内联"函数并不一定意味着函数将被内联.这取决于功能和其他规则的复杂性.
简短的回答是肯定的.任何函数都可以内联声明,并且将函数体放在类定义中是一种方法.你也可以做到:
class Foo { int* p; public: Foo(); ~Foo(); }; inline Foo::Foo() { p = new char[0x00100000]; } inline Foo::~Foo() { delete [] p; }
但是,它取决于编译器是否实际内联函数.VC++几乎忽略了你的内联请求.如果它认为这是一个好主意,它只会内联一个函数.如果使用链接时间代码生成,编译器的最新版本还将内联单独的.obj文件中的内容,而不是内联声明(例如,来自不同.cpp文件中的代码).
当你说"内联这个函数"时,你可以使用__forceinline关键字告诉编译器你真正的意思,但它通常不值得.在许多情况下,编译器确实最了解.