Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未解析的外部符号“std::atomic_fetch_add”_C++_Atomic - Fatal编程技术网

C++ 未解析的外部符号“std::atomic_fetch_add”

C++ 未解析的外部符号“std::atomic_fetch_add”,c++,atomic,C++,Atomic,考虑以下简单代码: #include <iostream> #include <atomic> void add(std::atomic<double> & a, double c) { std::atomic_fetch_add(&a, c); } int main() { std::atomic<double> a; a.store(0); std::cout << a.load

考虑以下简单代码:

#include <iostream>
#include <atomic>

void add(std::atomic<double> & a, double c)
{
    std::atomic_fetch_add(&a, c);
}

int main()
{
    std::atomic<double> a;

    a.store(0);
    std::cout << a.load() << std::endl;

    add(a, 5.0);
    std::cout << a.load() << std::endl;

    std::cin.get();
}
编译它将导致:

错误LNK2019:未解析的外部符号双\uu cdecl std::atomic\u fetch\u addstruct std::atomic*,双???$atomic\u fetch_add@N@性病@@YANPAU$atomic@N@0@N@函数void\uu cdecl addstruct std::atomic&,double?add@@YAXAAU中引用了Z$atomic@N@性病@@N@Z

根据,中定义了原子提取添加,因此发生了什么情况?

如中所述:

标准库为以下类型提供std::atomic模板的专门化:

而double不在列表中。对于非成员函数,还需要注意:

所有成员都有非成员函数模板等价物 std::atomic的函数。这些非成员职能可以是: 另外,对于不是的专门化的类型重载 原子的,但能够保证原子性。唯一这样的类型 标准库中有std::shared\u ptr


所以不支持double。

谁告诉过你std::atomic专门用于double?是的,但是@Slava我没有看到任何地方不能用于double@Jaber-明确列出的std::atomic完全或部分专用的类型,double不在列表中。你知道有哪个库为非整数类型实现了原子算法吗?@Jaber,no从来都不需要这样的beast,我使用互斥锁——过早优化是万恶之源。为了澄清你的答案:基本的原子操作(如加载、存储等)支持double;但不支持算术+,-。。。如前所述。