เมื่อโทรstd::sort()
บนstd::array
:
#include <vector>
#include <array>
#include <algorithm>
int main() {
std::vector<int> foo{4, 1, 2, 3};
sort(begin(foo), end(foo));
std::array<int, 4> foo2{4, 1, 2, 3};
sort(begin(foo2), end(foo2));
}
ทั้ง gcc และ clang ส่งคืนข้อผิดพลาดในการเรียงลำดับบนstd::array
- clang กล่าว
ข้อผิดพลาด: การใช้ตัวระบุที่ไม่ได้ประกาศ 'sort'; หมายถึง 'std :: sort' หรือเปล่า
การเปลี่ยนเป็นการstd::sort(begin(foo2), end(foo2))
แก้ไขปัญหา
MSVC รวบรวมรหัสข้างต้นตามที่เขียนไว้
ทำไมความแตกต่างในการรักษาระหว่างstd::vector
และstd::array
; และคอมไพเลอร์ตัวใดที่ถูกต้อง?
std::sort
ที่นำไปสู่การค้นหาแบบอิงอาร์กิวเมนต์ (เช่นที่คุณมีอยู่แล้วstd::begin
และstd::end
)?
namespace std
แม้ในที่ที่ตัวชี้แบบธรรมดาจะทำงานได้ ฉันเชื่อว่านี่คือการแทรกการตรวจแก้จุดบกพร่องสร้างเพื่อตรวจสอบการบุกรุกและข้อผิดพลาดทั่วไปอื่น ๆ
sort(...
std::sort(...
-> ฉันเดาว่า ADL (การค้นหาการโต้แย้งขึ้นอยู่กับ) เป็นสิ่งที่สะดุดคุณ นั่นหรือคำแนะนำการหักเงิน ไม่ว่ากรณีใด ๆ; มักจะมีคุณสมบัติฟังก์ชั่นที่คุณโทร