考慮下面的代碼GCC-4.8.1爲什麼下面的代碼是錯誤(約重載決議)
struct Base
{
};
struct Derive : private Base
{
};
void fn(Base, int);
struct Conv
{
operator Base() const;
operator Derive();
};
int main()
{
Conv c;
fn(c, 0);
return 0;
}
當我給上面的代碼中,我得到了一個error.I認爲編譯器將選擇Conv::operator Base()
但實際上編譯器選擇Conv::operator Derive()
但是,當我把下面的代碼,編譯器選擇Conv::operator Base()
struct Base
{
};
struct Derive// : private Base
{
};
void fn(Base, int);
struct Conv
{
operator Base() const;
operator Derive();
};
int main()
{
Conv c;
fn(c, 0);
return 0;
}
爲什麼你認爲編譯器應該選擇'Base'在這種情況下(C是不是'const')?這是相當多了'is_base_of'招 – nijansen
其實,這裏有一個詳細的解釋:http://stackoverflow.com/a/2913870/1056003 – nijansen