Bu kısmen this sorusundan esinlenmiştir. Ben kodu yazarken:Operatör ile örtük dönüştürme
void test(std::string inp)
{
std::cout << inp << std::endl;
}
int main(void)
{
test("test");
return 0;
}
"test"
örtülü std::string
için const char*
dönüştürüleceğini ve ben beklenen çıkışını almak edilir. Bunu deneyin Ancak,:
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;
}
Ben invalid operands of types 'int' and 'const char [2]' to binary 'operator*'
, derleyici hatası alıyorum. "a"
dolaylı olarak std::string
'a dönüştürülmedi, bunun yerine const char*
kaldı. Derleyici neden bir işlev çağrısı durumunda örtük bir dönüştürme gereksinimini belirleyebilir, ancak bir operatörün durumu için uygun değildir?
Normal olarak, "Tamlık için 5. maddeyi ekleyin." ancak elli-şey sayfalar aşırı görünüyor. – user4581301
Gerçekten de, örtük dönüştürme ilkel olmayan türler için beklenen şekilde çalışır; bakın [burada] (http://ideone.com/K4K2vS). –