#include <iostream>
using namespace std;
struct Y;
struct X
{
X(const Y&) { cout << "converting constructor" << endl; }
};
struct Y
{
operator X() { cout << "conversion function" << endl; }
};
void f(X x) {}
int main()
{
Y y;
f(y);
}
Ở phía trên chức năng chuyển đổi được ưu tiên cho chuyển đổi constructor bởi trình biên dịch của tôi (gcc 4.6.1), tuy nhiên trong tiêu chuẩn nó nói rằng:C++ 11: Sự mơ hồ giữa hàm chuyển đổi và hàm chuyển đổi khi khởi tạo tham số truyền qua giá trị?
User-defined conversions are applied only where they are unambiguous
Có vẻ như rằng có sự mơ hồ trong trường hợp này. Bất cứ ai có thể giải thích mâu thuẫn?
Tôi đã dự kiến ở trên sẽ không biên dịch. Tôi cũng khá chắc chắn nhiều năm trước rằng Scott Meyers đã viết về ví dụ cụ thể này và nói rằng nó sẽ không biên dịch. Tôi đang thiếu gì?
Btw, không có gì C++ 11 cụ thể trong mã sample.The là có giá trị ngay cả trong C++ 03. –
Lý do để bỏ qua điều này là gì? Vui lòng nêu rõ lý do khi bạn downvote để chỉ ra những gì bạn cảm thấy là sai và nếu bạn không thể nghĩ ra bất kỳ lý do hợp lý/kỹ thuật nào để biện minh cho downvote, hãy xem xét bản thân bạn không đủ điều kiện để downvoting. –
tôi xin lỗi. tôi nghĩ rằng lý do tôi downvoted nó đã được đưa ra trong câu trả lời được chấp nhận. constructor * có thể * được sử dụng bởi chuyển đổi. nhưng nó không được ưa thích. –