C++相談室 part161

■ このスレッドは過去ログ倉庫に格納されています
2022/05/21(土) 21:23:29.59ID:kYXfaM+5
前スレ
C++相談室 part160
https://mevius.5ch.net/test/read.cgi/tech/1649979572/
2022/06/03(金) 15:42:06.91ID:g1oXgs2q
引数が forwarding reference になるのは型変数の場合だけ
https://en.cppreference.com/w/cpp/language/reference#Forwarding_references

コンクリートな型の場合 && で取ったら確実に rvalue だから forward は要らん
んで vector<T>#push_back は (const T&) と (T&&) に対してオーバーロードされてるから (後者のバージョンが選ばれるので) move も要らん
つまり >>64 が正解。なんで適当答える前に手元で確認しないのか
2022/06/03(金) 15:44:21.94ID:ysQR9TY9
>>69
ムーブさせない場合はある。

それとは別に可能なら左辺値にも右辺値にも対応するのが通例なので
それを無意識に前提に入れてしまっておかしなことを書いてしまった。
ごめんね。
2022/06/03(金) 16:02:28.52ID:I7UEGKwl
>>70 move しなかったら push_back(const T&) になっちゃうでしょ。なんで適当答える前に(ry
2022/06/03(金) 16:06:42.00ID:g1oXgs2q
>>72

アホか。forwarding reference じゃなくて rvalue reference だっつってんのになる訳ねーだろ
2022/06/03(金) 16:10:12.85ID:g1oXgs2q
あ、もしかして >>59
> a.add(std::move(x));
について言ってんのか?そりゃここには move が要るが今は add の中の話だろ?
75デフォルトの名無しさん
垢版 |
2022/06/03(金) 18:50:26.25ID:lbrgnw5P
>>73
さてはrvalueの挙動理解してないな?
https://wandbox.org/permlink/rtkW4N7gWRu9yyqK

rvalueとして受け取った時点でlvalue扱いなんだよ
moveするまで所有権を持っていて、moveで所有権を放棄する。
所有権はT&&を受け取る関数に移る。
76デフォルトの名無しさん
垢版 |
2022/06/03(金) 19:12:19.64ID:lbrgnw5P
>>69
moveさせるとまずいケースがある
https://wandbox.org/permlink/bdXnNaYzb7esxcwt

moveってのは所有権の移動なので、所有権を他に渡した後に使うとまずい
このコードは手元のgccだとこんな感じに壊れる


forwardは2つのモードがあって、forward<T&>かforward<T&&> (or forward<T>) を指定しなきゃいけない。
T& forward<T&>: moveしない
T&& forward<T&&> (or forward<T>): moveする
2022/06/03(金) 19:43:48.13ID:+R1h67E5
Revive! Vive! unifyde call syntax!! revive!!!
2022/06/04(土) 12:47:58.32ID:TQBK1egQ
cpp経験のあるエンジニアが面接に来たんですがboost知らないとかあり得るんでしょうか
79デフォルトの名無しさん
垢版 |
2022/06/04(土) 13:11:38.01ID:FGCXQeDT
あり得ません、エアプです
2022/06/04(土) 13:13:16.94ID:to7UVp4p
でもC++を完全に理解してるスーパーエンジニアが君の会社に来ることはないんだ
81デフォルトの名無しさん
垢版 |
2022/06/04(土) 13:41:01.98ID:vvbHqYcO
boost知ってても使ってないとか黙殺するとかなら有り得るんじゃね
82デフォルトの名無しさん
垢版 |
2022/06/04(土) 13:51:08.17ID:cj+dvlSK
CとCppは似てるらしいけど最初はCから始めて
基礎を身につけた方がいいとかありますか?
2022/06/04(土) 14:02:22.31ID:1SIgUGMa
まあコンパイル時間が伸びるとかで使わない所も多いしな
2022/06/04(土) 14:05:58.45ID:OQ3usAsV
C++のほうがコンパイル時の文法チェックが親切なので、g++でコンパイルするのが吉
2022/06/04(土) 14:18:00.05ID:Ah6rlskA
余談だけど cpp って書いたら C プリプロセッサのことを指す場合もある。
86デフォルトの名無しさん
垢版 |
2022/06/04(土) 14:37:22.59ID:cj+dvlSK
>>83-85
ありがとうございます!勉強になります!
2022/06/04(土) 14:38:35.97ID:qJZvQBHL
boostつかうひと嫌い
2022/06/04(土) 14:45:24.57ID:wH3cIPcT
マリオカートの遊び方に縛り入れてんじゃねぇよ!
2022/06/04(土) 16:03:47.30ID:OQ3usAsV
今どきの人がCの機能を学ぶにしても、最初のうちはC++コンパイラを使ったほうがいい
C++コンパイラは初心者がやりがちな意図しない型キャストに警告を出してくれる
90デフォルトの名無しさん
垢版 |
2022/06/04(土) 16:44:33.09ID:vvbHqYcO
>>82
その通り
ハゲめ
91デフォルトの名無しさん
垢版 |
2022/06/04(土) 21:34:58.76ID:TQBK1egQ
>>79
やっぱ有り得ないですよね
うちの会社はC++使わないんですが、盛り過ぎた経歴は看過できないので二次面接にはC++経験のあるエンジニアに同席してもらいます
2022/06/04(土) 21:43:09.92ID:OQ3usAsV
>>91
ずっと同じ部署にいてboostライブラリに接する機会がなかっただけじゃないかな
ずっと同じ部署にいたってことは専門性が高くて信頼されてた可能性がある
93デフォルトの名無しさん
垢版 |
2022/06/04(土) 21:48:20.42ID:nRM2q6cY
>>92
はい、私がC++は門外漢すぎて突っ込んだ質問が出来なかった手落ちもあるので、後続の面接ではしっかり見極めたいと思います
C++以外の話でも怪しい部分はありましたし
2022/06/04(土) 22:16:16.74ID:IRaDT1CY
>>83も書いてるけどboost使わない職場はそれなりにあるから俺もboost使える?って聞かれたら使ったことないからよく知らんって答えると思う
そもそもそんな事で採用決めるような会社はこちらから断ると思うが
2022/06/04(土) 22:23:56.45ID:FR2x7OcT
はい、職歴に書かれた内容に曇りがないか見極めたかっだけなので、Boostに知見があるかどうかはさほど問題にしてません
2022/06/04(土) 22:54:17.16ID:cXL4Xuwo
>>78
バカか
boostは標準化されてないだろ
ヘッダ入れ込んでまでわざわざ使うヤツは縛りプレイヤーかマニアだぞ
2022/06/04(土) 22:56:04.77ID:4luU2XzE
>>79はネタで言ってるかエアプだと思うよ
boost役に立つものもあるし個人では使うが、仕事で必須かというとそんなことはない
2022/06/04(土) 22:59:46.47ID:+8Ow3LIK
標準じゃないもん使うのはアホ
人格に問題がある
2022/06/04(土) 23:04:03.58ID:BuoePqDI
知ってるけどあんまり使ってない、使ったことないから詳しくは知らない、とかならまあ別に普通だけど
知らない聞いたことすらないってのはヤバい
2022/06/04(土) 23:12:35.97ID:3rcQlGgA
仕事では使わないなあboost
必須のミドルウェアは使うけど
2022/06/04(土) 23:12:59.31ID:4luU2XzE
>>98
その標準じゃないもん、にはOSのAPIとか目的のソフトに必須のライブラリ群も含んでる?
2022/06/05(日) 00:13:46.63ID:/AT5pgYO
boostもサードパーティのライブラリも使わんて人は、コマンドラインのパーサーとか任意精度のライブラリとか自分で毎回書いてるのか?
正気か?
103デフォルトの名無しさん
垢版 |
2022/06/05(日) 00:46:57.94ID:/ywqNijR
そんな便利なものは存在しないから標準ライブラリ+Win32でどうにかしてるだけじゃね?
2022/06/05(日) 01:30:20.47ID:TqTpE262
boost::sort::block_indirect_sort()はstd::sort()より速いので使ってる
2022/06/05(日) 03:05:51.19ID:IC6BDqn3
>>102
コマンドラインのパーサー含め、その辺の文字列処理は全部自前の文字列クラスでやっちまうな、俺はw
いちいち文字コードがどうたらとか悩みたくないし
2022/06/05(日) 05:03:18.77ID:O5HYGw/G
>>95
c++標準の勉強をしていれば単語としてboostを聞いたことあるだろう。
知らないのなら大した勉強はしていないだろうから、せいぜい業務で通り一辺触ったことがあるくらいじゃないかね。

どこまでのスキル求めているかによるけど、業務内容に近い課題を与えてテストしてみたらいいんじゃない?
業務でc++を使わないなら、c++スキルに金を払うわけじゃないから気にすんな。どうせ募集要項にc++とか書いてないんだろ。
107デフォルトの名無しさん
垢版 |
2022/06/05(日) 06:28:02.59ID:kEvpwCAH
自分の知ってる世界がすべてだと思ってる人間の方が危険。
C++が使われる範囲が広すぎるから、言語の経験有無よりもどの分野で開発してたのかを聞くべき。
ガラケー時代のカーネルドライバ書いてたり、携帯キャリア向け機器の組み込みやってた時はboostどころかstlすら使ってなかった。
というか使えなかった。
一方でスマホゲーのバックエンドを書いてた時はboostまみれだった。
2022/06/05(日) 07:05:01.15ID:xi1K2Yw5
任意精度ってGMP使いませんか?
109デフォルトの名無しさん
垢版 |
2022/06/05(日) 08:31:22.07ID:sROqatdZ
boost知らない人は自分が使ってる環境がC++11/14/17/20なのかも知らないとかありそう
大昔のC++文法しか知らない人とかいるし
面接ではこれも聞いてほしい
2022/06/05(日) 09:22:33.51ID:Zl7Pb69A
昔はboostでも使わんと正規表現扱えなかったでしょ(ヽ´ω`)
今の子は知らんのかな?
2022/06/05(日) 10:41:52.09ID:GvBqEMar
edはC++,boostで書かれていた!?
2022/06/05(日) 10:57:35.83ID:TqTpE262
今や正規表現ライブラリはpcre2使っておくのが最適解でしょ
boostもre2も速度遅すぎ
最速軽量がre2の長所だったのは昔の話
2022/06/05(日) 11:09:32.30ID:XG05O5RB
Boost 内のライブラリは組み合わせやすかったりもするだろうし、単独で性能が良いというだけが指標ではないだろう。
もちろん性能が良いに越したことは無いが、数倍程度の違いなら全体としては問題にならないことも多い。
2022/06/05(日) 11:33:39.66ID:TqTpE262
STLでregexクラステンプレートが追加されたのだから各正規表現ライブラリの供給元がstd::regexに準拠したラッパークラスを提供してくれるのかと思いきや、ほったらかしだしなあ
115デフォルトの名無しさん
垢版 |
2022/06/05(日) 13:02:35.05ID:u0j22vIZ
おまいの募集要項にboost使用するって描いてないならおまいが可笑しい
boost以外の部分でC++の知識や使えるかどうかを確認するべき
116デフォルトの名無しさん
垢版 |
2022/06/05(日) 13:05:40.20ID:u0j22vIZ
>>108
mpirだな
117デフォルトの名無しさん
垢版 |
2022/06/05(日) 13:23:08.93ID:VgN5DVM1
ただの文字列なら速さで選ぶのも良いけど、HTMLやXMLのような注釈を含むテキストは、STLやboostを使うのがスマート。
2022/06/05(日) 13:27:27.15ID:TqTpE262
re2は遅いうえに\1みたいな後方参照をサポートしてないのが痛い
2022/06/05(日) 13:44:58.69ID:JAUYaj4s
別に即戦力求めてるわけじゃないので開発言語で縛って間口狭くしたくないんですよ でも質疑応答のクオリティ上げるためには突っ込んだ質問って必要じゃないですか 今回はそれが上手く出来なかっただけです
120デフォルトの名無しさん
垢版 |
2022/06/05(日) 15:40:19.58ID:udiiYXiV
ようするに基礎があるかどうかと伸びしろがあるかどうかだろ

今知らなくても調べればすぐ判ることが出来れば問題無い罠
121デフォルトの名無しさん
垢版 |
2022/06/05(日) 16:50:16.03ID:sROqatdZ
本人が経歴盛ってるならクズだが、営業やエージェントが勝手に盛ってることもあるからな
その辺も見極めて大目に見てほしい
2022/06/05(日) 17:21:37.24ID:dinbGc5/
自分のとこが金をいくら出せるのか考えてからマウント取ってほしいもんだわ
2022/06/05(日) 17:37:12.61ID:DpfkldE/
対価は市場感より高めに設定していますね
AWSと同じぐらいのはずです
2022/06/05(日) 17:59:03.07ID:MGWqyCtZ
>>117
そもそもそんな用途にC++ってどうなの?
125デフォルトの名無しさん
垢版 |
2022/06/05(日) 18:15:07.18ID:VgN5DVM1
>>124
ブラウザでctrl+f押してみ。
2022/06/05(日) 18:28:12.08ID:dinbGc5/
>>123
手取りで1000万くらいですか?
2022/06/05(日) 19:24:35.36ID:/AT5pgYO
htmlは知らんがxmlの読み書きはC++のプログラムで一般的じゃね
2022/06/05(日) 22:30:48.15ID:n7vwmg3m
C言語の基本を学んでC++を勉強を始めました
バッファのフラッシュについて教えてください
プログラムは最後に全てのバッファがフラッシュされると思いますが、
std::flashやstd::endlはどういった時に使えばいいのでしょうか?
また、フラッシュの処理時間を考えるとstd::endlよりも'\n'を使った方が軽くなると思いますが、
あえてstd::endlを使う意味はありますか?
このフラッシュという概念はC言語になかったですよね…?
2022/06/05(日) 22:41:22.00ID:FJOOY/QK
fflush()を知らずにC言語を使ってきたなら気にする必要はない
2022/06/05(日) 22:53:56.06ID:ypMgugQ8
>>128
キミの疑問の中に答えがあると思うんだが

>プログラムは最後に全てのバッファがフラッシュされると思いますが、
逆に言えばプログラムの途中ではいつバッファの内容がflashされるかわからないってことじゃん
どういった時に使えばいいのか、なんてプログラムの最後ではなく途中でflashしたい時だろ
2022/06/05(日) 22:55:08.26ID:JCaRLrt5
stderr(バッファリング無し)とstdout(デフォルトでバッファリング有り)のリダイレクト先が同じ(コンソール等)のとき、
printf()とfprintf()の実行順にprintf()とfprintf()の出力結果を並ばせたいときに早速ffush(stdout)の出番が、
あとfflush()せずにabort()したらバッファ上のデータが失われることがある
もっともabort()を呼ぶしかない状況とかはどうしようもない状況なので盲目的なfflush()が適切とは言えないケースも
ありえるかもし
れんが
2022/06/05(日) 23:00:34.55ID:JCaRLrt5
んまー通常はファイルのクローズでフラッシュされるから明示的にファイルポインタに対してfflush()する必要に迫られることはなさげ
腸人工的なシチュエーション(でありかあまり良い設計でない例)として、
オープンしたままのファイルA、Bにこの順でデータが追記されることを気体するプロセスが他に居るときに
A、Bの順で追記するとき要る?ぐらい??
2022/06/05(日) 23:11:06.10ID:TqTpE262
他のプロセスと通信する時に明示的なバッファフラッシュが必要になることがあるよ
2022/06/05(日) 23:17:22.56ID:JCaRLrt5
>>133
それは思わないでもなかったが、
1. バッファに入った順で出ていく
2. ほっといてもバッファ内容がどんどん出ていく
3. 通信は送りっぱなしまたはロジカルなハンドシェーク手順
である場合にfflush()が必須というケースが思いつきませなんだ、
135デフォルトの名無しさん
垢版 |
2022/06/05(日) 23:24:31.44ID:/ywqNijR
1行ごとに結構重い処理をしたり、std::cinが入ってくるタイミングが不定期だったりするときに1行ごとにflushしておくと便利。
C言語でも使うテクニックだけどね
2022/06/05(日) 23:25:34.70ID:TqTpE262
送信側(自アプリ)じゃなくて受信側(他アプリ)の都合次第なので
2022/06/05(日) 23:36:59.90ID:JCaRLrt5
>受信側(他アプリ)の都合次第
どのような都合かkwsk、
fflush()したら動いて、fflush()しないと止まってしまう通信処理とかはなんかおかしいのでは……

ほっといてもバッファ内容がどんどん出ていく 限りfflush()せずとも送信は成立する
受け取れたかどうかはACKかNAKでも返してもらえばワカルから、
受信タイムうアウト検知ぐらいしかタイミングが関係する要素は無さげ、
2022/06/05(日) 23:57:14.80ID:TqTpE262
「受け取れたかどうかはACKかNAKでも返してもらえばワカル」ってのがすでに受信側の都合だろ
2022/06/06(月) 00:02:59.46ID:NTJIoMOy
コンテキストスイッチをきっかけにフラッシュするような仕組みはあるん?
2022/06/06(月) 00:15:14.95ID:1jBvtBty
それがフラッシュしておかないと停電のときデータ全部持ってかれるんだよな
2022/06/06(月) 00:19:06.76ID:68av+k9D
とりあえず言っておくが、水がもったいないからと言って水洗トイレを流さずに退出するのはやめたほうがいい
2022/06/06(月) 00:21:03.22ID:68av+k9D
>>139
小便用トイレだと赤外線で退出を探知して水を流してくれるものもある
2022/06/06(月) 00:23:36.15ID:1jBvtBty
フラッシュってのはハードディスクにどこまでデータ書いたか正規化する目的で行うから、フラッシュしないで停電モードでクラッシュすると、復旧したときに書いてたデータはゼロバイトのままだったりするが、こまめにフラッシュでデータを確定申告してる場合は書いた分がきちんと残ってたりする
2022/06/06(月) 00:26:15.98ID:Wu7kw3Sh
これからは税務署に追徴課税されないように足繁く通うことにします。
2022/06/06(月) 00:28:00.96ID:1jBvtBty
ま、無停電装置つけてたり電源不足などでHDDが頻繁に切断される環境でなければ問題ないけどね
2022/06/06(月) 00:28:38.87ID:68av+k9D
一休はすでに縄を持って待ち構えてくれているのだから、義満が虎を屏風から追い出せばいいだけ
簡単なことだろ
147デフォルトの名無しさん
垢版 |
2022/06/06(月) 02:46:25.01ID:ETmHHhEk
誤解している人が多そうだけど
fflush()はC標準ライブラリの中のバッファリングデータを全て吐き出すだけであって
システムコールでいえばwriteするだけだよ
一方でカーネルがディスクなどに書き出すのを保証するのはシステムコールではsync/fsyncであってこれはfflush()しても行われない別のもの
14859
垢版 |
2022/06/06(月) 03:12:54.60ID:hkI7oR+t
遅レスすいません。
右辺値参照周りを自分でも見直してきたんですが、
最終的に「vecの要素」に所有権を押し付けるコードは↓で正しいのでしょうか?
void add(vector<int> &&x){
 vec.push_back(std::move(x));
};
・std::forwardを使う場合は、型がテンプレートの場合(フォワーディング参照の場合)に使うのが一般的であって、
 上では具体的な型(vector<int>)を指定しているので、forwardを使う場合に当てはまらない。
・vector<int> &&xとして引数を受け取っても(右辺値参照として引数を受け取っても)、
 右辺値参照自体は左辺値になるので、
 vec.push_back(x)としてしまうと、呼ばれるpush_backは push_back(const T&)であり、所有権が移譲されない。
 なので、ここでもmoveする必要がある(vec.push_back(std::move(x))

この理解であってますか?
149デフォルトの名無しさん
垢版 |
2022/06/06(月) 08:55:53.89ID:Ug3DHjCK
>>147
sync sync sync
最後に電源切る前に
^C 連打ですね
判ります
150デフォルトの名無しさん
垢版 |
2022/06/06(月) 09:02:16.31ID:Ug3DHjCK
https://qiita.com/_meki/items/90f9815a1e899593daa3
https://peng225.果て部.com/entry/2016/07/30/211726
2022/06/06(月) 10:28:12.30ID:x36Ky4fa
WinだとFileFlushBuffersだけで完結する
152デフォルトの名無しさん
垢版 |
2022/06/06(月) 10:28:30.66ID:0alNkgKE
noexceptの有無で動作が変わるなんてC++ムズすぎィ!
153デフォルトの名無しさん
垢版 |
2022/06/06(月) 11:42:00.12ID:Ug3DHjCK
>>152
>>66
154デフォルトの名無しさん
垢版 |
2022/06/06(月) 11:43:05.77ID:Ug3DHjCK
まあ原因と結果が全然離れた別の場所で起こるっていう意味では難易度高いとは思う
155デフォルトの名無しさん
垢版 |
2022/06/06(月) 12:41:54.06ID:jOQJjNZV
>>148
あってる
2022/06/06(月) 21:20:45.44ID:FY57Ayyt
>>126
この国は累進課税なのでそのラインは難しいですね
2022/06/08(水) 00:14:11.77ID:0qhQo4nk
>>66の話は>>59へのだったのか?w

>>155 ほか回答頂いた方
ありがとうございました。
2022/06/08(水) 00:17:03.29ID:xZpQpCco
moveをやれるヤツはmoveをやる勇気があるヤツだけだ
2022/06/08(水) 22:59:00.34ID:lI0dIi5c
>>138
話をそらすでないは;;;
通常のキャラクタ型デバイスならfflush()せずともバッファ内容がどんどん出ていって
受信側(他アプリ)に伝わるやんけ
fflush()全然必須じゃないやんけ
fflush()に関してはやっぱ受信側の都合も糞も無いやんけ;;;

んまー今日日の計算機は速いから、世迷言てんこ盛りの呪術指向プログラミングでも
比較的まともっぽく動くが、
2022/06/08(水) 23:03:01.67ID:lI0dIi5c
fflush()にはフロー制御で止まっている送信を動かす力は無いし、
ブロック型デバイスの書き込みのトリガーになる保証は無いしで
やっぱ使いどころは>>131みたいに多対1の書き込み(dstが同じ)というケースでの論理的な書き込み順序保証ぐらいしか無さげ
2022/06/08(水) 23:39:12.93ID:TQgrAlst
>>159
水に流せ
2022/06/09(木) 19:04:36.80ID:d61AFL9R
受信側の都合どうこうの話は知らんが
>通常のキャラクタ型デバイスならfflush()せずともバッファ内容がどんどん出ていって
それは送信側がどんどん送り出している場合でしょ
2022/06/09(木) 19:12:48.98ID:6LGi7Ubo
高機能トイレしか使ったことない人は、何もしなくても離席したら勝手に排泄物が流されていくと思っているからね
2022/06/09(木) 19:16:36.26ID:ftpPDZQh
停電おこったことないんだろうね
2022/06/09(木) 21:05:58.36ID:Y+xZp6wU
トイレの水流すのもflushだったなwww
2022/06/09(木) 21:14:08.39ID:0SCWcBb2
むしろコンピュータ用語のflushの方がトイレからの連想
2022/06/10(金) 18:08:30.15ID:PT4Yy0z8
flushつったらズリセンだろ
2022/06/10(金) 18:15:06.01ID:q3uEdydr
長時間ストリーミング書き込み時にFileFlushBuffersコールしてなかった停電時の悲劇
169128
垢版 |
2022/06/11(土) 13:05:09.88ID:qY+svW4r
なんとなく分かりましたが、C言語でfflush()を使っていなかったので困ることもなさそうです
改行は'\n'を使ってもう少し勉強を進めてから改めて皆さんのレスを読み返そうと思います
返事が遅くなりました、ありがとうございました
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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