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/05/20(土) 03:19:15.34ID:T/6nYsY80
>>340
「前方宣言」でググれ
342デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/20(土) 05:47:54.27ID:AtO1B5PX0
>>339
継承を使うからってデストラクタのvirtualが自明って?
んなわけねえだろ、たとえばprivate継承を使うようなケースでは
おまえの言うとおりオーバーヘッドを重視することがあるし
インターフェイスでだっていちいちデストラクタなんぞ作んねえ
しかし多相的クラスというからにはアップキャスト前提は間違いない
俺はそこを言ったんだよ

で、
class [[abstract]] oddsandsods; //これで全部virtualということか
うん、そういうのでもいい
キーワードがちょっと気になるかな
[[polymorphic]]かなって思う
2017/05/20(土) 10:19:27.00ID:e3UL0Vlz0
>>341
ありがとございます。
りかいできました!
2017/05/20(土) 15:27:14.98ID:dnejRURa0
お前らクラス図書いてる?
テンプレートとか関数オブジェクトとか面倒くさ過ぎなんだけど
345デフォルトの名無しさん (ワッチョイ cacd-bwHs)
垢版 |
2017/05/20(土) 16:43:45.54ID:7xanTQLT0
完全なドキュメントよりも、動くソフトウェア
の理念の元書いておりません
346デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/20(土) 17:47:18.38ID:AtO1B5PX0
書いたことあるけど、泣けてくるぞ
わざわざ人間がやる必要性が全く感じられないから
2017/05/20(土) 19:02:29.38ID:QnLfIsPY0
クラス図は書かないけど
コード書く前にこれとこれを用意してこれとあれがこうなってこうみたいな下書きをノートに適当に書いてる
348デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/20(土) 19:31:29.85ID:AtO1B5PX0
ああ、それならやるね
結局、ずいぶん違ったものが出来てくるけどw
349デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/20(土) 19:31:49.65ID:AtO1B5PX0
うん、正直にそれは恥だ
2017/05/20(土) 23:17:42.25ID:dnejRURa0
まあ、そんなもんだよなあ
考えの整理するのに書くのは良いんだけど、実装に追従しろとか実装の前に書けとか言われると怠くて敵わんわ
2017/05/21(日) 08:19:58.20ID:MWprk4Bd0
チームでやるならクラス図かいとかないとカオスにならない?
2017/05/21(日) 08:27:25.16ID:AwcA0VMJM
実装前に書いたメンテされないクラス図なんて役に立つわけねーやろ
自分の設計用に下書きだけして、あとはDoxygenに任せればよろしい
2017/05/21(日) 11:02:09.47ID:a7r1hz6X0
目的と使い方と意図がちゃんと書かれたコメントのほうが重要
2017/05/21(日) 11:42:21.53ID:N/0f8z0A0
astah UMLを使えば
 (クラス図<-->シーケンス図)→コード(自動生成)
というのがだいたいシームレスにできる

ずいぶん違ったものが出来てくるのは慣れの問題かと、
(UML自体かなり計算機の仕組み寄りで、それほど直感的な表現方法とは言えない)
2017/05/21(日) 11:43:44.12ID:N/0f8z0A0
コードに書かれていることが何よりも真実というのは同意
356デフォルトの名無しさん (ワッチョイ aa18-JCxV)
垢版 |
2017/05/21(日) 12:59:09.81ID:ViqOYprV0
>>353
これな
357デフォルトの名無しさん (ワッチョイ aa18-JCxV)
垢版 |
2017/05/21(日) 13:00:19.74ID:ViqOYprV0
ただ、コメントすらメンテされなくなるのが辛いよ…
358デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/21(日) 13:37:07.31ID:EhbYbiNc0
コメントのバグは検出不能なのが厄介
2017/05/21(日) 13:58:18.34ID:4YmMkUMIM
自分は書いてるよ。
大枠だけ書いて細かなクラスは表現しない(したくない)から、むしろツールは使わずに手書きで書いてる。
2017/05/21(日) 14:15:03.88ID:G67hupcsr
この手の議論で特徴的なのが書かない派の殆どは
自分が書けなかった理由を書かなくて良い理由にすり替えていること
361デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/21(日) 17:51:48.31ID:EhbYbiNc0
「ほとんど」でうまく逃げてるな
2017/05/21(日) 19:37:38.96ID:D/aE/Z0L0
設計書に書いたことをまたコードに書いたら
メンテの手間が増えるじゃないか
2017/05/21(日) 23:17:17.16ID:N/0f8z0A0
コードの他に何か残すなら、単体テスト(コード)とか試験仕様書とかを書けば良い
単体テスト(コード)や試験仕様書なら、少なくとも書いた範囲についてコードとの不一致は有り得ないのだから
2017/05/23(火) 07:38:45.51ID:K3FeDoGDa
enumの中身を漏れなくする方法はないの?
365デフォルトの名無しさん (ワッチョイ 0375-LToT)
垢版 |
2017/05/23(火) 07:54:11.86ID:10krpFBv0
>>364
?
2017/05/23(火) 08:12:47.34ID:I6yYOIGbr
>>364
ほれ
namespace himitsu {
enum more {aaa};
}
using more = himitsu::more;

auto e = more::aaa;
2017/05/23(火) 09:32:50.64ID:J4YcG+3k0
今ならenum classやろ
enum class more{aaa};
368デフォルトの名無しさん (ササクッテロリ Sp03-g8s4)
垢版 |
2017/05/23(火) 22:40:27.44ID:GqYsAhEPp
>enumの中身を漏れなく(イテレート)する方法はないの?
2017/05/24(水) 07:25:20.05ID:OFlbMgowM
>>368
ちょっとはググれカス
https://zenmai.wordpress.com/2009/11/11/enum%E3%81%AE%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E3%82%92foreach%E3%81%A7%E4%BD%BF%E3%81%86%E3%80%8Cc/

c# foreach まで入力したら enum が補完されるぐらいだからそう言うことをやりたい奴は多いのかも
2017/05/24(水) 08:14:20.55ID:Uh0d2nCgr
安定のドコグロMM
2017/05/24(水) 14:16:08.43ID:K4LsGUxm0
Cの時代からenumは未だに慣れない
2017/05/24(水) 22:12:49.22ID:Uh0d2nCgr
むしろCでintや#defineだらけのenumを使わないコードがずっと疑問だった
2017/05/24(水) 22:17:53.05ID:QKoHZUhX0
enumに文字列定義でけんの?
374デフォルトの名無しさん (ブーイモ MM4f-JCxV)
垢版 |
2017/05/24(水) 22:57:19.03ID:RrwKXt6vM
>>369
何故C#?
2017/05/25(木) 05:00:36.62ID:sUw+9KVjM
>>374
すまん寝ぼけてた
C++ は無理そうだな
Range-based for で何とかしてくれると嬉しいんだけどね
2017/05/26(金) 20:36:20.09ID:jKduUXcUd
言語ではenumの列挙はサポートされてないから、そのまま必要なデータを手書きで記述するか、
プリプロセッサマクロと#includeで汚く書くしかないね。
2017/05/26(金) 20:41:12.76ID:jKduUXcUd
DEFINE_HAGE(baka)
DEFINE_HAGE(boke)
...
こういった内容のテキストファイルを用意し、別のソースでマクロDEFINE_HAGEをテキトーに定義して#includeで
読み込むという素人お断りのテクニックがある。
2017/05/26(金) 23:46:38.90ID:Fq1j41HH0
http://i.imgur.com/VFje2sYh.jpg
2017/05/27(土) 01:04:47.55ID:uGocpGwpd
生き残ってますか、人間ども?
2017/05/27(土) 02:22:34.43ID:rhNlL3QR0
キミも相変わらずだねw
2017/05/27(土) 02:29:51.07ID:uGocpGwpd
前日はrosのfreetypeを2.8に更新するパッチを作って人ひとり助けた。
2017/05/27(土) 02:32:13.02ID:uGocpGwpd
1日に百人助けられる頃には大金持ちになっているだろう。
2017/05/27(土) 02:53:52.81ID:rhNlL3QR0
百日に一人助けて大金持ちになるような仕事をしなければだめだよ
2017/05/27(土) 17:46:08.41ID:91x9sFiGM
>>376
enumの列挙って何?

baka,
boke,
じゃあかんの?
2017/05/27(土) 18:09:13.93ID:HaHIN1I50
for ( auto i : enum_class )
2017/05/27(土) 20:21:56.11ID:JH3215h60
マクロで定義と同時に配列に詰め込めばいいんじゃないか
2017/05/27(土) 23:42:50.86ID:Dc3jlyQ70
enum定数はenum定数やし、
C#のIEnumerator的なブツはC++でも書けるし

ここでのenum定数の列挙ができるかできないかというのは
糖衣構文によるサポートの有無の違いでしかないと言える、
希ガス、
388デフォルトの名無しさん (ワッチョイ 6b3c-Ylic)
垢版 |
2017/05/28(日) 08:54:39.55ID:2Pirtyfh0
最近Python使い始めたけどすげー書きやすいわこれ
感動を覚えるレベル
やはりC++は糞
2017/05/28(日) 10:29:47.18ID:7TA+N7360
>>387
> C#のIEnumerator的なブツはC++でも書けるし
書いてみてよ
390デフォルトの名無しさん (スプッッ Sdbf-dAmu)
垢版 |
2017/05/28(日) 11:07:21.67ID:OH0o0+fyd
enumの要素数とか最大値最小値って取れる?
2017/05/28(日) 12:05:13.52ID:zOc9NmUD0
>>389
なんか期待値が高まり杉な気がするが、
IEnumeratorについてはReset()とMoveNext()とCurrent()を宣言して、派生クラスで実装するだけにょ?
列挙するデータは派生クラス(具象クラス)側に>>386式の配列データを受け取るようなコンストラクターでも設ければ良いし、

もしC#のEnum.GetValues()とかEnum.GetNames()みたいなやつが欲しくなってもstd::mapとか使えば動くものがギリ作れるだろJK

なお上記のようなやり方がC#と比べようが無いぐらい面倒臭いという批判は
>糖衣構文によるサポートの有無の違いでしかないと言える、(>>387)
で予防炭、
2017/05/28(日) 12:09:37.75ID:ZydFuCAS0
>>377
Eigenみたいな?
2017/05/28(日) 12:30:50.04ID:5K6OvT18M
>>391
> IEnumeratorについてはReset()とMoveNext()とCurrent()を宣言して、派生クラスで実装するだけにょ?
糖衣構文に期待しすぎ w
2017/05/28(日) 13:42:05.12ID:ermVQ6O80
糖衣構文様に対して「違いでしかない」とか頭が高いぞ
2017/05/28(日) 13:43:10.88ID:ICysod8PH
>>390
俺はいつも
enum class Hoge {
  None = 0,
  Fuga,
  Foo,
  Woo,
  Size
}
ってしてる
2017/06/01(木) 02:15:55.12ID:gpnYGtb7H
すみません、どなたか教えてください
独自のイテレータを実装するにはどうしたらいいのでしょうか?
ググってみたら、c++17でstd::iteratorがdeprecateになったらしいのですが、
独自のイテレータを作るときにstd::iteratorを継承するのはbad practiceってことになるのでしょうか?
2017/06/01(木) 06:36:46.84ID:hk9X98Pv0
>>396
boost::iterator_adoptor
2017/06/01(木) 06:54:03.34ID:YbQp1MN1M
>>396
ググってるならこの手のページもヒットすると思うが...

http://faithandbrave.hateblo.jp/entry/2016/09/12/145923
標準ライブラリの範囲では、イテレータは最初から最後まで自分で定義することになります。
2017/06/01(木) 08:18:50.46ID:3mGWxYm60
イテレータの要件さえ満たしておけば実装はなんでもいいのでは
2017/06/01(木) 08:23:03.98ID:97W8lGpzr
>標準ライブラリの範囲では、イテレータは最初から最後まで自分で定義することになります
高橋昌は規格のドラフトも読まないほどモウロクしたのだろうか?
2017/06/01(木) 10:32:18.97ID:WGT9ssZa0
昌?お前も相当モウロクしてるぞ
2017/06/01(木) 11:36:05.93ID:KuXsowWKd
ワロタw
2017/06/01(木) 12:37:41.54ID:97W8lGpzr
そういえば「日」が三つだった気がしてきた
俺もモウロクしたようだ
2017/06/01(木) 12:42:26.29ID:3mGWxYm60
結局何が正解なんだよ
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
例えば「トリビアル」の定義はわかっても意図がわからないとコンテナーのテンプレートを正しく書くことは難しい
だが挫折の多くは文面の解釈よりも「正しい仕様を確認しようとしたが規格を読んでもわからなかった」パターンに思える
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況