次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part129
http://echo.2ch.net/test/read.cgi/tech/1483940967/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1478440682/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
C++相談室 part130 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ f37a-QmV0)
2017/03/31(金) 08:47:49.65ID:UkLjKqcm0461デフォルトの名無しさん (ワッチョイ 5b23-O+Nk)
2017/06/13(火) 18:34:11.65ID:oGIP5B9w0 配列の中身で重複している要素をカウントしてカウントが一番多かった要素を取り出す
っていうプログラム作りたいので知恵貸してください
{1,2,2,5,2,5}だったら2が取り出せるみたいな
っていうプログラム作りたいので知恵貸してください
{1,2,2,5,2,5}だったら2が取り出せるみたいな
462デフォルトの名無しさん (ワッチョイ eb23-D9zB)
2017/06/13(火) 18:42:01.39ID:nMRvtxJa0 「宿題は自分でやりなさい」
先生たちもこのスレ監視してるからなw
先生たちもこのスレ監視してるからなw
463デフォルトの名無しさん (ワッチョイ 5b23-O+Nk)
2017/06/13(火) 18:56:37.43ID:oGIP5B9w0 宿題じゃねーよw
調べても重複削除くらいしかみつけられない
調べても重複削除くらいしかみつけられない
464デフォルトの名無しさん (スッップ Sd43-3C0K)
2017/06/13(火) 19:08:11.56ID:P4se3SJtd mapを使うとかソートしてしまうとか?
465デフォルトの名無しさん (ワッチョイ 5be4-7qWT)
2017/06/13(火) 19:09:11.39ID:n4I5+XGH0 日本語で書いてあるとおりのことをすればいいだけなのだが
466デフォルトの名無しさん (ドコグロ MM13-W6lL)
2017/06/13(火) 20:25:19.98ID:siDT5/O8M467デフォルトの名無しさん (ワッチョイ 859a-1pl6)
2017/06/13(火) 20:39:09.12ID:8eM6ZKoF0 で,MISRA-C をどこで見ればいいの?売っているの?
468デフォルトの名無しさん (スップ Sd43-ryUj)
2017/06/13(火) 20:56:19.09ID:gcB4XgG8d >>461
データやリソースによって適した実装方法が異なるな
データやリソースによって適した実装方法が異なるな
469デフォルトの名無しさん (ワッチョイ 956f-ujiq)
2017/06/13(火) 20:56:21.35ID:+1XB2sfj0 だからそんなに考古学に興味あるんならググれよ
公式でPDF版£15で売ってるよ
繰り返し言うがここはC++スレだ
公式でPDF版£15で売ってるよ
繰り返し言うがここはC++スレだ
470デフォルトの名無しさん (ワッチョイ dba6-LgKm)
2017/06/13(火) 23:06:22.18ID:apqWicsH0 クソなコードしか思いつかなかった
http://ideone.com/3IBm07
http://ideone.com/3IBm07
471デフォルトの名無しさん (ワッチョイ 23af-Fz1p)
2017/06/13(火) 23:56:53.24ID:G30+7Gz/0 それだと最大要素見つけるのに無駄に2ループするからこの方がよくね
http://ideone.com/AMCSuy
http://ideone.com/AMCSuy
472デフォルトの名無しさん (ワッチョイ 239f-AL/g)
2017/06/14(水) 06:51:42.68ID:Bb4iazb50 どうもしっくり逝かんな
http://ideone.com/mH3sLq
http://ideone.com/mH3sLq
473デフォルトの名無しさん (ドコグロ MM51-W6lL)
2017/06/14(水) 06:58:07.10ID:xl37jtKCM >>469
ひょっとして MISRA-C++ の存在も知らない老害さん?
ひょっとして MISRA-C++ の存在も知らない老害さん?
474デフォルトの名無しさん (オッペケ Sr71-LgKm)
2017/06/14(水) 07:13:45.93ID:97YMYHupr 「: public binary_function」
はて、規格のDで見たような
はて、規格のDで見たような
475デフォルトの名無しさん (ワッチョイ 859a-ryUj)
2017/06/14(水) 07:42:18.88ID:ROBFB8K40 >>461
配列の要素数 : n
要素の値の範囲 : m
計算オーダー
ソート&カウント : n log n
固定配列のカウンタ : max(n, m)
map のカウンタ : n log m
単純な2重ループ : n^2
かな
配列の要素数 : n
要素の値の範囲 : m
計算オーダー
ソート&カウント : n log n
固定配列のカウンタ : max(n, m)
map のカウンタ : n log m
単純な2重ループ : n^2
かな
476デフォルトの名無しさん (ワッチョイ 956f-ujiq)
2017/06/14(水) 07:44:57.00ID:mEpEgwpO0 >>473
話のコンテキストも無視して突然MISRA-C++を出してくるとか頭大丈夫ですか?
話のコンテキストも無視して突然MISRA-C++を出してくるとか頭大丈夫ですか?
477デフォルトの名無しさん (ワッチョイ 859a-ryUj)
2017/06/14(水) 07:51:46.28ID:ROBFB8K40 てことで、
配列の取りうる値が狭い場合、狭い範囲に変換できる場合はvectorによるカウンタ
取りうる値の種類が少ないことはわかっているが、値からインデックスに簡単に変換できない場合はmapによるカウンタ
一般的にはソート&カウント
による実装が良いのでは?
配列の取りうる値が狭い場合、狭い範囲に変換できる場合はvectorによるカウンタ
取りうる値の種類が少ないことはわかっているが、値からインデックスに簡単に変換できない場合はmapによるカウンタ
一般的にはソート&カウント
による実装が良いのでは?
478デフォルトの名無しさん (ワッチョイ 859a-ryUj)
2017/06/14(水) 08:01:12.72ID:ROBFB8K40 ソート&カウント の場合
配列の値の大小比較の定義が必要
非破壊の場合は配列と同じサイズのメモリが必要
vectorカウンタの場合
配列の値からインデックス値に簡単に変換可能である必要がある
インデックス値分 x カウンタサイズ のメモリが必要
setカウンタの場合
配列の値の大小比較の定義が必要
配列の値の種類分 x setのノード のメモリが必要
単純2重ループの場合
一番要求することが少ない
配列の値が同じかどうか判別出来れば良い
配列の値の大小比較の定義が必要
非破壊の場合は配列と同じサイズのメモリが必要
vectorカウンタの場合
配列の値からインデックス値に簡単に変換可能である必要がある
インデックス値分 x カウンタサイズ のメモリが必要
setカウンタの場合
配列の値の大小比較の定義が必要
配列の値の種類分 x setのノード のメモリが必要
単純2重ループの場合
一番要求することが少ない
配列の値が同じかどうか判別出来れば良い
479デフォルトの名無しさん (ワッチョイ 859a-ryUj)
2017/06/14(水) 08:07:23.67ID:ROBFB8K40 配列の値のコピーのコストが大きい場合
などを考えるとさらに別の方法が考えられる
などを考えるとさらに別の方法が考えられる
480デフォルトの名無しさん (ドコグロ MM13-W6lL)
2017/06/14(水) 08:16:37.97ID:SzLmysikM >>476
話のコンテキストも理解できてない老害乙
話のコンテキストも理解できてない老害乙
481デフォルトの名無しさん (ブーイモ MM43-O+Nk)
2017/06/14(水) 08:32:13.08ID:1Ro22eP7M みんなありがとう
やってみる
やってみる
482デフォルトの名無しさん (スプッッ Sd51-RGMd)
2017/06/14(水) 08:51:35.81ID:JEM2dfxwd いえいえ
483デフォルトの名無しさん (ワッチョイ e3af-VSCS)
2017/06/15(木) 02:16:45.12ID:Kprt2KgZ0 vectorのテンプレートに当てるクラスにはデフォルトコンストラクが必須なんでしたっけ?
484デフォルトの名無しさん (ワッチョイ 274b-eVPi)
2017/06/15(木) 02:57:56.05ID:WlVNVHON0 いいえ
03まではコピーできること
11からは破棄できること
が最低限の要件
03まではコピーできること
11からは破棄できること
が最低限の要件
485デフォルトの名無しさん (ワンミングク MMaa-JSHy)
2017/06/15(木) 05:30:50.78ID:HQ6fr84VM >>483
必要だよ
必要だよ
486デフォルトの名無しさん (アウアウカー Sa33-yC4D)
2017/06/15(木) 09:11:26.58ID:qU51R9EPa 使うメンバ関数に依るけどデフォルトコンストラクタが必要なものはなくね
必要な場面が思い付かんし
必要な場面が思い付かんし
487デフォルトの名無しさん (ワントンキン MMaa-JSHy)
2017/06/15(木) 10:49:56.10ID:cMMWNP19M std::vector<MyObject> v;
これMyObjectにデフォルトコンストラクタないとコンパイルできなくない?
これMyObjectにデフォルトコンストラクタないとコンパイルできなくない?
488デフォルトの名無しさん (オッペケ Srab-H4RH)
2017/06/15(木) 11:01:39.88ID:aq+4THbXr >>484
根拠は?
根拠は?
489デフォルトの名無しさん (アウアウカー Sa33-yC4D)
2017/06/15(木) 11:19:41.25ID:qU51R9EPa490デフォルトの名無しさん (ワッチョイ 274b-eVPi)
2017/06/15(木) 11:23:27.43ID:L9OZrg3x0 >>487
その例のその時点ではvの要素数は0でMyObjectは一つも構築されない
そしてテンプレートの性質として要求されない部分の実体化はされないので
実際には呼ばれない部分のコードがコンパイルエラーにはなる問題にもあたらない
その例のその時点ではvの要素数は0でMyObjectは一つも構築されない
そしてテンプレートの性質として要求されない部分の実体化はされないので
実際には呼ばれない部分のコードがコンパイルエラーにはなる問題にもあたらない
491デフォルトの名無しさん (スップ Sd7a-FPX1)
2017/06/15(木) 11:50:20.24ID:T9X0CufJd その理屈だとデストラクタも不要になるが、実際はデストラクタは必要
492デフォルトの名無しさん (ワッチョイ 8baa-vAEL)
2017/06/15(木) 12:01:45.59ID:UVt8Gat10 >>491
そりゃvectorのデストラクタで要素のデストラクタが呼ばれる(テンプレートのインスタンス化が行われる)んだから
そりゃvectorのデストラクタで要素のデストラクタが呼ばれる(テンプレートのインスタンス化が行われる)んだから
493デフォルトの名無しさん (スプッッ Sd3b-Ir2K)
2017/06/15(木) 12:32:05.19ID:TLt9F5bfd >>486
resizeは?
resizeは?
494デフォルトの名無しさん (ワッチョイ 56e4-l3wW)
2017/06/15(木) 12:35:16.93ID:st+URCRI0 そのあたりのことはどっかに書いてあった
495デフォルトの名無しさん (ワントンキン MMaa-vAEL)
2017/06/15(木) 12:42:14.22ID:HosU7tvHM >>493
こぴ
こぴ
496デフォルトの名無しさん (ワントンキン MMaa-vAEL)
2017/06/15(木) 12:43:54.29ID:HosU7tvHM >>493
コピーコンストラクタがあれば引数2つの方が使える
コピーコンストラクタがあれば引数2つの方が使える
497デフォルトの名無しさん (スップ Sd7a-FPX1)
2017/06/15(木) 12:53:22.51ID:T9X0CufJd498デフォルトの名無しさん (オッペケ Srab-H4RH)
2017/06/15(木) 14:19:10.82ID:aq+4THbXr 「使うメンバ関数に依るけどデフォルトコンストラクタが必要なものはなくね」
↓
「resizeは?」
↓
「コピーコンストラクタがあれば引数2つの方が使える」
これがイケヌマと言うやつか
↓
「resizeは?」
↓
「コピーコンストラクタがあれば引数2つの方が使える」
これがイケヌマと言うやつか
499デフォルトの名無しさん (ワッチョイ bb11-yC+1)
2017/06/15(木) 15:13:39.32ID:0w39VBC10 333/+C/333
}[amo]*7*
%/$/@0000/*/"2BTOLA"~~
}[amo]*7*
%/$/@0000/*/"2BTOLA"~~
500デフォルトの名無しさん (ワッチョイ bb11-yC+1)
2017/06/16(金) 08:33:30.61ID:YhgtDNjG0 <<<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%,,,
}
000-0
001-EK,L,A%&*17&>>=<HUFMO#$BUZ,DOL%$,"LTAR"===7,2&$%\72<&\\7>3%,
002-"GYU","LA"
***"AGILA"***
GOJU-$+$%7.2!$^±%WOLR%,,,
501デフォルトの名無しさん (ワッチョイ 8baa-vAEL)
2017/06/16(金) 09:54:15.30ID:rTwb7eLL0 >>498
え?resizeするのにデフォルトコンストラクタ必要じゃないよね?
え?resizeするのにデフォルトコンストラクタ必要じゃないよね?
502デフォルトの名無しさん (スップ Sd7a-FPX1)
2017/06/16(金) 10:48:52.10ID:+l0M7jEud なんで必要じゃないと思うんだか
503デフォルトの名無しさん (スップ Sd7a-FPX1)
2017/06/16(金) 10:51:59.72ID:+l0M7jEud resizeとサイズ指定のコンストラクタ
この2個は必要
他に必要なのが有るかは知らない
この2個は必要
他に必要なのが有るかは知らない
504デフォルトの名無しさん (ササクッテロレ Spab-O+YK)
2017/06/16(金) 13:52:01.14ID:uEZP+i89p ぜんぜんわからない
僕たちは雰囲気でvectorを使っている
僕たちは雰囲気でvectorを使っている
505デフォルトの名無しさん (オッペケ Srab-H4RH)
2017/06/16(金) 18:08:28.52ID:h6HoRUoNr506デフォルトの名無しさん (ワッチョイ 8b9a-FPX1)
2017/06/16(金) 19:00:27.85ID:exN5gWxV0507デフォルトの名無しさん (ワッチョイ 8b9a-FPX1)
2017/06/16(金) 19:06:58.58ID:exN5gWxV0 おれも流れを無視して書いてみよう
自分でvectorを作ってみると躓くのが、メモリのアロケートや解放を伴わない、指定位置に対してのコンストラクタやデストラクタの呼び出し
ここは他の実装をカンニングしてしまった
他は特に難しいところはなく、ひたすらメンバー関数を作る作業
vectorはlistやmapに比べると作るのが簡単
自分でvectorを作ってみると躓くのが、メモリのアロケートや解放を伴わない、指定位置に対してのコンストラクタやデストラクタの呼び出し
ここは他の実装をカンニングしてしまった
他は特に難しいところはなく、ひたすらメンバー関数を作る作業
vectorはlistやmapに比べると作るのが簡単
508デフォルトの名無しさん (ワントンキン MMaa-vAEL)
2017/06/16(金) 20:32:33.08ID:1QoHt37uM むしろ >>486 がresizeの要素数だけ指定したときにデフォルトコンストラクタが使われるということぐらい解ってて言ってるように見えるんだけどな。C++98まではオーバーロードですらない全く同じメンバーだったわけで。
文脈読んでないのはどっちなんだろうね。
文脈読んでないのはどっちなんだろうね。
509デフォルトの名無しさん (スップ Sd7a-FPX1)
2017/06/16(金) 20:58:35.54ID:+l0M7jEud イミフ
解説よろしく
解説よろしく
510デフォルトの名無しさん (オッペケ Srab-H4RH)
2017/06/16(金) 23:20:55.70ID:jqjhiiMFr 単に思ったことを書いてみたすごい例は>>494だな
読み返すと深いものがある
読み返すと深いものがある
511デフォルトの名無しさん (ワッチョイ 96a6-H4RH)
2017/06/18(日) 14:45:58.32ID:pAWWq9QO0 エピス何とかさんって
エピステーメー 迷惑 でググると出てくる人?
エピステーメー 迷惑 でググると出てくる人?
512デフォルトの名無しさん (ワントンキン MMaa-JSHy)
2017/06/18(日) 15:04:30.19ID:maGnATACM そう
513デフォルトの名無しさん (ブーイモ MMaf-4fPX)
2017/06/18(日) 17:37:06.92ID:qo9bGziFM ぐぐって最初に出てきた記事を読んできたけど、どっちもどっちな感じだなあ。
ただ一つ言えるのは、エピスの記事はいつもcounterが題材でとてもつまらない。
ただ一つ言えるのは、エピスの記事はいつもcounterが題材でとてもつまらない。
514デフォルトの名無しさん (ワッチョイ aeaa-vAEL)
2017/06/19(月) 02:44:16.89ID:vY2cw8HX0 ぐぐって最初に出てきた記事を読んできたけど、どちらかというと記事の主の方が苦しい言い訳してる感じがするなぁ。
ただ一つ言えるのは、てらているでえぴすてーめーの解答見てると質問者の理解を手助けするような解答にはみえないから好きではない。
ただ一つ言えるのは、てらているでえぴすてーめーの解答見てると質問者の理解を手助けするような解答にはみえないから好きではない。
515デフォルトの名無しさん (ワッチョイ 96af-VSCS)
2017/06/19(月) 04:56:20.14ID:ClMyuu520 namespace A{
static int hoge;
}
class B
{
public:
static int fuga;
};
これらを複数のcppファイルでincludeした場合、
A::hogeはファイルスコープごとにできて
B::fugaはファイルスコープ間で共通
で合ってる?
static int hoge;
}
class B
{
public:
static int fuga;
};
これらを複数のcppファイルでincludeした場合、
A::hogeはファイルスコープごとにできて
B::fugaはファイルスコープ間で共通
で合ってる?
516デフォルトの名無しさん (オッペケ Srab-H4RH)
2017/06/19(月) 08:39:44.53ID:S/voQGxrr 現規格ではfile scopeという言葉の定義が無いことに気付いた
517デフォルトの名無しさん (ワッチョイ ba9f-C7l9)
2017/06/19(月) 08:46:39.99ID:9+UYKLHD0 hogeの方はextern付けないと大量生成されるぞ
518デフォルトの名無しさん (ワッチョイ ba9f-C7l9)
2017/06/19(月) 08:47:46.44ID:9+UYKLHD0 あ、staticか…わざとやっているのか
519デフォルトの名無しさん (ワッチョイ 136f-98cR)
2017/06/19(月) 10:43:51.86ID:m1J/TEED0520デフォルトの名無しさん (オッペケ Srab-H4RH)
2017/06/19(月) 10:53:54.51ID:S/voQGxrr 注意事項は有るとして、合っているかと言えば合っていると思ったのだがはて
521デフォルトの名無しさん (ワッチョイ 96af-VSCS)
2017/06/19(月) 11:20:57.70ID:ClMyuu520 >>519
namespace Aが付けばstaticはファイルに依存しないクラスのstaticメンバーみたいになるということですかね?
namespace Aが付けばstaticはファイルに依存しないクラスのstaticメンバーみたいになるということですかね?
522片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdda-adb9)
2017/06/19(月) 11:40:33.07ID:UZhaSadud 変数のアドレスを確認すればわかるじゃん。
523デフォルトの名無しさん (アウアウカー Sa33-yC4D)
2017/06/19(月) 12:39:33.09ID:Edn2ErbFa524デフォルトの名無しさん (ワッチョイ 96af-VSCS)
2017/06/19(月) 12:43:52.17ID:ClMyuu520 ですよね
ありがとうございます
ありがとうございます
525デフォルトの名無しさん (オッペケ Srab-H4RH)
2017/06/19(月) 16:50:18.24ID:OcegvzUdr526デフォルトの名無しさん (スッップ Sdda-FPX1)
2017/06/19(月) 17:22:49.29ID:0iIdkSRqd さすがににそれはテスト方法が悪い
527デフォルトの名無しさん (オッペケ Srab-H4RH)
2017/06/19(月) 19:46:59.76ID:OcegvzUdr >>526
undefined behaviorとno diagnostics requiredだらけの言語で「アドレス確認すればわかる」とだけ言うのはあまりに安易な助言ではないか、と言っているのであって
確認方法の良し悪しには興味が無い
undefined behaviorとno diagnostics requiredだらけの言語で「アドレス確認すればわかる」とだけ言うのはあまりに安易な助言ではないか、と言っているのであって
確認方法の良し悪しには興味が無い
528デフォルトの名無しさん (ワッチョイ 8b9a-FPX1)
2017/06/19(月) 19:56:58.85ID:QZxUhfYw0 お前が何に興味があるかなんてまったく興味がない
529デフォルトの名無しさん (アウアウカー Sa33-C4gc)
2017/06/19(月) 21:31:25.95ID:/bUZDhU4a530デフォルトの名無しさん (ブーイモ MM97-4fPX)
2017/06/20(火) 23:15:54.41ID:Mr4YEhWoM >>514
そもそも苦しい言い訳すらできない事案はwebページに掲載してないだろうしなぁ
そもそも苦しい言い訳すらできない事案はwebページに掲載してないだろうしなぁ
531デフォルトの名無しさん (ワッチョイ 1311-H4RH)
2017/06/21(水) 12:51:52.91ID:+NLKQqoi0532デフォルトの名無しさん (ワッチョイ 7a15-yC+1)
2017/06/21(水) 16:13:27.27ID:w7AAKRwP0 >>529
質問に必要なのは回答であって議論じゃない。
議論が建設的であろうがなかろうが質問に対する反応としては不適当だ。
回答が不十分だっていうことならそれは質問者が対話を重ねていくべきことで、
やみくもに話題を広げていく行為はそれこそ場をかき乱すだけだよ。
質問を元にした話題で雑談したっていいと思うが、
質問に対しては質問の回答を返すのが合理的な姿勢で、
先回りしてまで手取り足取り教えてやるような板じゃなかろう。
ム板が殺伐してるのは普通のこと。
質問に必要なのは回答であって議論じゃない。
議論が建設的であろうがなかろうが質問に対する反応としては不適当だ。
回答が不十分だっていうことならそれは質問者が対話を重ねていくべきことで、
やみくもに話題を広げていく行為はそれこそ場をかき乱すだけだよ。
質問を元にした話題で雑談したっていいと思うが、
質問に対しては質問の回答を返すのが合理的な姿勢で、
先回りしてまで手取り足取り教えてやるような板じゃなかろう。
ム板が殺伐してるのは普通のこと。
533デフォルトの名無しさん (オッペケ Srab-H4RH)
2017/06/21(水) 23:22:10.09ID:rrguzdDtr534デフォルトの名無しさん (ワッチョイ 9f3d-SU2+)
2017/06/22(木) 18:59:54.46ID:RmXtROOS0 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
教えてもらえないでしょうか。
次のようなクラス構成があります
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
535デフォルトの名無しさん (オッペケ Sr0b-jRIn)
2017/06/22(木) 19:26:04.75ID:Pj60YbTlr >template<> A<C> B<C>::bar;
本当に実体化をしようとしているのか、明示的な実体化が必要なのか疑問だ
template<…> X →テンプレート定義
template<…> X<Y> →テンプレート定義(部分特殊化)
template<> X<…> →フルの特殊化
template X<…> →明示的実体化
X<…> →使うことで暗黙の実体化
本当に実体化をしようとしているのか、明示的な実体化が必要なのか疑問だ
template<…> X →テンプレート定義
template<…> X<Y> →テンプレート定義(部分特殊化)
template<> X<…> →フルの特殊化
template X<…> →明示的実体化
X<…> →使うことで暗黙の実体化
536デフォルトの名無しさん (ワッチョイ 9f3d-SU2+)
2017/06/22(木) 19:46:14.05ID:RmXtROOS0 >>535
レスありがとうございます。
実際のコードでは、AとBはそれぞれのヘッダファイルにすべて記述され、
Cのみcppでコード生成しています。1)及び2)はCのソース内に記述しています。
このため、スペシャライズは不要な筈ですが、B内で定義しているstatic変数は
Bのクラス内で使用しているため、実体化が必要です。
bar自体はコンストラクタがあるので、普通のstatic変数のように書けば
良いのではないかと思うのですが…。
何か勘違いしてるんですかね?
レスありがとうございます。
実際のコードでは、AとBはそれぞれのヘッダファイルにすべて記述され、
Cのみcppでコード生成しています。1)及び2)はCのソース内に記述しています。
このため、スペシャライズは不要な筈ですが、B内で定義しているstatic変数は
Bのクラス内で使用しているため、実体化が必要です。
bar自体はコンストラクタがあるので、普通のstatic変数のように書けば
良いのではないかと思うのですが…。
何か勘違いしてるんですかね?
537デフォルトの名無しさん (ワッチョイ 9f3d-SU2+)
2017/06/22(木) 20:07:59.54ID:RmXtROOS0 >>534です、連投すいません。
どうやら解決したようです、デバッグしてみないと本当に解決しているか
どうかはわかりませんが(^^;
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
どうやら解決したようです、デバッグしてみないと本当に解決しているか
どうかはわかりませんが(^^;
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
538デフォルトの名無しさん (オッペケ Sr0b-jRIn)
2017/06/22(木) 20:44:12.75ID:Pj60YbTlr539デフォルトの名無しさん (ワッチョイ 374b-ckEx)
2017/06/22(木) 20:51:33.36ID:6MphhRRE0 >>534
> 3) GCC 4.9では1)でコンパイルは通るが実体化されない。
実体化されないの意味がよくわからんが
B::barの定義がないからだろ
ttps://wandbox.org/permlink/dK2e1pFJRGqDvw6G
> 3) GCC 4.9では1)でコンパイルは通るが実体化されない。
実体化されないの意味がよくわからんが
B::barの定義がないからだろ
ttps://wandbox.org/permlink/dK2e1pFJRGqDvw6G
540デフォルトの名無しさん (オッペケ Sr0b-jRIn)
2017/06/22(木) 21:50:59.77ID:Pj60YbTlr >>534
>1) 以下のように書くとVC++では問題ない
>template<> A<C> B<C>::bar;
これはVisual C++が規格の14.7.3段落13を正しく実装していないためで
2)の書き方が正しい
>1) 以下のように書くとVC++では問題ない
>template<> A<C> B<C>::bar;
これはVisual C++が規格の14.7.3段落13を正しく実装していないためで
2)の書き方が正しい
541デフォルトの名無しさん (ワッチョイ 9f3d-SU2+)
2017/06/22(木) 21:52:32.77ID:RmXtROOS0542デフォルトの名無しさん (ワッチョイ 7f91-yPlv)
2017/06/24(土) 13:41:09.22ID:u+Yuz9bZ0 配列に格納された行列同士の乗算がしたいんだけどさ
EigenのMapってこれ、コンパイル時に行列の行数・列数が決まってない時はどうやって利用するもんなの?
http://eigen.tuxfamily.org/dox/group__TutorialMapClass.html
Vector型に変更したりしてたら遅くなっちゃうだろうし・・・・どうやるんだろ・・・・
EigenのMapってこれ、コンパイル時に行列の行数・列数が決まってない時はどうやって利用するもんなの?
http://eigen.tuxfamily.org/dox/group__TutorialMapClass.html
Vector型に変更したりしてたら遅くなっちゃうだろうし・・・・どうやるんだろ・・・・
543デフォルトの名無しさん (スッップ Sdbf-iOY8)
2017/06/24(土) 16:50:39.64ID:1xYcuW8pd >>542
ろくに見ずに答えるけど、テンプレートパラメータを明示的に与えられないの?
ろくに見ずに答えるけど、テンプレートパラメータを明示的に与えられないの?
544デフォルトの名無しさん (ブーイモ MMbf-Cfyt)
2017/06/24(土) 17:52:02.95ID:UzNhAedeM サンプルみた感じ、Dynamicっていうキーワードがあるみたいだけど
545デフォルトの名無しさん (ワッチョイ 9f32-LvKX)
2017/06/25(日) 14:15:18.57ID:ogKde9930 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と一致しません。何故ですか
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と一致しません。何故ですか
546デフォルトの名無しさん (ワッチョイ f796-Cfyt)
2017/06/25(日) 15:01:36.01ID:WDBvKZ4J0 byte境界でないと配置できない環境なんじゃないの?
547デフォルトの名無しさん (ワッチョイ 9f32-MYey)
2017/06/25(日) 15:16:55.26ID:vsjTFzMZ0 uint32_tに5ビットずつ詰めてるからだろ
548デフォルトの名無しさん (ワッチョイ 9f9f-Yx6S)
2017/06/25(日) 15:37:16.30ID:ogZvFgu/0 普通は単に unsigned b0:5: と書くべき
ビットフィールドに32tとか余計なモノ乗っけると解釈がおかしくなる
ビットフィールドに32tとか余計なモノ乗っけると解釈がおかしくなる
549デフォルトの名無しさん (ワッチョイ 9f9f-Yx6S)
2017/06/25(日) 15:41:35.21ID:ogZvFgu/0 あとは副作用でpackアラインが1になってないから無理矢理境界作ってコンパイラが揃えようとしているとか
550デフォルトの名無しさん (ワッチョイ bfe4-Nep8)
2017/06/25(日) 15:51:48.24ID:k9VtfbZw0 共用体の統一初期化記法のことはよくわからないけどちゃんとコンストラクタを書けば解決するのでは
https://wandbox.org/permlink/Fzd26GrwxkCJ5NmL
https://wandbox.org/permlink/Fzd26GrwxkCJ5NmL
551デフォルトの名無しさん (ワッチョイ ffaa-4OJu)
2017/06/25(日) 16:07:57.97ID:Y80WzbX30 C++を、10年以上勉強してから、共用体を使え
そもそも、初心者が使い道を知らないだろ
そもそも、初心者が使い道を知らないだろ
552デフォルトの名無しさん (ワッチョイ 9fc3-NIhq)
2017/06/25(日) 17:09:07.72ID:/94nlHOp0 >>545
なぜ一致すると思うのかをまず説明すべきではないかね?
なぜ一致すると思うのかをまず説明すべきではないかね?
553デフォルトの名無しさん (ワッチョイ 1f91-ZLad)
2017/06/25(日) 17:14:35.54ID:CENP8UyG0 99: 1100011
35: _100011
何度かやってみると、合う時もあるな
35: _100011
何度かやってみると、合う時もあるな
554デフォルトの名無しさん (ワッチョイ 9f32-LvKX)
2017/06/25(日) 19:00:42.60ID:ogKde9930 uint32_tをuint64_tに変えたら一致するようになりました
ヒントになります?
ヒントになります?
555デフォルトの名無しさん (ワッチョイ 9faf-6L/r)
2017/06/25(日) 19:15:35.89ID:0WoCYScE0 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になる
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になる
556はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f15-LvKX)
2017/06/25(日) 23:08:48.14ID:y0reYziw0 英語を読むのがだるいので JIS の仕様を見てみた。
まずは C99 (に相当する JISX3010:2003) の 6.7.2.1 にはこうある。
> 処理系は、ビットフィールドを保持するに十分な大きさの任意のアドレス付け可能な記憶域単位を割り付けてよい。
> 十分な領域が残っている場合、構造体内のビットフィールドの直後に続く別のビットフィールドは、同じ単位の隣接したビットに詰め込まなければならない。
> 十分な領域が残っていない場合、入り切らなかったビットフィールドを次の単位に入れるか、又は隣接した単位の境界をまたがせるかは、処理系定義とする。
> 単位内のビットフィールド割付けの順序 (上位から下位か又は下位から上位か) は、処理系定義とする。
この理屈にてらして >>555 を解釈すると、 VC++2015 での記憶域単位は 4 バイトで、ビットフィールドが単位に収まらなかった場合には次の単位に入れる
という選択を取っていることになる。
で、 C++03 (JISX3014:2003) ではどうかというと 9.6 にこうある。
> クラスオブジェクト内のビットフィールドの割り当て方は処理系定義とする。 ビットフィールドの境界調整は、処理系定義とする。 ビットフィールドは、何らかのアドレス取得可能な単位内に詰め込まれる。
> 参考 処理系によっては、ビットフィールドの割当て単位をまたがることもあるし、またがないこともある。 右から左に割り当てる処理系もあるし、左から右に割り当てる処理系もある。
この文章の「単位内に詰め込まれる」というのは C での規則にあるように記憶域単位をまたがない限り (次の単位に移らずに) 詰め込むという規則にも読
めるが、ちょっとよくわからない。 常識的に考えれば C より緩い規則ということはないだろうと思うんだけど……。
>>554
指定する型が割当て方に影響するような文面は見付けられなかった。
まずは C99 (に相当する JISX3010:2003) の 6.7.2.1 にはこうある。
> 処理系は、ビットフィールドを保持するに十分な大きさの任意のアドレス付け可能な記憶域単位を割り付けてよい。
> 十分な領域が残っている場合、構造体内のビットフィールドの直後に続く別のビットフィールドは、同じ単位の隣接したビットに詰め込まなければならない。
> 十分な領域が残っていない場合、入り切らなかったビットフィールドを次の単位に入れるか、又は隣接した単位の境界をまたがせるかは、処理系定義とする。
> 単位内のビットフィールド割付けの順序 (上位から下位か又は下位から上位か) は、処理系定義とする。
この理屈にてらして >>555 を解釈すると、 VC++2015 での記憶域単位は 4 バイトで、ビットフィールドが単位に収まらなかった場合には次の単位に入れる
という選択を取っていることになる。
で、 C++03 (JISX3014:2003) ではどうかというと 9.6 にこうある。
> クラスオブジェクト内のビットフィールドの割り当て方は処理系定義とする。 ビットフィールドの境界調整は、処理系定義とする。 ビットフィールドは、何らかのアドレス取得可能な単位内に詰め込まれる。
> 参考 処理系によっては、ビットフィールドの割当て単位をまたがることもあるし、またがないこともある。 右から左に割り当てる処理系もあるし、左から右に割り当てる処理系もある。
この文章の「単位内に詰め込まれる」というのは C での規則にあるように記憶域単位をまたがない限り (次の単位に移らずに) 詰め込むという規則にも読
めるが、ちょっとよくわからない。 常識的に考えれば C より緩い規則ということはないだろうと思うんだけど……。
>>554
指定する型が割当て方に影響するような文面は見付けられなかった。
557デフォルトの名無しさん (オッペケ Sr0b-jRIn)
2017/06/25(日) 23:47:54.19ID:Tfx4tn9Gr >常識的に考えれば (中略) ないだろうと思う
訳:ボクは非常識です
訳:ボクは非常識です
558デフォルトの名無しさん (スップ Sd3f-VrB2)
2017/06/26(月) 00:18:40.72ID:mZAJ/HXWd トンチンカンな回答がほとんどで笑える
559デフォルトの名無しさん (ワッチョイ bfe4-Nep8)
2017/06/26(月) 00:21:57.68ID:yL9hwVgE0 正しい回答をお願いします
560デフォルトの名無しさん (スップ Sd3f-VrB2)
2017/06/26(月) 00:29:03.33ID:mZAJ/HXWd byteの40bitとbの40bitが違う位置だから (ほとんどの環境で)
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- コメ「余っている」年明けに下落も? 大量の在庫が倉庫を圧迫、赤字の恐れ…業者「値下げするしか…」 [Hitzeschleier★]
- 「レーダー照射」なぜ中国は素直に謝罪しないのか 非を認めず反論逆ギレ、ごめんなさいと言えない国情 [七波羅探題★]
- 松村沙友理、スタバは好きだけど「やっぱコーヒーに700円800円が…」「家でお湯わかしてやったらタダやん」 [muffin★]
- 40代教員、1億8600万円分の暗号資産だまし取られる 「警察手帳のような物」見せられ−滋賀県草津市 [蚤の市★]
- 参政・神谷代表「なぜ日本では多くの中国人の方がキャッシュで不動産を買えるのか」「現金はどこから来ているのか」 片山大臣の回答は [少考さん★]
- 上野動物園の双子パンダ、1月末に中国に返還へ 国内でパンダ不在に ★3 [蚤の市★]
- 【速報】福岡でまた刺される [663382246]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪★1
- 【速報】Switch 2 値上げ [201193242]
- 月曜日のんなぁ…お疲れ様なのらね…✋🍬ハウス🏡
- 【悲報】赤坂の超高級プライベートサウナ(120分19,000円)で火事🔥男女カップル死亡 [923545898]
- 【愛国者悲報】パンダ、ついに日本から全ていなくなる...上野の双子パンダ1月返還で。すべてのすべての完全にALL [856698234]
