gpt4 book ai didi

c++ - 讨论为什么没有内联虚函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:30:35 26 4
gpt4 key购买 nike

嗨,我和我的 friend 讨论过为什么没有内联虚函数。

我的回答是内联函数是在编译时,虚函数是在动态时绑定(bind)。在编译时没有办法知道哪个函数会调用虚函数。所以内联虚函数不是一个好主意。

但是,他说,这是不正确的。

他的回答是inline function没有地址,所以在virtual table中没办法放inline function的地址,所以没有inline virtual function。

我想知道三点:

  1. 我的回答是否正确?我觉得我的回答是对的。
  2. 内联函数没有地址吗?我想它有地址;
  3. 连内联函数都有地址,他的回答比我的?

非常感谢!

最佳答案

我不喜欢任何一个答案。

inline 函数是可以定义多次的函数(尽管定义必须匹配)。这就是为什么它们可以放在头文件中的原因。他们有一个地址,就像任何其他函数一样。

virtual 函数是可以被派生类覆盖的函数。

您可以拥有一个可以被派生类覆盖的函数,并且可以很容易地拥有多个定义:

struct foo {
virtual void f();
}

inline void foo::f() {}

也就是说,任何函数都可以内联,即在调用点插入其代码,而不是实际调用它。这并不妨碍以任何方式获取其地址。如果编译器可以静态解析它们,即使没有标记为 inline 的虚函数也可以被内联。

关于c++ - 讨论为什么没有内联虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12082930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com