Trình biên dịch hoạt động chính xác, theo [over.match] và [conv] , cụ thể hơn là [conv.fpint] và [conv.ptr].
Chuỗi chuyển đổi tiêu chuẩn là [blah blah] Không hoặc một [...] chuyển đổi tích phân trôi nổi, chuyển đổi con trỏ, [...].
và
Một giá trị của loại số nguyên hoặc loại liệt kê không có phạm vi có thể được chuyển đổi thành giá trị của loại dấu phẩy động. Kết quả là chính xác nếu có thể [blah blah]
và
Hằng số con trỏ null là một số nguyên có giá trị bằng 0 hoặc [...]. Một hằng con trỏ null có thể được chuyển đổi thành một loại con trỏ; kết quả là giá trị con trỏ null của loại đó [blah blah]
Bây giờ, độ phân giải quá tải là chọn kết quả phù hợp nhất trong số tất cả các chức năng của ứng viên (mà, như một tính năng thú vị, thậm chí không thể truy cập được tại vị trí cuộc gọi!). Kết quả phù hợp nhất là kết quả có tham số chính xác hoặc, thay vào đó, ít chuyển đổi nhất có thể. Không hoặc một chuyển đổi tiêu chuẩn có thể xảy ra (... cho mọi tham số) và không "tốt hơn" so với một tham số.
(1-1)
là một số nguyên có giá trị 0
.
Bạn có thể chuyển đổi các literal zero số nguyên để mỗi một trong hai double
hoặc double*
(hoặc nullptr_t
), với chính xác một chuyển đổi. Vì vậy, giả sử rằng nhiều hơn một trong số các hàm này được khai báo (như trường hợp trong ví dụ), tồn tại nhiều hơn một ứng cử viên và tất cả các ứng cử viên đều tốt như nhau, không tồn tại kết quả phù hợp nhất. Đó là mơ hồ, và trình biên dịch là đúng về khiếu nại.
1-1
một số nguyên ? Nó là một biểu thức chứa hai chữ nguyên có giá trị1
và-
toán tử.