Tôi đang làm việc trong một dự án với C ++ 11 và tôi đã thử theo mã
#include <atomic>
struct A {
std::atomic_int idx = 1;
};
int main() {
return 0;
}
Tôi gặp lỗi trình biên dịch
error: use of deleted function 'std::__atomic_base<_IntTp>::__atomic_base(const std::__atomic_base<_IntTp>&) [with _ITp = int]'
std::atomic_int idx = 1;
^
Kết quả tương tự là với C ++ 14. Khi tôi chuyển sang C ++ 17, nó hoạt động: Wandbox
Tôi đã kiểm tra cppreference cho sự khác biệt:
Nhưng không có sự khác biệt được ghi nhận giữa C ++ 14 và C ++ 17. Tại sao nó hoạt động với C ++ 17 mà không phải với C ++ 14?
main
(hoặc bất kỳ hàm nào, không cần nó main
), thay vì một hàm tạo cấu trúc. Clang đưa ra một thông báo lỗi tương tự, rõ ràng hơn là nó đang cố gắng sử dụng một hàm tạo sao chép bị xóa thay vì trình khởi tạo hoặc hàm tạo đơn giản: godbolt.org/z/SBGf9w với libc ++