c++ - 是 std::atomic>> 有效/安全?
问题描述
根据是否 std::atomic<std::string> 工作正常?,std::atomic<std::string>
无效,并可能导致未定义的行为。
怎么样std::atomic<std::optional<std::chrono::time_point<std::chrono::system_clock>>>
?
std::optional
有operator=
但std::chrono::time_point
没有,所以我很困惑。我如何确定任何类型?
解决方案
检查很简单:
static_assert(std::is_trivially_copyable_v<
std::optional<std::chrono::time_point<std::chrono::system_clock>>>);
在 gcc 8.1(以及相关的 libstdc++)之前,断言失败,因此使用起来不安全。在 gcc 8.1 之后,断言通过了,所以它是安全的。
在 clang 7(以及相关的 libc++)之前,断言失败,因此使用起来不安全。在 clang 7 之后,断言通过并且它是安全的。
推荐阅读
- c# - 如何根据输入的文本过滤和自动建议组合框项目?
- javascript - CSS伪类在通过JS更新变量值后消失
- java - 表单提交发送不需要的 GET 请求
- python - 在比较两个列表时如何获取不匹配元素的列表?
- django - 如何运行与 gunicorn 绑定的 django 应用程序?
- r - 通过选择旧 df 的一部分(单个变量的一部分)来创建新的 df
- jquery - 如何在Odoo V12的表单视图中作为附件上传后预览图像和pdf
- c - 快速排序的 C 实现在 arr[0] 处产生垃圾值
- php - 在聊天小部件中找不到 botman 聊天机器人错误 404 页面
- nginx - nginx路由wss和https流量,监听同一个端口