C++相談室 part163

■ このスレッドは過去ログ倉庫に格納されています
2022/12/30(金) 23:16:31.37ID:DPUEZfMS0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
C++相談室 part162
https://mevius.5ch.net/test/read.cgi/tech/1667194175/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2023/02/18(土) 13:58:29.96ID:5mGZNzlM0
低能警察に糞コードで反駁しようとしたら
収集がつかなくなったでござるの巻

警告を回避するためのコード変更がそんなに嫌ならコンパイラのオプションで警告を出さなくしたら良い……
2023/02/18(土) 14:07:37.26ID:/Gi8XN260
警告どころかコンパイラのバグを回避することだってある
むろん思い切り処理系に依存する内容となるが嫌とか好きとか言ってらんない
必要が出ればやるだけで感情の入る余地はない

どっかの思い上がった坊やの俺様節が五月蠅いだけ
黙ってくれれば俺にそれ以上の望みはない
2023/02/18(土) 14:12:09.71ID:5mGZNzlM0
警告をOFFにしたら警告を回避しようとしてバグを仕込んでしまう事故は確実に防げる
ていうか本質論としてはそもそも警告に頼らねばプログラミングもできない程度の低能はそもそもプログラミングをすべきではないという話、
これは反駁のしようが無い
2023/02/18(土) 14:13:36.72ID:c4QxGie20
>>576
> あんなコード書いたのかと言っている
そもそもあのコード書いたの俺じゃないことぐらい
>>562 > (もちろんそんな設計する奴は漏れ無くアホだが)
って書いてる見たらわかるだろ...

> それをなぜ俺が書いていることになったのか説明できるか?
誰もお前が書いたなんて書いてないけど頭大丈夫か?
脳死で
> for(int i = 0, len = GetLegacyLength(); i < len; ++i)
みたいな修正したらバグるかもよって話だぞ
2023/02/18(土) 14:15:48.28ID:/Gi8XN260
はいはい「俺じゃない」のね
IDコロコロする人とは話にならないな
2023/02/18(土) 14:32:47.85ID:U7F6huSe0
なんかすまんな
何気なく書いたダメコードのそれっぽいfor文がこんなにキチガイの琴線を刺激するとは思わなかった
2023/02/18(土) 14:35:25.61ID:/Gi8XN260
559の指摘にあの返事だからな
うわー香ばしいと思ったのよ
2023/02/18(土) 14:36:45.33ID:U7F6huSe0
黙れキチガイ
2023/02/18(土) 14:47:19.84ID:5mGZNzlM0
↑うんこ
2023/02/18(土) 14:52:57.45ID:aA0Lr1WO0
>>583
すまんと思うならもうROMっててくれ
これに返信も不要だからな
2023/02/18(土) 15:00:31.81ID:AfjXtSgB0
forやwhileの条件でstring::sizeを呼んでるけどダメ?
2023/02/18(土) 15:01:44.62ID:q7/8BBWI0
>>588
意図したものならまぁいいけど、後々のことも考えると普通は禁止
2023/02/18(土) 15:12:52.01ID:5mGZNzlM0
ループ内で変更しないstd::stringのstd::string::size()なら
コンパイラが頑張ってギリ括り出し最適化をしてくれるかもしれんがコンパイラに優しくない……

ていうか以降値が変化しないことがわかっているメンバ変数やグローバル変数は
intやsize_tみたいな単純型ならさっさとローカル変数にコピーした方がメモリからのロード命令削減のために良い
実体(メンバ変数やグローバル変数)と同じ値を保持するローカル変数(エイリアス)があったら混乱するというのは
そんな関数が(担当者の脳のキャパに比べて)デカすぐる……
2023/02/18(土) 15:14:50.51ID:c4QxGie20
>>582
IDコロコロ?
ちょっと回線切って頭冷やせw
2023/02/18(土) 15:26:22.78ID:/Gi8XN260
だから他人に指図すんな
警告をどうしようが回線をどうしようが
おまえさんに言われる筋合いはない

依頼心の強い甘ったれ野郎か?
2023/02/18(土) 15:32:46.92ID:3QwlbD5xd
依頼心の塊はこんなゴミ溜めでイキリ倒さないと自分を保てないお前さんの方だろ
for文警察出来て楽しかったでちゅか?
2023/02/18(土) 15:37:11.41ID:/Gi8XN260
こんなゴミ溜めでイキリ倒さないと自分を保てない → 依頼心が強い
全くつながらなくて説得力ないね
子供言葉にお似合いのしょーもない言い返しだなw
2023/02/18(土) 15:46:04.40ID:DOhL3WBHd
j「コンパイラの警告は全てゴミだから無視するべき、なぜなら>>558のfor文がダサいから」なんて主張をしてる奴への罵倒になぜ論理性が求められるのか分からない
バカアホマヌケ依頼心野郎で充分だろお前もそうなんだし
2023/02/18(土) 15:55:18.34ID:/Gi8XN260
へー、この流れをそう読んでいたのか
我ながらひどく買い被りすぎてたもんだ
そりゃー話になるわけないよな
2023/02/18(土) 15:58:59.97ID:/Gi8XN260
警告は内容によっては無視する場合があると言ったのを
全て無視すると改変してまで言い返さないと気が済まないのか
子供言葉にry
2023/02/18(土) 16:00:51.47ID:hE3AXWNH0
そのうち惰性で内容を吟味せずに無視するようになりそうなので
がんばって警告は消してくスタイル
2023/02/18(土) 16:02:45.49ID:/Gi8XN260
無視してたらコンパイラのバージョンが上がって警告しなくなったやつもあるな
2023/02/18(土) 16:04:23.86ID:kbl+yJpad
なるほど558は警告を無視する場合な訳ね、理由はfor文がダサいからw
やっぱこのチンパンジーオモロイわ
何か言い返してくるだろうけど、畜生の鳴き声に論理性なんて求めないから本能剥き出してくれていいよ
かわいいね
2023/02/18(土) 16:05:46.49ID:c4QxGie20
>>592
IDコロコロに触れられず顔真っ赤w
2023/02/18(土) 16:13:38.69ID:/Gi8XN260
for文の話で脳死が出てくる自己紹介な人だから
for文についての指摘が警告の話に短絡してしまったわけか
治してあげんの面倒臭いから放置するぜ
2023/02/18(土) 16:20:07.00ID:QwP9/dM9d
凄い、>>602が何一つ意味が分からない
本当に猿がランダムな日本語もどき書いてたんだな感動した
2023/02/18(土) 16:31:14.25ID:/Gi8XN260
忘れてるかも知れんがここは全世界から閲覧かのうな掲示板だよ
おまえさんの発言見てんの俺だけじゃないからね
第三者にクスクスされる文面には気をつけたら?
2023/02/18(土) 16:43:35.96ID:xVxS8guk0
自覚あったのに驚き。
2023/02/18(土) 16:47:29.84ID:c4QxGie20
顔真っ赤な人はクスクスどころかドン引きされてるみたいだけどねw
2023/02/18(土) 17:27:32.13ID:GQ7TKK8Hr
小杉の煽りが下手すぎてつまらん
2023/02/18(土) 22:16:29.02ID:tx6k3oAyM
>>563
unorderd_map のテストプログラムを作り、デバッガのステップ実行で、
ソースを調査することを進めます。デバッガを併用すると、単純にテキスト
エディタでソースを眺めるより楽です。
わざとrehashされる条件を作っておいて、*it が返すポインタが変化してないことを
確認したりもしてみてください。
2023/02/18(土) 22:20:44.13ID:tx6k3oAyM
>>608
誤: ソースを調査することを進めます。
正: ソースを調査することを薦めます。
誤: わざとrehashされる条件を作っておいて、*it が返すポインタが変化してないことを
正: わざとrehashされる条件を作っておいて、&*it が返すポインタが変化してないことを

unorderd_map<K,V>::iterator it に対して *it が V 型、&*it が V* 型ですね、確か。
2023/02/19(日) 01:04:05.04ID:j1lo6n64d
警告警察
goto警察
例外警察
いろいろいるね
2023/02/19(日) 02:44:27.50ID:XBUFkCxR0
本題から逸れた細かいことばかり言う人って他人から相談されなくなるよね
とりあえず本題に触れてあげたほうがいいと思う
2023/02/20(月) 10:46:49.72ID:4EtRnxBTr
>>607
小杉?
613デフォルトの名無しさん (アウアウエー Sa13-o4eO)
垢版 |
2023/02/20(月) 21:38:28.53ID:bUrAUmQja
>>610
じじい世代はここで
西部警察
がでてくる
2023/02/20(月) 23:51:57.53ID:7qph/rf50
>>610
警察警察もじきにあらわれるでしょう
2023/02/21(火) 06:19:53.28ID:lGumlqGfd
>>613
なんで?
2023/02/23(木) 12:36:30.12ID:v5/05dNG0
>>613
セーブ警察(定期的に保存しない者を取り締まる人)ですね
2023/02/25(土) 09:42:29.51ID:EkXmct6Y0
>>616
西部警察が東部を取り締まるみたいなロジック何それ……
2023/02/25(土) 10:26:54.98ID:+hyOJw/l0
まともなエディタなら自動セーブ機能くらいあるだろ
メモ帳で開発してんの?
2023/02/25(土) 10:42:44.98ID:FxeL/Fyd0
池袋駅は東口に西武デパートあるから問題ない
そして西口に東武
2023/02/25(土) 12:32:14.92ID:EkXmct6Y0
質問なのですが<random>の疑似乱数クラス(いっぱいある)って共通の基底クラスとかインターフェースとか無
いの?

乱数のseedをプログラムの中で1回だけ与えて初期化した疑似乱数オブジェクトを
関数foo()に渡したりして使いまわしたいのだけどfoo()は特定の疑似乱数クラスに依存させたくないという場合、
foo()を疑似乱数クラスTを受け取るテンプレートで実装するとか自作のインターフェースで疑似乱数クラスをwrapする以外に他無し?

それともそもそもそういうことはすべきではない(関数の中で都度乱数のseedをプログラムの中で1回だけ与えて初期化した疑似乱数オブジェクトを作れ
と神はお命じなのやろうか……
2023/02/25(土) 12:35:52.57ID:EkXmct6Y0
訂正orz、
誤: 自作のインターフェースで疑似乱数クラスをwrapする
正: 自作のインターフェースで疑似乱数クラスとDistributionクラスをセットでwrapする

<random>はテンプレート全振りすぎてオブジェクト指向的でない
ヤヴァイ……
2023/02/25(土) 12:52:10.86ID:k1cc/WLc0
>>621
そもそも何がしたいのか
seedの異なるものが同時に必要ならそうするしかない
2023/02/25(土) 13:02:15.45ID:sAnrfOr80
>>620
>関数foo()に渡したりして使いまわしたいのだけど
>foo()は特定の疑似乱数クラスに依存させたくないという場合、
foo()を関数テンプレートにし疑似乱数クラスをテンプレート引数とする
じゃだめなの?
2023/02/25(土) 13:06:02.14ID:EkXmct6Y0
>foo()を関数テンプレートにし疑似乱数クラスをテンプレート引数とする
>じゃだめなの?
通常はそれでも良いが
foo()が1万行ある関数だったとしてヘッダファイルに書くのかっていうか、
なんで疑似乱数を使うことと、書き方がテンプレートに制限されてしまうことが相関されねばならないのか
疑問に思わないのかそうか、、、
2023/02/25(土) 13:19:38.23ID:EkXmct6Y0
んまー現実解としてはどうせstd::mt19937をstd::random_deviceで初期化するような使い方しかしないのだろうから
using rand_t = std::random_device;
using psrand_t = std::mt19937;
class FooTest : public ::testing::Test {
protected:
 psrand_t m_psrand;
public:
 FooTest() : m_psrand(rand_t()()) { }
};
ぐらいで過度の抽象化はやめておいた方が良いのかもしれん……
(別名にする、程度にしておけば疑似乱数クラスの選択とDistributionクラスの選択を分離できる
2023/02/25(土) 13:21:23.18ID:a4UZTu4a0
標準ライブラリのテンプレートもみんなヘッダに書いてるんだしいらない疑問だと思うが……
使ったことは無いけど、気にするならC++20モジュールとして書いてみるといいかもしれない
2023/02/25(土) 13:25:58.19ID:sAnrfOr80
>>624
疑似乱数クラスは限定されているので
俺ならfooの実装はcppに書いて明示的インスタンス化をする
2023/02/25(土) 15:15:43.98ID:0MW4CaX30
>>620
result_typeが違うと、乱数のサイズが変わって、それに処理も合わせないといけないからな
素直にラップすればいいんじゃね
2023/02/25(土) 19:34:51.11ID:pcyV0/Fb0
>>619
近い将来西武デパートがなくなる可能性もあるので
コンピュータ技術同様、未来永劫変わらないものなんてないんだ
2023/02/26(日) 06:44:53.09ID:wlYkLcj5M
>>620
randomてoperator()持っていなかったっけ?
std::functionに入れるとなんか問題あったっけ?
2023/02/26(日) 07:48:51.16ID:Gr0Cvu5K0
>>620
ないけど_enjineがつくやつは使い方が統一されているから
普通にテンプレート引数にするだけでいい
テンプレートに渡せるクラスを限定したいならconceptという手がある
2023/02/26(日) 07:49:07.86ID:Gr0Cvu5K0
_engine
2023/02/27(月) 00:29:36.28ID:gYXyoIsy0
_eringi
634デフォルトの名無しさん (アウアウエー Sa02-mjxs)
垢版 |
2023/02/27(月) 17:17:04.08ID:3MgFEhuya
サンプラザ中野が亡くなったのはびっくり
635デフォルトの名無しさん (アウアウウー Sa39-EsFZ)
垢版 |
2023/02/27(月) 18:32:42.37ID:uiaf09PPa
>>634
どこ情報?
636デフォルトの名無しさん (ワッチョイ 9501-ZYAP)
垢版 |
2023/02/28(火) 06:11:10.06ID:gPlIR4bB0
会議で「テレメトリーの結果、オートコレクトをオフにしているユーザーさんが多い、どうしたら良いか」ということを話し合った。
「小文字にする方法」を解説するページを作っておけば儲かるぞ。
2023/02/28(火) 07:28:04.38ID:K4SOyNvXd
どこの誤爆だろう
2023/02/28(火) 07:34:53.09ID:3dbS5K+md
くんさんついてない方の事では?
2023/02/28(火) 14:17:12.73ID:8Tfx2t07F
https://youtu.be/OC1PvKjgREo
C++沼へようこそ
2023/02/28(火) 15:20:52.24ID:dNNgH11Kd
g++のu8クソ過ぎワロタ
2023/03/04(土) 12:36:42.18ID:Rl7ZOdOT0
stdexceptの各例外の使い分けがわかりません
まず
・エラーは「実行時エラー (runtime error) 」と「論理エラー (logic error) 」との2つに大別される。
とのことでinvalid_argumentはlogic_errorの派生クラスみたいなのですが
foo()に不正な引数が渡る状況はたいてい呼び出し元bar()の実行時エラーなわけじゃん?

しかしそれだと論理エラーの出る幕が一切なくなるので、
foo()視点でfoo()に不正な引数が渡る状況は論理エラーである、とみなす立場が考えられるますが、
しかしfoo()が投げた例外を補足する箇所はfoo()の外なわけで、そんなローカル視点知ったことか、となるわけじゃん?

もうstdexceptのうちでユザープログラムから投げるのはruntime_error(<適当なメッセージ>)だけで良い?
2023/03/04(土) 13:04:37.77ID:Rl7ZOdOT0
だいたい自己解決しましたサーセン、
1. cassertにおけるassert()条件に書くような、設計上絶対起こり得ないやつ(起きたらバグ)はlogic_error
2. 上記以外(設計上起き得ないことを保証しかねる不整合)はruntime_error

で、さらに細分化可能な場合(明らかに派生クラスにあてはまるやつ)は派生クラスにする
例外を補足する個所では、logic_error& eかruntime_error& eで捕捉する(そうすれば派生クラスも捕捉できうる
でFA?
2023/03/04(土) 13:33:21.64ID:MZ+gWi90M
ソケットプログラミングがマジ解らん。
コネクトするコード書いてもエラー起こすし、バインドしてみたらエラー返してきてどうしようもないし
どうすればインだー。
2023/03/04(土) 14:05:40.41ID:XDSJ2ABs0
throw EINVL;
2023/03/04(土) 18:37:32.42ID:gLC7WXhtd
>>643
もしかしてWindows?
2023/03/04(土) 18:55:56.69ID:x4fRAuLN0
>>643
まずはサンプルを動かすところから始めよう
647デフォルトの名無しさん (ワッチョイ 8b89-Wv9y)
垢版 |
2023/03/04(土) 19:13:48.29ID:no85xIV40
解決する気があるなら書いたコードと返ってくるエラーぐらい貼ろうぜ
648デフォルトの名無しさん (ワッチョイ 1305-5I03)
垢版 |
2023/03/04(土) 20:37:57.16ID:2zCyTihi0
このスレ見て久しぶりにC++やったら今まで丸暗記してたことが
他の言語にも適用できる感じ理解できてしまったわ
649デフォルトの名無しさん (スププ Sd33-MJlW)
垢版 |
2023/03/05(日) 12:17:19.55ID:tgZ89GxTd
>>643
馬鹿には無理
2023/03/05(日) 14:10:43.43ID:V5cM5Nk90
>>642
分類としてはそんな感じでいいと思うけど、型でcatchし分けるのはお勧めしない。
2023/03/06(月) 21:47:32.00ID:iiB2MEh2M
>>645 そうです。コネクトしてメッセージ出るまでできました。
>>464 いえすさー

サンプルのサーバーも自分で書かされた結果。
サーバーがアクセプトするまでクライアントは何してもほぼ無駄という事でした。
2023/03/06(月) 22:52:55.64ID:K6iDrUwm0
最後の「ばインだー」はバインドとかけてるのか?いや、まさかな…
653デフォルトの名無しさん (スププ Sd33-MJlW)
垢版 |
2023/03/07(火) 12:11:28.12ID:f9Hon4H6d
W32APIにfork入れなかったのは嫌がらせか
2023/03/07(火) 12:49:30.34ID:gZ1LpnCS0
Cygwinを使うとか?
2023/03/07(火) 12:51:18.28ID:5oG+IrWl0
fork自体あまり良い設計ではないから、マネしなかったのは良いことだと思うよ
2023/03/07(火) 14:18:28.28ID:YRf34T/Q0
NTの構造上、forkをWin32サブシステムに入れる筋合いはどこにもないからな
2023/03/07(火) 19:14:40.99ID:OIq1O0Ib0
Unixの構造上ならどう筋合いがあるんじゃ……
親プロセスから子プロセスになんか引き継ぎたいとき便利(そういうのが多いときコピーオンライトで高速化も可能)だというのはわかるが
そもそも親プロセスから子プロセスに引き継がれるべき情報ってそんなに重大で大容量なのがなんかあるっけ、、、
2023/03/07(火) 19:35:58.81ID:nDfu8VY70
代わりにspawnがあるからでしょ
2023/03/07(火) 20:12:06.52ID:yBXOBLOe0
そもそもプロセスって並列処理のためのもので、並列処理って同じ仕事する奴をたくさん用意するものなんだからforkは自然な設計
現代のPCやデバイスと噛み合ってないのはその通り
660デフォルトの名無しさん (スップ Sd73-Wv9y)
垢版 |
2023/03/07(火) 20:19:21.43ID:hnN7reTEd
俺の使い方だとshellのビルトインコマンドをパイプで繋げるときと、PS1に色々仕込むぐらいしか恩恵ないかな
Windows(cygwin)でパイプ使いまくるとクソ重い

他はネットワークサーバーでaccept→forkのサンプルコードをよく見る
2023/03/08(水) 06:43:43.40ID:D4+z1pfo0
>>657
筋合いって、それはunixだからだろ
windowsならwslでやればいい
2023/03/08(水) 07:31:55.78ID:I9WABGt0a
何を言ってるんだお前は
2023/03/08(水) 07:38:01.65ID:D4+z1pfo0
何か間違ったこと言ったか?
2023/03/08(水) 07:49:03.77ID:H+IAPgT9M
天然か
2023/03/08(水) 07:52:01.79ID:D4+z1pfo0
何も言えんヘタレか
つまらんぞ
2023/03/08(水) 10:54:15.94ID:/Tvc5S700
forkはそのままではメモリ共有できないので並列処理の定石とは言い難い
2023/03/08(水) 15:41:08.30ID:hz03AXgUM
if (auto result = Hoge())
{

}
else
{

}

て書いたときelseブロックでもresult参照できるのめっちゃ違和感あるんですけど、こうなってる理由ってどこかに書いてありますか?
2023/03/08(水) 16:00:38.16ID:D4+z1pfo0
違和感? 何で?
ブレースは必須じゃねえだろ

if (auto result = Hoge()) ; else /* ここでresultが使えるのおかしいか? */ ;

{
else /* これはできないわけで、elseはifの続きだぞ */
}
669デフォルトの名無しさん (ワッチョイ 119c-8Eq5)
垢版 |
2023/03/08(水) 16:22:00.73ID:ytiNTw1F0
try で宣言した変数を catch や finally で参照できるようにして欲しいと思ったことが 5億回はある
2023/03/08(水) 16:26:12.41ID:sNgBrAzK0
>>669
出来たとしても catch したときには解体済み (または構築していない) なはずなのでだめぽ。
671デフォルトの名無しさん (ワッチョイ 119c-8Eq5)
垢版 |
2023/03/08(水) 16:36:24.71ID:ytiNTw1F0
うん、ダメな理由は分かる

でもみんな try に書いてた変数を catch や finally で必要になってから外出しした経験あるよね
2023/03/08(水) 16:38:09.65ID:sNgBrAzK0
>>667
C with Classes が C++ になる頃にそこに宣言を書けることにした話はD&E に言及がある。
Algol68 の真似をしたつもりだったが
実は設計者の勘違いで Algol68 にそんな仕様はなかったということも書かれている。

スコープのことまでは書かれていなかったが、
たぶんそれも当時の設計者の脳内 Algol68 ではそうだったってだけなんだろう。
まあ else も if 文の一部なので自然に考えれば全体がスコープになるほうが
理屈に合うように思えるし、私は疑問に感じたことは無かったな。
2023/03/08(水) 18:30:22.29ID:lmBqNRkPM
>>672
ありがとうございます。

ifでの宣言は初期化とテストが一緒にされるわけで、テストに失敗した結果実行されるelseブロックでそれが使えることがちょっと納得できませんでした。

言われてみれば、中身がnullptrとは限らないし、エラーハンドリングとかで使ってるんですかね
2023/03/08(水) 22:20:58.55ID:tb9BYlUU0
それよか
int outlierCnt;    // ←これのスコープのが問題
do {
  outlierCnt = 0;
  for (int j = 0; j < n; j++) {
    if (...) {
      outlierCnt++;
    }
  }
} while (outlierCnt > 0);

// ループを出たらoutlierCntは用済み
2023/03/08(水) 22:35:27.94ID:vNfcyURF0
見えてほしい範囲とか見えてほしくない範囲があんならブロック使って任意にスコープ作ればいいんでは
2023/03/08(水) 23:51:23.50ID:tb9BYlUU0
>>675
bool bUniqueList;    // ← constにできない
{
  bUniqueList = true;
  std::set<T> dupChk;
  foreach (auto it = vec.begin(); it != vec.end(); it++) {
    auto result = dupChk.insert(*it);
    if (!result.second) {
      bUniqueList = false;
      break;
    }
  }   
}

if (bUniqueList) { ... }
2023/03/09(木) 00:39:11.87ID:3j1Ekj6a0
>>676
const bool bUniqueList
{
[&]
{
bool bUniqueList = true;
std::set<T> dupChk;
for (auto it = vec.begin(); it != vec.end(); it++) {
auto result = dupChk.insert(*it);
if (!result.second) {
bUniqueList = false;
break;
}
}
return bUniqueList;
} ()
};

if (bUniqueList) { /* ... */ }
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。