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/01(月) 17:50:14.23ID:JVOYymf/d
>>300
そういう意味だったのか。
2017/05/03(水) 00:04:07.99ID:yi3RDMFU0
皆さんカバレッジってどうやって計測してますか?
環境がLinuxなのでgcov+lcov使って見てるんですが、Branch Coverageを見ると大半の行(分岐のない行を含む)で分岐通ってないって計測結果が出てきて使い物にならず困ってます
304デフォルトの名無しさん (ワッチョイ 7b75-Eih5)
垢版 |
2017/05/03(水) 00:19:05.08ID:jU3FK0a/0
>>303
実際通ってないんでしょ
例えばtemplateのコードだと見た目は分岐になっていなくても型で分岐になってるからね?
2017/05/03(水) 00:41:17.84ID:uzk5Z1ua0
>>301
ありがとうございます。
ゲーム開発はたいへんですね・・・。
Windows開発でOKな自分は恵まれてるなぁw
2017/05/03(水) 01:39:50.15ID:yi3RDMFU0
>>304
じっくり見てみるとSTL使ってる所が軒並みBranch Coverage未達になってるようなので、インラインで展開されたSTLの中に"型で分岐"してるって箇所があると未達扱いになってるんですかね
どっちにしても使い物にならないと思うんですが、何か設定見逃してるのかなあ
2017/05/03(水) 04:17:06.25ID:QvJixJfx0
テンプレコードを計測対象から外す
2017/05/04(木) 00:37:27.95ID:p6U1yQ51r
「分岐通ってないって計測結果が出てきて使い物にならず困ってます」
 ↓
「計測対象から外す」

これがアスペの思考というやつか
2017/05/04(木) 00:38:15.73ID:1zBs0s1k0
ばれなきゃ問題ない
2017/05/04(木) 07:12:56.30ID:wet+9Z670
ファイル毎にカバレージ結果が出力されててテンプレコードのファイルもあればそれだけはずす
311デフォルトの名無しさん (ワッチョイ 2775-T0jS)
垢版 |
2017/05/04(木) 07:29:40.84ID:o/Y/60hm0
普通カバレッジ計測というかテストはデバッグビルドでするよね?
なんでインライン展開されてんの?
2017/05/04(木) 07:50:33.85ID:z7PkcQKp0
ん?
2017/05/04(木) 08:18:30.19ID:Qfe4sTHU0
>>311
もちろん-O0 -gでやってますが、STL使ってるところでカバレッジ未達の結果になりますね

gcovに拘るつもりも無いので、皆さん普段どうしてるのか教えて頂けませんか?
2017/05/04(木) 08:40:35.32ID:h77SQQVQ0
「なんでインライン展開されてんの?」
これが会話の出来ないアスペというやつだな
2017/05/04(木) 08:45:37.98ID:fxaUnXhO0
アスペルガー症候群の話が一種の希望になっているのだな
2017/05/04(木) 09:21:07.22ID:wA0ba8dUO
へえ
317デフォルトの名無しさん (ワッチョイ 2775-T0jS)
垢版 |
2017/05/04(木) 09:54:23.37ID:o/Y/60hm0
>>314
え?どこが?
318デフォルトの名無しさん (ワッチョイ 2775-T0jS)
垢版 |
2017/05/04(木) 09:55:59.68ID:o/Y/60hm0
>>313
俺はgcov使ってるけど行カバレッジしか見てないよ
319デフォルトの名無しさん (ワッチョイ 2775-T0jS)
垢版 |
2017/05/05(金) 14:14:29.37ID:b5hiFaeg0
自分の思った答えと違う物が出てきたら相手をアスペと言って話を打ち切る方が会話の出来ない奴だな
320デフォルトの名無しさん (ワッチョイ 360d-vxmx)
垢版 |
2017/05/05(金) 17:05:00.51ID:vdKQUTyP0
意味もよく知らずに単なる記号として使ってるのまる出しだしね
2017/05/07(日) 07:51:48.66ID:iaJElGo90
質問ッス
ヘッダファイルに
 class LongLongLongNameClass { .... }
という長い名前のクラス定義を書いて、
.cppの方にメソッドの本体を書く場合、
 LongLongLongNameClass::LongLongLongNameClass() { ... } // コンストラクタ
 int LongLongNameClass::someMethodA(int x, int y) { ... } // メソッド
...
とか繰り返しLongLongLongNameClass::をタイプしたりコピペする羽目になり、
この手間を減らしたいのですが何か良いエディターとかプラグインとかはご存知ありませんか、
VCのクラスウィザードは書式がほぼ決め打ちで自由に弄れないのでイヤン
2017/05/07(日) 07:54:18.33ID:nwkz2Klr0
using
2017/05/07(日) 08:07:21.46ID:iaJElGo90
>>322
説明が抜けてすみませんが
 LongLongLongNameClass::LongLongLongNameClass() { ... } // コンストラクタ
 int LongLongNameClass::someMethodA(int x, int y) { ... } // メソッド
 ...
というスタイルは変えずに入力したいので、usingやプリプロセッサは極力使わない方向でおながいします
ちな原則usingの使用は関数スコープ内のみとさせていただいております
(ソースコード先頭でusing namespace std;とやる人が定期的に現れるため
2017/05/07(日) 08:27:15.49ID:FjvRjK2r0
C++の質問というよりエディタ側で解決したいならエディタ側のスレで聞いたほうがいい希ガス
2017/05/07(日) 09:08:19.96ID:UkiHSZAH0
CTRL+Vを何種類か格納できるソフトがあるだろう
2017/05/07(日) 09:10:08.52ID:nwkz2Klr0
VSCode辺りのプラグインになんかあるんジャマイカ?
2017/05/07(日) 09:51:45.18ID:/CYUNTD10
Visual Studio使ってるなら普通にIntelliSenseで補完してもらうんじゃだめなの?
328デフォルトの名無しさん (ワッチョイ ef00-8Vn8)
垢版 |
2017/05/07(日) 10:58:48.07ID:weBnw+MW0
このクソコードを書いたのは誰だぁ! バッ!ってやりたいけど張本人は逃亡済みなんだろうな
2017/05/07(日) 11:44:37.51ID:onq3BzaP0
Visual studioならヘッダに宣言を書いて、それを右クリックで空の関数を自動実装してくれる機能がある
2017/05/07(日) 11:56:22.15ID:w48Ptm+H0
>>321
試してみたら普通にIntelliSenseで補完できるけど?
俺はVisualAssist(有料)というのを愛用していてこっちの方が使い勝手いいけど
2017/05/07(日) 12:27:41.53ID:iaJElGo90
>>329
スマンいま思い出したVS2015とかだったらそれができたんだったorz
どうりでタイピングorコピペ作業による時間浪費に対して悩んでる人が居ないのか、
332デフォルトの名無しさん (ワッチョイ 3e0d-Yh7p)
垢版 |
2017/05/19(金) 17:53:08.12ID:/7Hxktnz0
C++17か、C++20でもいいけど
virtualをextern "C"みたいにブレースで範囲指定できるようになって欲しい
2017/05/19(金) 18:07:35.98ID:TovPGI11M
c++って、その手の構文糖は採用しないだろ。
2017/05/19(金) 18:14:00.03ID:6plAc3kp0
んだよ、Pascalでwith使っとけやトーシロー
335デフォルトの名無しさん (ワッチョイ 2a76-ysFl)
垢版 |
2017/05/19(金) 18:16:16.14ID:A3DJr2FW0
defaultって日本人は標準という意味で使っているけれど、本当は『不履行」とか否定的な意味の単語だよ
de factoと間違えて使っている
336デフォルトの名無しさん (ワッチョイ 6b00-Gjiu)
垢版 |
2017/05/19(金) 19:01:46.55ID:/MnRfLXT0
いい加減純粋仮想関数の = 0を見直すべき
2017/05/19(金) 19:09:38.92ID:w2H0BIW7d
>>335
標準なんて意味で使っている人間はいないと思われる
「既定の」とか「省略時の」だろう。

あと複数の意味のどれかが本来の意味であとは本来じゃないなんて了見が狭いね。
338デフォルトの名無しさん (ワッチョイ 9e0d-Yh7p)
垢版 |
2017/05/19(金) 22:09:56.69ID:/7Hxktnz0
>>333
その手のって、extern "C"では採用してんじゃん
多相的クラスやインターフェイスを作ってるとき、
キーワードvirtualのタイプ数って無駄な苦しみだと思わない?
多相的クラスでデストラクタがvirtualとか自明じゃん
2017/05/19(金) 22:28:20.75ID:ZQ0nZzJJM
>>338
デストラクタがvirtualなのが自明なのは継承前提のクラスだけでしょ
ランタイムオーバーヘッドを可能な限りなくしたいC++でそんなこと前提にされてもって感じだけど
まぁ確かにclassのプリフィクスにabstractとかつけたら全部virtualになるとかはあってもいいかもね
2017/05/20(土) 03:08:45.60ID:e3UL0Vlz0
ヘッダファイルに、すでに他のヘッダファイルで、宣言されているクラスが 
以下のように書かれているのは、なんのためなのでしょうか?


class CHoge_1; // すでに他のヘッダファイルで宣言済み
class CHogehoge; // すでに他のヘッダファイルで宣言済み
class CTestClass : public CMainClass //派生:基底
{
.......
.......
}

よろしくお願いします。
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
昌?お前も相当モウロクしてるぞ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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