トップページ > プログラム > 2016年12月13日 > R+yFeKlS

書き込み順位&時間帯一覧

9 位/176 ID中時間01234567891011121314151617181920212223Total
書き込み数0010000000020000000000014



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
C++相談室 part128 [無断転載禁止]©2ch.net

書き込みレス一覧

C++相談室 part128 [無断転載禁止]©2ch.net
518 :デフォルトの名無しさん[sage]:2016/12/13(火) 02:10:32.03 ID:R+yFeKlS
>>517
間違いと言われてるのは>>446でしょ。
>>454の中段にあるとおりパディングについては定められていないので、連続しない可能性がある。

メモリレイアウトが連続すれば配列のようにアクセスしてよい、というわけでもないので、
>>454の最後の「考慮しなくていいんじゃね」が「配列アクセスしてもいいんじゃね」という意味で
言ってるなら、これもマズい。
C++相談室 part128 [無断転載禁止]©2ch.net
530 :デフォルトの名無しさん[sage]:2016/12/13(火) 11:17:02.60 ID:R+yFeKlS
>>519
配列外参照が未定義動作なのは知ってるよね?
struct vec3 {float x,y,z;}; の x とか、非配列について配列アクセス(ポインタ演算)できる範囲は
要素数1の配列と同じになるので、 (&x)[1] を読み書きしたり (&x) + 2 したりすると未定義動作になる。
コンパイラはそういう操作が無いことを前提とした「最適化」を行ってよい。
https://cpplover.blogspot.jp/2014/06/old-new-thing.html

いま動いてても何かの拍子に静かに壊れる可能性のあるコードはマズいでしょ。
C++相談室 part128 [無断転載禁止]©2ch.net
532 :デフォルトの名無しさん[sage]:2016/12/13(火) 11:52:43.25 ID:R+yFeKlS
>>531
少なくとも現行の規格では、配列アクセス(ポインタ演算)の制限についてchar類についての特例は無いよ。

>>525 つまりmemsetの類をユーザーコードで実装できる保証も無い。これは規格中で曖昧なところでもある。
http://wg21.cmeerw.net/cwg/issue1701
ただ、伝統的なコンパイラは既存のコードを守るためなどの理由で、最適化を控える判断をする可能性は高い
だろうとは思う。
C++相談室 part128 [無断転載禁止]©2ch.net
564 :デフォルトの名無しさん[sage]:2016/12/13(火) 23:58:07.70 ID:R+yFeKlS
>>535
> 同じ領域を別の型で解釈するunionという明確な機能がある

C++のunionにそんな機能は無いよ。
アクティブなメンバ以外を通して読み書きすると未定義動作になる。
(構造体同士のcommon initial sequence部分の読み取りだけ特例でOK)
(Cの規格にはいけそうな文面があるんだけど、複数のDRへの委員会回答が
 さらなる混乱を醸しててカオス状態だから結局ポータブルとは言い難い
 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65892


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。