簡體   English   中英

為什么 memory_order_release 支持直到 C++20?

[英]Why memory_order_release support until C++20?

https://en.cppreference.com/w/cpp/atomic/memory_order

從 cppreference 開始,memory_order_release 可以使用到 C++20 嗎? 任何人都可以解釋為什么 C++ 標准會刪除這個以及我們應該使用哪一個 memory_order。

這只是對 cppreference 格式的誤解。 不是“直到 C++20”的那一行,而是整個塊。

在 C++20 中沒有刪除memory_order_release 只是memory_order本身被重新指定為弱枚舉:

typedef enum memory_order {
    memory_order_relaxed,
    memory_order_consume,
    memory_order_acquire,
    memory_order_release,
    memory_order_acq_rel,
    memory_order_seq_cst
} memory_order;

到枚舉 class (作為P0439的結果):

enum class memory_order : /*unspecified*/ {
    relaxed, consume, acquire, release, acq_rel, seq_cst
};
inline constexpr memory_order memory_order_relaxed = memory_order::relaxed;
inline constexpr memory_order memory_order_consume = memory_order::consume;
inline constexpr memory_order memory_order_acquire = memory_order::acquire;
inline constexpr memory_order memory_order_release = memory_order::release;
inline constexpr memory_order memory_order_acq_rel = memory_order::acq_rel;
inline constexpr memory_order memory_order_seq_cst = memory_order::seq_cst;

所有六個 memory 操作仍然存在,並且仍然可以使用相同的拼寫訪問(盡管不鼓勵consume )。

你誤讀了表格。 意思是整個適用於 11 <= C++ < 20。
下面以不同方式定義所有相同常量的塊適用於 C++ >= 20。

只是偶然格式化(直到 C++20)memory_order_release在同一行。 請注意(自 C++11 起)acquire位於同一行,但顯然適用於所有常量,因為 std::atomic 在 C++11 中是新的。

變化是現在有一個enum class ,其中包含常量的短名稱:

enum class memory_order : /*unspecified*/ {
    relaxed, consume, acquire, release, acq_rel, seq_cst
};

並且完整的全局范圍名稱是根據它定義的,例如

inline constexpr memory_order memory_order_release = memory_order::release;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM