2014-09-03 18 views
5

Perché la conversione dell'istanza in const int& è ambigua qui?Conversione ambigua a riferimento

struct CL 
{ 
    operator const int&() 
    { 
    } 
    operator int&() 
    { 
    } 
}; 

void fnc(const int&) 
{ 
} 

int main() 
{ 
    CL cl; 
    fnc(cl); 
} 

Ci sono due modi:
1). cl.operator const int&() porta alla conversione definita dall'utente
2). cl.operator int&() porta alla conversione definita dall'utente e quindi alla conversione della qualifica (int& a const int&)

Il primo modo è meglio della seconda, no? Ho visto Standard, ma non ho trovato nulla.

risposta

5

Questo perché entrambe le conversioni sono applicabili (ugualmente buone) in questo contesto. Cioè, sia int& e const int& possono essere legati da const int&.

La conversione non sarebbe ambiguo, se si ha:

void fnc(int&) 
{ 
}