通常,如果我们将非虚拟成员函数的实现放入头文件中,该函数将被内联。如果我们将虚拟成员函数的实现放在头文件中怎么样?我想这与将其放入 cpp 文件中是一样的,因为内联和多态性不能一起工作。我的说法正确吗?
将方法的实现放入头文件中并不会使其内联。将其放入类声明中即可。从现在起我就假设这就是你的意思。
这里重要的是,声明内联函数只是向编译器提供信息,它不一定使该函数内联
大多数时候,编译器会忽略这一点,并且该方法不会被内联。
不过,可以有一个内联虚拟方法,如 c++ 常见问题解答中所述(http://www.parashift.com/c++-faq-lite/inline-virtuals.html http://www.parashift.com/c++-faq-lite/inline-virtuals.html):
“内联虚拟调用可以被内联的唯一时间是当编译器知道作为虚拟函数调用目标的对象的“确切类”时。只有当编译器具有实际对象而不是指针或对对象的引用。即,无论是本地对象、全局/静态对象还是复合体中完全包含的对象。”
简而言之,仅当您不使用动态链接解析时(我们可以说“当我们不使用虚拟方法时”),编译器才会内联虚拟方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)