- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
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;
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/
Câu hỏi của tôi rất đơn giản. Có an toàn để làm như sau? Không cần lời khuyên đạo đức như "Đừng đặt tên cho hàm swap()!" hay bất cứ điều gì, file1.hpp // tiêu đề bảo vệ ở đây #include
Tôi rất tò mò nên đã kiểm tra mã nguồn của hàm swap! trên kho lưu trữ clojure, nó trông như thế này: (defn swap! "Hoán đổi nguyên tử giá trị của Atom thành:
Tôi đang triển khai một lớp có giao diện tương tự như std::array, có cả swap() và swap() không phải thành viên. Vì tôi muốn lớp của mình bắt chước một vùng chứa tiêu chuẩn, nên tôi muốn.
Câu hỏi này đã có câu trả lời ở đây: Lý do đằng sau việc hoán đổi chức năng thành viên (1 câu trả lời) Đã đóng 4 năm trước. Nếu Coll là loại vùng chứa tiêu chuẩn và a và b là các phiên bản của Coll thì:
int a=5; b=7; int *pa=&a, *pb=&b; Việc trao đổi giá trị của a và b khác với việc trao đổi giá trị của các con trỏ, tức là pa và pb (không phải *pa và *pb)? Kết quả của hai trường hợp có khác nhau không? Chúng ta là gì
Được rồi, đây là chương trình, hoàn toàn chính xác #include sử dụng không gian tên std; mẫu void Swap(T &a , T &b);
Hàm std::swap() có hoạt động bình thường trong một lớp có nhiều đối tượng khác nhau làm thành viên biến không? Đặc biệt, nếu một số thành viên trong số đó là những người gợi ý thông minh? kiểm tra lớp { ... std::shared_ptr
Tôi đang cố gắng triển khai thành ngữ sao chép và trao đổi trong lớp Ma trận tùy chỉnh của mình và tôi gặp một số khó khăn khi thực hiện trao đổi() như được đề xuất trong câu hỏi được liên kết: (Trình biên dịch tôi đang sử dụng dành cho MS VS2010 IDE
Tôi biết ADL là gì và tôi biết rằng trong C++, các hàm phạm vi bên trong ẩn các hàm phạm vi bên ngoài. Nghĩa là, tên không được tải lại trên phạm vi. Vì vậy, việc nạp chồng hàm cần phải được thực hiện trong cùng một phạm vi. Bây giờ câu hỏi của tôi là đối với đoạn mã chung này: #inclu
Cho hai std::vector v1, v2. Tôi muốn biết lợi ích của việc sử dụng std::swap(v1, v2) so với v1.swap(v2). Tôi đã triển khai một mã kiểm tra đơn giản theo quan điểm hiệu suất (tôi không chắc liệu nó có
std::string có chức năng hoán đổi hàm thành viên, đây là một cách hiệu quả để hoán đổi hai chuỗi lớn. Bây giờ chúng ta đã có ngữ nghĩa di chuyển, cho trước hai chuỗi lớn s1 và s2, đoạn mã sau đây s1.swap(s2);
Trong khi sử dụng thành ngữ sao chép và trao đổi trong một lớp có tham chiếu không đổi là thành viên, lỗi trên đã xảy ra. Mã mẫu: #include #include sử dụng std::reference_wra
Bối cảnh Hãy xem đoạn mã sau: #include namespace ns { struct foo { foo() : i(0) {} int i;
Chúng ta có: vector f(int); vector v; Điều này hoạt động: f(x).swap(v); Điều này không: v.swap(f(x)); Câu trả lời hay nhất: swap() thực hiện tham chiếu không cố định trên vectơ
Tôi đã định cấu hình một vị trí sản xuất và dàn dựng trong Azure, mỗi vị trí sử dụng cơ sở dữ liệu SQL Azure riêng. Mỗi chuỗi kết nối được cấu hình là "dính". Tuy nhiên, khi tôi hoán đổi vị trí sản xuất (đích) bằng vị trí dàn dựng (nguồn), tôi nhận được cảnh báo sau. Cái này
Tôi có đoạn mã sau: char swap(char reg, char* mem) { std::swap(reg, *mem); return reg } Tôi muốn mã này được biên dịch thành: swap;
Sắp xếp chèn của tôi bằng xor-swap không hoạt động, nhưng không có xor-swap thì nó vẫn hoạt động tốt. Làm cách nào để sửa thuật toán sắp xếp chèn trao đổi XOR của tôi? Sắp xếp chèn mà không cần trao đổi XOR - // sắp xếp mảng đã cho trong
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
Tôi đang triển khai thành ngữ sao chép và trao đổi cho một operator= của một đối tượng tham chiếu bộ nhớ không sở hữu nhỏ mà tôi đã thiết kế. Khi MemRef đề cập đến một khối bộ đệm có thời gian tồn tại mà tôi tin cậy, _ptr trỏ đến bộ đệm,
Tôi có hai câu hỏi, câu hỏi thứ hai là tùy chọn. Đầu tiên, trong chương trình bên dưới (nguyên mẫu của chương trình thẻ đơn giản), tôi gặp lỗi sau: (29): lỗi C2660: 'shuffle' : function
Tôi là một lập trình viên xuất sắc, rất giỏi!