Koo*_*sha 2 c++ atomic c++17 c++20
考虑以下两行代码:
std::atomic_flag a { }; // Since C++20
std::atomic_flag a = ATOMIC_FLAG_INIT; // Until C++20
Run Code Online (Sandbox Code Playgroud)
在 C++20 中,第一行初始化a为清除状态,但如果我在 C++17 中使用它,a将初始化为未指定的状态。第二行在 C++20 中已弃用,但在 C++ 17 中,它初始化a为清除状态。我怎样才能将它们都包含在代码中?我想我应该使用宏,但是那个宏到底是什么?它适用于所有其他类型的初始化吗std::atomic<T>?
atomic_flag很特别。它在逻辑上相当于 an atomic<bool>,但委员会吸取了具有不同行为的独特专业化的教训,因此他们创建了一个完全独立的类型,而不是atomicfor bools 的专业化。
所有atomic<T>s 都可以通过给它一个 type 值来初始化T(这样你就可以绕过 C++20 之前的值初始化废话)。atomic_flag不能给出 a bool,因为它不存储 a bool。这就是为什么它有那个特殊的ATOMIC_FLAG_INIT宏。
ATOMIC_FLAG_INIT可能已被弃用,但它在 C++20 中并未消失,因此您可以自由使用它。在相对不太可能发生的情况下,它会在 C++23 中被删除,届时您应该不再需要支持 C++17。
| 归档时间: |
|
| 查看次数: |
780 次 |
| 最近记录: |