gpt4 book ai didi

c++ - 基类的虚拟性为什么/如何改变复制构造函数的行为?

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

我不明白这段代码的行为:(用 clang++ 3.0 编译)

#include <iostream>

using namespace std;

class Base {
public:
virtual void bar() {}

bool foo = false;
};

class Derived : public Base{
public:
Derived() { Base::foo = true; }
};

int main() {
Derived d;
Base b(d);

cout << b.foo << endl; // prints 0
// prints 1 if "virtual void bar() {}" is removed

}

为什么函数 Base::bar() 对 Base::foo 的复制有任何影响?

最佳答案

您的问题看起来与 reported as a bug here 相似在 llvm 项目的官方 bugzilla 中。

如您所见,这是一个公认的错误,并且已在较新版本的 Clang 中进行了修补,您应该切换到较新版本的前端来解决此问题;在错误报告中还指定了为该问题提供补丁的 clang 的确切修订版。

关于c++ - 基类的虚拟性为什么/如何改变复制构造函数的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18018842/

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