这是我的代码(虽然删除了一些不相关的部分):
#include <atomic>
#include <math.h>
#include <iostream>
using namespace std;
struct Profiler
{
private:
Profiler() {}
Profiler(const Profiler& other) {}
Profiler operator = (const Profiler& other) { return *this; }
public:
static atomic_ullong a;
static atomic_ullong b;
};
atomic_ullong Profiler::a = { (unsigned long long)0 };
atomic_ullong Profiler::b = { (unsigned long long)0 };
bool func()
{
Profiler::a++;
float det = rand();
if (abs(det) < numeric_limits<float>::epsilon())
return false;
Profiler::b++;
return true;
}
int main(int argc, char** argv)
{
bool result = func();
cout << result << endl;
system("pause");
return 0;
}
它在调试模式下编译和运行良好。但是,在我切换到发布模式后,我在运行时不断收到访问冲突异常。如果我将 atomic_ullong 更改为 atomic_ulong 或 atomic_uint,它运行起来没有问题,这太奇怪了。但这两个的长度是不够的。所以有谁知道为什么会发生这种情况以及如何解决它?请帮忙!