2014-09-03 12 views
5

Warum ist die Umwandlung von CL Instanz in const int& mehrdeutig hier?Mehrdeutige Konvertierung in Referenz

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

void fnc(const int&) 
{ 
} 

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

Es gibt zwei Möglichkeiten:
1). cl.operator const int&() führt zu benutzerdefinierter Konvertierung
2). cl.operator int&() führt zu benutzerdefinierter Konvertierung und dann Qualifizierung Umwandlung (int& zu const int&)

erster Weg ist besser als die zweite Art und Weise, ist es nicht? Ich habe Standard gesehen, aber nichts gefunden.

Antwort

5

Dies liegt daran, dass beide Konvertierungen in diesem Kontext anwendbar sind (gleich gut). Das heißt, sowohl int& als auch const int& können durch const int& gebunden werden.

Die Umwandlung würde nicht mehrdeutig sein, wenn Sie hatte:

void fnc(int&) 
{ 
}