c++ - 是否将正确对齐和大小的数组转换为未构造的 Trivial Type 未定义行为?
问题描述
以下代码是否定义明确?
struct S { int x; };
alignas(alignof(S)) char c_arr[sizeof(S)];
S *s_ptr = (S*)c_arr;
s_ptr->x = 5; // UB or not UB?
注意: S 被有意定义为Trivial Type。
如果我们通过添加一个仅将 X 设置为任意值而不通过放置 new 调用它的构造函数来使类型变得无关紧要,情况会改变吗?
这个问题与这个问题不同,因为它不使用 malloc 并且还询问非平凡类型。
解决方案
推荐阅读
- cassandra - Datastax OpsCenter 用于从节点收集指标的默认一致性级别
- javascript - 带有 Lodash Debounce 的 VueJS 计算属性
- kubernetes - 如何在 kubernetes 自定义主题中保留 keycloak
- .net - 如何使用 dotnet 命令创建 nuget 元包?
- android - Firebase Crashlytics 报告 InflateException: ResourceNotFoundException for a Trend TaintArt for 4x6
- scala - IntelliJ 显示有关依赖方法类型的类型不匹配错误,即使 sbt 编译良好(scala)
- node.js - 缺少到 POST 的路线
- python - 使用 model_main.py 进行训练对象检测失败并出现 Windows 致命异常:访问冲突
- c++ - 如何获取呼叫行号和文件名
- python - 如何对字典中的值是python中的列表进行排序