Kể từ khi tôi có nghi ngờ về câu hỏi này (đối với C++ 03) Tôi gửi bài nó here.I chỉ đọc về constructor chuyển đổi và nó khẳng định rằngConfused giữa một constructor sao chép và một constructor chuyển đổi
"Để là một hàm tạo chuyển đổi, hàm tạo phải có một đối số duy nhất và được khai báo mà không có từ khoá rõ ràng. "
Bây giờ câu hỏi của tôi là liệu trình tạo bản sao có thể được gọi là hàm tạo chuyển đổi miễn là nó không được khai báo rõ ràng không? Liệu nó có đủ điều kiện để trở thành một? Tôi tin rằng nó không thể được gọi là một nhà xây dựng chuyển đổi bởi vì nó chỉ chấp nhận cùng một tham số kiểu mà kết quả là không có chuyển đổi. Đối với Instance
foo a;
foo b;
a = 100; //a Conversion constructor would be called (i.e) foo(int a){...}
a = b ; //Since both objects are same type and have been initialized the assignment operator will be called (if there is an overloaded version otherwise the default will be called)
Hiểu biết của tôi có đúng không?
'operator =()' sẽ được ưu tiên nếu có thể, nhưng câu hỏi thực sự là "điều gì sẽ xảy ra khi không thể tìm thấy thực thi' operator =() 'phù hợp?" – cdhowie
foo a = 100; // là công trình chuyển đổi foo b = a; // là bản sao xây dựng –
[class.conv.ctor]/3 "Một trình tạo bản sao không rõ ràng (12.8) là một hàm tạo chuyển đổi. Một hàm tạo bản sao được khai báo ngầm không phải là một hàm tạo rõ ràng; nhập chuyển đổi. " – dyp