码迷,mamicode.com
首页 > 其他好文 > 详细

40、构造函数、析构函数、虚函数可否声明为内联函数

时间:2021-06-28 19:04:13      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:派生   构造   观点   答案   寄存器   编译   strong   选择   effect   

首先,将这些函数声明为内联函数,在语法上没有错误。因为inline同register一样,只是建议编译器这样操作,编译器并不一定真正的内联。

register关键字:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存 寻址访问,以提高效率

构造函数和析构函数声明为内联函数是没有意义的

 

《Effective C++》中所阐述的是:将构造函数和析构函数声明为inline是没有什么意义的,即编译器并 不真正对声明为inline的构造和析构函数进行内联操作,因为编译器会在构造和析构函数中添加额外的 操作(申请/释放内存,构造/析构对象等),致使构造函数/析构函数并不像看上去的那么精简。其次, class中的函数默认是inline型的,编译器也只是有选择性的inline,将构造函数和析构函数声明为内联 函数是没有什么意义的。

 

将虚函数声明为inline,要分情况讨论:

有的人认为虚函数被声明为inline,但是编译器并没有对其内联,他们给出的理由是inline是编译期决定 的,而虚函数是运行期决定的,即在不知道将要调用哪个函数的情况下,如何将函数内联呢?

上述观点看似正确,其实不然,如果虚函数在编译器就能够决定将要调用哪个函数时,就能够内联,那 么什么情况下编译器可以确定要调用哪个函数呢,答案是当用对象调用虚函数(此时不具有多态性) 时,就内联展开

综上,当是指向派生类的指针(多态性)调用声明为inline的虚函数时,不会内联展开;当是对象本身 调用虚函数时,会内联展开,当然前提依然是函数并不复杂的情况下

40、构造函数、析构函数、虚函数可否声明为内联函数

标签:派生   构造   观点   答案   寄存器   编译   strong   选择   effect   

原文地址:https://www.cnblogs.com/crbhf/p/14939164.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!