- C言語なら俺に聞け 139 [無断転載禁止]©2ch.net
525 :デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]:2017/03/21(火) 08:10:28.70 ID:bH1u/9cj0 - 未定義というのは規格で未定義ってことで、自由に未定義な部分を定義していいよ
新しく定義した部分で既存の定義を改変するようなことをしてもいいよってことだよな。 タイムマシーンはそれを悪意のあるように話を故意に捻じ曲げて 未定義=悪い動作をすることと思想を植え付けたいみたいだな
|
- C言語なら俺に聞け 139 [無断転載禁止]©2ch.net
527 :デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]:2017/03/21(火) 08:40:29.97 ID:bH1u/9cj0 - コンパイラーによって定義がかわる部分が未定義動作だろ。
コンパイラーの実装によっては未定義動作がクラッシュするとか 間違った動作をするかもしれないと 定義されてるだけで、未定義なわけではない。
|
- C言語なら俺に聞け 139 [無断転載禁止]©2ch.net
529 :デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]:2017/03/21(火) 08:45:51.54 ID:bH1u/9cj0 - 未定義動作は規格で動作を定義しないということだから
コンパイラーが独自に定義していいってことだろ。 良い方向に定義するなら大歓迎。使わないなんてもったいない。
|
- C言語なら俺に聞け 139 [無断転載禁止]©2ch.net
531 :デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]:2017/03/21(火) 09:21:56.24 ID:bH1u/9cj0 - 良い方向に定義された規格では未定義な動作
|
- C言語なら俺に聞け 139 [無断転載禁止]©2ch.net
534 :デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]:2017/03/21(火) 11:27:10.77 ID:bH1u/9cj0 - 未定義はめんどくさいから禁止にしておこうということなかれ主義の慣例だからね。
仕来りや伝統を重んじる日本人にはこの手の人間が多い。 大事なのは自分で考えて使うか使わないか決める事。 理由も無く禁止と言われて従うのは個人の自由。
|
- C言語なら俺に聞け 139 [無断転載禁止]©2ch.net
536 :デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]:2017/03/21(火) 11:42:42.81 ID:bH1u/9cj0 - 動作が未定義なわけで定義してない動作が起こるということじゃないよ
例えば一つの実装として、NULLポインターをデリファレンスすると 全てのキーワードやステートメントがJavaと置き換わるとしてもいいんだよ。 なぜなら未定義動作で今まで定義したものを変えてもいいと定義されているのだからね。 CがJavaに自由に拡張できる、これがCの寛容さなんだね。
|
- C言語なら俺に聞け 139 [無断転載禁止]©2ch.net
538 :デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]:2017/03/21(火) 12:04:48.72 ID:bH1u/9cj0 - C++は初期状態がC++だからCじゃないだけだろ。
ちゃんと未定義動作をしてからCがC++にならないとCじゃない。
|
- C++相談室 part129 [無断転載禁止]©2ch.net
783 :デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]:2017/03/21(火) 12:35:09.71 ID:bH1u/9cj0 - Expression templateの一時変数問題は
ムーブコンストラクターで解決された問題だよね。
|
- C++相談室 part129 [無断転載禁止]©2ch.net
786 :デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]:2017/03/21(火) 13:04:15.57 ID:bH1u/9cj0 - a[0] += b[0];
a[0] += b[1]; c[0] += a[0]; c[1] += a[1]; r[0]=c[0] r[1]=c[1] ムーブコンストラクターを使うとこうなる
|
- C++相談室 part129 [無断転載禁止]©2ch.net
789 :デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]:2017/03/21(火) 13:29:00.21 ID:bH1u/9cj0 - 間違えた
tmp[0]=a[0] + b[0]; tmp[0]=a[1] + b[1]; tep[0]+=c[0]; tep[1]+=c[1]; r[0]=temp[0] r[1]=temp[1] 一時変数が一個で良いってことだな aかbが右辺値なら1個だ
|
- C++相談室 part129 [無断転載禁止]©2ch.net
790 :デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]:2017/03/21(火) 13:30:57.12 ID:bH1u/9cj0 - また間違えた、aかbが右辺値なら0個だ
|
- C++相談室 part129 [無断転載禁止]©2ch.net
792 :デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]:2017/03/21(火) 13:32:18.98 ID:bH1u/9cj0 - もう一個訂正tmp =temp,tem,tmp
|
- C++相談室 part129 [無断転載禁止]©2ch.net
794 :デフォルトの名無しさん (ワッチョイ 534f-v8EU)[sage]:2017/03/21(火) 13:41:08.81 ID:bH1u/9cj0 - 実際に
tmp[0]=a[0] + b[0]; tmp[0]=a[1] + b[1]; tep[0]+=c[0]; tep[1]+=c[1]; r[0]=temp[0] r[1]=temp[1] 上のと同等の演算が r[0] = a[0] + b[0] + c[0]; r[1] = a[1] + b[1] + c[1]; で出来るというわけで実際に 3回に計算するわけじゃないよ
|