C++相談室 part130 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/03/31(金) 08:47:49.65ID:UkLjKqcm0
次スレを立てる時は本文の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
2017/06/01(木) 12:45:46.15ID:97W8lGpzr
>>369に対してはN4659のAnnex D(D13.1)が正解
C++20で使えなくなる可能性があることを理解した上で使えということ
2017/06/01(木) 14:18:15.64ID:gpnYGtb7H
>>398
えっと、何て言えばいいのかな?
最初から最後まで自分で定義するとして、std::iteratorをそっくりそのまま書き写したmy_iteratorみたいなのを継承する、
あるいは、それと同等な方法でイテレータを定義するのは問題ないのかな、と思って質問しました。
自分で定義したとしても、std::iteratorに付随するもの、たとえばiterator_categoryやvalue_typeを使えば、
それは廃止されるstd::iteratorを使ってるのと大差ないですよね? そういうのはいいのかな?と思って
2017/06/01(木) 15:08:52.32ID:HHU/Lqsma
>>406
はい問題ないです
むしろstd::iteratorはイテレータを自作するためのただのヘルパーであって、
要求される型や関数を持っていればイテレータを作るために特定のクラスを継承しなきゃいけないとかはないです
408デフォルトの名無しさん (スプッッ Sd03-RGMd)
垢版 |
2017/06/09(金) 13:26:36.03ID:kptJBH71d
int hoge={1,2,3,};
配列末尾のカンマは許されてますか?
2017/06/09(金) 18:17:06.50ID:rw1qC18c0
paiza.IO, codepad などに、ブラウザで書き込んで、確かめれば?
410デフォルトの名無しさん (スプッッ Sd03-RGMd)
垢版 |
2017/06/09(金) 18:38:38.05ID:kptJBH71d
確かめてもその環境では出来ると言う事しかわからないので
2017/06/09(金) 18:41:26.39ID:xFMqJagR0
コンパイラの実装が全てにおいて正しい
412デフォルトの名無しさん (ワッチョイ 7de3-OlK+)
垢版 |
2017/06/09(金) 19:06:37.15ID:wCNNb6AH0
自分が持ってる本では配列末尾に全てカンマがありますよ

許されてるはず!
2017/06/09(金) 19:49:56.35ID:qv1T8kMNd
>>408
https://cpprefjp.github.io/lang/cpp11/trailing_comma_following_enumerator_list.html
2017/06/09(金) 19:51:04.81ID:rw1qC18c0
最後に余計なカンマが付いているのだから、普通はコンパイルエラーになるはずだろ

それがエラーにならないのなら、その構文は正しい
415デフォルトの名無しさん (スプッッ Sd03-RGMd)
垢版 |
2017/06/09(金) 20:01:26.03ID:kptJBH71d
enumができるのはとっくに知ってます

>>414
その環境でエラーにならない事がわかるだけなので意味ないです
2017/06/09(金) 20:23:58.14ID:sC6dNq1X0
>>408
時代による
大昔はダメ
2017/06/09(金) 20:40:16.86ID:a4wVaQJCr
>>415
規格の8.5p1を読むか、
C++14の前後のN3797(8.5p1)とN4659(11.6p1)の内容から規格を推察するしかない
2017/06/09(金) 21:34:47.00ID:z6XGzBger
そういえば>>408のコードにはどこにも配列が登場しないな
一行目はフェイクなのだろうか
2017/06/09(金) 23:23:34.86ID:1XB8pDxy0
>>408
n4659によるとあり
2017/06/10(土) 09:38:34.51ID:0q4Mq4Kr0
で、結局hogeに何が格納されるの?
2017/06/10(土) 12:33:50.86ID:6tSezeKAM
>>414
正しい構文はエラーにならない
けど
エラーにならないからと言って正しい構文とは限らん
422デフォルトの名無しさん (ワッチョイ 956f-ujiq)
垢版 |
2017/06/10(土) 13:30:36.94ID:gXoQdix00
規格的にはどうなのか調べる気にもならないけど
Cでも80年台の終わりくらいには俺の知ってる全てのコンパイラで最後のカンマ許されるようになってたと思う
今C/C++でエラーにするコンパイラなんてあるのかね?
もしあるならそんなコンパイラは色々ヤバいから使わないほうがいい
2017/06/10(土) 13:43:34.09ID:WtrsYPXN0
だから規格的にもありだって
2017/06/10(土) 13:44:18.36ID:WN3QcUIY0
列挙部分をスクリプトか何かで生成する時に、
ちょっと楽ちんだなと思った事はある
425デフォルトの名無しさん (ワッチョイ 85e2-sCoW)
垢版 |
2017/06/10(土) 13:50:38.86ID:QncEdRe90
カニハン第二版にも、要素末尾後ろのカンマは合法て書いてあったような。
まさにスクリプティング時の便宜を図るため。

ただ、C89とかだとenumだけは許されてなかった気が。
2017/06/10(土) 18:16:29.78ID:HZN1Em+70
「規定クラス」とかいかにも公式に定義されてるっぽい言葉を使いながら
抽象化だよわかるだろ、とか
省略だよわかるだろ、とか
2017/06/10(土) 19:06:50.38ID:xSl9wCDP0
規格と簡単に言うけど、日本の産業界には言語規格を知っている人が、そもそもいない。
MISRA-C の日本の委員会の人でも、規格は知らないから、
欧州に問い合わせながら、本を書いたらしい

日本の産業界から、そうそうたるメンバーを集めても、規格は謎だらけ

日本では規格に詳しいのは、C++ 標準化委員会の、
ドワンゴ江添亮、επιστημη(エピステーメー)ぐらいだろ
2017/06/10(土) 19:17:08.33ID:1OFjIP+40
>>426
誤爆ってるぞ...
どこの誤爆かもわかるけど w
2017/06/10(土) 19:36:14.26ID:vzLlMkbRM
>>427
エピスは全然詳しくないだろ…
2017/06/10(土) 19:46:32.90ID:b/uhZ0uFa
>>427
ドラフトがネットでタダで手に入るんだから誰でも詳しくなれるだろ
金払えば規格も買えるんだし
標準化委員会にいないと詳しいとは言えないのか?
2017/06/10(土) 20:03:52.30ID:xSl9wCDP0
規格は、JISなどが翻訳しただけで、翻訳者には意味は分からない。
規格から、その条文に合った例題を、誰も作れない

だから、MISRA-C の日本委員会では、その条文を説明するための、
例題を作っては、欧州に問い合わせて、間違いが無いかどうかを確かめている

文章一つでも、解釈の仕方が一杯あるから、例題が無いと説明できない

法律の民法などと同じ。
TAC、伊藤塾など各社が、法律を解釈する受験本を、たくさん出しているだろ。
最高裁の判決を載せて、条文がどう解釈されたか、書いているのと同じ

規格だけがあって、それを読んでも、どうにもならない。
MISRA-C みたいに産業界から、数十人が集まって議論しても、条文の意図が分からない
2017/06/10(土) 20:32:33.27ID:1OFjIP+40
>>431
意図がわからない条文ってどれ?
ちょっと具体的にあげてみようか
2017/06/10(土) 20:40:48.55ID:yn1b1oYyr
mainの戻りのvoidが規格違反かどうかについて「otherwise」という表現の解釈で議論が始まってしまうレベルのウンコ文書
もとの英文が宜しくない
2017/06/10(土) 21:35:35.18ID:657mt0+/M
>>427
俺ですら自腹で買った規格書持ってるけど何言ってんの?
2017/06/10(土) 21:51:00.66ID:yn1b1oYyr
さすがに>>430-431の後にこのレスは
日本語読解力に問題があると言わざるを得ない
2017/06/10(土) 22:22:04.21ID:b/uhZ0uFa
>>431
法律と違って意図は分からなくてもいいだろ、曖昧な表現は困るが
意図がわからないとプログラミング上困る条文って具体的にどこだよ

曖昧な表現もそりゃあるとはいってもほんの一部だろ
それにたとえ委員会の人でもその曖昧な表現がどちらの意味なのか個人で決められるのか?って話
結局規格に明文化されたものが全てだろ

あと間違いがないか確認の問い合わせをするのは規格作ろうとしてるなら普通だと思うんだけど、とくにMISRA-Cの目的や内容からすれば
2017/06/10(土) 22:41:16.36ID:Pg73dp6X0
>>427の「言語規格を知っている」の定義をはっきりさせないまま議論を始めちゃう人は
規格を語るのに向いてない。
2017/06/10(土) 23:22:49.03ID:xSl9wCDP0
たぶん、あいまいなのは、規格が抽象的な表現で書いているからだろ。
いざ具体的な事例を出した場合に、それが正しいのか悪いのか、簡単には分からない

だから、MISRA-C みたいな解釈・説明書が必要になる

型変換のルールでも、潜在型とか、そういう用語を定義して、
わかりやすく説明している

法律でも、最高裁の判例を、数十年研究して解釈している。
それでも判事が7対6で、ひやひやもので決まった判例もある。
数年後に判断したら、結論が変わる

規格の抜け穴・論理矛盾などを研究するには、数十年かかる。
規格書を読んで、分かるようなものじゃない。
簡単にわかるのは、表面上の事だけ
439デフォルトの名無しさん (ワッチョイ 956f-ujiq)
垢版 |
2017/06/11(日) 00:38:45.98ID:TqhJN8GP0
規格なんて実際に使うコンパイラの仕様に比べたらゴミみたいなものだからな
最近は規格に敬意を払う傾向が強まってきたと思うけど
2017/06/11(日) 00:40:20.06ID:GyEdwZPXr
例えば「トリビアル」の定義はわかっても意図がわからないとコンテナーのテンプレートを正しく書くことは難しい
だが挫折の多くは文面の解釈よりも「正しい仕様を確認しようとしたが規格を読んでもわからなかった」パターンに思える
2017/06/11(日) 00:47:50.47ID:orY9bj1l0
コンパイルできないコードに価値は無い
コンパイラの方が全てにおいて正しい
2017/06/11(日) 03:24:02.05ID:/4sxfWxQ0
分からない時に、規格書を読んでも、分からない

具体的な用例集が必要。
法律で言えば、具体的な判決

こう書いたら間違いで、これが正しいみたいな例。
だから規格書から、その用例集を作るのに、長い研究期間がいる

そういう意味で、MISRA-C のように、多くの企業が参加して、研究すべき。
製品の品質を担保すべき
2017/06/11(日) 03:58:12.87ID:orY9bj1l0
それ言語設計者とコンパイラ開発者にしか価値無いよね
2017/06/11(日) 08:09:11.36ID:q49UmmFG0
そもそも MISRA は規格の解説書じゃないし
ワッチョイ 0baa-BUW4 は壮大に勘違いしてる
2017/06/11(日) 09:54:14.55ID:IXRoGBtM0
>>438
MISRA-C はどこで読めるのか?
446デフォルトの名無しさん (ワッチョイ 956f-ujiq)
垢版 |
2017/06/11(日) 11:09:38.17ID:TqhJN8GP0
ググることも出来ないやつには永遠に読めない
読む必要ないけど
447デフォルトの名無しさん (ワッチョイ 8b97-sCoW)
垢版 |
2017/06/11(日) 15:09:26.57ID:qjl5AbWq0
MISRA-Cは、正式ルートだと金出して買うしかないよね。
ドラフト無料とかもなかった気がする。
2017/06/11(日) 17:44:56.04ID:bT5ki42c0
MISRA-C はときとして理不尽な要求をしている気がする
2017/06/11(日) 18:01:31.88ID:q49UmmFG0
理不尽に見えるけど高信頼性のためには我慢してねって言うスタンスだから
2017/06/11(日) 18:34:49.88ID:r6AQJQ0Cr
サイトのサーバー証明書もマトモに管理できない低能が高信頼性を語るとか、冗談にもほどがある
451デフォルトの名無しさん (ブーイモ MM43-ViKn)
垢版 |
2017/06/12(月) 00:14:27.30ID:0xg96Y9iM
C++さん、とんでもない機能を追加してしまう
http://hitomi.2ch.net/test/read.cgi/poverty/1497172293/
2017/06/12(月) 01:43:06.58ID:ZIdu3+Lh0
ウィンドウクラスって、何に使うん?
2017/06/12(月) 21:03:27.92ID:VDG2Ae3J0
MISRA-C 無しの、C言語は、製品に使ってはいけない。
品質が出荷レベルに達していないから

トヨタは、5% しか、MISRA-C を守っていないと聞いた。
100条なら、95で違反
2017/06/12(月) 21:08:37.51ID:SpclLUXp0
サブセットで十分なケースもある
2017/06/12(月) 21:21:24.13ID:t42bNJ0Ar
この句読点の使い方は得てしてリアルガイジ
MISRAとかいうのを信仰する奴とガイジとの相関は高いとみた
2017/06/12(月) 23:44:06.01ID:kzKhR3Vv0
そもそも無矛盾のルール体系は構築できないのでは
2017/06/13(火) 00:13:09.07ID:eF+wsRwS0
んなこたあない
2017/06/13(火) 02:09:41.46ID:LBvGuQYWa
無矛盾な公理体系は自己自身の無矛盾性を証明できない、
ってだけで無矛盾な体系は作れないとはいってない
2017/06/13(火) 07:35:05.39ID:siDT5/O8M
MISRA なんて有り体に言えばベストプラクティスだしね
守らなくても正しいソフトは作れる
ただバカが多いところだと守らせればありがちなバグが防げるって言う効果はある
460デフォルトの名無しさん (ワッチョイ 956f-ujiq)
垢版 |
2017/06/13(火) 18:24:46.63ID:+1XB2sfj0
ベストプラクティスというよりは古文書
てかここはC++スレなんだが
2017/06/13(火) 18:34:11.65ID:oGIP5B9w0
配列の中身で重複している要素をカウントしてカウントが一番多かった要素を取り出す
っていうプログラム作りたいので知恵貸してください

{1,2,2,5,2,5}だったら2が取り出せるみたいな
2017/06/13(火) 18:42:01.39ID:nMRvtxJa0
「宿題は自分でやりなさい」
先生たちもこのスレ監視してるからなw
2017/06/13(火) 18:56:37.43ID:oGIP5B9w0
宿題じゃねーよw
調べても重複削除くらいしかみつけられない
2017/06/13(火) 19:08:11.56ID:P4se3SJtd
mapを使うとかソートしてしまうとか?
2017/06/13(火) 19:09:11.39ID:n4I5+XGH0
日本語で書いてあるとおりのことをすればいいだけなのだが
2017/06/13(火) 20:25:19.98ID:siDT5/O8M
>>460
さすがにMISRAを古文書とか言う奴はおばかと言われてももしょうがないと思うぞ w
変換規則とかはよく考えられてるし
2017/06/13(火) 20:39:09.12ID:8eM6ZKoF0
で,MISRA-C をどこで見ればいいの?売っているの?
2017/06/13(火) 20:56:19.09ID:gcB4XgG8d
>>461
データやリソースによって適した実装方法が異なるな
2017/06/13(火) 20:56:21.35ID:+1XB2sfj0
だからそんなに考古学に興味あるんならググれよ
公式でPDF版£15で売ってるよ
繰り返し言うがここはC++スレだ
2017/06/13(火) 23:06:22.18ID:apqWicsH0
クソなコードしか思いつかなかった
http://ideone.com/3IBm07
2017/06/13(火) 23:56:53.24ID:G30+7Gz/0
それだと最大要素見つけるのに無駄に2ループするからこの方がよくね
http://ideone.com/AMCSuy
2017/06/14(水) 06:51:42.68ID:Bb4iazb50
どうもしっくり逝かんな
http://ideone.com/mH3sLq
2017/06/14(水) 06:58:07.10ID:xl37jtKCM
>>469
ひょっとして MISRA-C++ の存在も知らない老害さん?
2017/06/14(水) 07:13:45.93ID:97YMYHupr
「: public binary_function」
はて、規格のDで見たような
2017/06/14(水) 07:42:18.88ID:ROBFB8K40
>>461
配列の要素数 : n
要素の値の範囲 : m

計算オーダー
ソート&カウント : n log n
固定配列のカウンタ : max(n, m)
map のカウンタ : n log m
単純な2重ループ : n^2

かな
2017/06/14(水) 07:44:57.00ID:mEpEgwpO0
>>473
話のコンテキストも無視して突然MISRA-C++を出してくるとか頭大丈夫ですか?
2017/06/14(水) 07:51:46.28ID:ROBFB8K40
てことで、

配列の取りうる値が狭い場合、狭い範囲に変換できる場合はvectorによるカウンタ

取りうる値の種類が少ないことはわかっているが、値からインデックスに簡単に変換できない場合はmapによるカウンタ

一般的にはソート&カウント

による実装が良いのでは?
2017/06/14(水) 08:01:12.72ID:ROBFB8K40
ソート&カウント の場合
配列の値の大小比較の定義が必要
非破壊の場合は配列と同じサイズのメモリが必要

vectorカウンタの場合
配列の値からインデックス値に簡単に変換可能である必要がある
インデックス値分 x カウンタサイズ のメモリが必要

setカウンタの場合
配列の値の大小比較の定義が必要
配列の値の種類分 x setのノード のメモリが必要

単純2重ループの場合
一番要求することが少ない
配列の値が同じかどうか判別出来れば良い
2017/06/14(水) 08:07:23.67ID:ROBFB8K40
配列の値のコピーのコストが大きい場合
などを考えるとさらに別の方法が考えられる
2017/06/14(水) 08:16:37.97ID:SzLmysikM
>>476
話のコンテキストも理解できてない老害乙
2017/06/14(水) 08:32:13.08ID:1Ro22eP7M
みんなありがとう
やってみる
482デフォルトの名無しさん (スプッッ Sd51-RGMd)
垢版 |
2017/06/14(水) 08:51:35.81ID:JEM2dfxwd
いえいえ
2017/06/15(木) 02:16:45.12ID:Kprt2KgZ0
vectorのテンプレートに当てるクラスにはデフォルトコンストラクが必須なんでしたっけ?
2017/06/15(木) 02:57:56.05ID:WlVNVHON0
いいえ
03まではコピーできること
11からは破棄できること
が最低限の要件
2017/06/15(木) 05:30:50.78ID:HQ6fr84VM
>>483
必要だよ
2017/06/15(木) 09:11:26.58ID:qU51R9EPa
使うメンバ関数に依るけどデフォルトコンストラクタが必要なものはなくね
必要な場面が思い付かんし
2017/06/15(木) 10:49:56.10ID:cMMWNP19M
std::vector<MyObject> v;
これMyObjectにデフォルトコンストラクタないとコンパイルできなくない?
2017/06/15(木) 11:01:39.88ID:aq+4THbXr
>>484
根拠は?
2017/06/15(木) 11:19:41.25ID:qU51R9EPa
>>487
コンパイルできるよ
https://ideone.com/J9k1y6
2017/06/15(木) 11:23:27.43ID:L9OZrg3x0
>>487
その例のその時点ではvの要素数は0でMyObjectは一つも構築されない
そしてテンプレートの性質として要求されない部分の実体化はされないので
実際には呼ばれない部分のコードがコンパイルエラーにはなる問題にもあたらない
2017/06/15(木) 11:50:20.24ID:T9X0CufJd
その理屈だとデストラクタも不要になるが、実際はデストラクタは必要
492デフォルトの名無しさん (ワッチョイ 8baa-vAEL)
垢版 |
2017/06/15(木) 12:01:45.59ID:UVt8Gat10
>>491
そりゃvectorのデストラクタで要素のデストラクタが呼ばれる(テンプレートのインスタンス化が行われる)んだから
2017/06/15(木) 12:32:05.19ID:TLt9F5bfd
>>486
resizeは?
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つの方が使える
2017/06/15(木) 12:53:22.51ID:T9X0CufJd
>>492
中身は知ってるよ
>>490の理屈と合わないって言ってるだけで
2017/06/15(木) 14:19:10.82ID:aq+4THbXr
「使うメンバ関数に依るけどデフォルトコンストラクタが必要なものはなくね」
 ↓
「resizeは?」
 ↓
「コピーコンストラクタがあれば引数2つの方が使える」

これがイケヌマと言うやつか
2017/06/15(木) 15:13:39.32ID:0w39VBC10
333/+C/333
}[amo]*7*
%/$/@0000/*/"2BTOLA"~~
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%,,,
501デフォルトの名無しさん (ワッチョイ 8baa-vAEL)
垢版 |
2017/06/16(金) 09:54:15.30ID:rTwb7eLL0
>>498
え?resizeするのにデフォルトコンストラクタ必要じゃないよね?
2017/06/16(金) 10:48:52.10ID:+l0M7jEud
なんで必要じゃないと思うんだか
2017/06/16(金) 10:51:59.72ID:+l0M7jEud
resizeとサイズ指定のコンストラクタ
この2個は必要

他に必要なのが有るかは知らない
504デフォルトの名無しさん (ササクッテロレ Spab-O+YK)
垢版 |
2017/06/16(金) 13:52:01.14ID:uEZP+i89p
ぜんぜんわからない
僕たちは雰囲気でvectorを使っている
■ このスレッドは過去ログ倉庫に格納されています