Dies ist teilweise inspiriert von this Frage. Wenn ich den Code schreiben:Implizite Konvertierung mit Operator
void test(std::string inp)
{
std::cout << inp << std::endl;
}
int main(void)
{
test("test");
return 0;
}
"test"
implizit const char*
-std::string
umgewandelt, und ich die erwartete Ausgabe zu erhalten. Allerdings, wenn ich versuche Sie dies:
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;
}
Ich erhalte den Compiler-Fehler, invalid operands of types 'int' and 'const char [2]' to binary 'operator*'
. "a"
wurde hier nicht implizit in std::string
konvertiert, stattdessen blieb es ein const char*
. Warum kann der Compiler im Falle eines Funktionsaufrufs die Notwendigkeit einer impliziten Konvertierung feststellen, nicht jedoch für den Fall eines Operators?
Normalerweise würde ich sagen, "Add in Abschnitt 5 für die Vollständigkeit." aber fünfzig Seiten scheinen übertrieben. – user4581301
Tatsächlich funktioniert implizite Konvertierung wie erwartet für nicht-primitive Typen; siehe [hier] (http://ideone.com/K4K2vS). –