Questa è in parte ispirata alla domanda this. Quando scrivo il codice:Conversione implicita con operatore
void test(std::string inp)
{
std::cout << inp << std::endl;
}
int main(void)
{
test("test");
return 0;
}
"test"
è implicitamente convertito const char*
-std::string
, e ottengo i risultati attesi. Tuttavia, quando provo questo:
std::string operator*(int lhs, std::string rhs)
{
std::string result = "";
for(int i = 0; i < lhs; i++)
{
result += rhs;
}
return result;
}
int main(void)
{
std::string test = 5 * "a";
return 0;
}
ottengo l'errore del compilatore, invalid operands of types 'int' and 'const char [2]' to binary 'operator*'
. "a"
non è stato convertito implicitamente in std::string
qui, invece è rimasto un const char*
. Perché il compilatore è in grado di determinare la necessità di una conversione implicita nel caso di una chiamata di funzione, ma non nel caso di un operatore?
Normalmente direi "Aggiungi nella clausola 5 per completezza". ma le pagine di cinquanta-qualcosa sembrano eccessive. – user4581301
In effetti, la conversione implicita funziona come previsto per i tipi non primitivi; vedi [qui] (http://ideone.com/K4K2vS). –