gpt4 book ai didi

c++ - 编译器添加的优化导致 "final"方法的不同行为

转载 作者:太空狗 更新时间:2023-10-29 23:23:22 25 4
gpt4 key购买 nike

<分区>

struct B { 
virtual void foo ()
{ cout << "B::foo()\n"; }
};

struct D : B {
void foo () //final
{ cout << "D::foo()\n"; }
};

int main ()
{
B *pB = new B;
D *pD = static_cast<D*>(pB);
pB->foo();
pD->foo();
}

输出预期行为:

B::foo()
B::foo()

如果我们将 D::foo() 设置为 final,那么输出就会大不相同:

B::foo()
D::foo()

这意味着当使用声明为 final 的类的指针/引用调用该方法时,不会启动 virtual 功能。
这也意味着,final 不仅是编译时检查,还有助于运行时行为。

这是所有编译器的标准行为吗?我已经用 g++4.7 测试过了。

编辑:
生成一个 new question澄清。结束这个问题。

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