- 1 名前:デフォルトの名無しさん(ワッチョイ f37a-QmV0) mailto:sage [2017/03/31(金) 08:47:49.65 ID:UkLjKqcm0.net]
- 次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part129 echo.2ch.net/test/read.cgi/tech/1483940967/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 echo.2ch.net/test/read.cgi/tech/1478440682/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
- 496 名前:デフォルトの名無しさん (ワッチョイ 274b-eVPi) mailto:sage [2017/06/15(木) 11:23:27.43 ID:L9OZrg3x0.net]
- >>487
その例のその時点ではvの要素数は0でMyObjectは一つも構築されない そしてテンプレートの性質として要求されない部分の実体化はされないので 実際には呼ばれない部分のコードがコンパイルエラーにはなる問題にもあたらない
- 497 名前:デフォルトの名無しさん (スップ Sd7a-FPX1) mailto:sage [2017/06/15(木) 11:50:20.24 ID:T9X0CufJd.net]
- その理屈だとデストラクタも不要になるが、実際はデストラクタは必要
- 498 名前:デフォルトの名無しさん (ワッチョイ 8baa-vAEL) [2017/06/15(木) 12:01:45.59 ID:UVt8Gat10.net]
- >>492
そりゃvectorのデストラクタで要素のデストラクタが呼ばれる(テンプレートのインスタンス化が行われる)んだから
- 499 名前:デフォルトの名無しさん (スプッッ Sd3b-Ir2K) mailto:sage [2017/06/15(木) 12:32:05.19 ID:TLt9F5bfd.net]
- >>486
resizeは?
- 500 名前:デフォルトの名無しさん (ワッチョイ 56e4-l3wW) mailto:sage [2017/06/15(木) 12:35:16.93 ID:st+URCRI0.net]
- そのあたりのことはどっかに書いてあった
- 501 名前:デフォルトの名無しさん (ワントンキン MMaa-vAEL) [2017/06/15(木) 12:42:14.22 ID:HosU7tvHM.net]
- >>494
こぴ
- 502 名前:デフォルトの名無しさん (ワントンキン MMaa-vAEL) [2017/06/15(木) 12:43:54.29 ID:HosU7tvHM.net]
- >>494
コピーコンストラクタがあれば引数2つの方が使える
- 503 名前:デフォルトの名無しさん (スップ Sd7a-FPX1) mailto:sage [2017/06/15(木) 12:53:22.51 ID:T9X0CufJd.net]
- >>493
中身は知ってるよ >>491の理屈と合わないって言ってるだけで
- 504 名前:デフォルトの名無しさん (オッペケ Srab-H4RH) mailto:sage [2017/06/15(木) 14:19:10.82 ID:aq+4THbXr.net]
- 「使うメンバ関数に依るけどデフォルトコンストラクタが必要なものはなくね」
↓ 「resizeは?」 ↓ 「コピーコンストラクタがあれば引数2つの方が使える」 これがイケヌマと言うやつか
- 505 名前:デフォルトの名無しさん (ワッチョイ bb11-yC+1) mailto:sage [2017/06/15(木) 15:13:39.32 ID:0w39VBC10.net]
- 333/+C/333
}[amo]*7* %/$/@0000/*/"2BTOLA"~
- 506 名前:~ []
- [ここ壊れてます]
- 507 名前:デフォルトの名無しさん (ワッチョイ bb11-yC+1) mailto:sage [2017/06/16(金) 08:33:30.61 ID:YhgtDNjG0.net]
- <<<C++>>>
} 000-0 001-EK,L,A%&*17&>>=<HUFMO#$BUZ,DOL%$,"LTAR"===7,2&$%\72<&\\7>3%, 002-"GYU","LA" ***"AGILA"*** GOJU-$+$%7.2!$^±%WOLR%,,,
- 508 名前:デフォルトの名無しさん (ワッチョイ 8baa-vAEL) [2017/06/16(金) 09:54:15.30 ID:rTwb7eLL0.net]
- >>499
え?resizeするのにデフォルトコンストラクタ必要じゃないよね?
- 509 名前:デフォルトの名無しさん (スップ Sd7a-FPX1) mailto:sage [2017/06/16(金) 10:48:52.10 ID:+l0M7jEud.net]
- なんで必要じゃないと思うんだか
- 510 名前:デフォルトの名無しさん (スップ Sd7a-FPX1) mailto:sage [2017/06/16(金) 10:51:59.72 ID:+l0M7jEud.net]
- resizeとサイズ指定のコンストラクタ
この2個は必要 他に必要なのが有るかは知らない
- 511 名前:デフォルトの名無しさん (ササクッテロレ Spab-O+YK) [2017/06/16(金) 13:52:01.14 ID:uEZP+i89p.net]
- ぜんぜんわからない
僕たちは雰囲気でvectorを使っている
- 512 名前:デフォルトの名無しさん (オッペケ Srab-H4RH) mailto:sage [2017/06/16(金) 18:08:28.52 ID:h6HoRUoNr.net]
- >>497のような文脈を理解できず関係ないことを言い出す残念なオツムだと
>>502のようにさらにとんちんかんなことを言い出すのだろうきっと
- 513 名前:デフォルトの名無しさん (ワッチョイ 8b9a-FPX1) mailto:sage [2017/06/16(金) 19:00:27.85 ID:exN5gWxV0.net]
- 2chでみんなが文脈を読んで書いてると思うのもどうかと思う
>>497 は質問とか流れとか関係なく単に思った事を書いたんだろうなと思う >>502 は思考力も行動力も無い可愛そうな人なんだろうなと思う
- 514 名前:デフォルトの名無しさん (ワッチョイ 8b9a-FPX1) mailto:sage [2017/06/16(金) 19:06:58.58 ID:exN5gWxV0.net]
- おれも流れを無視して書いてみよう
自分でvectorを作ってみると躓くのが、メモリのアロケートや解放を伴わない、指定位置に対してのコンストラクタやデストラクタの呼び出し ここは他の実装をカンニングしてしまった 他は特に難しいところはなく、ひたすらメンバー関数を作る作業 vectorはlistやmapに比べると作るのが簡単
- 515 名前:デフォルトの名無しさん (ワントンキン MMaa-vAEL) [2017/06/16(金) 20:32:33.08 ID:1QoHt37uM.net]
- むしろ >>486 がresizeの要素数だけ指定したときにデフォルトコンストラクタが使われるということぐらい解ってて言ってるように見えるんだけどな。C++98まではオーバーロードですらない全く同じメンバーだったわけで。
文脈読んでないのはどっちなんだろうね。
- 516 名前:デフォルトの名無しさん (スップ Sd7a-FPX1) mailto:sage [2017/06/16(金) 20:58:35.54 ID:+l0M7jEud.net]
- イミフ
解説よろしく
- 517 名前:デフォルトの名無しさん (オッペケ Srab-H4RH) mailto:sage [2017/06/16(金) 23:20:55.70 ID:jqjhiiMFr.net]
- 単に思ったことを書いてみたすごい例は>>495だな
読み返すと深いものがある
- 518 名前:デフォルトの名無しさん (ワッチョイ 96a6-H4RH) mailto:sage [2017/06/18(日) 14:45:58.32 ID:pAWWq9QO0.net]
- エピス何とかさんって
エピステーメー 迷惑 でググると出てくる人?
- 519 名前:デフォルトの名無しさん (ワントンキン MMaa-JSHy) mailto:sage [2017/06/18(日) 15:04:30.19 ID:maGnATACM.net]
- そう
- 520 名前:デフォルトの名無しさん (ブーイモ MMaf-4fPX) mailto:sage [2017/06/18(日) 17:37:06.92 ID:qo9bGziFM.net]
- ぐぐって最初に出てきた記事を読んできたけど、どっちもどっちな感じだなあ。
ただ一つ言えるのは、エピスの記事はいつもcounterが題材でとてもつまらない。
- 521 名前:デフォルトの名無しさん (ワッチョイ aeaa-vAEL) [2017/06/19(月) 02:44:16.89 ID:vY2cw8HX0.net]
- ぐぐって最初に出てきた記事を読んできたけど、どちらかというと記事の主の方が苦しい言い訳してる感じがするなぁ。
ただ一つ言えるのは、てらているでえぴすてーめーの解答見てると質問者の理解を手助けするような解答にはみえないから好きではない。
- 522 名前:デフォルトの名無しさん (ワッチョイ 96af-VSCS) mailto:sage [2017/06/19(月) 04:56:20.14 ID:ClMyuu520.net]
- namespace A{
static int hoge; } class B { public: static int fuga; }; これらを複数のcppファイルでincludeした場合、 A::hogeはファイルスコープごとにできて B::fugaはファイルスコープ間で共通 で合ってる?
- 523 名前:デフォルトの名無しさん (オッペケ Srab-H4RH) mailto:sage [2017/06/19(月) 08:39:44.53 ID:S/voQGxrr.net]
- 現規格ではfile scopeという言葉の定義が無いことに気付いた
- 524 名前:デフォルトの名無しさん (ワッチョイ ba9f-C7l9) mailto:sage [2017/06/19(月) 08:46:39.99 ID:9+UYKLHD0.net]
- hogeの方はextern付けないと大量生成されるぞ
- 525 名前:デフォルトの名無しさん (ワッチョイ ba9f-C7l9) mailto:sage [2017/06/19(月) 08:47:46.44 ID:9+UYKLHD0.net]
- あ、staticか…わざとやっているのか
- 526 名前:デフォルトの名無しさん (ワッチョイ 136f-98cR) mailto:sage [2017/06/19(月) 10:43:51.86 ID:m1J/TEED0.net]
- >>516
合ってない 以上
- 527 名前:デフォルトの名無しさん (オッペケ Srab-H4RH) mailto:sage [2017/06/19(月) 10:53:54.51 ID:S/voQGxrr.net]
- 注意事項は有るとして、合っているかと言えば合っていると思ったのだがはて
- 528 名前:デフォルトの名無しさん (ワッチョイ 96af-VSCS) mailto:sage [2017/06/19(月) 11:20:57.70 ID:ClMyuu520.net]
- >>520
namespace Aが付けばstaticはファイルに依存しないクラスのstaticメンバーみたいになるということですかね?
- 529 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdda-adb9) mailto:sage [2017/06/19(月) 11:40:33.07 ID:UZhaSadud.net]
- 変数のアドレスを確認すればわかるじゃん。
- 530 名前:デフォルトの名無しさん (アウアウカー Sa33-yC4D) mailto:sage [2017/06/19(月) 12:39:33.09 ID:Edn2ErbFa.net]
- >>522
そんなことない あなたが>>516で言ってたのであってる 正確にはファイルスコープじゃなくて翻訳単位だが
- 531 名前:デフォルトの名無しさん (ワッチョイ 96af-VSCS) mailto:sage [2017/06/19(月) 12:43:52.17 ID:ClMyuu520.net]
- ですよね
ありがとうございます
- 532 名前:デフォルトの名無しさん (オッペケ Srab-H4RH) mailto:sage [2017/06/19(月) 16:50:18.24 ID:OcegvzUdr.net]
- >>523
ほれ ideone.com/RH0dUb 質問者がこういう確認をしてしまう可能性は考えなかったのかね?
- 533 名前:デフォルトの名無しさん (スッップ Sdda-FPX1) mailto:sage [2017/06/19(月) 17:22:49.29 ID:0iIdkSRqd.net]
- さすがににそれはテスト方法が悪い
- 534 名前:デフォルトの名無しさん (オッペケ Srab-H4RH) mailto:sage [2017/06/19(月) 19:46:59.76 ID:OcegvzUdr.net]
- >>527
undefined behaviorとno diagnostics requiredだらけの言語で「アドレス確認すればわかる」とだけ言うのはあまりに安易な助言ではないか、と言っているのであって 確認方法の良し悪しには興味が無い
- 535 名前:デフォルトの名無しさん (ワッチョイ 8b9a-FPX1) mailto:sage [2017/06/19(月) 19:56:58.85 ID:QZxUhfYw0.net]
- お前が何に興味があるかなんてまったく興味がない
- 536 名前:デフォルトの名無しさん (アウアウカー Sa33-C4gc) mailto:sage [2017/06/19(月) 21:31:25.95 ID:/bUZDhU4a.net]
- >>520
>>515に出てきたえぴすなんたらと同じで、仮に知識があったとしても建設的な議論ができずに場をかき混ぜるだけの迷惑な存在に思える。
- 537 名前:デフォルトの名無しさん (ブーイモ MM97-4fPX) mailto:sage [2017/06/20(火) 23:15:54.41 ID:Mr4YEhWoM.net]
- >>515
そもそも苦しい言い訳すらできない事案はwebページに掲載してないだろうしなぁ
- 538 名前:デフォルトの名無しさん (ワッチョイ 1311-H4RH) mailto:sage [2017/06/21(水) 12:51:52.91 ID:+NLKQqoi0.net]
- >>530
こんなとこで他人を中傷してるお前は 迷惑記事の書き手と同レベルだな
- 539 名前:デフォルトの名無しさん (ワッチョイ 7a15-yC+1) mailto:sage [2017/06/21(水) 16:13:27.27 ID:w7AAKRwP0.net]
- >>530
質問に必要なのは回答であって議論じゃない。 議論が建設的であろうがなかろうが質問に対する反応としては不適当だ。 回答が不十分だっていうことならそれは質問者が対話を重ねていくべきことで、 やみくもに話題を広げていく行為はそれこそ場をかき乱すだけだよ。 質問を元にした話題で雑談したっていいと思うが、 質問に対しては質問の回答を返すのが合理的な姿勢で、 先回りしてまで手取り足取り教えてやるような板じゃなかろう。 ム板が殺伐してるのは普通のこと。
- 540 名前:デフォルトの名無しさん (オッペケ Srab-H4RH) mailto:sage [2017/06/21(水) 23:22:10.09 ID:rrguzdDtr.net]
- >回答が不十分だっていうことならそれは質問者が対話を重ねていくべき
「建設的な議論」の認識に齟齬が見られたが >>530と>>533の意見は概ね一致したようだ めでたしめでたし
- 541 名前:デフォルトの名無しさん (ワッチョイ 9f3d-SU2+) mailto:sage [2017/06/22(木) 18:59:54.46 ID:RmXtROOS0.net]
- templateのstaticメンバの初期化(実体化)についてわかる人、
教えてもらえないでしょうか。 次のようなクラス構成があります template<typename T> class A { public: A() : foo(NULL) {} ... void * foo; }; template<typename T> class B { public: ... static A<T> bar; }; class C : public B<C> { public: ... }; ここで、B<C>::barを実体化しないといけないので 1) 以下のように書くとVC++では問題ない template<> A<C> B<C>::bar; 2) 以下のように書くとclang(xcode)では問題ない template<> A<C> B<C>::bar = {}; 3) GCC 4.9では1)でコンパイルは通るが実体化されない。 ということで、GCCでどう書いたらビルドが通るか教えてください。 よろしくお願いします。m(_ _)m
- 542 名前:デフォルトの名無しさん (オッペケ Sr0b-jRIn) mailto:sage [2017/06/22(木) 19:26:04.75 ID:Pj60YbTlr.net]
- >template<> A<C> B<C>::bar;
本当に実体化をしようとしているのか、明示的な実体化が必要なのか疑問だ template<…> X →テンプレート定義 template<…> X<Y> →テンプレート定義(部分特殊化) template<> X<…> →フルの特殊化 template X<…> →明示的実体化 X<…> →使うことで暗黙の実体化
- 543 名前:デフォルトの名無しさん (ワッチョイ 9f3d-SU2+) mailto:sage [2017/06/22(木) 19:46:14.05 ID:RmXtROOS0.net]
- >>536
レスありがとうございます。 実際のコードでは、AとBはそれぞれのヘッダファイルにすべて記述され、 Cのみcppでコード生成しています。1)及び2)はCのソース内に記述しています。 このため、スペシャライズは不要な筈ですが、B内で定義しているstatic変数は Bのクラス内で使用しているため、実体化が必要です。 bar自体はコンストラクタがあるので、普通のstatic変数のように書けば 良いのではないかと思うのですが…。 何か勘違いしてるんですかね?
- 544 名前:デフォルトの名無しさん (ワッチョイ 9f3d-SU2+) mailto:sage [2017/06/22(木) 20:07:59.54 ID:RmXtROOS0.net]
- >>535です、連投すいません。
どうやら解決したようです、デバッグしてみないと本当に解決しているか どうかはわかりませんが(^^; stackoverflowにヒントがありました。 https://stackoverflow.com/questions/2342550/static-member-initialization-for-specialized-template-class // needs a copy constructor! template<> Type Class<Arguments>::member = Type(); コピーコンストラクタで無理やり実体を作るという…。 vc、llvm、gccでそれぞれ書き方が違うとは、やな世の中になったもんだw
- 545 名前:デフォルトの名無しさん (オッペケ Sr0b-jRIn) mailto:sage [2017/06/22(木) 20:44:12.75 ID:Pj60YbTlr.net]
- 特殊化の説明を読んでいるのがよくわからんが
G++で通るコードとやらを貼っとくか ideone.com/u4h6so
- 546 名前:デフォルトの名無しさん (ワッチョイ 374b-ckEx) mailto:sage [2017/06/22(木) 20:51:33.36 ID:6MphhRRE0.net]
- >>535
> 3) GCC 4.9では1)でコンパイルは通るが実体化されない。 実体化されないの意味がよくわからんが B::barの定義がないからだろ ttps://wandbox.org/permlink/dK2e1pFJRGqDvw6G
- 547 名前:デフォルトの名無しさん (オッペケ Sr0b-jRIn) mailto:sage [2017/06/22(木) 21:50:59.77 ID:Pj60YbTlr.net]
- >>535
>1) 以下のように書くとVC++では問題ない >template<> A<C> B<C>::bar; これはVisual C++が規格の14.7.3段落13を正しく実装していないためで 2)の書き方が正しい
- 548 名前:デフォルトの名無しさん (ワッチョイ 9f3d-SU2+) mailto:sage [2017/06/22(木) 21:52:32.77 ID:RmXtROOS0.net]
- >>539さん, >>540さん
ありがとうございます。 なるほど、template<typename T>のままで初期化すればよかったんですね。 あ、でも、vc++2012でエラーが出ますね。 non-aggregates cannot be initialized with initializer list vc++2015はプロジェクトを作ってないのでわかりません。 xcodeは、明日確かめてみます。 あ〜、templateは嫌いだorz
- 549 名前:デフォルトの名無しさん (ワッチョイ 7f91-yPlv) [2017/06/24(土) 13:41:09.22 ID:u+Yuz9bZ0.net]
- 配列に格納された行列同士の乗算がしたいんだけどさ
EigenのMapってこれ、コンパイル時に行列の行数・列数が決まってない時はどうやって利用するもんなの? eigen.tuxfamily.org/dox/group__TutorialMapClass.html Vector型に変更したりしてたら遅くなっちゃうだろうし・・・・どうやるんだろ・・・・
- 550 名前:デフォルトの名無しさん (スッップ Sdbf-iOY8) mailto:sage [2017/06/24(土) 16:50:39.64 ID:1xYcuW8pd.net]
- >>543
ろくに見ずに答えるけど、テンプレートパラメータを明示的に与えられないの?
- 551 名前:デフォルトの名無しさん (ブーイモ MMbf-Cfyt) mailto:sage [2017/06/24(土) 17:52:02.95 ID:UzNhAedeM.net]
- サンプルみた感じ、Dynamicっていうキーワードがあるみたいだけど
- 552 名前:デフォルトの名無しさん (ワッチョイ 9f32-LvKX) [2017/06/25(日) 14:15:18.57 ID:ogKde9930.net]
- union aaa{
uint8_t byte[ 5 ]; struct bit_t { uint32_t b0 : 5; uint32_t b1 : 5; uint32_t b2 : 5; uint32_t b3 : 5; uint32_t b4 : 5; uint32_t b5 : 5; uint32_t b6 : 5; uint32_t b7 : 5; }bit; }; union bbb{ struct bit_t { uint32_t b0 : 5; uint32_t b1 : 5; uint32_t b2 : 5; uint32_t b3 : 5; uint32_t b4 : 5; uint32_t b5 : 5; uint32_t b6 : 5; uint32_t b7 : 5; }bit; uint8_t byte[ 5 ]; }; const aaa a = { 66, 77, 88, 99, 11 }; const bbb b = { a.bit.b0, a.bit.b1, a.bit.b2, a.bit.b3, a.bit.b4, a.bit.b5, a.bit.b6, a.bit.b7 }; bが{66,77,88,35,11}となってaと一致しません。何故ですか
- 553 名前:デフォルトの名無しさん (ワッチョイ f796-Cfyt) mailto:sage [2017/06/25(日) 15:01:36.01 ID:WDBvKZ4J0.net]
- byte境界でないと配置できない環境なんじゃないの?
- 554 名前:デフォルトの名無しさん (ワッチョイ 9f32-MYey) mailto:sage [2017/06/25(日) 15:16:55.26 ID:vsjTFzMZ0.net]
- uint32_tに5ビットずつ詰めてるからだろ
- 555 名前:デフォルトの名無しさん (ワッチョイ 9f9f-Yx6S) mailto:sage [2017/06/25(日) 15:37:16.30 ID:ogZvFgu/0.net]
- 普通は単に unsigned b0:5: と書くべき
ビットフィールドに32tとか余計なモノ乗っけると解釈がおかしくなる
- 556 名前:デフォルトの名無しさん (ワッチョイ 9f9f-Yx6S) mailto:sage [2017/06/25(日) 15:41:35.21 ID:ogZvFgu/0.net]
- あとは副作用でpackアラインが1になってないから無理矢理境界作ってコンパイラが揃えようとしているとか
- 557 名前:デフォルトの名無しさん (ワッチョイ bfe4-Nep8) mailto:sage [2017/06/25(日) 15:51:48.24 ID:k9VtfbZw0.net]
- 共用体の統一初期化記法のことはよくわからないけどちゃんとコンストラクタを書けば解決するのでは
https://wandbox.org/permlink/Fzd26GrwxkCJ5NmL
- 558 名前:デフォルトの名無しさん (ワッチョイ ffaa-4OJu) mailto:sage [2017/06/25(日) 16:07:57.97 ID:Y80WzbX30.net]
- C++を、10年以上勉強してから、共用体を使え
そもそも、初心者が使い道を知らないだろ
- 559 名前:デフォルトの名無しさん (ワッチョイ 9fc3-NIhq) mailto:sage [2017/06/25(日) 17:09:07.72 ID:/94nlHOp0.net]
- >>546
なぜ一致すると思うのかをまず説明すべきではないかね?
- 560 名前:デフォルトの名無しさん (ワッチョイ 1f91-ZLad) mailto:sage [2017/06/25(日) 17:14:35.54 ID:CENP8UyG0.net]
- 99: 1100011
35: _100011 何度かやってみると、合う時もあるな
- 561 名前:デフォルトの名無しさん (ワッチョイ 9f32-LvKX) [2017/06/25(日) 19:00:42.60 ID:ogKde9930.net]
- uint32_tをuint64_tに変えたら一致するようになりました
ヒントになります?
- 562 名前:デフォルトの名無しさん (ワッチョイ 9faf-6L/r) mailto:sage [2017/06/25(日) 19:15:35.89 ID:0WoCYScE0.net]
- VC++2015で調べたらaaa,bbbは8byteでbit_tのメンバーは
b0: 0ビット目 b1: 5ビット目 b2: 10ビット目 b3: 15ビット目 b4: 20ビット目 b5: 25ビット目 b6: 32ビット目 b7: 37ビット目 に配置されてた b6から配置がずれてて30bit目と31bit目がbit_tでは使われてない なのでbでbit_tを使って初期値をセットしてもこの2bitの値は不定になる この2bitが両方とも0の時4byte目は35、 30bit目が0で31bit目が1の時99になる
- 563 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f15-LvKX) mailto:sage [2017/06/25(日) 23:08:48.14 ID:y0reYziw0.net]
- 英語を読むのがだるいので JIS の仕様を見てみた。
まずは C99 (に相当する JISX3010:2003) の 6.7.2.1 にはこうある。 > 処理系は、ビットフィールドを保持するに十分な大きさの任意のアドレス付け可能な記憶域単位を割り付けてよい。 > 十分な領域が残っている場合、構造体内のビットフィールドの直後に続く別のビットフィールドは、同じ単位の隣接したビットに詰め込まなければならない。 > 十分な領域が残っていない場合、入り切らなかったビットフィールドを次の単位に入れるか、又は隣接した単位の境界をまたがせるかは、処理系定義とする。 > 単位内のビットフィールド割付けの順序 (上位から下位か又は下位から上位か) は、処理系定義とする。 この理屈にてらして >>556 を解釈すると、 VC++2015 での記憶域単位は 4 バイトで、ビットフィールドが単位に収まらなかった場合には次の単位に入れる という選択を取っていることになる。 で、 C++03 (JISX3014:2003) ではどうかというと 9.6 にこうある。 > クラスオブジェクト内のビットフィールドの割り当て方は処理系定義とする。 ビットフィールドの境界調整は、処理系定義とする。 ビットフィールドは、何らかのアドレス取得可能な単位内に詰め込まれる。 > 参考 処理系によっては、ビットフィールドの割当て単位をまたがることもあるし、またがないこともある。 右から左に割り当てる処理系もあるし、左から右に割り当てる処理系もある。 この文章の「単位内に詰め込まれる」というのは C での規則にあるように記憶域単位をまたがない限り (次の単位に移らずに) 詰め込むという規則にも読 めるが、ちょっとよくわからない。 常識的に考えれば C より緩い規則ということはないだろうと思うんだけど……。 >>555 指定する型が割当て方に影響するような文面は見付けられなかった。
- 564 名前:デフォルトの名無しさん (オッペケ Sr0b-jRIn) mailto:sage [2017/06/25(日) 23:47:54.19 ID:Tfx4tn9Gr.net]
- >常識的に考えれば (中略) ないだろうと思う
訳:ボクは非常識です
- 565 名前:デフォルトの名無しさん (スップ Sd3f-VrB2) mailto:sage [2017/06/26(月) 00:18:40.72 ID:mZAJ/HXWd.net]
- トンチンカンな回答がほとんどで笑える
- 566 名前:デフォルトの名無しさん (ワッチョイ bfe4-Nep8) mailto:sage [2017/06/26(月) 00:21:57.68 ID:yL9hwVgE0.net]
- 正しい回答をお願いします
- 567 名前:デフォルトの名無しさん (スップ Sd3f-VrB2) mailto:sage [2017/06/26(月) 00:29:03.33 ID:mZAJ/HXWd.net]
- byteの40bitとbの40bitが違う位置だから (ほとんどの環境で)
- 568 名前:デフォルトの名無しさん (スップ Sd3f-VrB2) mailto:sage [2017/06/26(月) 00:32:01.19 ID:mZAJ/HXWd.net]
- 8個のbがbyteをカバーしていない
- 569 名前:デフォルトの名無しさん (スップ Sd3f-VrB2) mailto:sage [2017/06/26(月) 00:37:21.07 ID:mZAJ/HXWd.net]
- >>547 〜 >>552
回答するレベルじゃない 何も書かない方がマシ
- 570 名前:デフォルトの名無しさん (ワッチョイ bfe4-Nep8) mailto:sage [2017/06/26(月) 01:00:43.63 ID:yL9hwVgE0.net]
- そもそも専門的な質問は2chで聞くべきじゃないし
信頼できる専門書を買うべき
- 571 名前:デフォルトの名無しさん (ワッチョイ ffaa-4OJu) mailto:sage [2017/06/26(月) 01:09:10.53 ID:RgMKiEkv0.net]
- 共用体などは、C++を、10年以上勉強してから使え。
そもそも、初心者が使い道を知らないだろ そもそも、5バイトは、40ビットだけど、 ビットフィールドが何バイトの領域に確保されるかも知らないのに、使うな。 処理系依存の機能を使うな MISRA-C でも使用禁止だし、素人が使う共用体なんて、 バグだらけで製品で使えない どの本にも、共用体を使った例など、載っていないだろ
- 572 名前:デフォルトの名無しさん (ワッチョイ 9f89-RNzd) mailto:sage [2017/06/26(月) 01:26:24.49 ID:YVNj3DlL0.net]
- >>565
質問者はただの学習目的かもしれんのに、 素人だとか製品では〜とか批判するのは的外れだろう
- 573 名前:デフォルトの名無しさん (ワッチョイ 374b-ckEx) mailto:sage [2017/06/26(月) 01:34:20.4
]
- [ここ壊れてます]
- 574 名前:7 ID:jY+d4s2A0.net mailto: >>560
すでに言われてるがまとめると>>546の状況では先頭から byteは連続する40bit bit_tは使わない2bitをはさんだ42bit を使用するのでbyte-bit_t間では 余分なbitの取得・必要なbitの欠落が起きて完全な情報のやりとりにならない [] - [ここ壊れてます]
- 575 名前:デフォルトの名無しさん (ワッチョイ 9f9f-Yx6S) mailto:sage [2017/06/26(月) 01:50:32.70 ID:/d8dR7Ut0.net]
- 5bitづつだとどうしてもアドレス跨ぎが発生するからな
4bitづつなら収まるけど
- 576 名前:デフォルトの名無しさん (オッペケ Sr0b-jRIn) mailto:sage [2017/06/26(月) 08:14:37.12 ID:g/kuRdPjr.net]
- >信頼できる専門書を買うべき
ここは信頼できる回答が示されていても日本語が読めない低能が不毛なレスを続ける所なのだが その典型例が>>560ということに本人が気付くことは無いのであった
- 577 名前:デフォルトの名無しさん (オッペケ Sr0b-jRIn) mailto:sage [2017/06/26(月) 20:30:39.48 ID:g/kuRdPjr.net]
- そう言えば規格的には>>546の使い方はNGなので
>>552が言っていることはあながち間違いでもない
- 578 名前:デフォルトの名無しさん (ワッチョイ 9f1b-ZNvc) mailto:sage [2017/06/26(月) 20:36:59.50 ID:cFoP2i7u0.net]
- 規格的には処理系定義なので処理系のマニュアル等で確認して使うならNGではないな
- 579 名前:デフォルトの名無しさん (ワッチョイ 179a-VrB2) mailto:sage [2017/06/26(月) 20:43:43.05 ID:GM19K0OY0.net]
- >>552は質問の回答じゃないから
- 580 名前:デフォルトの名無しさん (ワッチョイ ffaa-4OJu) [2017/06/26(月) 23:25:57.41 ID:RgMKiEkv0.net]
- 共用体で、バイト配列とビットフィールドは、互換性がない型だから使えない。
最低でも、10年以上勉強していない者は、共用体でバグだらけになるから使うな ビットフィールドのメモリ割付位置は、処理系依存だから、 他のOS・OSのビット数(32/64ビット)・他のコンパイラなどで使えない また、コンパイラのバージョンアップで、再コンパイルするだけでも、 メモリ割付位置は変わるから、バグ有りで使えない コンパイルエラーにならず、実行時エラーになるようなものは使えない
- 581 名前:デフォルトの名無しさん (ワッチョイ 179a-VrB2) mailto:sage [2017/06/26(月) 23:35:53.83 ID:GM19K0OY0.net]
- なんかムキになってる
相変わらずズレてるね
- 582 名前:デフォルトの名無しさん (ワッチョイ 9faa-ZLad) mailto:sage [2017/06/26(月) 23:55:54.69 ID:NfcBoQUW0.net]
- 失敗を通じてしか成長できないのにね
- 583 名前:デフォルトの名無しさん (ワッチョイ bfea-WW2k) mailto:sage [2017/06/27(火) 01:00:05.96 ID:NwZhdH240.net]
- 10年以上勉強さん流石ですw
- 584 名前:デフォルトの名無しさん (ワッチョイ 179a-VrB2) mailto:sage [2017/06/27(火) 08:01:35.53 ID:bJ//gE7J0.net]
- 10年勉強して >>573 か
残念な人
- 585 名前:デフォルトの名無しさん (ワッチョイ d7d1-Rbtz) mailto:sage [2017/06/27(火) 10:18:29.05 ID:XwCnx1+f0.net]
- for_eachを並列で高速化する場合
-D_GLIBCXX_PARALLEL でopenmp使う場合と #include <experimental/numeric> の使う場合と どっちが高速なの?
- 586 名前:デフォルトの名無しさん (ワッチョイ 17f3-PFpe) [2017/06/27(火) 10:35:07.84 ID:TVfTial50.net]
- 自分でも無意識のうちにやってたし、ネットのサンプルとかでもよくあるけど
厳密にはunsigned intのほうが相応しい場合でもintつかってるコードをよく見かけるが いちいちintをunsigned intで宣言し直すのもあほらしいしマクロつかって unsigned intを_u_intとかに置き換えて宣言するのもそこまでしなくてもいいんじゃないかとも思うし そこらへんはテキトーでいいんっすかね・・・
- 587 名前:デフォルトの名無しさん (スッップ Sdbf-iOY8) mailto:sage [2017/06/27(火) 10:51:53.32 ID:LPANs+0ed.net]
- std::size_t じゃなくて?
- 588 名前:デフォルトの名無しさん (ワッチョイ d76f-ADZD) mailto:sage [2017/06/27(火) 11:30:31.53 ID:DL/1tDv80.net]
- 負の値を取らないからって「厳密にはunsigned intのほうが相応しい」とは俺は考えないな
intで済むならintにする
- 589 名前:デフォルトの名無しさん (ワッチョイ f7ea-LvKX) mailto:sage [2017/06/27(火) 12:25:58.18 ID:+aQQjqLh0.net]
- 正の数しかとらない変数がまだ初期化されていないことを明示するために負の値(特に-1)を使うとか割とよくある。
- 590 名前:デフォルトの名無しさん (スッップ Sdbf-iOY8) mailto:sage [2017/06/27(火) 14:22:30.38 ID:Gpx2Satod.net]
- >>581
・仕様として正の整数 ・intの範囲で表せる が成り立つならintにする? 自分ならstd::size_tを選ぶなあ >>582 そんな需要があるとはちょっと不思議だ。クラスメンバ?
- 591 名前:デフォルトの名無しさん (ワッチョイ 1f91-ZLad) mailto:sage [2017/06/27(火) 14:33:30.02 ID:ntBitUxx0.net]
- int? i;
が許されるのはC#だっけ?
- 592 名前:デフォルトの名無しさん (ワンミングク MM7f-Rrwd) mailto:sage [2017/06/27(火) 14:41:42.08 ID:siPR+sC7M.net]
- そもそもアドレス宣言と初期化は同時にしろって話だしね
- 593 名前:デフォルトの名無しさん (ワンミングク MM7f-Rrwd) mailto:sage [2017/06/27(火) 14:41:58.86 ID:siPR+sC7M.net]
- アドレス宣言ってなんだ
宣言ね
- 594 名前:デフォルトの名無しさん (ワッチョイ d76f-ADZD) mailto:sage [2017/06/27(火) 15:11:12.82 ID:DL/1tDv80.net]
- >>583
std::size_tの本来の用途じゃない数値でも使つのか?それはちょっと
- 595 名前:デフォルトの名無しさん (スッップ Sdbf-iOY8) mailto:sage [2017/06/27(火) 16:00:23.87 ID:Gpx2Satod.net]
- >>587
ああごめん、もともとは>>579の 「 厳密にはunsigned intのほうが相応しい場合でも」 に反応しての発言だった。
- 596 名前:デフォルトの名無しさん (ワッチョイ 179a-VrB2) mailto:sage [2017/06/27(火) 19:00:49.27 ID:bJ//gE7J0.net]
- >>583
size_tだと64bit環境で64bitになるぞ
|

|