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

c++ - Không thể chuyển std::min sang hàm, bản sao của std::min là hợp lệ

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

Sẽ std::phút Truyền tới một hàm sẽ không biên dịch. Tôi sẽ std::phút Đã sao chép khai báo libcpp vào tệp nguồn của tôi và nó đã hoạt động.

Có gì sai với phiên bản std? Điều tương tự cũng xảy ra với clang và gcc. Đã thử nghiệm trên Godbolt:https://godbolt.org/g/zwRqUA

#include 
#include

không gian tên mystd {
// khai báo sao chép nguyên văn từ std::min (libcpp 4.0)
mẫu constexpr nội tuyến const _Tp&
mymin(const _Tp& __a, const _Tp& __b)
{
trả về std::min(__a, __b);
}
}

int main()
{
std::thread thr1(std::min, 2, 3); // lỗi biên dịch
std::thread thr2(mystd::mymin, 2, 3);
return 0;
}

lỗi clang và gcc:

Lỗi [x86-64 clang 5.0.0 #1]: không có hàm tạo phù hợp để khởi tạo 'std::thread'

Lỗi [x86-64 gcc 7.2 #1]: không có chức năng khớp cho lệnh gọi tới 'std::thread::thread(, int, int)'
[x86-64 gcc 7.2 #1] lưu ý: không thể suy ra tham số mẫu '_Callable'

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

Có hai hàm mẫu phút Quá tải cho một tham số mẫu. họ là

mẫu constexpr const T& min(const T& a, const T& b);

mẫu
constexpr T min(initializer_list t);

Vì vậy trình biên dịch không biết nên chọn cái nào.

Bạn có thể sử dụng một kiểu con trỏ hàm rõ ràng để cho trình biên dịch biết bạn đang đề cập đến hàm nào.

Hoặc bạn có thể sử dụng một con trỏ trung gian. Ví dụ

const int & ( *hoạt động )( const int &, const int & ) = std::min;

sau đó sử dụng con trỏhoạt độngthay vì chức năngstd::phút.

Về C++ - không thể chuyển std::min sang hàm, bản sao của std::min hoạt động, 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/47109317/

34 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