在此代码中分配给 b1 有效,但它不允许分配给 b2 (有或没有静态转换)。我实际上是在尝试解决相反的问题,公共继承,但没有隐式转换为基础。然而,演员阵容似乎从未被使用过。为什么是这样?
struct B {};
struct D1 : private B {
operator B&() {return *this;}
B& getB() {return *this;}
};
struct D2 : public B {
explicit operator B&() {return *this;}
};
struct D3 : public B {
operator B&() = delete;
};
void funB(B& b){}
int main () {
D1 d1;
funB(d1.getB()); // works
// funB(d1); // fails to compile with 'inaccessible base class
D2 d2;
funB(d2); // works
D3 d3;
funB(d3); // works
return 0;
}