鑑於foo.cpp
:是一個零初始化std :: atomic <T*>保證等價於用nullptr初始化的一個嗎?
#include <atomic>
namespace {
std::atomic<int*> gets_zero_init;
std::atomic<int*> gets_nullptr{nullptr};
}
我相信gets_zero_init
是零初始化,並且它的初始化後,零初始化完成。我也確信gets_nullptr
最終將被初始化爲nullptr
,我還相當確信gets_nullptr
的初始化在零初始化後不完成,因爲std::is_trivially_constructible<decltype(gets_nullptr), int*>::value
是false
(至少它是在我的編譯器上)。然而,我仍然不清楚gets_nullptr
是否在恆定初始化,靜態初始化或動態初始化之後完全初始化。這是什麼?另外,爲了說明起見,我可以說我有興趣確保感興趣的對象在零初始化之後完全初始化,並且不需要任何進一步的初始化,所以我採用gets_zero_init
方法。由於零初始化,嵌入在gets_zero_init
中的指針將保持全零位模式。
確保全零位模式相當於nullptr
?換句話說,如果我想要gets_nullptr
的語義,我可以依靠gets_zero_init
的零初始化來提供嗎?
嘗試過'std :: is_trivially_constructible :: value'? –
Yakk
@Yakk是的,我其實先嚐試過。只是雙重檢查,同樣的問題。編譯器是'Apple LLVM 7.3.0版(clang-703.0.31)',使用libC++。 – acm