为什么 std::atomic<std::string> 会给出微不足道的可复制错误?



我的程序很简单,我想使用原子类型。它与intdouble一起工作,但与std::string不一起工作。

#include <iostream>
#include <atomic>
#include <string>
int main()
{
std::atomic<int> test(0);  // works
std::cout<<test;  // will print 0
return 0;
}

如果我改为

std::atomic<std::string> test("0");

它会给这个错误

/usr/include/c++/6/atomic:在"struct"的实例化中std::atomic>':main.cpp:16:34:
此处需要/usr/include/c++/6/atomic:178:7:error:static断言失败:std::atomic需要一个普通的可复制类型static_assert(__is_trivialy_copyable(_Tp(,^~~~~~~

我已经用C++17、C++14和C++11测试了代码。遵循此线程执行std::atomic<std::string>工作是否恰当?原子串应该能正常工作,但我出现了这个错误。这背后的原因是什么?如何正确使用std::atomic<std::string>

std::string不能与std::atomic一起使用,因为它不是Trivially可复制

请参阅此处的说明:https://en.cppreference.com/w/cpp/atomic/atomic

主std::原子模板可以用任何TriviallyCopyable类型T同时满足CopyConstructable和可复制可转让。如果下列值中有任何一个,则程序格式不正确为false:

https://en.cppreference.com/w/cpp/named_req/TriviallyCopyable

最新更新