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/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
2020/01/17(金) 12:09:31.61ID:FiFP8PG3
Qtはメジャーな製品でよく使われてる印象がありゅ
2020/01/17(金) 12:12:10.21ID:oPB0sz0H
MS製にこだわって頑なにMFCみたいな化石使ってる奴いるけど普通にサードパーティのツールキット使うのが主流
2020/01/17(金) 12:58:41.79ID:sP/gsAG3
他人のところの事情も知らんくせにシッタカこくと
聞こえたやつ全員からそれぞれ色んな理由でアホにされるぞ
282デフォルトの名無しさん
垢版 |
2020/01/17(金) 13:10:35.05ID:fMuYUnvE
GTKは糞
2020/01/17(金) 13:38:21.01ID:oPB0sz0H
>>281
選択肢に.NETが出てくるあたり何の制約もない状況でサードパーティが使えない理由とは?
2020/01/17(金) 14:31:40.72ID:sP/gsAG3
身バレするから書かない
2020/01/17(金) 14:39:28.87ID:8NRoOtOw
スレ違いでしょ。続きはWin32APIスレに移動してどうぞ。
2020/01/17(金) 15:05:49.07ID:r0ibn4Bf
vectorをnewする?
ゴミみたいなこと言うな
2020/01/17(金) 15:19:25.90ID:yexmiyzj
質問する側の態度とは思えん
2020/01/17(金) 15:28:54.41ID:WQqGcJSL
> 自分で new したなら delete すれば良いと思うが

良いと思ってるならvectorもnew/deleteで良いでしょ
2020/01/17(金) 15:35:23.13ID:NjgiFnOV
vector newでいけない理由を先に説明してくれないと
2020/01/17(金) 17:45:27.47ID:xt9i4Zu8
> スコープを抜けるのを待たずに
> 破棄したいみたいな状況を想定してます。
破棄するタイミングはコンパイラには分からんのだろ
人が判断するしかないなら「場当たり的」にやるしか無いのでは
2020/01/17(金) 17:56:19.89ID:8NRoOtOw
vector::clear()、vector::shrink_to_fit() の連続実行で十分なのでは?
2020/01/17(金) 18:12:09.22ID:2FWha3Nl
shrink_to_fit

capacity()をsize()に縮小させるというリクエストを行う。
実装依存の最適化を許可するために、縮小するという動作は仕様上強制されない。

縮小されないかもしれない、らしい
2020/01/18(土) 11:20:53.95ID:Iw/95SDF
たいていは逆にスコープを破棄のタイミングに合わせるような書き方すればいいだろ。
分岐の激しい破棄条件書くくらいならそっちのが楽なことは多い。
2020/01/18(土) 11:59:37.47ID:timcC3h8
while {
2020/01/18(土) 12:04:39.51ID:timcC3h8
途中で投稿してしまい失礼。

do {
} while(0);

で括って、処理が続行できない場合はbreakして、doループを抜けたすぐ下でで資源解放する古典的な記述でいいのでは。
2020/01/18(土) 12:12:16.18ID:LluV6Hhd
糞野郎にみんな親切だな
2020/01/18(土) 14:36:14.37ID:cLOUBKze
gotoを避けるためにgotoよりクソなコードを書くのがいいわけねえだろ
2020/01/18(土) 14:54:44.30ID:timcC3h8
ま、資源解放のコーディングが楽になるなら正義でしょ。
2020/01/18(土) 16:33:12.29ID:cLOUBKze
>>298
確認するが、ここがC++スレということは忘れてないよな?
2020/01/18(土) 16:37:31.05ID:sDwxplmd
メモリがもったいない言うけど、ホントにカツカツなのだろうか
環境的に余裕であれば妙なコーディングする意味がない
2020/01/18(土) 20:06:16.49ID:6Wtj4R8r
どんくらいスキマと余裕があるのかを常時監視するソフトウェアはかんたんに作れる
なんせわたくしはC++を極めましたからな
2020/01/18(土) 20:37:07.22ID:0qsbj5e6
>>297
gotoより糞な訳無いだろ
こんな単純で頻出する制御構造が文法上ループにせざるを得ないのが悪いだけ
まあtry catchと同型だが、これだと遅くなるしね
2020/01/18(土) 20:39:57.16ID:cLOUBKze
>>302
doでない単純な複合文とgotoで済む話だ
アホwバカwww
2020/01/18(土) 20:44:02.19ID:0qsbj5e6
gotoだとRAII対応できないじゃん
2020/01/18(土) 20:44:36.43ID:7kb+tsdB
すまねーよ。他の例外で飛ばされたらどうすんだ馬鹿。
2020/01/18(土) 20:46:21.29ID:cLOUBKze
>>304
do(0) なんて持ち出すアホが RAII かよw
2020/01/18(土) 20:47:02.86ID:0qsbj5e6
まあ最近は
[&]{
...
}();

で書くことが多いが
2020/01/18(土) 20:48:42.22ID:0qsbj5e6
do{}while(0);の問題は知らない奴が混乱するって一点のみだろ
2020/01/18(土) 20:59:02.60ID:cLOUBKze
「知ってるやつ」の言い訳を、ここで開陳してもらおうか
最近、笑う健康法ができてないんで、よろしく頼むわ芸人さん
2020/01/18(土) 21:04:02.89ID:0qsbj5e6
その前にgotoより糞ってのが既に成立してないじゃん

どこが糞なのか具体的に
2020/01/18(土) 21:10:26.52ID:cLOUBKze
ははは、話を逸らすしかねえよな
「do{}while(0);の問題」てのが他の問題によって
成り立つのか成り立たねえのか影響されると
自ら自白してやがる(核爆

助けてやらねえよ、自分でなんとかしなアホwバカwww
2020/01/18(土) 21:15:23.05ID:0qsbj5e6
意味がわからないよ
煙に巻いて逃げる気かなw
2020/01/18(土) 21:19:10.77ID:cLOUBKze
>>312
逃がさねえぞ

「知ってるやつ」の言い訳を、ここで開陳してもらおうか
最近、笑う健康法ができてないんで、よろしく頼むわ芸人さん
2020/01/18(土) 21:19:14.06ID:65HS6FKB
やりたいことはスタックにあるvectorの早期解放なんだから
gotoもdo{}while(0)もラムダ式もいらない
単に{}で囲うだけでいい
2020/01/18(土) 21:20:27.83ID:cLOUBKze
だよなwwwwwwwwwwww
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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