- C++相談室 part127 [無断転載禁止]©2ch.net
203 :デフォルトの名無しさん (ワッチョイ 8b7b-yLuk)[sage]:2016/10/09(日) 10:33:17.77 ID:gIk33Du70 - >>199
規格はどうあれclangでもgccでもVCでも使えるけどな実行時にサイズが決まる配列
|
- C++相談室 part127 [無断転載禁止]©2ch.net
204 :デフォルトの名無しさん (ワッチョイ 8b7b-yLuk)[sage]:2016/10/09(日) 10:48:09.93 ID:gIk33Du70 - 「定数/定数がコンパイル時定数になるとは限らない」の規格的な根拠はここ
5.20 Constant expressions [expr.const] 〜 [ Note: Constant expressions can be evaluated during translation.―end note ] "can be"であって"must be"じゃないから
|
- C++相談室 part127 [無断転載禁止]©2ch.net
210 :デフォルトの名無しさん (ワッチョイ 8b7b-yLuk)[sage]:2016/10/09(日) 12:43:19.01 ID:gIk33Du70 - >>209
>「定数式が要求されない文脈では実行時評価しても良い」 は? >配列サイズはコンパイル時ではないのか そうだよ規格的には clangとかgccは-pedanticオプションを指定すれば規格に沿ったチェックを行う -pedantic付けないと可変長配列が使える あと>>203に嘘を書いてしまったのを訂正する VCのC++では可変長配列は使えないみたい ICCでは使える(コンパイラをICCに切り替えていたのを忘れていた。。。)
|
- C++相談室 part127 [無断転載禁止]©2ch.net
211 :デフォルトの名無しさん (ワッチョイ 8b7b-yLuk)[sage]:2016/10/09(日) 13:01:12.93 ID:gIk33Du70 - >>208
5.19/2はcore constant expressionとなる条件を書いてるだけで core constant expressionはコンパイル時評価しなくちゃいけないなんて書いてないと思うが??? >お前が「規格的」と称して引用した規格モドキ 規格に明確に書いていることをモドキ呼ばわりされてもねえ(笑)
|
- C++相談室 part127 [無断転載禁止]©2ch.net
212 :デフォルトの名無しさん (ワッチョイ 8b7b-yLuk)[sage]:2016/10/09(日) 13:07:24.40 ID:gIk33Du70 - ちょっと待てよ
俺が見てる規格のドラフト(n4296でもn4582でも)では5.19は「Comma operator」 であってconstant expressionに対する記述は5.20なんだが? >>209はどれを見てるんだ???
|
- C++相談室 part127 [無断転載禁止]©2ch.net
214 :デフォルトの名無しさん (ワッチョイ 8b7b-yLuk)[sage]:2016/10/09(日) 13:30:33.23 ID:gIk33Du70 - N4141は持ってないし買う気もしないからN4140ダウンロードして見てみたら
5.19が「Constant expressions」だったわw 5.19/5にはこうあるんだよなあ 5 [ Note: Since this International Standard imposes no restrictions on the accuracy of floating-point operations, it is unspecified whether the evaluation of a floating-point expression during translation yields the same result as the evaluation of the same expression (or the same operations on the same values) during program execution.87 [ Example: bool f() { char array[1 + int(1 + 0.2 - 0.1 - 0.1)]; // Must be evaluated during translation int size = 1 + int(1 + 0.2 - 0.1 - 0.1); // May be evaluated at runtime return sizeof(array) == size; } It is unspecified whether the value of f() will be true or false. ―end example ] ―end note ] >>規格に明確に書いていることをモドキ呼ばわりされてもねえ(笑) >そんなことを言ったところで、>>204で引用したものが規格ではないという事実に変わりはないぞ Noteに書いてるものが規格じゃないとでも?じゃあ5.19/5は丸ごと規格じゃないな(笑)
|
- C++相談室 part127 [無断転載禁止]©2ch.net
219 :デフォルトの名無しさん (ワッチョイ 8b7b-yLuk)[sage]:2016/10/09(日) 14:38:38.35 ID:gIk33Du70 - >>215
まーた話をずらしてる 意味不明?もし本当にそう思うならあなたは規格から意味を汲み取れない人 215については俺も全部yesだよ 俺が言ったのは「定数/定数のような定数式の評価はコンパイル時定数になるとは限らない」だ
|
- C++相談室 part127 [無断転載禁止]©2ch.net
226 :デフォルトの名無しさん (ワッチョイ 8b7b-yLuk)[sage]:2016/10/09(日) 16:10:17.82 ID:gIk33Du70 - >>223
>もちろんこの発言が出た>>182,>>186は配列宣言の話なので、すり替えられても困るが 配列宣言に限った話じゃなかったんだが??? 「限らない」も理解できないんじゃ話になりませんな
|
- C++相談室 part127 [無断転載禁止]©2ch.net
227 :デフォルトの名無しさん (ワッチョイ 8b7b-yLuk)[sage]:2016/10/09(日) 16:21:59.70 ID:gIk33Du70 - >>182は>>163に対するレスだが
ここに書いた https://ideone.com/phgInn の行16のsizeof array/sizeof array[0]はコンパイル時に評価されるとは限らないと言ってるのだが? もっとも俺が知る限りの全てのコンパイラでこれはコンパイル時定数になるけどね それ以外のコンパイラなんて見たこと無い ただそれは規格では保証されていないということ
|
- C++相談室 part127 [無断転載禁止]©2ch.net
230 :デフォルトの名無しさん (ワッチョイ 8b7b-yLuk)[sage]:2016/10/09(日) 16:44:53.69 ID:gIk33Du70 - >>228
そうなのかなあ?規格をペダンティックに解釈するとそうなのかも知れないが >>182のcountofのNを実行時に計算するコードとか想像もできない sizeof array/sizeof array[0]の割り算を実行時にやるコードなら想像できる ともあれ疲れてきたし、不毛だから俺はもうこの話題はいいよ 『プログラマは規格のみにて生くるにあらず』なのだから この規格クソみたく読みづらいし
|