为什么/如何基类的虚拟化改变了复制构造函数的行为?

Ben*_*nno 4 c++ c++11

我不明白这个片段的行为:(用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

}
Run Code Online (Sandbox Code Playgroud)

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

use*_*710 6

您的问题看起来类似于在llvm项目的官方bugzilla中报告的错误.

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