9
這部分受this問題的啓發。當我寫的代碼:與運算符的隱式轉換
void test(std::string inp)
{
std::cout << inp << std::endl;
}
int main(void)
{
test("test");
return 0;
}
"test"
被隱式地從const char*
轉換爲std::string
,我也得到預期的輸出。然而,當我嘗試這樣的:
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;
}
我得到編譯器錯誤,invalid operands of types 'int' and 'const char [2]' to binary 'operator*'
。 "a"
在這裏並未隱式轉換爲std::string
,而是保持爲const char*
。爲什麼編譯器能夠在函數調用的情況下確定是否需要隱式轉換,而不是運算符的情況?
通常我會說,「爲了完整性添加第5條。」但五十頁的頁面似乎過度。 – user4581301
事實上,隱式轉換的工作方式與非原始類型相同;見[這裏](http://ideone.com/K4K2vS)。 –