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

c++ - std::iter_swap 需要 ValueSwappable args vs std::swap 需要 Move Assignable args

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

Tôi đang gặp khó khăn để hiểu tại sao trong đoạn mã bên dưới tôi lại gọi std::hoán đổi() sẽ dẫn đến lỗi biên dịch trong khi sử dụng std::iter_swap Biên dịch không có bất kỳ lỗi nào.

từ iter_swap() so với so với tráo đổi() -- sự khác biệt là gì? , iter_swap Cuối cùng được gọi std::hoán đổi Nhưng họ vẫn cư xử khác nhau.

#include 
#include

lớp IntVector {
std::vector v;
IntVector& operator=(IntVector); // không thể gán được
public:
void swap(IntVector& other) {
v.swap(other.v);
}
};
void swap(IntVector& v1, IntVector& v2) {
v1.swap(v2);
}

int main()
{
IntVector v1, v2;
// std::swap(v1, v2); // lỗi trình biên dịch std::swap yêu cầu MoveAssignable
std::iter_swap(&v1, &v2); // OK: thư viện gọi swap() không đủ tiêu chuẩn
}

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

iter_swap được gọi vào tráo đổi ĐúngKHÔNGHoàn toàn đủ điều kiện, tức là không hành động std::hoán đổi gọi, nhưng chỉ đơn giản là trao đổi. Vì vậy, trong việc tra cứu tên và ADL Trong thời gian này, trình biên dịch sẽ tìm thấy nhiều tráo đổi Gọi hàm khớp. Nhưng,Giải pháp quá tải sẽ chọn cái bạn đã cung cấptrao đổi, bởi vì nó phù hợp nhất.

Nếu bạn sử dụng trong mã chính tráo đổi, sau đó nó sẽ biên dịch tốt vì nó sẽ không tìm thấy std::hoán đổi. Kể cả nếu bạn using namespace std;

Cũng sẽ biên soạn

Về c++ - std::iter_swap yêu cầu các đối số ValueSwappable so với std::swap yêu cầu Di chuyển các đối số có thể gá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/38291489/

29 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