不確定這是可能的,但如果是這樣,你如何在 C 11 中使用原子列舉類作為 switch 陳述句?例如,
#include <atomic>
#include <iostream>
enum class A {RED, FRUIT, APPLE};
int main(){
std::atomic<A> myAtomicEnum;
myAtomicEnum = A::RED;
switch (myAtomicEnum){
case A::RED:
std::cout << "A::RED \n";
break;
default:
break;
}
return 0;
}
給出編譯器錯誤
error: multiple conversions from switch condition type
'std::atomic<A>' to an integral or enumeration type
switch (myAtomicEnum){
使用列舉類(非原子)的另一個問題強制使用一元 轉換為算術型別,但您不能將 an 傳遞std::atomic<A>給一元 。使用非原子列舉類而不使用一元 時,我沒有收到任何錯誤,例如
#include <iostream>
enum class A {RED, FRUIT, APPLE};
int main(){
A myEnum = A::RED;
switch (myEnum){
case A::RED:
std::cout << "A::RED \n";
break;
default:
break;
}
return 0;
}
A::RED按預期輸出。
問題的背景關系是我有一個類,其成員可以由多個執行緒讀取/寫入,以及使用該成員的 switch 陳述句。我有一個使用互斥鎖的解決方法,以便我有明確定義的行為,但如果可能的話想使用atomic。
uj5u.com熱心網友回復:
在 C 11 中,您可以將原子型別變數顯式轉換為列舉型別,這將呼叫std::atomic<T>::operator T()物件的轉換運算子:
switch ((A)myAtomicEnum){
case A::RED:
...
順便說一句,從 C 14 開始,不需要這種顯式轉換,并且轉換為切換型別將隱式完成(cppreference.com,隱式轉換頁面)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/513854.html
標籤:C c 11枚举标准原子
下一篇:使用Makefile多輸出檔案
