Hãy có mã này:C++: dàn diễn viên hành vs điều hành assign vs ưu tiên constructor chuyển đổi
Test1 t1;
Test2 t2;
t1 = t2;
Tôi tin rằng có ba cách làm thế nào để thực hiện t1 = t2
- đến (hoặc nhiều hơn?) toán tử gán quá tải trong
Test1
- cho nhà điều hành dàn diễn viên loại quá tải trong
Test2
- để tạo
Test1(const Test2&)
chuyển đổi constructor
Theo thử nghiệm GCC của tôi, đây là ưu tiên hàng đầu của những gì được sử dụng:
- hành assign
- chuyển đổi nhà xây dựng và điều hành loại cast (mơ hồ)
- const constructor chuyển đổi và toán tử cast kiểu const (mơ hồ)
Hãy giúp tôi hiểu lý do ưu tiên này.
tôi sử dụng mã này để thử nghiệm (bỏ ghi chú một số dòng để thử)
struct Test2;
struct Test1 {
Test1() { }
Test1(const Test2& t) { puts("const constructor wins"); }
// Test1(Test2& t) { puts("constructor wins"); }
// Test1& operator=(Test2& t) { puts("assign wins"); }
};
struct Test2 {
Test2() { }
// operator Test1() const { puts("const cast wins"); return Test1(); }
// operator Test1() { puts("cast wins"); return Test1(); }
};
int main() {
Test1 t1;
Test2 t2;
t1 = t2;
return 0;
}
'Test1 :: Test1 (const Test2 &)' không phải là "hàm tạo bản sao", nó là "hàm tạo chuyển đổi". – aschepler
Bài đăng này giải thích chính xác lý do tại sao toán tử chuyển đổi có ưu tiên cao hơn: http://stackoverflow.com/questions/1384007/conversion-constructor-vs-conversion-operator-precedence –