我的程序很简单,我想使用原子类型。它与int
或double
一起工作,但与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