[過去ログ] C++相談室 part154 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
233: 2021/01/26(火)21:46 ID:ZRZozNwf(2/3) AAS
プリプロセッサマクロだらけの“汚い”コードを否定したらC/C++の強みを失うことになる。
JavaやC#はプリプロセッサマクロが貧弱なのが玉にキズだ。
234: 2021/01/26(火)21:51 ID:ZRZozNwf(3/3) AAS
pybind11スレがないこんな世の中じゃ〜Python〜
まぁマクロの塊のような代物だが。
235
(1): 2021/01/27(水)06:03 ID:yQalyIAE(1) AAS
C++はコミュニティで発言力のある人が大抵率直にものを言い過ぎる、悪く言えば口が悪いので忌み嫌われてるとこある
236: 2021/01/27(水)07:30 ID:eLUquqZ0(1) AAS
>>229
カダベリンやムスカリンが発生してたり
セレウス菌が大量にいるのは
そういう問題じゃねえぜ
237: 2021/01/27(水)07:48 ID:4l9V085Z(1) AAS
でも、Linux板なんか失敗したボランティアの住所載せて、放火しろとは言ってませんよ??言ってませんよ??・・・などの書き込みあるからな。
それに比べれはだいぶ良識的では?
238: 2021/01/27(水)11:26 ID:cJSBZXf9(1) AAS
C/C++のプリプロセッサも貧弱すぎ
239
(2): 2021/01/27(水)17:43 ID:nPuTGnvU(1) AAS
C++例外のスタック情報がとれないのはC++の欠点。
例外でスタック情報を使えるJava/C#/Python/Perlはエライ。
240: 2021/01/27(水)21:51 ID:NT655YPf(1) AAS
おまえは二度とC++使うな
241: 2021/01/27(水)23:04 ID:TqcnYSNG(1) AAS
>>239
スタックフレーム作ればイケるってば
242: 2021/01/28(木)09:07 ID:dmDIUcy2(1) AAS
>>235
例えば誰?
243
(2): はちみつ餃子 ◆8X2XSCHEME 2021/01/28(木)10:23 ID:vBYpvnJx(1/2) AAS
>>239
gdb にアタッチしたことないんか?

C++23 には stacktrace が入るから
デバッガを使いこなせなくても少し楽にトレースできるかもな。
244: 2021/01/28(木)10:52 ID:dNWrUHbO(1/3) AAS
>>223
フグは豚肉に触感似てるけどフグの方が美味い
245
(1): 2021/01/28(木)10:54 ID:dNWrUHbO(2/3) AAS
>>228
日本で感染爆発が起きてないのは以前からジビエが流行してたからか
246: 2021/01/28(木)10:55 ID:dNWrUHbO(3/3) AAS
>>230-231
白菜は外の皮じゃなくて中の芯から先に食べろと言われている
247: 2021/01/28(木)11:40 ID:eLxqvNeX(1/2) AAS
>>200
ユニコ時代だからAPLよりずっと先行ってるぞ
組み込み演算子で∩∉とか集合論の記号採用してたりアトミックな演算子は⚛++とか洒落効いてたりする
一方で古代perlのプレフィックスは緩和されてる
248: 2021/01/28(木)11:51 ID:eLxqvNeX(2/2) AAS
∅∘∩ ⊍∪ ⊖ ⊎ ∖≅ ∈ ∉ ∋ ∌ ≡
≢ ⊂ ⊄ ⊃ ⊅ ⊆ ⊈ ⊇ ⊉ ≼ ≽.«»≠␤
他組み込みではこんな感じか
>= やらよりmずっと可読性高いと思う、エディタもvimとか高機能なのなら問題なかろう
␤文字を表示してくれるのは特に便利
249: 2021/01/28(木)11:58 ID:kskG1wa2(1) AAS
>>245
さすがにコウモリはどこの地方でも食わんだろ
250
(1): 2021/01/28(木)17:23 ID:8Al9oSyF(1) AAS
なんでプリミティブ型って継承できんの?
251
(2): はちみつ餃子 ◆8X2XSCHEME 2021/01/28(木)17:29 ID:vBYpvnJx(2/2) AAS
>>250
やりたいときってあるか?
252
(2): 2021/01/28(木)17:41 ID:GsoT0xyU(1) AAS
クラスAのオブジェクトをクラスBのメンバにするときってどうやってAのコンストラクタ呼ぶの?

class B{
 A a;

public:
 B(){
  // この辺でAのコンストラクタを呼びたい
 }
};
253
(1): 2021/01/28(木)17:48 ID:WrE+/6so(1) AAS
>>252
メンバのコンストラクタの方が先に呼ばれる。だからそこでは既にAは構築済み。
どうしてもBのコンストラクタ内でAのコンストラクタ呼びたいなら、メンバ変数はポインタで持つ
254: 2021/01/28(木)18:07 ID:IHrlZHr2(1/5) AAS
>>243
gdbはおいとくとして、Visual StudioってC++例外のスロー位置を追跡できたっけ?
255
(1): 2021/01/28(木)18:50 ID:Hqj+H5f7(1) AAS
>>252
初期化リストを使う
B() : a(hoge, piyo)
256
(1): 2021/01/28(木)18:54 ID:IHrlZHr2(2/5) AAS
あとで再初期化したくなること多いから、結局コンストラクタの実装を別の関数に分離すること多いよね。
コンストラクタの種類が増えたら使いまわしたくなるし。
257: 2021/01/28(木)19:24 ID:q3mIN91/(1/3) AAS
>>243
デバッガ使いこなせないとか話にならんだろ・・
258
(2): 2021/01/28(木)19:28 ID:IHrlZHr2(3/5) AAS
デバッガやシンボルがない環境でもスタックトレースできたほうが良いと思うけどね。
後発言語の生産性の高さはこの辺の充実ぶりにあるでしょ。
259
(1): 2021/01/28(木)19:42 ID:IHrlZHr2(4/5) AAS
他プロセスと連携するシステムにはデバッガを当てにくい事が多い。
タイミング依存の不具合を追跡する場合、デバッガがまったく役に立たない。
260: 2021/01/28(木)20:25 ID:eBfsAdOM(1) AAS
>>258
その手の生産性と成果物の効率はトレードオフでどっちを重視するかが違うだけでしょ
261
(3): 2021/01/28(木)20:36 ID:IHrlZHr2(5/5) AAS
デバッガ使いこなすとか言って悦に入ってる人と会話が噛み合わないんだが。
262: 2021/01/28(木)20:36 ID:yp+dwtvR(1) AAS
>>258
だよね
むしろデバッガをアタッチできる環境ならスタックトレースはなくてもなんとかなる
ユーザー環境でスタックトレースがテキストファイルに落ちるようになってるとトラブルシューティングがしやすい
263
(1): 2021/01/28(木)21:29 ID:oPlwADge(1/2) AAS
>>261
ここほとんどアマチュアの人だから許してやろうやw
264: 2021/01/28(木)21:48 ID:q3mIN91/(2/3) AAS
>>261 >>263
悪いがプロだよ
IDEの機能を使いこなせてない初心者が、先に学ぶべきことから逃げて言語だけでどうにかさせようとするような
(いつものことだが)はちみつのミスリードに釘を刺しただけだ
265: 2021/01/28(木)21:51 ID:q3mIN91/(3/3) AAS
>>261
あと、流れを読む限り俺の発言が気に入らなくてファビョってるのは君の方だよね、俺1行しか書いてなかったし(しかも大した内容じゃない)w
何が気に障ったんだ?
266: 2021/01/28(木)21:51 ID:oPlwADge(2/2) AAS
いやごめん、俺は流れは一切追ってなくて他意はないよ
茶化したかっただけ
気にしないで
267: 2021/01/28(木)23:50 ID:g6qVZG7L(1) AAS
発狂やないかw
Perlの人かな
268
(3): 2021/01/28(木)23:53 ID:RfcrpqT0(1) AAS
>>253,255
じゃあ、Bを構築してしばらく経ってからわかる情報を使ってAを構築したいとき、Aのインスタンスをメンバとして持つのは不可能ということですか?
ポインタで持つ以外の方法はない (想定されてない?) のでしょうか

constなメンバ変数を初期化するときも近いことを思います
269: 2021/01/29(金)00:10 ID:ZIYbfTXe(1/4) AAS
>>268
そういうコンストラクタ制約を持つクラスはけっこう多い。
WindowsのC++向けGDI+ライブラリのクラス群はまさにこれが当てはまる。
広範に存在している以上は受け入れるしかない。
今時は標準でshared_ptrなどの共有ポインタクラスを使えるので、さほど問題にならないでしょ。
270: 2021/01/29(金)00:19 ID:SRnp44iw(1) AAS
>>268
Aに引数なしのコンストラクタ、コピーorムーブ代入演算子があるなら、後で作って代入でもいいけど
まぁ特に理由なければ(スマート)ポインタで持った方が無難だし楽

constはどうしようもない
271: 2021/01/29(金)00:22 ID:MWSZTtHp(1) AAS
>>268
「Bを構築してしばらく経ってからわかる情報」を返すヘルパー関数を作って初期化リストの中で呼べばいいじゃない
272: 2021/01/29(金)07:49 ID:/axUqcOX(1) AAS
データメンバをconstってあんまりやらないな
publicに晒すとかじゃなきゃメンバ関数を
constにするだけで足りるから

あ、staticメンバのconstはよくやるけどね
273
(2): 2021/01/29(金)08:02 ID:1V7SRlCX(1/3) AAS
>>251
ある
実装は同じunsigned longでも意味が違うから別クラスとして扱いたいときとか
private継承できたらナア……
現状(C++03)はプリミティブ型と同じ演算子(のうちの当座のアプリケーションで使うやつ)をいちいち実装したクラスを作って
NDEBUGマクロで実装を切り替えるみたいな涙ぐましい努力が要る
274: 2021/01/29(金)08:05 ID:1V7SRlCX(2/3) AAS
訂正orz
誤: private継承
正: public継承かつoperator unsigned long()はprivateかつunsigned longからの構築はexplicit
275: 2021/01/29(金)08:08 ID:1V7SRlCX(3/3) AAS
メンバをconstにして代入演算子を定義せずにいるとデフォルトの代入演算子をが定義できないとコンパイラに文句を言われる俺環、
276: 2021/01/29(金)09:20 ID:koPyq8om(1) AAS
>>273
それ、継承できたとして式の中で混在しても区別されないんじゃね?
テンプレートの型引数で区別するような使い方くらいしか思いつかないが。
277
(1): 2021/01/29(金)12:20 ID:c2S2Mocm(1/2) AAS
メンバ変数のconstはポインタ型ならすることあるけど、値で持つメンバ変数はあんまり意味なくない?
constなくても勝手に外部から書き換えられないように、ちゃんと隠蔽しとけばいいだけでしょ
278
(1): 2021/01/29(金)12:35 ID:2DekME/2(1) AAS
>>277
class内の処理においても変更しないつもりだ、変更されることはない、と明示することで意識しておかなければならないことを少し軽減できるのだから、無駄ではないと思う。
手間をかけずにconstにできるならしておけばいいし、逆に無理して複雑なことをしてまでconstにする必要はないという程度のことかと思う。
279: 2021/01/29(金)12:55 ID:c2S2Mocm(2/2) AAS
>>278
たしかにconst付いてればコンストラクタで設定した値がずっと変わらないことが
明示的になるから無意味ではないか
280: はちみつ餃子 ◆8X2XSCHEME 2021/01/29(金)14:10 ID:heeNhc25(1) AAS
>>273
そういう用途なら opaque alias という提案だけは出てるけど
どう見てもグダグダなんで、場当たり的な方法のほうがマシだと思うよ。
281
(2): 2021/01/29(金)16:04 ID:5pIDnM+S(1/3) AAS
>>251
3値のboolean作るときってboolean継承すべき?
282: 2021/01/29(金)16:07 ID:5pIDnM+S(2/3) AAS
>>256
言いたいことは判るが
コピーコンストラクタやムーブコンストラクタが勝手に使われるから
デフォルトに任せてると何が起こるかは判ってた方が良い
283: 2021/01/29(金)16:10 ID:5pIDnM+S(3/3) AAS
>>259
COMサーバーというかDX用にフィルタ書いてると訳判らなくなった
284
(1): 2021/01/29(金)16:56 ID:RxAp4EkX(1) AAS
>>281
3値のbooleanを作って何するの?
boolへのポインタにしてtrue / false / nullptr の3値でなんとかならんか?
285: 2021/01/29(金)17:20 ID:ADFs+h5F(1) AAS
boostにtriboolってのがあるな
286: はちみつ餃子 ◆8X2XSCHEME 2021/01/29(金)17:23 ID:t7wU8l8M(1) AAS
>>281
仮に真偽値型を継承可能であったとして、三値型が真偽値型を継承するのはおかしいだろう。
場合によって柔軟な判断が必要な場合はあるものの、
継承は is-a 関係を表したいときに限ったほうがよろしいというのが一般的な設計原則だと思うが。
287: 2021/01/29(金)17:25 ID:GtDK4kd8(1) AAS
nullableか、DBのフィールド値?
288: 2021/01/29(金)18:57 ID:ZIYbfTXe(2/4) AAS
はちみつ餃子「スタックトレースできないならデバッガ当てればいいじゃない」
289: 2021/01/29(金)19:41 ID:rAmh2V0K(1) AAS
典型的な円楕円問題だな
290: 2021/01/29(金)19:56 ID:ZIYbfTXe(3/4) AAS
テンプレートを使えば、クラス継承に依存しない記述が可能。
iostreamが黒歴史扱いである現実を踏まえての話。
291: 2021/01/29(金)21:24 ID:WFMo+mcm(1/2) AAS
とりあえずiostream批判しとけば訳知り顔ができた気に浸れる浅はかなやつ
292: 2021/01/29(金)21:35 ID:nnAlz0gZ(1) AAS
c++ニワカあるあるだよなw
iostreamとりあえず批判奴w
293: 2021/01/29(金)21:39 ID:ZIYbfTXe(4/4) AAS
iostreamは使いもしないメンバ変数を継承することを強要される悪い手本でしょ。
294: 2021/01/29(金)22:16 ID:WFMo+mcm(2/2) AAS
何も説得力を示さずに突然「悪い」と言い出す
295: 2021/01/30(土)01:56 ID:SJAC6oP5(1) AAS
iostreamはクソなのは正解だが別に批判するようなことでもない
なぜなら使わなければいいだけの話だからだ
296: 2021/01/30(土)02:06 ID:OHt9F1SU(1/8) AAS
無理にクラス継承を使わずオーバーライド関数とそれを使うテンプレート関数を充実させたほうが幸せになれる。
297: 2021/01/30(土)02:41 ID:PJvUkb6d(1/5) AAS
別に無理して継承を使っているわけではない
どっかの馬の骨が気に入らんからといって
あれを使うなこれを使うなと言われるほうが無理そのものだ
298: 2021/01/30(土)02:53 ID:OHt9F1SU(2/8) AAS
例えば、ファイルに書き込む処理があったとする。
ファイルハンドルとして有名な型としては、int型、FILE*型、iostream型、Win32APIのHANDLE型などがあげられる。
これらを派生クラスに閉じ込めて抽象化するよりも、関数名が同じになるオーバーライド関数を作ってテンプレート関数から呼んだ方がはるかに楽。

int WriteBuffer(int fp, const char* buffer);
int WriteBuffer(FILE* fp, const char* buffer);
int WriteBuffer(ostream& fp, const char* buffer);
int WriteBuffer(HANDLE fp, const char* buffer);

template<typename FILE_OBJECT>
void WriteContent(FILE_OBJECT o)
{
省3
299: 2021/01/30(土)03:53 ID:ULcRPxme(1/2) AAS
ドヤってるところすまんがそれオーバーライドじゃない
300: 2021/01/30(土)04:01 ID:PJvUkb6d(2/5) AAS
プゲラ
301: 2021/01/30(土)05:45 ID:SLqQC90z(1/5) AAS
フリー関数とクラスメンバでは、インテリセンスが効くか効かないかの違いもある。
302: 2021/01/30(土)05:52 ID:OHt9F1SU(3/8) AAS
そんなあなたに名前空間
303: 2021/01/30(土)06:06 ID:SLqQC90z(2/5) AAS
クラスの場合、名前空間を書かなくても、インテリセンスが効く。
304
(2): 2021/01/30(土)06:47 ID:budoESfZ(1) AAS
コンストラクタの初期化リストで
class A{
 int x;

public:
 A(int x) : x(x) {}
};
みたいにしたとき、ちゃんとメンバのxがコンストラクタの引数のxで初期化されますよね?
メンバの x と同名の引数の x が同一のスコープに同居しているようで紛らわしいかなと思ったのですが、こういう書き方を避ける慣習はありますか
305: 2021/01/30(土)07:04 ID:ULcRPxme(2/2) AAS
自分は普通にその書き方してる
避ける人も居るっぽいけど好きなようにすればいい
306: 2021/01/30(土)09:09 ID:PHKUCpSE(1) AAS
iostreamマンセーバカってのは型安全ならどんな仕様でも良いと思ってるカスが多いからな。
型安全は評価する一項目に過ぎないってのに。
307: 2021/01/30(土)09:29 ID:vDjChjwr(1) AAS
iostreamは整形のための情報をわざわざ状態として持たされるのがクソ
当時は状態が邪悪だっていう考え方が一般的じゃなかったからしょうがないけど
308
(1): 2021/01/30(土)09:38 ID:2pTx0la6(1) AAS
でも状態もってなかったら記述が煩雑になりすぎない?
HTMLのマークアップとまでは言わんまでも
309
(1): 2021/01/30(土)09:59 ID:OHt9F1SU(4/8) AAS
整形設定を記憶する変数インスタンスをiostreamインスタンスと分離すべきって話でしょ。
必要に応じて差し替えできるように参照渡しするか、逆にiostreamを参照渡しするとか色々やれたはず。
310: 2021/01/30(土)10:06 ID:OHt9F1SU(5/8) AAS
というか他のオブジェクト指向言語だと整形情報がFormatterクラスとかに分離されているのが普通だし。
311: 2021/01/30(土)10:32 ID:PJvUkb6d(3/5) AAS
FORTRANのFORMAT文が好きな人をどうこうしようとは思わない
312: 2021/01/30(土)10:40 ID:hVJYorL3(1) AAS
初歩的な質問なのですが、stringクラスの内部バッファはデストラクタで破棄されるため自分では一切管理しなくていいという認識で良いのでしょうか?
313: 2021/01/30(土)11:17 ID:SLqQC90z(3/5) AAS
アロケータによるけど、普通は管理しなくて良いのでは?
314: 2021/01/30(土)12:47 ID:EWZvTk3z(1) AAS
>>308
状態持ってても無駄に煩雑(複雑ではない)
315: 2021/01/30(土)12:57 ID:8FYOnD7D(1) AAS
iostream 型安全なのはいいけど、char/signed char/unsigned char ぜんぶ文字扱いするのはやめて欲しかった。
316: 2021/01/30(土)13:18 ID:SLqQC90z(4/5) AAS
単項プラスで。
317
(1): はちみつ餃子 ◆8X2XSCHEME 2021/01/30(土)13:18 ID:4OMKN/Z4(1/2) AAS
>>309
入出力を直接的に司るバッファクラス (basic_streambuf) と
書式制御を司るストリームクラスを分離したデザインになっているし、
必要に応じて差し替えることも出来るよ。

iostream においてそれがわかりやすいか、良いデザインであるかは別として、
ちゃんと分離したデザインになってる。
318
(1): ◆QZaw55cn4c 2021/01/30(土)14:53 ID:L1O2TNoD(1/2) AAS
>>304
私は馬鹿なのでメンバ変数とコンストラクタ引数を x, _x というふうに書き分けています、馬鹿が感染るかもしれないのでお勧めはしません
319
(2): 2021/01/30(土)15:08 ID:S5wIZr5N(1/2) AAS
C++でのメンバ変数は、標準的には m_xと書く。
320: 2021/01/30(土)16:04 ID:0ahE8ZR3(1/2) AAS
>>319
何処信者だよ
ダッサw
321: 2021/01/30(土)16:41 ID:SLqQC90z(5/5) AAS
MicrosoftとAdobeがその書き方多いですね。
322
(2): 2021/01/30(土)17:13 ID:S5wIZr5N(2/2) AAS
なお、_x は、命名規約上、禁止。先頭が _ の名前はコンパイラなどの
システム予約なため。
323: 2021/01/30(土)17:14 ID:2r/QlSUC(1/2) AAS
そうだったっけ?
324: はちみつ餃子 ◆8X2XSCHEME 2021/01/30(土)17:19 ID:4OMKN/Z4(2/2) AAS
>>304
>>318-319
命名規約の方法論は色々なのでプレフィクスを付けるルールが定めてある場合もあるし、
むしろ一致させていくようにしているものもある。
私自身は、少なくともメンバに値を設定するだけの単純なコンストラクタである場合には
名前を一致させていくスタイルで書く。

C++ を使う上でのガイドラインとしてよく参照されているのはグーグルのスタイルガイドで、
データメンバの名前は最後にアンダースコアを付けるようにルールを定めている。
外部リンク[html]:google.github.io

その一方では C++ の設計者である Stroustrup は型やスコープを変数名に含めるのは好ましくない
省10
325: 2021/01/30(土)17:30 ID:2r/QlSUC(2/2) AAS
互いの信仰を侵害してはならないがチーム内では統一されている必要がある
規約の背景は明確である必要がある
326: 2021/01/30(土)18:08 ID:OHt9F1SU(6/8) AAS
>>317
まず、FILE*とostreamが一対一対応していないのがダメ。
せっかくC言語でファイル、パイプ、標準IOがFILE*型としてで統合化・抽象化されていたのに、
C++でostreamとfstreamで分離される劣化が起きた。
327: 2021/01/30(土)18:30 ID:PJvUkb6d(4/5) AAS
ios_baseで統一する形に変わっただけ
それをFILE*がどうたらと駄々こねるのは
頭が堅すぎる実年齢に無関係の老害だ
328: 2021/01/30(土)18:36 ID:OHt9F1SU(7/8) AAS
パイプ処理をostream系で書く奇特な人ってどのくらいいるの?
329: 2021/01/30(土)18:41 ID:OHt9F1SU(8/8) AAS
pythonは定数がないから全部大文字の変数は定数のようにみなしましょう的な談合がある。
330: 2021/01/30(土)19:00 ID:0ahE8ZR3(2/2) AAS
定数というか型もない
331
(2): ◆QZaw55cn4c 2021/01/30(土)19:09 ID:L1O2TNoD(2/2) AAS
>>322
束縛領域が狭いローカル変数とかには、_x を使ってもいいのではないか?と考えていますが‥‥
332: 2021/01/30(土)20:32 ID:PJvUkb6d(5/5) AAS
data_
size_
1-
あと 670 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.022s