Trong ví dụ sau, chức năng chuyển đổi nào nên được gọi? Tại sao người ta nên chọn người kia?Nếu toán hạng đầu tiên của biểu thức phụ có thể chuyển đổi thành cả con trỏ và số nguyên, thì chuyển đổi nào được chọn?
struct A
{
operator int();
operator int*();
};
A x;
int i = x + 1;
Trình biên dịch chọn operator int()
.. nhưng tại sao?
Dưới đây là một số trích dẫn có liên quan từ C++ 03:
Từ [expr.add]
Trường hợp bổ sung, hoặc cả hai toán hạng sẽ có số học hoặc kiểu liệt kê, hoặc một toán hạng sẽ là con trỏ đến một loại đối tượng được xác định hoàn toàn và loại kia phải có kiểu tách rời hoặc kiểu liệt kê.
Từ [conv]
biểu thức với một loại nhất định sẽ được ngầm chuyển đổi sang loại khác trong một số trường hợp:
- Khi sử dụng như toán hạng của các nhà khai thác. yêu cầu của nhà điều hành cho toán hạng của nó ra lệnh kiểu đích
Tôi cho rằng điều này sẽ không rõ ràng. Tôi không * nghĩ rằng * con trỏ không có gì đặc biệt hơn. – chris
Liệu nó có gọi người khác nếu bạn nói 'int * i = x + 1;'? – John
@ John, Không, nó chỉ than phiền về 'int -> int *'. – chris