4

我不明白这个片段的行为:(用 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 的复制有任何影响?

4

1 回答 1

6

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

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

于 2013-08-02T14:27:55.737 回答