Đoạn trích sau đây từ dự thảo hiện nay cho thấy những gì tôi muốn nói:C++ 0x | Tại sao std :: nguyên tử quá tải mỗi phương pháp với các biến dạng dễ bay hơi?
namespace std {
typedef struct atomic_bool {
bool is_lock_free() const volatile;
bool is_lock_free() const;
void store(bool, memory_order = memory_order_seq_cst) volatile;
void store(bool, memory_order = memory_order_seq_cst);
bool load(memory_order = memory_order_seq_cst) const volatile;
bool load(memory_order = memory_order_seq_cst) const;
operator bool() const volatile;
operator bool() const;
bool exchange(bool, memory_order = memory_order_seq_cst) volatile;
bool exchange(bool, memory_order = memory_order_seq_cst);
bool compare_exchange_weak(bool&, bool, memory_order, memory_order) volatile;
bool compare_exchange_weak(bool&, bool, memory_order, memory_order);
bool compare_exchange_strong(bool&, bool, memory_order, memory_order) volatile;
bool compare_exchange_strong(bool&, bool, memory_order, memory_order);
bool compare_exchange_weak(bool&, bool, memory_order = memory_order_seq_cst) volatile;
bool compare_exchange_weak(bool&, bool, memory_order = memory_order_seq_cst);
bool compare_exchange_strong(bool&, bool, memory_order = memory_order_seq_cst) volatile;
bool compare_exchange_strong(bool&, bool, memory_order = memory_order_seq_cst);
atomic_bool() = default;
constexpr atomic_bool(bool);
atomic_bool(const atomic_bool&) = delete;
atomic_bool& operator=(const atomic_bool&) = delete;
atomic_bool& operator=(const atomic_bool&) volatile = delete;
bool operator=(bool) volatile;
} atomic_bool;
}
dễ bay hơi là bắc cầu. Do đó, bạn không thể gọi hàm thành viên không bay hơi từ một đối tượng dễ bay hơi. Mặt khác, gọi hàm thành viên dễ bay hơi từ một đối tượng không bay hơi được cho phép.
Vì vậy, có sự khác biệt thực hiện nào giữa các hàm thành viên dễ bay hơi và không bay hơi trong các lớp nguyên tử không? Nói cách khác, có cần thiết cho quá tải không bay hơi không?
Một câu hỏi hay hơn là tại sao cần phải có quá tải "dễ bay hơi" ở nơi đầu tiên. – GManNickG
@GMan: bởi vì nếu không các chức năng không thể được gọi trên dữ liệu dễ bay hơi. ;) – jalf
@ jalf: Ha, vâng, nhưng kể từ khi hoạt động, loại chính nó tạo ra là nguyên tử (và do đó có thể quan sát được), tại sao chúng ta tạo ra một 'nguyên tử dễ bay hơi <> '? Tôi nghĩ rằng tôi đang thiếu một cái gì đó lớn. – GManNickG