cuốn sách gpt4 ai đã làm

Ngữ nghĩa di chuyển C++: tại sao toán tử gán sao chép=(&) được gọi thay vì toán tử gán di chuyển=(&&)?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 00:01:56 31 4
mua khóa gpt4 Nike

Tôi có đoạn mã sau:

#include 
#include

sử dụng std::cout;

cấu trúc SomeType {
Một số loại() {}

SomeType(const SomeType &&other) {
cout << "SomeType(SomeType&&)\n";
*this = std::move(other);
}

void toán tử=(const SomeType &) {
cout << "operator=(const SomeType&)\n";
}

void toán tử=(SomeType &&) {
cout << "operator=(SomeType&&)\n";
}
};

int chính() {
SomeType a;
SomeType b(std::move(a));
b = std::move(a);
return 0;
}

Tôi muốn hàm tạo di chuyển gọi toán tử gán di chuyển. Đây là đầu ra của chương trình này:

SomeType(SomeType&&)
toán tử=(const SomeType&)
toán tử=(SomeType&&)

Như bạn có thể thấy, toán tử gán di chuyển được gọi thành công, nhưng trong hàm tạo di chuyển, phép gán cho *cái này Cuộc gọi không thành công. Tại sao điều này xảy ra và tôi có thể khắc phục nó bằng cách nào đó?

câu trả lời hay nhất

Hàm tạo di chuyển của bạn mất const SomeType&& thay vì SomeType&&. Bạn không thể gọi bằng const SomeType&& giá trị loại SomeType&&(hàm tạo di chuyển của bạn).

Hãy thử nhận con nuôiSomeType&& Hàm tạo di chuyển.

Về ngữ nghĩa di chuyển C++: tại sao toán tử gán sao chép=(&) được gọi thay vì toán tử gán di chuyển=(&&)?, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/19979643/

31 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress