C++相談室 part147

■ このスレッドは過去ログ倉庫に格納されています
2019/12/18(水) 17:56:53.03ID:uFDqtnkl
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part146
https://mevius.5ch.net/test/read.cgi/tech/1573094136/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)

STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

↑え?だってお前、普通ダイナミックリンクするだろ?
"ダイナミックリンク"す・れ・ば、ファイルサイズ**増えないです**
2019/12/19(木) 16:01:43.72ID:hJvSxET/
1000個
14デフォルトの名無しさん
垢版 |
2019/12/19(木) 16:03:30.00ID:e6wF5QYj
100個くらいじゃ少なすぎるんだ。
2019/12/19(木) 23:10:04.38ID:Y/zGUZTk
何個ぐらいって一般化できると思うか?
16デフォルトの名無しさん
垢版 |
2019/12/20(金) 08:56:23.47ID:jk7l00+3
メンバ*10とか指標が出てくるかなあって。
2019/12/20(金) 11:48:52.93ID:N4kH8rcM
数じゃなくてカバレッジで考えるんだよ
18デフォルトの名無しさん
垢版 |
2019/12/20(金) 12:49:40.01ID:jk7l00+3
そうですか。
でも測定ツールが高そう。
2019/12/20(金) 20:29:58.76ID:jjn2sxGn
メンバ・メイ・コボルスミ11
2019/12/20(金) 23:43:02.47ID:i1Ytyme8
■ windows.hのmin/maxマクロ回避策4パターン
ttps://yohhoy.h a t e n a d i a r y.jp/entry/20120115/p1

こんな具合に記号定数マクロ展開を抑止する方法って無いですかね…
2019/12/20(金) 23:47:16.50ID:i1Ytyme8
単に展開を抑止するだけなら#undefで良いんですが
#include <Windows.h>
namespace w32w {
const w32wMOVEFILE_REPLACE_EXISTING = MOVEFILE_REPLACE_EXISTING;
#undef MOVEFILE_REPLACE_EXISTING;
const MOVEFILE_REPLACE_EXISTING = w32wMOVEFILE_REPLACE_EXISTING;
/*...*/
} // namespace w2w
みたいなのをもっと簡単にやれないものか…
2019/12/21(土) 00:06:23.25ID:gJjydDaN
ちょっと何言ってるかわかりませんね
FOOという定義済みマクロとnamespace barがあるとして、
const int bar::FOO
を定義済みマクロFOOの値で初期化したい
とゆーことです\(^o^)/
2019/12/21(土) 00:55:27.57ID:FSMLpyuy
簡単にできたとして一個一個手で書くつもりか?
2019/12/21(土) 07:55:32.45ID:gJjydDaN
>>23
手で書けるなら頃せる

今気づいたが定義済みマクロWINVERって<Windows.h>をインクルードしなくても
定義されてるのねん…
2019/12/21(土) 08:00:42.78ID:/C2Zxfa9
windows.hのsmallに引っ掛かって30分悩んだ
2019/12/21(土) 16:01:06.10ID:41M/xbUn
>>22
マクロにFOOとかを渡して、トークン連結演算子でどうにかできるのでは?
#undef使って切り替えるより簡単だと思う
何がやりたいのかいまいちわかってないので違ってたらスルーしてくれw
2019/12/21(土) 16:09:49.97ID:FSMLpyuy
>>24
頃せる?
できるって意味か?
手でやるのは馬鹿げてる作業だと思うぞ
でツールでやるなら別に簡単に書ける必要もなし

正直そんなとこがんばってもと言う気はするけどね
小文字のマクロだけは滅んでほしい
28デフォルトの名無しさん
垢版 |
2019/12/21(土) 21:55:00.70ID:7S/5Xmi8
背中に手が届く痒いソフトないかな。
2019/12/22(日) 09:20:26.05ID:PdpWotrS
お前が自作して配布するんだよぉ
2019/12/22(日) 14:56:43.90ID:qJChSMJU
窓の手。
31デフォルトの名無しさん
垢版 |
2019/12/23(月) 14:58:26.67ID:sEnpgkKc
namespace w32w {
#include <Windows.h>
} // namespace w2w
const MOVEFILE_REPLACE_EXISTING = w32w::MOVEFILE_REPLACE_EXISTING;
32デフォルトの名無しさん
垢版 |
2019/12/23(月) 16:57:11.44ID:f3nq+WHN
constはスレッドセーフじゃないとダメなんだな。
2019/12/23(月) 18:18:55.23
痒いソフト
2019/12/23(月) 20:10:00.49ID:X1aPCWn8
>>31
マクロだったらどうするんだ
35デフォルトの名無しさん
垢版 |
2019/12/23(月) 20:11:03.19ID:f3nq+WHN
キャッシュやメモ化してるだけのメンバはconst付けたいところだけど、ミューテックス使うとマイクロ秒の単位で時間がかかるとなると、付けないほうが良いのかな。
2019/12/23(月) 20:11:47.02ID:yUC4LEa+
というかマクロが問題なわけだが
37デフォルトの名無しさん
垢版 |
2019/12/23(月) 20:35:01.08ID:f3nq+WHN
そういえばマクロって使う必要なくなったよね。
なんでだろ。
2019/12/23(月) 20:39:32.58ID:z7fGiGkq
ヘッダとかでたくさん使われてる
39デフォルトの名無しさん
垢版 |
2019/12/23(月) 20:46:52.21ID:f3nq+WHN
そういえばBoostがマクロまみれだった。
2019/12/23(月) 21:01:02.33ID:wextYSDX
c++11以降の目的の一つがマクロつぶしだからな。
2019/12/23(月) 21:24:59.81ID:kZpvALBe
>>39
boostはまだ言語仕様で標準化されていない機能を標準化された機能で実現しようとしている部分が多いから、自然とマクロでどうにかしなきゃならない箇所が多いんだろう
2019/12/24(火) 03:50:11.29ID:1TojzXfm
>>40
捨てるためにゴテゴテとよけいな機能をつけなくても、
スコープ内だけで有効なローカルマクロ的なものを導入すればそれで良かったような気がしなくもないが、
#includeが絡むとやっぱだめかなw
2019/12/24(火) 05:03:51.44ID:ZHC84Kgk
今さらEmscripten使ってwasm化してみたけどそこそこ使えそう
2019/12/24(火) 06:19:47.03ID:Dtupe+iE
いまさらかよ!
2019/12/24(火) 07:00:24.75ID:Zba7/+kU
マクロというかプリプロセスの一部を言語規格内に取り込まないと無理なんだろ
2019/12/24(火) 07:02:33.85ID:cUFUrp77
C++が進化してもマクロは無くならない
2019/12/24(火) 14:34:27.28
せめてなくそうとはしろ
2019/12/24(火) 15:28:29.91ID:mUUuTbFd
マクロは正義
今日もいくつも生やした
2019/12/24(火) 15:40:51.62
マクロについて、江添はなんて言ってる?
2019/12/24(火) 15:46:02.23ID:VueyJ5PW
自分で読めば
51デフォルトの名無しさん
垢版 |
2019/12/24(火) 16:14:08.15ID:qpZ25SUC
逆にマクロが進化する可能性は。
2019/12/24(火) 16:15:20.38ID:Uve8u0PJ
それはやだねえ
2019/12/24(火) 17:12:20.17ID:iCGyxCxX
マクロの進化を考えてみた
マクロは型に対応していないのが問題なので、まず型を導入する
しかし完全に常に型を必要としてしまうと普通の関数や変数と違いがなくなるので
コンパイル時に決定できる場合に限り、ジェネリックに何でも受けいれるようにする
・・あ、そうだ同じ名前で複数の宣言を可にして、それのうち一つでもコンパイルエラーで
ないなら他は無視して、コンパイルできるもののみ有効とかにすると色々つかえるかもしれないな
たとえばある構造体に特定のメンバがあるかどうかでコンパイル時に処理を分岐するとか
2019/12/24(火) 17:42:03.17ID:OCcxjFNd
テンプレートですか?
2019/12/24(火) 17:44:14.13ID:vOfEkls8
マクロと言えばマクロアセンブラ
C/C++のマクロより高機能なので見てみると良い
2019/12/24(火) 18:10:27.35ID:Uve8u0PJ
MASMのマクロと比べるべきはテンプレートだろ
2019/12/24(火) 18:17:05.63
C++コードをプリプロセスする専用の新規言語を発明すれば!
58デフォルトの名無しさん
垢版 |
2019/12/24(火) 18:31:34.23ID:IBUEMR4t
>>53
それどこのtemplate
59デフォルトの名無しさん
垢版 |
2019/12/24(火) 18:33:07.30ID:IBUEMR4t
>>57
それどこのQt
2019/12/24(火) 18:44:21.54ID:Uve8u0PJ
>>57
それはcfrontといって世界最古のC++だ
2019/12/24(火) 19:43:07.15ID:cUFUrp77
>>56
テンプレートとは違う
2019/12/24(火) 19:53:54.69ID:SdQqxQDy
>>59
mocはまだ生きてるんだな
無くなったと思ってた
2019/12/24(火) 19:59:00.17ID:Kb/HLSFP
>>60
そうか、C++11 or later を食らうをプリプロセッサーがウけるのか…
2019/12/24(火) 20:06:18.60ID:ed+tLMlR
rustのようなマッチングでやるとか
他にはASTのAPI提供するとか
あとはlispみたいにやるとか
c/c++よりまともなやり方はあるけど正直どれもややこしいし上に
めんどくさいんだよね
2019/12/24(火) 20:10:21.58ID:ed+tLMlR
メタプログラミングにおいてあえてチューリング不完全にしちゃうってのは
悪くないデザインチョイスだと思うんだよね
すがすがしい
2019/12/24(火) 21:38:38.95ID:4c9jV6+e
てかその手の糞みたいな発想はlispでやりつくされてる。
バカが知らないだけで。
2019/12/24(火) 22:07:05.33ID:E1PNjCWX
includeでテキストファイルを文字列literalとして読み込んだり、CSVファイルを行毎に指定の変換で読み込んだりしたい

外部プログラムで変換するのがめんどい
2019/12/24(火) 22:10:34.81ID:UL4fNRBx
なんとかいうプログラミングの偉いひとがいってたんだけど
「凡人が斬新な発想と思っている事の5割は既に誰かがやっており
残り5割は斬新ではなくそもそも機能しない」らしい
2019/12/24(火) 22:34:55.01
よい子のみんな!のAAにもあるとおり
70デフォルトの名無しさん
垢版 |
2019/12/25(水) 12:25:41.21ID:2ymVLaRc
最強のC++はC++の道から外れないこと
2019/12/25(水) 13:27:29.92
C++のタオとは?
72デフォルトの名無しさん
垢版 |
2019/12/25(水) 14:04:21.60ID:VS52OTGY
振り返るとそこに道が出来ているってことでは。
2019/12/25(水) 15:20:11.91ID:R5R0tFog
c++ natureを極めるためにはc++公案で鍛えるしかない
2019/12/28(土) 19:48:57.63ID:8w0fwfLC
主要コンパイラはすべてサポートしているにも関わらずいまだに#pragma onceを使わない人が少なくないのはなぜ?
2019/12/28(土) 20:16:53.24ID:CXPtawUE
onceはclang-clにしたら文句言われた。
2019/12/28(土) 20:21:50.83ID:9Pig40yt
>>74
#if defined() / #ifdef で十分ですから
#progma once が規格に取り込まれでもしないかぎり状況はかわらないでしょうね
#progma once の優位性はなんでしょうか
2019/12/28(土) 20:24:49.66ID:8w0fwfLC
一行で済む
万が一のdefineの衝突が起こらない
2019/12/28(土) 20:34:45.01ID:izuDiHMA
今はgccでもつかえるんだっけか
2019/12/28(土) 20:40:53.71ID:8w0fwfLC
3.4.xのどこかで対応してるからもう10年以上前の話
80デフォルトの名無しさん
垢版 |
2019/12/28(土) 21:01:17.79ID:pepWReU2
VSについてくるclang-clはpragma once普通に使えてる。
81デフォルトの名無しさん
垢版 |
2019/12/28(土) 21:03:08.62ID:pepWReU2
いまcl、clang-cl、gccでチェックしてるけど、pragma onceは使えてる。
2019/12/28(土) 21:15:39.80ID:oW0/scDi
#pragma once
と書いておけばperlで#if defined() / #ifdefに直せる
2019/12/28(土) 21:32:47.05ID:jUBDgrWb
標準化してくれれば良いのに
pragmaで出来ることの範疇越えている気はするけど
2019/12/28(土) 21:48:20.70ID:isXVaWAp
他のもろもろと合わせてモジュールに移行することで済ませるつもりなんでしょ。
2019/12/29(日) 01:41:15.83ID:BmrLXJpy
そういやまだモジュールサポートしてるコンパイラないな
2019/12/29(日) 01:54:26.89ID:KMgGrgwo
exportみたいになりませんように
87デフォルトの名無しさん
垢版 |
2019/12/29(日) 04:54:11.67ID:Q9hr3WtC
C#だとis演算子を利用してキャスト可能か判定していますが、
C++でdynamic_castでキャスト可能かってどう判断すればよいのでしょうか?
後、static_castできるかどうかの判定はどうすればよいのでしょうか?
88デフォルトの名無しさん
垢版 |
2019/12/29(日) 05:54:33.33ID:Jtzyjysr
https://ideone.com/wtGGM7
2019/12/29(日) 08:13:14.15ID:IGe5Ocj7
dynamic_castがnullptrを返すかどうかで判断

if (auto dp = dynamic_cast<Derived*>(bp)) {
(dpを使った処理)
}
2019/12/29(日) 08:30:34.84ID:e4b1FoNz
>>87
static_castは静的に決まるから、コンパイルエラーにならなければできるということだぞ。
それが意図した通りの変換になるかは規格を正しく理解すればいい。
91デフォルトの名無しさん
垢版 |
2019/12/29(日) 10:22:08.63ID:3P5H5aUL
テトリスでプログラミングの基礎は身につくますか?
2019/12/29(日) 10:25:16.33ID:BmrLXJpy
いいえ
2019/12/29(日) 10:27:06.48ID:OzwmxFfF
>>91
まずは日本語の基礎を身に付けてください。
それと、最近python関連のスレでテトリスの質問をしまくっていたキッズなら、テトリスはあきらめて愚直に入門書から始めてください。
2019/12/29(日) 10:43:20.20ID:iKwMwrMu
>91
知恵袋で見た質問だな

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12217899992
2019/12/29(日) 11:38:43.95ID:G7raGgQx
江添の最近出した本、このスレ的にはどういう評価なの?
2019/12/29(日) 13:32:59.69ID:KIjz0jVz
江添亮のC++入門、2019/9

こんな本を出していたのかw

関係ないけど、漏れは、下の本を読んでる。
短くまとめられていて良い

[改訂第3版]C++ポケットリファレンス、高橋 晶 ほか、2018
2019/12/29(日) 14:20:03.86ID:yqbBnK7b
>>96
>C++ポケットリファレンス、高橋 晶
たぶん最初に出たC++11和書ですね、すごく勇気がいったと思います、私も読ませてもらっています
9896
垢版 |
2019/12/29(日) 14:38:45.96ID:KIjz0jVz
江添亮、επιστημη[エピステーメー]、高橋晶とか、
日本のC++標準化委員会のメンバーは、伝道師みたいな香具師が多い

本をよく書く
2019/12/29(日) 15:16:08.73ID:mv3qVHGb
まあ、猫でもなんとかとか、スッキリわかるとか、柴田よりはましだろw
2019/12/29(日) 15:26:45.05ID:yqbBnK7b
>>98
エピさん、監訳ポジなら問題ないんですけどエピさん単著だったら、ちょっと考えますね
エピさんの本は出来の波が激しすぎるのです
2019/12/29(日) 15:40:38.44ID:G5unUlDw
エピはサンプルコードの題材が全部タイマーのイメージ
2019/12/30(月) 02:16:44.05ID:uy9KH9fJ
>>98
その3人全員委員会のメンバーなの?江添だけだと思ってたが
2019/12/30(月) 10:20:13.91ID:iZxqjmO+
sizeof(void)がビルドが通らないorz
void型を渡すときのテンプレートの特殊化ってどう書けば良いんじゃ…
2019/12/30(月) 10:47:48.49ID:obTerxTG
は?
2019/12/30(月) 10:54:41.38ID:fYgKDGaZ
サンプルコードプリーズ
2019/12/30(月) 11:15:51.02ID:g0RN7zwT
sizeof(void)がだめだからT=voidだけ特殊化したいということだろ?
なにも特別なことはないと思うが。

https://ja.cppreference.com/w/cpp/language/template_specialization
10796
垢版 |
2019/12/30(月) 23:04:11.87ID:p3QJuMJ/
>>102
C++テンプレートテクニック―簡潔で再利用しやすいコードのためのC++活用術、2009

著者の紹介文に、こう書いてある

επιστημη[エピステーメー]
C++標準化委員会会員

高橋晶
1985年生まれ。2008年05月からC++標準化委員会にエキスパートとして参加
(本データは、この書籍が刊行された当時に掲載されていたものです)
2019/12/31(火) 04:04:35.24ID:rzJRcJt/
まじかよ
正直ソフト開発してないライターがやたら参加してんのはどうかと思うけどなぁ
2019/12/31(火) 06:39:04.13ID:K+WZPcbo
でもお前らの100倍詳しい
110デフォルトの名無しさん
垢版 |
2019/12/31(火) 07:04:20.12ID:yGRo5VMJ
まぁ規格の解説とかはそういうのに関わってる人にしてもらうのが一番いいんじゃない?
2019/12/31(火) 07:29:37.36ID:rzJRcJt/
まぁ解説とかはそうだし有難いんだけどね
ちょっと日本のライター(に限らないのかもしれんけど)は自分でがっつり使い込んでもないテクニックを
「もしかしたら役に立たないかもしれない」との疑い全く無しに押し付けてることがあるしたまに宗教じみてるから
そういう人ばかりだと今後が不安だなぁと

それだけw
2019/12/31(火) 07:57:16.28ID:K+WZPcbo
運用するのはお前らの仕事
2019/12/31(火) 08:08:20.03ID:8dhupYNq
技術書籍は著者の思想に染まらなくても
そこに書いてあるアイディアを欲しいとこだけつまみ食いが
デフォな読み方だろ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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