gpt4 book ai didi

c++ - 构造函数未调用预期次数

转载 作者:行者123 更新时间:2023-11-28 07:52:38 25 4
gpt4 key购买 nike

这是导致问题的代码:

class Base
{
public:
virtual void fun()
{
cout<<"Base";
}
};
class Der:public Base
{
Base &pb;
public:
Der(Base&b):pb(b){}
virtual void fun()
{
cout<<"Der...";
pb.fun();
}
};
int main()
{
Der(Der(Base())).fun();
return 0;
}

运行这段代码,结果显示“Der...Base...”!这太神奇了,我不明白为什么结果不是逻辑上正确的“Der...Der...Base”?! 然后我将类 Der Base&pb 中的成员替换为 Base*pb 并将代码更改为合法的,最终输出是正确的,即“Der...Der...根据”! 我调试代码发现,当我使用Base&pb时,Der的构造函数只运行了一次,而使用Base*pb时,构造函数正确运行了两次! 任何人都可以向我解释发生了什么以及为什么?

最佳答案

Der(Der(Base())).fun() 表达式中,内部 Der(Base()) 产生一个 rvalue - 编译器使用 copy elision 优化代码并删除不必要的对象复制。

关于c++ - 构造函数未调用预期次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13440902/

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