我希望在一个map中使用原子变量。我正在使用Visual Studio 2012 (msvc-11)和gcc 4.7。我已经定义了一个类型:
typedef std::map<uint64_t, std::atomic<int64_t>> value_map_t;
在msvc-11中,lines
value_map_t map;
map[1] = 0;
产生错误:
错误 C2248:
std::atomic<__int64>::atomic
: 无法访问在类中声明的私有成员std::atomic<__int64>
对于gcc 4.7也是如此(请参见此处)
错误:使用已删除的函数
std::atomic<long int>::atomic(const std::atomic<long int>&)
然而,在Visual Studio 2013 (msvc-12)及以上版本以及gcc 4.8和更新版本中,它可以正常工作。
请自行查看gcc 4.8和Visual Studio 2013+
我该怎么在msvc-11 / gcc 4.7中使其工作?
std::atomic
是 C++11 的一个特性,如果你不想使用支持 C++11 的编译器,那么你可能不能很好地使用这些功能。在这方面,gcc 4.7 和 msvc-11 都表现得相当不稳定。 - Chris Beck