Phần này được lấy cảm hứng từ câu hỏi this. Khi tôi viết mã:Chuyển đổi ngầm định với nhà điều hành
void test(std::string inp)
{
std::cout << inp << std::endl;
}
int main(void)
{
test("test");
return 0;
}
"test"
được ngầm chuyển đổi const char*
-std::string
, và tôi nhận được đầu ra dự kiến. Tuy nhiên, khi tôi thử điều này:
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;
}
Tôi gặp lỗi trình biên dịch, invalid operands of types 'int' and 'const char [2]' to binary 'operator*'
. "a"
không được chuyển đổi hoàn toàn thành std::string
tại đây, thay vào đó nó vẫn là const char*
. Tại sao trình biên dịch có thể xác định sự cần thiết cho một chuyển đổi ngầm định trong trường hợp của một cuộc gọi hàm, nhưng không phải cho trường hợp của một toán tử?
Thông thường tôi muốn nói, "Thêm vào khoản 5 để hoàn thành". nhưng năm mươi trang gì đó dường như quá mức. – user4581301
Thật vậy, chuyển đổi tiềm ẩn hoạt động như dự đoán cho các loại không nguyên thủy; xem [ở đây] (http://ideone.com/K4K2vS). –