我不明白这段代码的行为:(用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有什么影响?
答案 0 :(得分:6)
您的问题看起来与llvm项目的官方bugzilla中的reported as a bug here类似。
正如您所看到的是一个公认的错误并且已经在较新版本的Clang中进行了修补,您应该切换到更新版本的前端来解决此问题;在bug报告中还指定了为此问题提供补丁的clang的确切修订版。