gam*_*n67 2 c++ atomic stdstring thread-safety stdatomic
我的程序很简单,我想使用原子类型。可以使用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;
}
Run Code Online (Sandbox Code Playgroud)
如果我更改为
std::atomic<std::string> test("0");
Run Code Online (Sandbox Code Playgroud)
它将给出此错误
/ usr / include / c ++ / 6 / atomic:在'struct std :: atomic>'的实例中:main.cpp:16:34:
从此处需要/ usr / include / c ++ / 6 / atomic:178:7:错误:静态断言失败:std :: atomic需要一个普通可复制类型static_assert(__ is_trivially_copyable(_Tp),^ ~~~~~~~~~~~~~
我已经使用C ++ 17,C ++ 14和C ++ 11测试了该代码。遵循此线程std :: atomic <std :: string>是否正常工作?原子字符串应该可以正常工作,但是出现了这个错误。这是什么原因呢?以及如何std::atomic<std::string>正确使用?
std :: string不能与std :: atomic一起使用,因为它不是TriviallyCopyable
请参阅此处的说明:https : //en.cppreference.com/w/cpp/atomic/atomic
可以使用同时满足CopyConstructible和CopyAssignable的任何TriviallyCopyable类型T实例化主要的std :: atomic模板。如果以下任何值为false,则程序格式错误:
https://zh.cppreference.com/w/cpp/named_req/TriviallyCopyable
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |