Hôm nay tôi đang giúp với sau không chính xác đang mảnh (func
được tuyên bố với int
param, nhưng int*
đã được thông qua như param thứ hai để std::thread
constructor):Làm cách nào để diễn giải loại C++ này?
#include <thread>
void func(int);
int* ptr;
void start()
{
std::thread t = std::thread(func, ptr);
}
Khi tôi cố gắng biên dịch này với gcc 5.3.0, nó in thông báo lỗi với loại sau:
class std::result_of<void (*(int*))(int)>
Bây giờ tôi tự hỏi cách diễn giải kiểu được chuyển thành tham số là class std::result_of<>
. Nó tương tự như con trỏ đến hàm (trong trường hợp này là void(*)(int)
), nhưng với thêm (int*)
sau dấu sao trong ngoặc đơn. Cách diễn giải loại này?
Nếu 'func' yêu cầu' int' tại sao bạn chuyển một 'int *'? – NathanOliver
Đây là lỗi trong mã mà tôi đã thấy hôm nay - có lẽ đây là lỗi đánh máy. –
Một tuyên bố tương tự cho [this theo cdecl] (http://cdecl.ridiculousfish.com/?q=void+%28*f%28int*%29%29%28int%29). – ArchbishopOfBanterbury