Bu kodda b1 çalışmalarına atama yapılır, ancak b2'ye (statik dökümle birlikte veya yokken) atanmaya izin verilmez. Aslında karşı problemi, kamu mirasını çözmeye çalışıyordum ama örtülü olarak üsse dönmüyordu. Ancak cast operatörü asla kullanılmıyor gibi görünüyor. Bu neden? [class.conv.fct] kaynaktanNeden cast operatörünün özel bir tabana kullanılmıyor?
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;
}
Tanımladığınız derleme hatasını çoğaltamıyorum. – Peter
@Peter: Çoğaltılmış [burada] (http://ideone.com/hKSEAo) –
@Barabas: Cevabı vermek için standarttan uygun bir alıntıyla birini bekleyeceğim, ancak kamu mirasını "... Bir "ve özel bir miras olarak" var-bir ". Yani, “D2” ve “D3”, “B” nin özel örnekleridir, oysa “D1”, * B * olan bir şeydir. –