- 1 名前:デフォルトの名無しさん (ワッチョイ 33da-QP0H) mailto:sage [2023/05/09(火) 11:50:52.06 ID:EYc2I7oW0.net]
- !extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512 ↑同じ内容を3行貼り付けること 次スレは>>980が立てること 無理なら細かく安価指定 ※前スレ C++相談室 part163 https://mevius.5ch.net/test/read.cgi/tech/1672409791/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
- 2 名前:デフォルトの名無しさん (スプッッ Sd97-Itme) mailto:sage [2023/05/09(火) 17:29:42.12 ID:fBzPCnLFd.net]
- >>1
乙
- 3 名前:デフォルトの名無しさん (ワッチョイ df01-ouLR) [2023/05/10(水) 05:46:16.13 ID:v0BqkWXe0.net]
- >>2
よく見たらそれ乙じゃなくてポニーテールやん
- 4 名前:デフォルトの名無しさん (スプッッ Sd97-Itme) mailto:sage [2023/05/10(水) 07:28:21.43 ID:htltMOsRd.net]
- どゆこと?
- 5 名前:デフォルトの名無しさん (テテンテンテン MMde-qVtI) mailto:sage [2023/05/12(金) 20:00:57.96 ID:mYlAeNCAM.net]
- class template みたいなノリで、namespace templateとかできないかね。
ユーザーカスタマイズくらいしかメリット無いけど。
- 6 名前:デフォルトの名無しさん (ワッチョイ 6f9a-syTp) mailto:sage [2023/05/13(土) 07:51:55.71 ID:JxNjXH3v0.net]
- ある整数のペアが既に出てきたかどうかを管理したいのですが、
安直に unordered_set(pair<int, int>> としたら、これはハッシュ関数を定義してあげないと 使えないんですね。 ネット上で見かけた良さげなハッシュ関数の例をコピーする手もあるのですが、 これ以外で楽なやり方(データ型)ってありますかね?
- 7 名前:デフォルトの名無しさん (テテンテンテン MM7f-hs0w) mailto:sage [2023/05/13(土) 08:05:00.58 ID:qcT1eyp6M.net]
- 職業プログラマに聞きたいんだけど
自分でソフト屋なんて言ってるけど、ほぼ全てを外注に投げて自分ではろくに書けないなんての普通のことなの? 今年から社会人になったんだけど、先輩たちのレベルが低すぎて失笑してる日々です。 c言語、クラスという単語をドヤ顔で宣ってる先輩達。 classを解釈できるcコンパイラがあるのかな
- 8 名前:デフォルトの名無しさん (ワッチョイ cf34-+/XS) [2023/05/13(土) 08:10:28.77 ID:Er9DBy9d0.net]
- 俺は自分がそうだったら恥ずかしくてプログラマなんて名乗れないけど
世の中には色んな人がいるからね まあ俺の価値観では普通じゃない クラス、つまりオブジェクト指向は何言語を使うかじゃなく頭の中の考え方だから ++じゃないCでも使っていい用語だよ
- 9 名前:デフォルトの名無しさん (ワッチョイ 6f9a-syTp) mailto:sage [2023/05/13(土) 08:20:18.41 ID:JxNjXH3v0.net]
- >>6
ちなみにPythonだと辞書や集合にタプルをデフォで入れられるんですよね... C++も同様のサポートをして欲しかった気が
- 10 名前:デフォルトの名無しさん (ワッチョイ 3302-Cej3) mailto:sage [2023/05/13(土) 08:32:20.51 ID:/V+1J/0r0.net]
- >>7
板違い。マ板へ行け あと5chは不満のはけ口じゃない。そういうのはママにでも慰めてもらえ
- 11 名前:デフォルトの名無しさん (スップ Sd1f-ammQ) mailto:sage [2023/05/13(土) 09:16:37.00 ID:uFhfbSODd.net]
- >>6
単に vector とかのコンテナに入れて find とかで既出判定すればいいんじゃないかな。
- 12 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-Phjm) mailto:sage [2023/05/13(土) 09:44:38.89 ID:vqN1nVlv0.net]
- >>11
数が特に少ないときならそれでもいいけど 普通に考えたら実行コストが大きすぎるだろう。
- 13 名前:デフォルトの名無しさん (ワッチョイ cf34-+/XS) [2023/05/13(土) 09:49:39.77 ID:Er9DBy9d0.net]
- ハッシュ関数を定義してあげないと使えないって
定義すれば使えるだろ 何が問題なんだ?
- 14 名前:デフォルトの名無しさん (アウアウエー Sadf-OfPZ) mailto:sage [2023/05/13(土) 10:30:48.84 ID:W/YCRtGia.net]
- 単にset<int, int>じゃダメなの?
場合によっちゃあmap<int, set<int>>のほうが容量ケチれそうだけど? https://ideone.com/YB4CIY { std::set<std::pair<int, int>> s; s.emplace(1, 1); s.emplace(1, 2); auto f = [&s](int a, int b) { return s.find(std::pair<int, int>(a, b)) != s.end(); //return s.contains(std::pair<int, int>(a, b)); }; std::cout << f(1, 1) << f(1, 2) << f(0, 1) << std::endl; } { std::map<int, std::set<int>> m; m[1].insert(1); m[1].insert(2); auto f = [&m](int a, int b) { return m.find(a) != m.end() && m[a].find(b) != m[a].end(); //return m.contains(a) && m[a].contains(b); }; std::cout << f(1, 1) << f(1, 2) << f(0, 1) << std::endl; }
- 15 名前:デフォルトの名無しさん (ワッチョイ f37c-rSo2) mailto:sage [2023/05/13(土) 11:16:03.77 ID:giA7vv3r0.net]
- 後者だったらstd::multimapでよくね
unorderedでもいいけど
- 16 名前:デフォルトの名無しさん (アウアウウー Sa67-ayqt) [2023/05/13(土) 13:46:15.98 ID:0/cn7SoCa.net]
- >>7
WNDCLASS RegisterClass UnregisterClass WNDCLASSEX RegisterClassEx GetClassName GetClassLong SetClassLong GetWindowClass
- 17 名前:デフォルトの名無しさん (テテンテンテン MM7f-hs0w) mailto:sage [2023/05/13(土) 19:14:51.96 ID:23Ow1LiAM.net]
- >>16
君もc++を学習しなおせ
- 18 名前:デフォルトの名無しさん (スップ Sd1f-MiYm) mailto:sage [2023/05/13(土) 19:17:32.52 ID:acArdvJWd.net]
- >>7
ソフト屋という大きなカテゴリの中でコーダーとは役割が違うだけでコーディングスキルだけを見て優劣を考えるのは短絡的な判断だよ 必要なスキルなんて立ち位置次第で全く異なるんだから
- 19 名前:デフォルトの名無しさん (スプッッ Sd1f-zj+H) mailto:sage [2023/05/13(土) 19:23:38.16 ID:lAh8QD2cd.net]
- コード書けないリーダーは事務方に徹してくれるなら別にいいんだよ
そうじゃないやつが迷惑ってだけ コーダーをバカにするやつはすべてこれ
- 20 名前:デフォルトの名無しさん (ワッチョイ 6f9a-syTp) mailto:sage [2023/05/13(土) 19:32:33.50 ID:JxNjXH3v0.net]
- >>13
よく使うものはシステム側でハッシュ関数を用意してくれると助かるな、的な あともしショボいハッシュ関数を使ったら性能が落ちますし、ってそれも自己責任かw >>14 setは悪くないですね。ただパフォーマンスにシビアになる場合はunordered_の方を 使いたいかなと。こちらもちゃんとしたハッシュが前提になりますが
- 21 名前:デフォルトの名無しさん (オイコラミネオ MMc7-ZkZz) mailto:sage [2023/05/13(土) 21:58:43.54 ID:TFo/sDKRM.net]
- int int → long
何にでも突っ込め
- 22 名前:デフォルトの名無しさん (ワッチョイ 73da-M4GN) mailto:sage [2023/05/13(土) 22:42:01.19 ID:2eXxQqWR0.net]
- long long int
- 23 名前:デフォルトの名無しさん (ワッチョイ 6f9a-syTp) mailto:sage [2023/05/13(土) 23:57:15.63 ID:JxNjXH3v0.net]
- >>21 >>22
片方の値をシフトして足すということですよね? 確かにアイデアですね 似たような感じでint -> intのマップをソートするというのを見たことが
- 24 名前:デフォルトの名無しさん (ワッチョイ 335f-GJof) mailto:sage [2023/05/14(日) 00:07:36.91 ID:QmAlZPFj0.net]
- 何も考えないでboost::combine_hash使っとけばいい
- 25 名前:デフォルトの名無しさん (ワッチョイ f37c-rSo2) mailto:sage [2023/05/14(日) 00:50:39.86 ID:uyb9YL620.net]
- どうせ整数のハッシュなんて値そのものだし
- 26 名前:デフォルトの名無しさん (ワッチョイ 73da-M4GN) mailto:sage [2023/05/14(日) 00:58:25.21 ID:hOK4knnB0.net]
- よくあるサンプルが (x * 12345)%n
- 27 名前:デフォルトの名無しさん (ワッチョイ 73da-M4GN) mailto:sage [2023/05/14(日) 01:15:07.44 ID:hOK4knnB0.net]
- いや、適当杉田わ
long int v=0; for(auto c : int_array) v += v*12345 + c ; return v%hash_size;
- 28 名前:デフォルトの名無しさん (ワッチョイ 73da-M4GN) mailto:sage [2023/05/14(日) 01:16:46.06 ID:hOK4knnB0.net]
- いや、こうか
long int v=0; for(auto c : int_array) v*=12345, v+=c ; return v%hash_size;
- 29 名前:デフォルトの名無しさん (ワッチョイ cf34-TSnC) mailto:sage [2023/05/14(日) 06:44:54.29 ID:YUNKAbGY0.net]
- template <>
struct std::hash<std::pair<int, int>> { static constexpr std::size_t size = sizeof(int) * 2; using result_type = std::bitset<size * CHAR_BIT>; result_type operator()(const std::pair<int, int>& val) const { result_type ret; ret |= result_type(get<0>(val)); ret |= result_type(get<1>(val)); return ret; } };
- 30 名前:デフォルトの名無しさん (ワッチョイ cf34-TSnC) mailto:sage [2023/05/14(日) 06:47:52.52 ID:YUNKAbGY0.net]
- もとい
ret |= result_type(get<0>(val)); ret <<= sizeof(int) * CHAR_BIT; //fix ret |= result_type(get<1>(val));
- 31 名前:デフォルトの名無しさん (ワッチョイ 6f9a-syTp) mailto:sage [2023/05/14(日) 10:45:03.83 ID:28vpFfrh0.net]
- シフト演算が必要なのは、負の整数の場合が
あと、問題のサイズによってはハッシュの速度も気になるなあと
- 32 名前:デフォルトの名無しさん (オイコラミネオ MMc7-ZkZz) mailto:sage [2023/05/14(日) 13:45:27.63 ID:pb1Dbmn7M.net]
- この流れ…
小学生の頃の自分はもちろんc知らなかったけど このスレでああだこうだ言ってる人間達よりは使える人間だったのかなと
- 33 名前:デフォルトの名無しさん (ワッチョイ 7f28-HoHV) mailto:sage [2023/05/14(日) 13:47:15.07 ID:mysDM4PT0.net]
- 負の整数を論理演算と組み合わせるときはオフセットして非負の範囲にしてから符号無し型にして唐論理演算したら安心、
取り出すときは(論理演算して切り出した後)逆オフセットで元に戻る 全ての過程で符号つき整数の右シフトが陽に現れずに済む
- 34 名前:デフォルトの名無しさん (ワッチョイ 7f28-HoHV) mailto:sage [2023/05/14(日) 13:52:34.35 ID:mysDM4PT0.net]
- しつれい
>オフセットして非負の範囲にしてから符号無し型 この処理順序で良いのは {扱う整数|<std::numeric_limits<オフセットするときの整数型>::max()のときはこれで良いが、 =の場合は符号無しにしてからオフセットする 全てが調和する、
- 35 名前:デフォルトの名無しさん (オイコラミネオ MMc7-ZkZz) mailto:sage [2023/05/14(日) 13:53:38.30 ID:pb1Dbmn7M.net]
- こんなの秒で解決するだろ
ごちゃごちゃ言うようなものなの?
- 36 名前:デフォルトの名無しさん (ワッチョイ 835f-Phjm) mailto:sage [2023/05/14(日) 17:24:37.15 ID:oi9EHG/70.net]
- こんなの秒でスルーするだろ
ごちゃごちゃ言うようなものなの?
- 37 名前:デフォルトの名無しさん (スップー Sd1f-HMPm) mailto:sage [2023/05/14(日) 18:28:37.27 ID:f2qVMn0Gd.net]
- スルー出来てない人に言われましても
- 38 名前:デフォルトの名無しさん (ワッチョイ cf34-TSnC) mailto:sage [2023/05/14(日) 21:34:32.36 ID:YUNKAbGY0.net]
- ヒントじゃあかんのね
100%完全なコードを提供しないとクレームつくわけか # 若旦はん、やってて恥ずかしおまへんか?
- 39 名前:デフォルトの名無しさん mailto:sage [2023/05/16(火) 15:18:28.27 ID:cdgpde7Q0.net]
- 教えてもらえないでしょうか
c++で クラスを作って関数を書いています。 大きくなり、可読性が悪いので、 同じクラス内のcppを別ファイルに分けたいのですが、 可能なのでしょうか 継承を使って、10個ぐらい数珠つなぎにして、一番最後の継承クラスに関数呼び出し元の関数を書いて、 途中の継承クラスに分けたい関数を書いたら、 と考えたりしています。
- 40 名前:デフォルトの名無しさん [2023/05/16(火) 15:58:56.29 ID:mGp2Y9l5a.net]
- >>19
めっちゃわかります
- 41 名前:デフォルトの名無しさん mailto:sage [2023/05/16(火) 16:03:17.10 ID:mGp2Y9l5a.net]
- >>39
可能 ヘッダのクラス定義はまとめないとだめだけど cppのソースは分かれてても最後にリンクで辻褄が合えばOK
- 42 名前:デフォルトの名無しさん [2023/05/16(火) 16:24:39.60 ID:hKNAv4Vda.net]
- >>39
後半で言っていることがちょっと難しいかな 多重継承の数珠繋ぎを言ってる? よく分からんけど多分そんな変なことしなくていいよ
- 43 名前:デフォルトの名無しさん mailto:sage [2023/05/16(火) 17:34:39.57 ID:cdgpde7Q0.net]
- >>41
>>42 助かります。ありがとうございます。 勉強してみます。
- 44 名前:デフォルトの名無しさん mailto:sage [2023/05/16(火) 21:35:23.62 ID:+NXdN5Npd.net]
- 可読性が悪いものは
ファイルを分けても良くはならんぞ
- 45 名前:デフォルトの名無しさん mailto:sage [2023/05/16(火) 21:55:30.94 ID:RFVtGrOF0.net]
- >>39
1つのクラスに機能を詰め込み過ぎなんじゃない? 昔、4万行のcppファイルを見たことはあるけどw
- 46 名前:デフォルトの名無しさん mailto:sage [2023/05/16(火) 22:05:53.03 ID:oY5Fe8SB0.net]
- 殆どコピペなんだろうな
クラスの継承知らないヤツがよくやる荒業
- 47 名前:はちみつ餃子 mailto:sage [2023/05/16(火) 22:27:10.76 ID:tGbGLk1R0.net]
- そういえば C# でクラス定義を分ける機能 (パーシャルクラス) があると聞いたことがあるけど
本来的に分けるべきクラスを見かけだけ分割するような悪い設計を誘発しそうな印象がある。 C# について全然知らんので印象だけだけど。
- 48 名前:デフォルトの名無しさん mailto:sage [2023/05/16(火) 22:54:23.62 ID:A1rs+At80.net]
- partialはXAMLから生成された.csと手書きする.csをマージするための機能なので
- 49 名前:デフォルトの名無しさん (スプッッ Sd1f-zj+H) mailto:sage [2023/05/17(水) 07:00:26.09 ID:s9zxu+xkd.net]
- >>47
多重継承っぽいやつ?
- 50 名前:デフォルトの名無しさん (スップ Sd1f-kcYJ) [2023/05/17(水) 08:36:31.92 ID:9mruUvtDd.net]
- 分割されたそれぞれの断片をコンパイラの後工程で1クラスにまとめ上げる感じ。
なのでこんな感じの相互参照も許される。 partial class C{ private void F1(){ F2(); } } partial class C{ private void F2(){ F1(); } } まあ当然コードの見通しが悪くなるので、 コンパイラ生成が絡むとこだけをpartialにして1ファイル1クラスにしておくのが鉄則
- 51 名前:デフォルトの名無しさん (スッププ Sd1f-paFp) mailto:sage [2023/05/17(水) 12:04:20.17 ID:nFfh+5gid.net]
- 「1ファイル1クラスにしておくのが鉄則」
10行のクラスも10000行のクラスも何も考えずに1ファイル 思考停止君のやること
- 52 名前:デフォルトの名無しさん (オイコラミネオ MMc7-ZkZz) mailto:sage [2023/05/17(水) 12:36:42.78 ID:F24a8wLtM.net]
- C#のpartialは基本的に自動生成されたファイルとの分離が主目的
winformsのコントロールのプロパティのイニシャライズとか人から触ってほしくないファイルで一種の馬鹿避けになってる delphiではそのコントロール向けのファイルがバイナリでぶっ壊れてもどうにもできないし コーディング中にコード内検索も出来ない 利便性が著しくよくない 後は一般のコードジェネレータの吐き出すファイル用にも使える 最近はmvvm toolkitで便利に使われている コードの可読性が上がるし触られたくないものを扱うのも便利 人力コードで使う場合は長いファイルの下請けメソッドを分割する場合 単純に可読性が上がるけど普通は別のアプローチを使う 特定の機能をまとめたファイルを一つ作ってそこに関連クラスを全部入れるとかもできるけど無しだろうな 特定のタイミングでプリンターに出力するメソッドを追加してファイルのアリ無しで切り替えるとかは出来そう
- 53 名前:デフォルトの名無しさん (アウアウウー Sa67-MLJk) [2023/05/17(水) 12:57:39.48 ID:TlHThGt8a.net]
- おんなじ意味合いの関数なんだけどSFINAEしまくってて1000行くらいあるやつはよく見かける
- 54 名前:デフォルトの名無しさん mailto:sage [2023/05/17(水) 13:32:11.85 ID:6s1sKbMg0.net]
- 時代はパーシャル
- 55 名前:デフォルトの名無しさん mailto:sage [2023/05/17(水) 16:10:19.20 ID:ZA2j/mjnd.net]
- 触られたくないコードって危険を孕んで内科医?
業務の情報が1人の社員に独占されていると そいつが急死したら詰むだろ
- 56 名前:デフォルトの名無しさん mailto:sage [2023/05/17(水) 22:50:57.85 ID:F24a8wLtM.net]
- 彼も若いころは文脈も理解できてまともにコーディングできたのかもしれない
皆いつか老化して意味が取れなくなるんだから いつか行く道と言うことで…
- 57 名前:デフォルトの名無しさん mailto:sage [2023/05/18(木) 08:16:22.48 ID:rquLbZPK0.net]
- 互いに依存しないことを明確にするためにファイルを分けることはまれによくある……
static int g_foo; class A { ... }; class B { void bar() { baz(g_foo); A x; } // Bがg_fooやAへの依存が無いことはBをファイルを分けたらワカル分けなかったらわからん };
- 58 名前:デフォルトの名無しさん mailto:sage [2023/05/18(木) 08:21:13.77 ID:rquLbZPK0.net]
- もっともファイルを分けたからといってもメモリのエイリアシング的な形で依存した場合は知らん
some_func()が表記上はg_fooを含まないのに実は中でg_fooのアドレスを知っていて以下略
- 59 名前:デフォルトの名無しさん mailto:sage [2023/05/18(木) 22:15:33.79 ID:mLb7AMe5M.net]
- さすがに冷たい対応だったかなと
C#でpartialが入った経緯 winformsはGUIデザイナを使ってボタン等のコントロールを自由に配置してプロパティを変えて表示される文字を変えることができる 初期はデザイナで変更するとformのファイルがそのまま変更された そのファイルを人間も書き換えているので人がミスしたり運が悪いと整合性が取れなくなったりしてた 例えば全置換などやってデザイナの部分も書き換わったりとか それで自動生成された部分を人が不意に触れないないようにそこだけを別ファイルに出す目的でpartial classが出来た partial methodも作られたけど他人が使ってるのを見たことがない
- 60 名前:デフォルトの名無しさん mailto:sage [2023/05/19(金) 02:03:23.75 ID:iSJAQTOS0.net]
- 日本でパーシャルと言えばパーシャル冷蔵庫
微妙に凍結させた状態にして保存するというアレ まさにC#のpartialの事である
- 61 名前:デフォルトの名無しさん mailto:sage [2023/05/19(金) 14:04:53.67 ID:Y7veEz1vd.net]
- 偏微分
- 62 名前:デフォルトの名無しさん mailto:sage [2023/05/19(金) 14:20:06.94 ID:s84ipUzkM.net]
- グラッド ダイバージェンス ローテーション
- 63 名前:デフォルトの名無しさん (アウアウウー Sa2f-SwK+) [2023/05/20(土) 13:24:28.97 ID:QfLlK72xa.net]
- Φ(E)
∇・E ∇×E
- 64 名前:デフォルトの名無しさん (JP 0H2b-QEN2) mailto:sage [2023/05/20(土) 14:24:46.00 ID:duXb8gf0H.net]
- ナブラッ
- 65 名前:デフォルトの名無しさん (ワッチョイ 03cf-owa4) mailto:sage [2023/05/20(土) 14:35:25.50 ID:mmZhl8HV0.net]
- チロワッ
- 66 名前:デフォルトの名無しさん (オイコラミネオ MMeb-owa4) mailto:sage [2023/05/20(土) 15:53:45.99 ID:KTPYLvU6M.net]
- APLを思い出した
さすがに使ったことはないけど
- 67 名前:デフォルトの名無しさん (アウアウウー Sa2f-IRVr) mailto:sage [2023/05/20(土) 16:00:42.45 ID:eGW3N412a.net]
- for(auto &v: createVector()) なんか処理
みたいな書き方してもcreateVectorは一回しかよばれず大丈夫ってことでいい?
- 68 名前:はちみつ餃子 mailto:sage [2023/05/20(土) 16:21:49.91 ID:dyAKGBP20.net]
- >>67
せやで。 その関数が呼ばれるのは一度だけという解釈で正しい。
- 69 名前:デフォルトの名無しさん mailto:sage [2023/05/20(土) 16:23:49.47 ID:am3G09Kz0.net]
- >>67
そんくらい自分で試しなされ $ cat test.cpp #include <iostream> #include <vector> using namespace std; auto createVector() { cout << "hoge\n"; return vector <int> (); } int main () { for(auto &v: createVector()); // なんか処理 return 0; } $ g++ test.cpp $ ./a.out hoge
- 70 名前:デフォルトの名無しさん mailto:sage [2023/05/20(土) 18:59:35.46 ID:VcGb9zmJ0.net]
- >>69
自分の環境だと通るのは知ってるけど、実は未定義でアウトみたいな場合あるから5chの有識者の意見が聞きたかった
- 71 名前:デフォルトの名無しさん mailto:sage [2023/05/20(土) 19:26:09.53 ID:KTPYLvU6M.net]
- かなり昔範囲forはプリプロセッサで展開されると聞いたことがあったなあ
そういうのから誤解なんじゃないかな 実際展開してみたけどプリプロセッサでは展開されないです
- 72 名前:デフォルトの名無しさん mailto:sage [2023/05/20(土) 20:10:50.85 ID:pdI1pmlS0.net]
- >>70
これのこと? std::vector<int> createVector(); for(auto &v: createVector()) // セーフ struct Result { std::vector<int> v; }; Result createResult(); for(auto &v: createResult().v) // UB
- 73 名前:はちみつ餃子 mailto:sage [2023/05/21(日) 00:13:09.51 ID:tvaGSf6W0.net]
- >>71
range-based for は等価なコードを示す形で意味論が規定されてる。 https://timsong-cpp.github.io/cppwp/n3337/stmt.ranged 「こう書いた場合の挙
- 74 名前:ョと等しい」という説明が「このように展開される」と誤解されたんだろう。
コンパイラの内部で実際に展開しても構わないんだが プリプロセッサはフェイズの整合性がとれなくなるのでこの展開をプリプロセッサでは実現できない。 [] - [ここ壊れてます]
- 75 名前:はちみつ餃子 mailto:sage [2023/05/21(日) 00:41:25.84 ID:tvaGSf6W0.net]
- 一時オブジェクトの寿命は個々の具体例を網羅的に覚えるというわけにもいかんので
ちゃんと原則を理解しないといかんというのは警告しておく。 >>72 で提示された内容を解説すると、このとき createResult の結果である Result は一時オブジェクトなので 完結式の終わりには解体される。 (>>73 で提示した展開形を参照のこと。) 右辺値は参照で受けた場合に限りその参照の寿命と同じ分だけ寿命が延長されるというルールがあるので その原則に従えば Result::v の寿命は延長されるのだが v を内包する Result が解体されるときにメンバも解体してしまうので Result::v も無効になってしまう。 当然だがすでに解体されたオブジェクトはそのイテレータも全部が無効。
- 76 名前:デフォルトの名無しさん [2023/05/21(日) 10:05:34.04 ID:bUoMcGVnd.net]
- 単純なFOREACHマクロだと展開できないんだよねこれ
FOREACH(T x, iterable) "文" ↓ { auto&& range=iterable; auto&& begin=range.begin(); auto&& end=range.end(); for(;begin!=end; ++begin){ T x=*begin; "文" } } range寿命の関係上スコープの外に漏らしてはいけない。 FOREACHの終了を表現するために"#define FOREACH_END }}"とかの間抜けなマクロが必要になる (たぶんC++17で導入された初期化付きifを使えば誤魔化せるけど) セパレータの":"(or ",")をプリプロセッサを見つけるのが不可能。 Tでもiterableでも":"とか","を使って表現するケースに対応し切れない (Tにtypename std::array<int, 5>::value_type を指定されたら無理)
- 77 名前:デフォルトの名無しさん (オイコラミネオ MMeb-owa4) mailto:sage [2023/05/21(日) 13:16:13.24 ID:gNV32dtiM.net]
- そうそう
プリプロセッサは重複の無い任意の変数名を持ってこれない 固定でもスコープの問題もあるからプリプロセッサ論は馬鹿げてるなと思った
- 78 名前:デフォルトの名無しさん mailto:sage [2023/05/21(日) 14:57:20.57 ID:TLn2V+5X0.net]
- >>74
ちなみにこれはC++23からは解決する(P2644) for文の中身のあらゆる一時オブジェクトは(謎の力によって)ループ終了まで生存するようになる まあ現時点ではやらない方がいいし、気にしなくて良くなるまで10年はかかるだろうけど
- 79 名前:デフォルトの名無しさん mailto:sage [2023/05/21(日) 15:50:41.28 ID:hDRagkvp0.net]
- >>77
えええ! どんな需要を満たそうとしてそんな変更するんかね?
- 80 名前:デフォルトの名無しさん mailto:sage [2023/05/21(日) 19:09:41.96 ID:9sSc2LHl0.net]
- class Foo {
int m_value; public: Foo() { m_value = 現在時刻に依存して決まる何かの値; } int v() const { return m_value; } }; int tmp; for (i = 0; (tmp = Foo().v(), tmp < 100); i++) { cout << i << "," << tmp << endl; } とかになったらどうなってしまウンダー/(;≧Д≦)\
- 81 名前:デフォルトの名無しさん mailto:sage [2023/05/21(日) 20:47:43.16 ID:TLn2V+5X0.net]
- for (auto&& x: <<ここだけだよ>>)
- 82 名前:デフォルトの名無しさん (ワッチョイ 6f5f-u1DA) mailto:sage [2023/05/21(日) 21:41:43.50 ID:Wy9ZySN20.net]
- std::for_eachと死ぬタイミング合わせようとしてるのかな
- 83 名前:デフォルトの名無しさん (スププ Sdea-3V1s) [2023/05/22(月) 11:38:14.26 ID:da9WNPSud.net]
- do{}while(ここにblock内で宣言した変数使えるのマダ?);
- 84 名前:デフォルトの名無しさん mailto:sage [2023/05/23(火) 08:13:25.35 ID:Zuh94crlM.net]
- Main でインスタンス化した、ファイル操作
クラスの設定を、別のクラスutilityの インスタンスで使いたい時ってどうしたら いいですか? ファイル開いておいて、デバッグ内容を そこに書き込みたい。 デバッグ終わったら不要になるんで、 あまりincludeとか変数とか増やしたくない。 VC++ のwindowsディスクトップアプリ です。
- 85 名前:デフォルトの名無しさん (スップ Sd8a-Cz+X) [2023/05/23(火) 08:33:03.17 ID:2zdXEqSEd.net]
- 「ファイル操作クラス」ってなんのことか読み取れんが
std::osteamのことか?std::ostreamを持ってる別の仕事があるクラスか? 差し支えなければ現状のクラス定義を貼ってほしいが
- 86 名前:デフォルトの名無しさん (ラクッペペ MM86-F7IQ) mailto:sage [2023/05/23(火) 09:15:28.22 ID:Zuh94crlM.net]
- >>84
ファイル操作を含んだ、デバッグ用に用意した クラスです。Debugクラスとします。 Debug dbg; グローバルで‥ WWinMain(){ dbg.initial(); 色んな初期設定。 dbg.filename(debugfile) ; dbg.start(); ここで、std::ofstrm file.openしてる dbg.writefile(“なんかかきこむ”); Utilty utl; dbg.closefile(); } Class Utility{ この中で、mainの中で色々設定した内容で (mainで用意したdbgインスタンスのまま。) Debugクラス。使いたい。 開いたFileそのまま。。 } こんな感じですが、伝わりますか?
- 87 名前:デフォルトの名無しさん [2023/05/23(火) 10:39:56.04 ID:X1m2WkvHa.net]
- Utility util(dbg);
- 88 名前:デフォルトの名無しさん (ワッチョイ defb-a+t/) mailto:sage [2023/05/23(火) 12:30:30.59 ID:gLCisDzi0.net]
- 関数の命名センスが短絡的やな
扇子を磨け
- 89 名前:デフォルトの名無しさん (スップ Sd8a-Cz+X) [2023/05/23(火) 12:40:55.81 ID:2zdXEqSEd.net]
- std::ostreamはコピーを禁止してるから参照渡し(or ポインタ渡し)で受け取るのがいいかな
class Utility{ Debug& _debug; public: Utility(Debug& debug) : _debug(debug) {} void f(){ _debug.writefile(...); } }; int main(){ ... Utility utl(dbg); }
- 90 名前:デフォルトの名無しさん (アウアウウー Sa2f-k5Su) mailto:sage [2023/05/23(火) 13:00:20.12 ID:zQ9auONPa.net]
- Debugをシングルトン化しておけばいいのでは。
そうすれば、utilityもMainもDebugの定義を読むだけで、お互いに無関心でいられる。
- 91 名前:デフォルトの名無しさん (スップ Sdea-9ehv) mailto:sage [2023/05/23(火) 13:07:36.09 ID:Gn7U56ehd.net]
- staticおじさんになるんだよ
- 92 名前:デフォルトの名無しさん (ワッチョイ ffda-dfFb) mailto:sage [2023/05/23(火) 13:19:59.30 ID:4jUsmOvf0.net]
- 禁じ手
グローバルおじさん
- 93 名前:デフォルトの名無しさん (ワッチョイ 635f-cbOI) mailto:sage [2023/05/23(火) 14:52:04.84 ID:HWUzxVfV0.net]
- #ifdef NDEBUG
#define DEBUG_PUTLN(line) #else #define DEBUG_PUTLN(line) dbg.writefile(line) #endif
- 94 名前:デフォルトの名無しさん (ワッチョイ 5f7c-aV//) mailto:sage [2023/05/23(火) 20:11:47.19 ID:QG1lXeie0.net]
- シングルトンって実質はグローバル変数そのものなんだけどな
- 95 名前:デフォルトの名無しさん (ワッチョイ dbd4-3DEL) mailto:sage [2023/05/23(火) 20:33:02.99 ID:H3Kl0Etq0.net]
- クラス定義がそもそもグローバルだからな
- 96 名前:デフォルトの名無しさん mailto:sage [2023/05/23(火) 23:59:19.62 ID:4jUsmOvf0.net]
- int i をグローバル変数にしてたおじさん居たな
理由聞いたら書くの面倒だからとか
- 97 名前:デフォルトの名無しさん [2023/05/24(水) 01:56:30.90 ID:EzFDCa2Ya.net]
- 全部シングルトンおじさんとglobalおじさんは一人でもいると周りがめっちゃ迷惑やな
- 98 名前:デフォルトの名無しさん mailto:sage [2023/05/24(水) 14:31:10.50 ID:VF8oVK+zM.net]
- ありがとう。
やっばり、Utility の中にも色々書く必要あり ですね。 デバッグのためだけにUtility2 3 4全部直すのも と思ってたけど、諦めて頑張ります。
- 99 名前:デフォルトの名無しさん mailto:sage [2023/05/24(水) 14:34:53.03 ID:VF8oVK+zM.net]
- external でインスタンス渡して、
global.h さんだけincludeしてできないかなと、 甘く考えてた時もありました。
- 100 名前:デフォルトの名無しさん mailto:sage [2023/05/24(水) 23:58:03.92 ID:lCJuR93r0.net]
- 世界で1つのint iをブンブン回してるのクソワロタ
|

|