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 に答える