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ほどしか増えない

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

↑え?だってお前、普通ダイナミックリンクするだろ?
"ダイナミックリンク"す・れ・ば、ファイルサイズ**増えないです**
2020/01/09(木) 12:47:07.90ID:zQlYINS8
>>178
そうそう

           |
            |  彡⌒ミ
           \ (´・ω・`)デフォルトのアクセス指定子を定義したことは,十中八九,間違いであった.
             (|   |)::::
              (γ /:::::::
               し \:::
                  \
2020/01/09(木) 12:52:15.14ID:LsvkYb1v
指定子書き忘れにデフォがprivateならコンパイルエラーでわかるがpublicならわからん
デフォはprivateの方がいい
2020/01/09(木) 12:55:55.27ID:zQlYINS8
禁止がデフォで許可が明示な
constも本当はそうなっていて欲しい

ラムダ式の[=]だけデフォconstになっててmutableで外すんだけどね
182デフォルトの名無しさん
垢版 |
2020/01/09(木) 18:49:23.86ID:vYl+3riX
全部コンパイルオプションで対応できそうなのに

っていうかRustいらなくならなくね
2020/01/09(木) 20:02:43.03ID:dcOC3Udy
>>181
最適化禁止のvolatileがデフォはウザすぎる
2020/01/09(木) 20:46:00.27ID:jeGBkGmG
volatileってC++20で死ぬんでしょ?
2020/01/09(木) 20:53:16.18ID:dcOC3Udy
まじか
SFRとかどうすんだよ
2020/01/09(木) 21:18:47.87ID:VFRbhrWi
volatileの有用な機能のみを残し、効果が疑わしい、または壊れている機能を非推奨化する

完全に消える分けでは無いらしい
詳細は知らん
2020/01/09(木) 21:55:38.56ID:SnSt17is
>>176
まじですか、C++のstructも構造体だと思っていたけど。
知らなかった。
プロパティだけならstructの中の変数とclassの中の変数
って、あまり変わらない気がするけど、classの方はメンバ
とか言われる実質は関数を含むことができるじゃない。
あと、親から継承したりとか。
なんとなく同じものという感じがしない。
2020/01/09(木) 22:06:14.43ID:LsvkYb1v
structもメンバ関数を持つし、継承もするし、classをstructが継承することもその逆もできる
デフォがpublicかprivateかの違いだけで機能はclassと全く同じ
2020/01/09(木) 22:23:38.89ID:SnSt17is
>>188
知らなかった。長い間,、Cの構造体と同じことしか
できないと思ってた。
2020/01/09(木) 23:18:29.42ID:3XE25/Yj
なんかboostスレ死んでるからここで教えてください。

boost使ってクラサバ作ってて、クライアントが接続されるたびに、サーバ側で比較的重い処理があり、
処理止めたく無いからio_serviceに溜まったキューの数見てスレッドを動的に調整したい。

けど、自分の拙い検索能力ではio_serviceに溜まってるキューの数を調べる方法が無さそうなんですが、取得することは可能ですか?

よろしくお願いします。
2020/01/10(金) 08:52:59.23ID:cqQYZnld
許容されるスレッド数で常にフルスロットルじゃいかんのけ?
処理がないスレッドは勝手に止まってるし、なんならセマフォで動作数も調節もできるだろうし
2020/01/10(金) 20:10:30.90ID:gdjTauNe
スレッド増やしたところで本質的な解決にならん問題な気がする。
2020/01/11(土) 00:59:53.64ID:NtF2wljx
キューの前にガバナー、調速機を付ければいい
キューに入れた個数と出てきた個数をカウントすりゃいいんだろ
スプールでも作ればいいんじゃないの
2020/01/11(土) 01:12:20.76ID:mrkcLLQe
質問ですがstd::function<T>型のオブジェクトにNULLって代入していいの?
2020/01/11(土) 01:15:06.58ID:GiJYoHUo
>>194
大丈夫
nullptrの代入は何も関数を保持していない状態にする
2020/01/11(土) 01:43:57.60ID:mrkcLLQe
なるほど!
dクス、
2020/01/11(土) 15:19:42.16ID:hPLqZ0ty
C++11の知識でC++書いてるけど、特に不便ないな
最新のC++だと何ができるの?
2020/01/11(土) 15:29:42.91ID:pEBt3sLq
なら知らなくていいんじゃない?
2020/01/11(土) 15:47:51.76ID:9vrnWCM9
お前がC++11で十分と思っていても他人はお前に遠慮なんかせずC++20の記法で書く
お前がヘッダーをよこせと言ってもモジュールしか提供されない
2020/01/11(土) 17:14:40.32ID:hPLqZ0ty
なにを怒ってるんだよ
イージーになろうぜ、イージー
2020/01/11(土) 17:26:39.19ID:hPLqZ0ty
俺は久しぶりにC++を書いて機嫌がいいんだ
あまり怒らせるなよ
2020/01/11(土) 17:33:49.75ID:7JWsqvWB
標準ライブラリにはまだモジュール使われないんだろ?
20の次あたりでモジュール版も出てくるかどうかだろ
2020/01/11(土) 17:48:06.88ID:XaO4QoYK
>>202
シルカばーーーか
2020/01/11(土) 17:53:38.30ID:hPLqZ0ty
モジュールって何?
2020/01/11(土) 18:22:48.55ID:G3Wgm73J
モジュールってテンプレート持てるの?
2020/01/11(土) 18:28:46.90ID:AvFBkNTe
またテンプレートの分割コンパイルを誰かが1年ぐらいかけて実装して、
できたころには陳腐化しているという歴史の繰り返し

永遠に枯れない
2020/01/11(土) 19:01:55.71ID:hPLqZ0ty
gcc10入れた!
-std=c++2aでモジュールって使えるの?
2020/01/11(土) 19:15:28.94ID:hPLqZ0ty
なんだ-std=c++2aでは使えないみたいだな
概念的にはGoのpackageに近いのかな?
2020/01/11(土) 19:29:30.73ID:OEMCT43T
多分もう相手されないから引っ込んだ方がいいよ
2020/01/11(土) 19:30:41.47ID:hPLqZ0ty
なんでだよー><
相手してくれよー><
うわわわわん
2020/01/11(土) 22:12:41.17ID:o20hTksc
まだ実装してるコンパイラが無いっぽいから誰も使い勝手なんかわからんわな
>>205
持てる
2020/01/12(日) 05:48:12.78ID:LolRUOoj
1) mkl_blas.h がシステムに存在したらそれをインクルードし、行列行列積ルーチンとして (C++で実装された) dgemmを使う。
2) mkl_blas.hが存在しなければFortranルーチンのdgemm_を使う。

というのを実現したいとします。
mkl_blas.h もないし Fortranルーチンもないという状況は考えません。
関数名の末尾のアンダースコアの有無がややこしくて困っています。

#if __has_include(<mkl_blas.h>)
#include<mkl_blas.h>
#define dgemm_ dgemm
#else
extern "C" void dgemm_(省略);
#endif

としておいて、プログラム中の行列行列積ルーチンは全てdgemm_と書くことでお茶を濁しているのですが、もっとスマートな方法はありますか。
#define dgemm_ dgemm
という部分がいかにも場当たり的で気に入らないです。
2020/01/12(日) 09:50:22.73ID:GTFqFgmO
usingで別名にしてしまうとか?
2020/01/12(日) 09:59:58.48ID:g8OSapKt
俺ならソースにdgemm_みたいなのがあるのは嫌だから
#if __has_include(<mkl_blas.h>)
#include<mkl_blas.h>
#else
#define dgemm dgemm_
extern "C" void dgemm_(省略);
#endif
ってやると思う
2020/01/12(日) 12:48:26.98ID:JaW6uvCT
マクロが嫌ならinline関数にすればいいんじゃね
2020/01/12(日) 20:04:38.92ID:2yY0psIJ
C++で次々に追加される無駄機能は
Cをしっかり理解していれば同等の機能を実装するのは造作もないものが多い
2020/01/12(日) 20:05:36.02ID:Age3j7t+
では具体例お願いします
2020/01/12(日) 20:35:35.36ID:+J7i572i
void*が出てくる時点で論外なのでよろしく
2020/01/12(日) 20:41:55.23ID:26db5mti
#define my_static_assert(cond, msg) typedef char my_static_assert_failed[(cond) ? 1 : -1]
2020/01/12(日) 20:59:55.77ID:Svv4a/Ag
Cはマクロの使い方次第で出来ることが深まるんだよな
ただC++はマクロ使わない方向で進化してるからな
2020/01/12(日) 21:09:19.71ID:gA+rg5vj
>>212
下手なことするよりその書き方のが良い。個人的には214の方のが好きだが大して変わらん。
2020/01/12(日) 21:35:06.84ID:TRbEu5Zq
いざというときも最悪Cならコンパイラを自作できるがC++はちょっと…
2020/01/12(日) 21:56:32.12ID:Svv4a/Ag
いやいや
gccとかC++だし
2020/01/12(日) 22:39:39.23ID:MD4l5gjt
うちの会社C++03なんだけど・・・
2020/01/12(日) 22:51:11.80ID:Age3j7t+
それが妥当かどうかは業務による
2020/01/13(月) 01:41:11.35ID:rQk6tfo+
おとなしく頭の良い奴に従っとけ
自分が優秀だと思い込んでいる精神異常者の諸君
2020/01/13(月) 01:58:06.34ID:xcD2sz0v
頭のいい奴は総じてc++はカスだと言っとるぞ。
2020/01/13(月) 02:05:13.31ID:Px4xDI4Q
増えていく機能が軒並み
プログラミング始めたてのやつが持つ不満を具現化したようなものばかりだ
慣れていくとCがそうである理由がわかってきて、いらなくなっていく

おおかた頭のいい奴が新規で入ってきて、慣れてないくせに良かれと思って追加してるんだろう
2020/01/13(月) 02:15:09.95ID:8CXSeWtZ
例を教えてくれ。
2020/01/13(月) 03:56:13.32ID:rQk6tfo+
頭の悪い奴向けの機能なんだが
2020/01/13(月) 06:52:04.51ID:zZXHCgLl
>>216 >>228
具体例早くしてくれ
抽象論では話にならん
2020/01/13(月) 09:16:12.93ID:j6Sgy/j5
C++コンパイラとC++のライブラリはC言語でも書けるから
当たらずしも遠からずだと思う
2020/01/13(月) 09:25:57.13ID:a0NWv3WS
全くCで書かれてないコンパイラってあるの?
2020/01/13(月) 10:25:34.29ID:pIGOCTOQ
Cでテンプレート対応できるの?
2020/01/13(月) 10:30:00.85ID:+nJPsH/6
>>228
C++は大人数で開発するための言語なんだからてめー個人がいるかいらないかなんて関係ねーんだわ
2020/01/13(月) 10:36:38.68ID:+nJPsH/6
チームでの開発を安全に進めるための機能なんて熟練者が書く分にはそりゃいらんだろ
で?
2020/01/13(月) 12:52:54.65ID:A/MByXKy
まあアセンブラさえあれば他に必要ないし
でもそこそこ規模大きいプロジェクトはc++多いよね

反例にlinuxはあるけど
2020/01/13(月) 13:04:44.90ID:xcD2sz0v
windowsでさえc++なんか使わなけりゃよかったいうとるぞ。
つまり低レイヤー触るのに向いてるようでそうでもないってのがc++なんだよ。
2020/01/13(月) 13:20:13.66ID:j6Sgy/j5
リーナスは低レベルな人やからな
2020/01/13(月) 13:20:44.02ID:FqpttVgU
だから?
2020/01/13(月) 22:54:55.25ID:/BeY0uog
>>233
Sun/OracleのJavaのコンパイラ javac は Java 自身で書かれている。
IBM製のJavaコンパイラ ecj も同じく。
2020/01/13(月) 23:00:48.10ID:FqpttVgU
JVMもJavaで書いてみせろ
2020/01/13(月) 23:44:05.72ID:vq82NN4B
皆さんが使用されているエディタを教えてください....🙇‍♀
2020/01/13(月) 23:45:43.26ID:jU0I703o
自作
2020/01/13(月) 23:45:56.78ID:5GjUS2iX
メモ帳
2020/01/13(月) 23:46:58.98ID:vq82NN4B
あ、すみません僕は今はatomを使っています
自作のエディタを使ってらっしゃる方なんているんですね。。。
2020/01/14(火) 06:11:49.55ID:J0UMnVjO
emacs
248デフォルトの名無しさん
垢版 |
2020/01/14(火) 13:29:05.29ID:PBX58Pvh
某板金社製
2020/01/14(火) 16:11:50.76ID:gkNCY9ap
↓のコードはコンパイルが通るのですが、func(1)ではなく、func<int32_t>(1)のようにしなければいけないと思っていたんですが、そうではないんですか?
これはコンパイラが勝手にTの型を推測してくれているのでしょうか?

#include <iostream>

template<class T>
void
func(T value) {
std::cout << value << std::endl;
}

int main() {
func(1);
return 0;
}
2020/01/14(火) 16:13:46.64ID:MAaOflfD
俺は自ら望んでなったC++使いだが
リーナスの主張には何ら文句はない
俺も好かんところがいくつかあって我慢しているが
他の人がキレるのを否定はしない
2020/01/14(火) 19:00:56.35ID:jdAaUvyI
>>249
intに推論されてるね。
関数は推論してくれる。
2020/01/14(火) 19:47:23.47ID:gkNCY9ap
>>251
そうなんですか
ありがとうございました
2020/01/14(火) 19:55:58.10ID:MAaOflfD
C++17からはクラスも推定するようになったから気をつけろな
2020/01/14(火) 20:10:13.46ID:3eaorBLU
地獄になるのが目に見えるわ。
2020/01/14(火) 20:20:51.77ID:J0UMnVjO
>>249
>>251
もう少し正確に言うと関数の引数の型については推論してくれる。
戻り値については推論してくれないから<>で型を指定する必要がある。

template<typename T>
T func(double v){
  return static_cast<T>(v);
}

int main(){
  // int pi = func(3.14); // エラー
  int pi = func<int>(3.14);
  return 0;
}
2020/01/14(火) 23:30:18.80ID:gkNCY9ap
>>253,255
なるほど!
ありがとうございます
2020/01/15(水) 00:35:48.44ID:7a3J15MS
>>256
いえいえ
2020/01/15(水) 08:07:26.85ID:Af26ZTs6
>>257
楽しい?
2020/01/16(木) 01:26:49.29ID:Ue561N6A
C#使ってきたわい、C++入門するにあたって何から手を付けたらいいか分からない
江添の入門本読んだらええの?
2020/01/16(木) 04:14:44.73ID:SACm472n
+を重ね合わせないでずらして書くと#じゃなくて++になるやろ
つまりそういうことや
2020/01/16(木) 06:13:59.73ID:iXD/XJ1o
あんなカス本読むならビャーネの本とeffective系統を何冊か読んだ方がよっぽど為になる。
2020/01/16(木) 08:12:06.71ID:+e0TuAjq
俺も自分の経験からは禿の本をオススメすることになる
2020/01/16(木) 18:58:35.12ID:aiRikJgB
C++においてハゲとは神を意味するからな
2020/01/16(木) 20:10:19.95ID:5A9213qe
また髪の話ししてる
265デフォルトの名無しさん
垢版 |
2020/01/17(金) 02:03:14.51ID:nV1+qdjp
C++でウィンドウ関係の処理を組もうと思っているのですが、
最近だとMFCではなく.Net Framework を利用するのでしょうか?
2020/01/17(金) 02:20:28.99ID:oPB0sz0H
いいえ
267デフォルトの名無しさん
垢版 |
2020/01/17(金) 02:26:05.67ID:gAZZjojh
WebGL
2020/01/17(金) 06:22:56.76ID:BtsrcJh0
Win32APIが主流ですよ
2020/01/17(金) 07:24:00.72ID:sP/gsAG3
>>265
MFC抜きでWin32APIだけでコード書くことがあるけど正直無駄な苦痛を感じるよ
MFCもダサいとこあるけどMFCでできることと同じ内容のコードを書いてると泣けてくる
2020/01/17(金) 08:02:37.47ID:6PrSA6bz
WTLってどうなの?
2020/01/17(金) 08:03:39.75ID:+NTDhbdd
純粋仮想関数の=0の右辺って定数式なんでしたっけ
2020/01/17(金) 08:55:06.31ID:9u9GYVKv
0じゃないか?
2020/01/17(金) 09:17:21.07ID:r0ibn4Bf
オブジェクトを明示的に破棄する方法ってある?
自分で new したなら delete すれば良いと思うが、STL コンテナ等の場合はどうすれば良いかという質問です。

例えば巨大な vector を作って何らかの作業をした後、もうその vector は用無しでメモリがもったいないからスコープを抜けるのを待たずに破棄したいみたいな状況を想定してます。
2020/01/17(金) 09:19:05.55ID:oRcV/dFn
>>271
純粋仮想関数であることを示すための専用の構文らしい。pure-specifierという。
2020/01/17(金) 09:22:16.66ID:8wRp1qeu
>>273
空とswap
2020/01/17(金) 09:26:42.76ID:r0ibn4Bf
>>275
場当たり的な対処に思えますが、そういうのが嫌ならマメにスコープを切れということでしょうか。
2020/01/17(金) 10:03:31.41ID:jP7OzWuZ
>>276
じゃあvectorをnewしたらいいじゃん
頭使えよ
278デフォルトの名無しさん
垢版 |
2020/01/17(金) 11:18:09.64ID:fMuYUnvE
>>265
tcl/tk
wxWidgets
Qt
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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