讓我們考慮下一個片段:
int val=5;
int& ref=val;
std::atomic<int> atomicref(ref);
atomicref;
std::cout<< "atomic ref="<<atomicref.load()<<" original ref="<<ref<<" original val="<<val;
當我在 Mac OS X、XCode 8.3.3、c 11 下編譯它時,我收到如下輸出:
atomic ref=6 original ref=5 original val=5
線路:
std::atomic<int> atomicref(ref);
當然看起來很可疑,因為atomic下的型別與變數宣告中的型別不同 - 它是參考。
我想知道為什么值不匹配;說atomicref實際上創建了val的副本是否正確?
uj5u.com熱心網友回復:
std:atomic with reference type 創建基礎變數的副本?
您的代碼中沒有“具有參考型別的原子”。您只需使用一個參考來初始化atomic<int>包含一個int值的 。
它不是特定于std::atomic和相似于
int x = 42;
int& x_ref = x;
int copy_of_x = x_ref;
copy_of_x是副本x不是參考。
uj5u.com熱心網友回復:
atomic_ref類在 C 20 中實作原子參考。盡管根據標準atomic_ref,除了其他類似的atomic_ref.
所以這應該有效:
alignas(std::atomic_ref<int>::required_alignment) int val=5;
int& ref=val;
{
std::atomic_ref<int> atomicref(val);
atomicref;
std::cout<< "atomic ref="<<atomicref.load();
}
std::cout<< " original ref="<<ref<<" original val="<<val;
但通常你應該只使用它std::atomic,而不是訪問底層值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/365025.html
上一篇:關于列印圖案
