似乎没有办法使用 C++14 来初始化原子成员。以下不起作用(在 gcc 8.0.1 上运行):
#include <atomic>
#include <iostream>
struct stru {
std::atomic_int32_t val_0;
std::atomic_int32_t val_1;
};
int main() {
auto p = new stru{0, 1};
std::cout << p->val_0 << ", " << p->val_1 << std::endl;
}
错误信息:
error: use of deleted function 'std::atomic<int>::atomic(const std::atomic<int>&)'
auto p = new stru{0, 1};
^
这是因为原子类型既不可复制也不可移动,因此不可复制初始化。然而,以下似乎有效(生活在 gcc 8.0.1 上)。
#include <atomic>
#include <iostream>
struct stru {
std::atomic_int32_t val_0;
std::atomic_int32_t val_1;
};
int main() {
auto p = new stru{};
std::cout << p->val_0 << ", " << p->val_1 << std::endl;
}
这有效地执行零初始化,因此无法初始化为零以外的值。有没有办法初始化为其他指定的值?