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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
454
(1): 2021/06/21(月)09:49 ID:yA/sh2j8(3/3) AAS
>>452
Cスタイルキャストは状況に応じてよしなにキャストしてくれるんだが
これがたまに意図しないキャストになる場合があるから、意味を明確にするためにC++のなんちゃらキャストをする
よほどのことがないと変なキャストにはならないとは思うけど一応
455
(1): 2021/06/21(月)09:58 ID:yU7HyP9W(2/3) AAS
const_castはint*→char*のように指す先の型は変更できない
だから、そのような変更をしようとしたらエラーになるし
そのような変更を意図していないことも示せる
456: 2021/06/21(月)10:07 ID:5d1ivHhj(1) AAS
>>452
誤解してるようだけど、constってのは基本的にはバグ抑止のためのもので
文法上のルールに過ぎないのよ
実行時にチェックが走ったりするわけではない
で、意図的に破ることも一応出来る。意図的に破るときはそれが見てわかるようにconst_cast使おうね、
Cスタイルのキャストは何でも通しちゃうから避けようねってだけ
457: 2021/06/21(月)10:07 ID:G6bnr+rx(3/3) AAS
>>454-455
なるほど。ありがとうございます
今は const_cast で渡すことにします
458
(1): 2021/06/21(月)11:07 ID:JzAz8iJE(1/2) AAS
>>441
この件諦めきれなくて少し調べてみたら、
-O3 はダメだが
-O3 -static -ipo は正常に動く
ことが分かった
更に、icpcでなくg++なら最適化レベルによらず正常に動くことが分かった

この場合陥っていがちな失敗なんてないですかね
ググってもなかなか体系的な知識に出会えなくて、、、
459
(1): 2021/06/21(月)15:28 ID:os4CEfZ3(1/2) AAS
諦め切れないくらい気になるなら -S で .asm コード見るべき
460
(2): 2021/06/21(月)15:39 ID:s5hePRzy(1) AAS
こんなところでC++が中途半端に出来るだけが自慢の専門卒みたいな連中に尋ねるよりも
大学の先生かチューターの院生に尋ねた方がいいだろう
進みたい研究室があればそこに行って訊くと良い
461
(1): 2021/06/21(月)16:20 ID:mdGWC+9J(1) AAS
>>458
たぶん初期化漏れとかの未定義動作
-Wallでコンパイルすれば何かわかるんじゃね
462: 2021/06/21(月)16:27 ID:JzAz8iJE(2/2) AAS
>>459-461
すんませんあざす
asmコードとか未知の領域ですけど勉強になりそうですね

-Wallは一応常につけてて、ワーニング全部潰すようにはしてます
全部のオブジェクトにvolatile付けたり外したりしてみようかな
463: 2021/06/21(月)17:09 ID:os4CEfZ3(2/2) AAS
適当に弄って適当に動いたように観えて
適当に解決したって言い張るやつは成長しない
464: 2021/06/21(月)17:40 ID:uOMSqfSW(1) AAS
短かったり切り出せるようなコードだったらcompiler explorerとかもあるよ
465: はちみつ餃子 ◆8X2XSCHEME 2021/06/21(月)17:44 ID:5bV+3LP7(1) AAS
const ではないオブジェクトについて const 付きにキャストしている場合には
const を剥がしてから書き込みをすることは OK だが、
元々 const なオブジェクトから const を剥がして書き込むのは未定義で、
実際に最適化で壊れることはある。
ちなみに const なオブジェクトから const を剥がしても読むのみなら OK。

LLVM 9.0 で const 領域への書き込みを最適化で削除するする方針になってる。
外部リンク[html]:releases.llvm.org
466: 2021/06/21(月)20:26 ID:yU7HyP9W(3/3) AAS
>>460
院生ねえ。。。修士の新人は手放しできないんだけどな
レッテルで色眼鏡つかう奴って
情報処理特種とかでもひれ伏すのか?
学生みたいなコード書くアホ知ってるけどw
467: 2021/06/21(月)23:06 ID:0VSE6TcG(1) AAS
インテルコンパイラ様ともなれば
プラグマで関数単位で最適化レベルを変えられるんじゃないの
動くパティーンが分かっているのなら二分探索で問題の箇所を見つけるこ
とができうる
468
(1): 2021/06/22(火)00:52 ID:JdLoAtTW(1/3) AAS
C++の参照で渡した構造体を
中で別の構造体に実態コピーしたい時ってどうしたらいいんでしょう

void CTest::SetData(Kouzoutai &kozo)
{
if(kozo.judge == 1){
_KozoTmp = kozo;
}else{
//色々する
}
}
省6
469: 2021/06/22(火)01:00 ID:cH2Us/Cy(1/2) AAS
それで普通にコピーされるだろ
なんでされないと思うの?
470: 2021/06/22(火)01:05 ID:JdLoAtTW(2/3) AAS
参照にした時って、ポインタみたいにアドレスコピーにならないの?
471: 2021/06/22(火)01:15 ID:cH2Us/Cy(2/2) AAS
あのさ、_KozoTmpは何だ?Kouzoutai型だろ?Kouzoutai*でもKouzoutai&でもないだろ?
なんでアドレスなんか持てると思うの?
472: 2021/06/22(火)01:21 ID:JdLoAtTW(3/3) AAS
あ、そうなんだ
ありがとうございます
kozoを参照で渡したから
_KotoTmpも無理矢理アドレスになるかと思ってました
473
(1): はちみつ餃子 ◆8X2XSCHEME 2021/06/22(火)01:22 ID:Ikkk/uWu(1) AAS
>>468
参照というのはいうなれば別名。
SetData の実引数と kozo は「同じもの」と考えて構わない。 (少なくともその場合は)
474
(2): 2021/06/22(火)10:52 ID:2AbGnqy7(1) AAS
copy コンストラクタ と move コンストラクタ ってみんなちゃんと書いてる?
デフォにまかせてる?
475: 2021/06/22(火)11:08 ID:jiZrgPwV(1/2) AAS
ものによる
ポインタやハンドルがあれば書いたり=delete;したり
実体だけなら大抵デフォ
476: 2021/06/22(火)11:38 ID:PhquAAua(1) AAS
=defaultが多い
477
(1): 2021/06/22(火)11:45 ID:hpNVAZMN(1) AAS
コピーコンストラクタがあったらムーブ自動生成されないんでしょ?
478: 2021/06/22(火)13:58 ID:jiZrgPwV(2/2) AAS
俺、タイプ量の少なさは美しさの1つだと思ってるから
=default;は本当に必要なときだけ書く
479
(1): 2021/06/22(火)14:51 ID:4bX8g7Cj(1/2) AAS
doxygenでドキュメント作成してるけどソースが見づらくてコメント無い方がいいのではと思ってしまう
480
(1): 2021/06/22(火)15:03 ID:zJk9T2bQ(1) AAS
>>479
関数ヘッダーだけでええんちゃうん?
481: 2021/06/22(火)16:50 ID:T8maLWCY(1) AAS
>>480
テンプレート系のライブラリなので
482
(2): ◆QZaw55cn4c 2021/06/22(火)19:42 ID:9FGytWqi(1/3) AAS
もう C は C89 で止めれ
C++ は C89 だけ受け付け可能であれば、あとは好きに変えてもらってもかまわない
483
(1): ◆QZaw55cn4c 2021/06/22(火)19:43 ID:9FGytWqi(2/3) AAS
>>473
反対せざるを得ない意見です…‥
484
(2): ◆QZaw55cn4c 2021/06/22(火)19:43 ID:9FGytWqi(3/3) AAS
>>474
コピコンはちゃんと書きますが、ムーブ?何?それ美味しいの?
485
(1): 2021/06/22(火)20:42 ID:InXfs1nZ(1) AAS
>>477
あったら使われる(一時オブジェクトの場合に)ってだけだぞ
やること一緒なら書かんでいい、時間の無駄
486: 2021/06/22(火)21:50 ID:7Ks2gqqv(1) AAS
>>474
デフォルトで済まない場合だけ明示的に記述するのが普通じゃないかねぇ。
=defaultにするか暗黙定義にするかは好みがあるだろうけど。
487
(1): 2021/06/22(火)22:22 ID:4bX8g7Cj(2/2) AAS
>>484
美味しいとき”も”あるよ
488
(1): 2021/06/22(火)22:45 ID:d6n1ZZoB(1) AAS
>>482-484
ロートルはちょっと黙ってて
489
(1): はちみつ餃子 ◆8X2XSCHEME 2021/06/23(水)04:03 ID:pZ1DtdbH(1) AAS
>>482
C89 ってことは暗黙の関数宣言とかのウンコ機能も含めて言ってるわけ?
490: 2021/06/23(水)04:16 ID:Vmwdc4hc(1) AAS
>>485
最近デカくて古いコンテナのコピーに悩まされてるから、アドレスを託すみたいな形でムーブしたい
491: 2021/06/23(水)06:19 ID:rIfoeFmJ(1) AAS
コピー回避なんていくらでもどうにでもなるのに
どんなヘボなんだ
492: 2021/06/23(水)08:31 ID:nCHirhrB(1) AAS
いや、だからそれがアドレスを渡すとか参照で渡すってことでしょ
493: ◆QZaw55cn4c 2021/06/24(木)20:04 ID:i6kIKJxB(1/3) AAS
>>488
黙れ、小僧!
お前に C++ の苦しみが分かるのか?
494: ◆QZaw55cn4c 2021/06/24(木)20:10 ID:i6kIKJxB(2/3) AAS
>>489
ウンコ機能はC99の方が多い、という認識です
495
(1): ◆QZaw55cn4c 2021/06/24(木)20:11 ID:i6kIKJxB(3/3) AAS
>>487
具体的に
496
(1): 2021/06/24(木)21:10 ID:3QBHDC7A(1) AAS
>>495
メモリ確保するようなクラスの場合、メモリ確保の手間省ける。
それ以外でムーブにコピー以上の利点知らない
497: 2021/06/25(金)00:44 ID:+R97TjGx(1/2) AAS
んまー(通常の関数呼び出しと違って)コピコンは放っといても勝手に呼び出しが削減される(副作用がある可能性ガン無視で)からな
昔から
498
(1): 2021/06/25(金)00:55 ID:+R97TjGx(2/2) AAS
コピコン呼び出し最適化に頼らねばにっちもさっちも行かないシチュエーションは多々あるから
右辺値参照はマジ不完全
例えば
Foo operator+(const Foo& lhs, const Foo& rhs) {
 Foo x(lhs); // 馬鹿正直にやったらコピー1回
 x += rhs; // Foo& Foo::operator+=()が定義済みとする
 return x; // 馬鹿正直にやったらコピーがもう一回
}
みたいな、
とこの前思いました
省1
499
(2): ◆QZaw55cn4c 2021/06/25(金)01:03 ID:pWufOIHg(1) AAS
>>496
要はクラスC のオブジェクトA の中にポインタがあった場合、オブジェクトA を今後一切つかわない前提でオブジェクトA の持つポインタの値をオブジェクトB にコピーするやりかた、ということですよね
言われるほど凄い機能にも革新的な機能にも思えないので来ているのですが、クラスを返すときには、もしかしたら使えるかもしれませんね

でも、すでに RVO があるのでしょう?
500: 2021/06/25(金)01:11 ID:xLwe8284(1) AAS
>>498
それは左辺値参照だよ。
501: はちみつ餃子 ◆8X2XSCHEME 2021/06/25(金)01:12 ID:/YhIejlL(1/2) AAS
>>499
それが出来るということは重要じゃなくて文脈によって勝手に使い分けられるということに意味があるんだよ。
502: 2021/06/25(金)04:23 ID:2CfGrUVh(1) AAS
move対応してないデカいクラスはマジ迷惑だろ
503: 2021/06/25(金)06:23 ID:+QaNJXlp(1/4) AAS
ポインタ、参照、this、スマポ、[&]
いくらでもどうにでもなる
504: 2021/06/25(金)06:38 ID:byKvXpEn(1) AAS
えっ老害??
505: 2021/06/25(金)06:40 ID:FhN3idtW(1) AAS
>>499
RVOはC++17で保証されたけどNRVOは保証されてない
506
(1): 2021/06/25(金)07:44 ID:+QaNJXlp(2/4) AAS
C++03時代を生きてないやつからはそう見えるのか
507: 2021/06/25(金)08:48 ID:z3/X9CIt(1/2) AAS
{a, b, c,...} が a, b, c,... という要素からなるリストを表すとき、
{a, {b, {c, d}, e}, f, g, {h, i},...}
みたいな構造は a, b, c,... が全部同じ型だとしても tuple としてしか表せませんよね?
508
(1): 2021/06/25(金)10:23 ID:Wd+wOk9Z(1) AAS
json
yaml
listのtree
なんでも
509: 2021/06/25(金)10:45 ID:z3/X9CIt(2/2) AAS
>>508
ありがとうございます
そうですね。STLとかboostのコンテナに囚われ過ぎてました
510: 2021/06/25(金)10:52 ID:tyTj/nU0(1) AAS
老害はC++スレに書き込むなよ
昔の話ばっかだよおじいちゃん
511: 2021/06/25(金)13:12 ID:+QaNJXlp(3/4) AAS
後から入ってきたくせに図々しいやつだな
先住権てやつでこっちが偉いんだよ
気に入らねえんなら他当たるか自分でサーバー立てな
512: 2021/06/25(金)13:16 ID:cHfQsTpJ(1) AAS
C++03の話なんてもうすんなよ
C++11からはもう別言語やんか
513: 2021/06/25(金)13:27 ID:+QaNJXlp(4/4) AAS
おまえの主観は関係ない
514
(1): はちみつ餃子 ◆8X2XSCHEME 2021/06/25(金)13:41 ID:/YhIejlL(2/2) AAS
>>506
C++03 時代を知ってるからそれが (少なくとも C++11 に比べれば) クソだってこともよく知ってるよ。
515: 2021/06/25(金)13:43 ID:ALny3hkX(1/2) AAS
本気で別言語だと思ってるやつって大抵何も作ってないゴミガキだと思うけどなぁ・・
STL的なアルゴリズムや新要素と親和性が高いのは、基本的に標準ライブラリだけなんだが

最近各種コンストラクタ(ムーブ込み)、代入等だけ長々と書いて「実質ほぼ何もしないクラス」を書いてドヤってるアホとかよく見かける

便利になってるのは確かだけどね・・
516: 2021/06/25(金)13:45 ID:ALny3hkX(2/2) AAS
>>514
俺も必要もなく03以前で書きたいとはまず思わんが、クソとか貶すのはやめた方がいいと思うよ
517: 2021/06/25(金)18:07 ID:aibvvCTW(1) AAS
gets()とか好きそう
518: 2021/06/25(金)18:33 ID:xqBptTy/(1) AAS
(σ・∀・)σゲッツ!!
519: 2021/06/26(土)00:08 ID:O9GH5wVp(1) AAS
ゲッツって初めて聞いた
ゲットエスって読んでたんだが
520: 2021/06/26(土)07:06 ID:MV3qzcHy(1) AAS
こことCスレでは古くからあるネッスラだよ
521: 2021/06/26(土)07:21 ID:+MI3rh96(1) AAS
scanf()をスキャンフと呼ぶけどprintf()をプリントエフと呼ぶ感じ
522: 2021/06/26(土)08:05 ID:vR4ZYNRj(1) AAS
プリンテフ
523: 2021/06/26(土)08:08 ID:EcYCTODA(1) AAS
ifndef イフンデフ
524: 2021/06/26(土)11:51 ID:7nyRjnb4(1) AAS
アとイ
525: 2021/06/26(土)13:16 ID:l0P5IISj(1) AAS
C++20でもバイナリファイルからdoubleとかの値を読み出す時って未だにreinterpret_cast使う感じ?
526: 2021/06/26(土)16:37 ID:qjgQHw2b(1) AAS
HTML★ふとまる
527: 2021/06/27(日)10:16 ID:0fbyaJPK(1) AAS
basic_istream::readの引数がvoid*なら何も悩まずに済むのにな
528: 2021/06/27(日)11:20 ID:hddKqCef(1) AAS
ファイルに書いている時点でアラインメントの保証が難しいから結局memcpyになる気がする
529: 2021/06/27(日)12:53 ID:CJK40NDs(1/3) AAS
アライメントの問題はファイル関係なくね↑?
530
(2): 2021/06/27(日)13:14 ID:CJK40NDs(2/3) AAS
エンディアン変換が関係しない場合
C++20でもバイナリファイルからdoubleとかの値を読み出す時はfread()
書き込むときはfwrite()
何の問題も無いし速い……
531: 2021/06/27(日)13:16 ID:CJK40NDs(3/3) AAS
ていうかエンディアン変換が関係する場合でも
fread()してからメモリ上でエンディアン変換しても良いし
メモリ上でエンディアン変換してからfwrite()したら良い
特にファイル内容全体がメモリ上に収まるケースとかは上記だけでほとんど何も考えなくてもよい
532: 2021/06/27(日)13:48 ID:NNV++T6E(1/2) AAS
P言語、Ruby、Java、C#などでファイルを読んだり書いたりしなければならなくなることを想定したファイル仕様にしたほうがいいと思うけどどうかな
533: はちみつ餃子 ◆8X2XSCHEME 2021/06/27(日)13:55 ID:+5rTVQj/(1/7) AAS
スタンダードレイアウトな型はバイナリレベルでコピーしてかまわないし
結果的に fwrite して fread できることは保証されるが、
具体的なレイアウトについての保証はない (他の処理系では同じレイアウトにならないかもしれない)
ということも合わせて考えると適当なシリアライザは挟んだほうが良いな。

多言語を意識しつつ高速なバイナリフォーマットというと MessagePack あたりかな?
534
(1): 2021/06/27(日)13:57 ID:mY5L/v8k(1/4) AAS
PerlやPythonでバイナリ読み書きするのに何の支障もないだろ。
535
(2): はちみつ餃子 ◆8X2XSCHEME 2021/06/27(日)14:00 ID:+5rTVQj/(2/7) AAS
>>534
読み書きに支障はないが、言語上の型とバイナリの対応付けについて明確な保証がないと困る。
536: 2021/06/27(日)14:16 ID:U1pSP8r9(1) AAS
バイナリなんだからどう扱おうが自由だろ
言語のせいにするのは本人の技術が無いから
言い訳するな
537
(2): ◆QZaw55cn4c 2021/06/27(日)14:25 ID:I46qTe+f(1/3) AAS
今時数値をバイナリで読み書きするとか、あり得ないのでは?
538
(1): 2021/06/27(日)14:30 ID:NNV++T6E(2/2) AAS
Comparison of data-serialization formats - Wikipedia
外部リンク:en.wikipedia.org
539
(1): 2021/06/27(日)15:19 ID:o9peEwic(1) AAS
>>537
バイナリでないと実用的でないデータなんていくらでもあるし。画像、動画、アーカイブ、db、ip...
qzはもうエロ画像見るなよ。
540: ◆QZaw55cn4c 2021/06/27(日)15:44 ID:I46qTe+f(2/3) AAS
>>539
ごめんなさい誤りましたので謝りますからその刑だけは平にご容赦を‥‥
541
(1): 2021/06/27(日)15:47 ID:mY5L/v8k(2/4) AAS
>>535
保証されてるから支障はない。エンディアンが違うデータだって読み書きできる。
542
(1): はちみつ餃子 ◆8X2XSCHEME 2021/06/27(日)15:54 ID:+5rTVQj/(3/7) AAS
>>541
データがリトルエンディアンなのかビッグエンディアンなのかわかっていればね。
C++ が単にメモリ上のデータを書き出したときに、それがどっちなのか、
(言語としては) 保証してないって話をしてるんだよ。
543: 2021/06/27(日)16:14 ID:jKhjPg/S(1) AAS
C++20でstd::endianが使えるようになるけど
544
(1): ◆QZaw55cn4c 2021/06/27(日)16:39 ID:I46qTe+f(3/3) AAS
シェアの高かった 68 系かインテルザイログ系か、の二分図がここにも残っているのですか
もう UTF-8 のようなエンディアンに依存しないバイナリが優秀だ、という価値観にするべきかと
545: 2021/06/27(日)17:01 ID:CxF0bT8t(1) AAS
インターネットのプロトコルはビックエンディアン
USB等のPC系発祥のデバイスはリトルエンディアン
この辺はもう変更しようが無いだろ
546
(1): はちみつ餃子 ◆8X2XSCHEME 2021/06/27(日)18:13 ID:+5rTVQj/(4/7) AAS
>>544
ここでのトピックは >>530 に対しての反論。
メモリ上にあるバイト列には保証がないからなんらかの明確な
データ交換用フォーマットに変換する処理が必要という話で、
出力先のデータ交換用フォーマットが BE か LE かなんていう以前の段階。
547: はちみつ餃子 ◆8X2XSCHEME 2021/06/27(日)18:17 ID:+5rTVQj/(5/7) AAS
ファイルに書き出すにあたって「エンディアンの変換が不要なら」という前提を置きたくねぇなぁという話だな。
パディングとかも入るかもわからんし。
548
(2): ◆QZaw55cn4c 2021/06/27(日)19:47 ID:igNiq52h(1) AAS
>>546
であれば、私はどちらかというと >>530 の味方側ですね、>>530 がそう意図しているかどうかは不明ですが、処理系のエンディアンを仮定することなくコードを書くことは可能だったと記憶しています。‥‥?

ただ同時に、確かにパフォーマンスの点で過剰な不利を承知で >>537 を再提示するべきかな
つまり、>>537 みたいな画像フォーマットはありました PPM/PGM/PBM
2chスレ:tech 
このコードは?を検証したものだったかと遠い記憶に残っていますね

あ、罰ゲームは勘弁ね、私だってエロ画像は見たい‥‥動画リンク[YouTube]
549
(1): はちみつ餃子 ◆8X2XSCHEME 2021/06/27(日)20:29 ID:+5rTVQj/(6/7) AAS
>>548
だからそういうコードが書けるかどうかという話じゃなくて
書かなきゃなんない (書くべき) ねという話なんだってば。
550: ◆QZaw55cn4c 2021/06/27(日)20:58 ID:2wFMzLzL(1) AAS
>>549
それは失礼しました
551
(1): 2021/06/27(日)22:44 ID:mY5L/v8k(3/4) AAS
>>542
C++だって読もうとするバイナリデータのエンディアンを事前に知らなきゃならんのは変わらんだろ。
自分で書いたものを読むならエンディアンが一致するのはあたりまえ。
552
(2): はちみつ餃子 ◆8X2XSCHEME 2021/06/27(日)23:46 ID:+5rTVQj/(7/7) AAS
>>551
> エンディアンを事前に知らなきゃならんのは

知らなきゃならないがわからん (保証されてない) のだという話をしている。
C++ で書いてメモリをそのまま書き出したらそれのエンディアンは保証されてない。

言語が何であれデータフォーマットが固定されてないとどうにもならん。
553
(1): 2021/06/27(日)23:53 ID:mY5L/v8k(4/4) AAS
>>552
それは言語関係ない話だろ。
1-
あと 449 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.036s