回答編集履歴

2

refinement

2020/11/25 06:00

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  ----
24
24
 
25
- 本題からはそれますが、変換先の型のアライメント要件によっては「未規定(unspecified)のポインタ値」(≠ 未定義(undefined))となる可能性があります。[C++17 [static.cast]/13](https://timsong-cpp.github.io/cppwp/n4659/expr#static.cast-13)
25
+ 本題からはそれますが、変換先のオブジェクト`T`のアライメント要件によっては「未規定(unspecified)のポインタ値」(≠ 未定義(undefined))となる可能性があります。[C++17 [static.cast]/13](https://timsong-cpp.github.io/cppwp/n4659/expr#static.cast-13)
26
26
 
27
27
 
28
28
 

1

appendix

2020/11/25 06:00

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -17,3 +17,13 @@
17
17
 
18
18
 
19
19
  > An object pointer can be explicitly converted to an object pointer of a different type. When a prvalue `v` of object pointer type is converted to the object pointer type "pointer to cv `T`", the result is `static_­cast<cv T*>(static_­cast<cv void*>(v))`. [...]
20
+
21
+
22
+
23
+ ----
24
+
25
+ 本題からはそれますが、変換先の型のアライメント要件によっては「未規定(unspecified)のポインタ値」(≠ 未定義(undefined))となる可能性があります。[C++17 [static.cast]/13](https://timsong-cpp.github.io/cppwp/n4659/expr#static.cast-13)
26
+
27
+
28
+
29
+ > A prvalue of type "pointer to cv1 `void`" can be converted to a prvalue of type "pointer to cv2 `T`", where `T` is an object type and cv2 is the same cv-qualification as, or greater cv-qualification than, cv1. If the original pointer value represents the address `A` of a byte in memory and `A` does not satisfy the alignment requirement of `T`, then the resulting pointer value is unspecified.