Bar*_*bas 11 c++ inheritance casting implicit-cast explicit-conversion
在此代码中,分配给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;
}
Run Code Online (Sandbox Code Playgroud)
Bar*_*rry 11
转换函数从不用于将(可能是cv限定的)对象转换为(可能是cv限定的)相同的对象类型(或对它的引用),转换为该类型的(可能是cv限定的)基类(或引用它)或(可能是cv-qualified)void.
所以在你的第一个例子中:
struct D1 : private B {
operator B&() {return *this;}
B& getB() {return *this;}
};
Run Code Online (Sandbox Code Playgroud)
operator B&永远不会被使用,因为它转换为基类.它是一个私人基类并不重要.