1 名前:デフォルトの名無しさん (ワッチョイ efda-9b8G) mailto:sage [2023/10/31(火) 07:37:38.52 ID:+ZyYyqMO0.net] !extend:checked:vvvvv:1000:512 !extend:checked:vvvvv:1000:512 ↑同じ内容を3行貼り付けること 次スレは>>980 が立てること 無理なら細かく安価指定 ※前スレ C++相談室 part164 https://mevius.5ch.net/test/read.cgi/tech/1683600652/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
355 名前:デフォルトの名無しさん (ワッチョイ f344-7AaF) mailto:sage [2024/06/09(日) 21:36:35.88 ID:RJYm8+UN0.net] >>354 >WSLはlldbが使うシステムコールが足りてないって昔から言われていたかと なるほどTHXです clang使ってなかったので全然わかりませんでした 動かないlldbもさんざんggったんだけど system call未実装にはたどり着けませんでした ようやくすっきりしました
356 名前:はちみつ餃子 mailto:sage [2024/06/09(日) 22:04:05.34 ID:bthWHIYm0.net] ざっとググってみた感じたと wsl1 では procfs が提供する情報が少ないのが lldb が動かない直接の原因みたいな数年前の情報は見つかる。 内部構造がまるで違うはずなのに表面的なインターフェースは互換にするなんてのは無理のある話なので互換性が「ある程度」にとどまるのは仕方ない。
357 名前:デフォルトの名無しさん (ワッチョイ f344-7AaF) mailto:sage [2024/06/09(日) 22:18:48.29 ID:RJYm8+UN0.net] んー clangちょっと調べたかったんで Visual Studioにclangインスコして調べますわ できるならwslでやるのが手っ取り早いんですが Q9550とQ9550sしか持ってないもんで 以来CPUの爆値上がりと最近の円の爆下がりで新しく組めてないんですわ ダイサイズ変わらないのにCPU 3万ー> 10万とか購買意欲が萎える
358 名前:デフォルトの名無しさん mailto:sage [2024/06/10(月) 18:15:47.68 ID:bkv2YMA2M.net] >>355 github のwslのissueを漁れば出て来るかと。 結論がWSL2使えだったかと
359 名前:350 mailto:sage [2024/06/10(月) 21:38:00.71 ID:gvR5xwnw0.net] 自己レスです その後 Visual Studioのインストールオプションでclangを選択し 正しく動作することは確認したのですが... 今や誰でもロハで使えるインテルコンパイラがとっくの昔にllvm化されてたんですね clangに拘りがなければ x86/x64のwin/linux/wsl は素直にopenAPI使っとくのが幸せかも. ちなみにwsl 1にlinux版をインストールしましたが コンパイラicxもデバッガgdb-opwnapiも何の問題もなく動いてます(今のところは) なので Visual Studio はインストールオプションのclang は外してもとに戻し wsl は >apt remove clang clang-15 >apt remove lldb lldb-15 しときました
360 名前:350 mailto:sage [2024/06/11(火) 06:20:17.73 ID:Ip4/j3Hv0.net] ☓ openAPI ◯ oneAPI
361 名前:デフォルトの名無しさん (ワッチョイ 3bb1-hWAc) mailto:sage [2024/06/21(金) 22:07:24.38 ID:sN/1ehEs0.net] 今だけです https://i.imgur.com/5bqwPrd.jpg
362 名前:デフォルトの名無しさん mailto:sage [2024/06/22(土) 13:52:54.53 ID:5xyD4PGd0.net] 今だけです https://i.imgur.com/NugsGdH.jpg
363 名前:デフォルトの名無しさん (ワッチョイ 43d7-pk1M) [2024/07/13(土) 19:06:26.39 ID:Dtkl2SPB0.net] 若者のBoost離れ
364 名前:デフォルトの名無しさん (ワッチョイ 0501-twcF) mailto:sage [2024/07/13(土) 19:56:34.01 ID:vwgbCsGD0.net] と言いますと?
365 名前:デフォルトの名無しさん (ワッチョイ f5f9-pk1M) [2024/07/13(土) 21:42:42.00 ID:Rh1MnFN10.net] VS17.10.xでBoostがビルドできなくなってるのに 誰も触れない
366 名前:デフォルトの名無しさん (ワッチョイ f5f9-pk1M) [2024/07/13(土) 21:47:29.39 ID:Rh1MnFN10.net] MSVC143から144に変わったせいでビルドできないらしいですよ
367 名前:デフォルトの名無しさん (ワッチョイ e91c-hIhh) [2024/07/16(火) 12:22:56.57 ID:gS8T2k/f0.net] >>342 CMakeとNinjaはC++の話題なのでOKです
368 名前:デフォルトの名無しさん (ワッチョイ 4901-V77j) mailto:sage [2024/07/27(土) 17:57:44.53 ID:KDd62vAV0.net] C++、 型の指定が、めんどい 速いぐらいしか、利点ないよな
369 名前:デフォルトの名無しさん (ワッチョイ 7b95-4q6c) mailto:sage [2024/07/27(土) 20:53:02.50 ID:eNksZtKQ0.net] 顧客目線に立てない三流の感想
370 名前:デフォルトの名無しさん (ワッチョイ 4901-7phL) mailto:sage [2024/07/27(土) 21:03:15.66 ID:zOSUCWw50.net] >>368 auto使えば?
371 名前:デフォルトの名無しさん (ワッチョイ 1379-xel+) mailto:sage [2024/07/27(土) 23:40:34.69 ID:iHlVB6Tw0.net] ランタイムに依存しない(し難い)のが最大の利点だろうに さらに大抵のアーキテクチャには用意されてるからクロスプラットフォームの観点でもなんだかんだ最強なんだよ むしろ最近はChatGPTが他の言語で書いたやつまで適当に書き直してくれるのもあって最強度がより高まってきてると感じるね
372 名前:デフォルトの名無しさん (ワッチョイ 8e95-N8l3) mailto:sage [2024/07/28(日) 00:00:39.51 ID:ePI6t8jD0.net] 全く同意できんな むしろ環境依存上等で使うのがC/C++だろ パッケージシステムも標準がないしビルド環境もばらばら どこが最強やねん 標準ライブラリで完結するようなしょぼいプログラムなら他の言語使ったほうが楽
373 名前:デフォルトの名無しさん (ワッチョイ bdf0-+IYp) [2024/07/28(日) 00:11:55.23 ID:4HqkcgMt0.net] 型の指定のサンプル GetProcAddressに変換をかけるマクロ #define ENTRY_INTERFACE(api) api = (decltype(api)) GetProcAddress(hInst,"_INTERFACE_"#api) ね?簡単でしょ?
374 名前:デフォルトの名無しさん (ワッチョイ 5d01-viEi) mailto:sage [2024/07/28(日) 12:00:20.72 ID:x9q80Pnt0.net] >>370 auto オートね (いいこと聞いた
375 名前:デフォルトの名無しさん (ワッチョイ aa3e-cE1m) mailto:sage [2024/07/28(日) 17:36:32.24 ID:9wLF96CX0.net] >>374 あとテンプレートを使ったダックタイプとかも便利。
376 名前:デフォルトの名無しさん (オッペケ Sr05-viEi) mailto:sage [2024/07/28(日) 21:14:24.07 ID:roXukc4Cr.net] >>375 ふむ 実践的な(アプリを作るとか)、c++、書籍かなんか、おすすめ、ありますか? cmake、とかの、関門もあるのだが (githubにあがってるやつを、きっちり理解したい)
377 名前:デフォルトの名無しさん (ワッチョイ 4132-nuT0) mailto:sage [2024/07/29(月) 08:53:31.23 ID:cQQT2a1I0.net] 実践に入る前に言語の入門は読んだほうが良いと思う。 基礎を積まずに実践しようとするのは無謀。
378 名前:デフォルトの名無しさん (ワッチョイ 9a05-pVLH) mailto:sage [2024/07/29(月) 15:25:34.30 ID:heyNGOtI0.net] なんでも、まずは改造から入るんだぜ こうですか、うんたぶんこう
379 名前:デフォルトの名無しさん (ワッチョイ 4132-nuT0) mailto:sage [2024/07/29(月) 19:25:02.89 ID:cQQT2a1I0.net] C++ には未規定がやたらたくさんあるんだ。 実際の挙動から仕様を想像しようとすると意味不明でグダグダやねん。
380 名前:デフォルトの名無しさん (ブーイモ MM9a-N8l3) mailto:sage [2024/07/29(月) 20:07:37.15 ID:Nl7D5VelM.net] ネットでいくらでも勉強できるだろ 書籍なんかいらん
381 名前:デフォルトの名無しさん (ワッチョイ aa3e-cE1m) mailto:sage [2024/07/29(月) 20:36:26.35 ID:9/o4+28+0.net] 結局ライブラリが重要だから、作りたいアプリで流行っているライブラリの入門をやるのがいい。 作りたいアプリそのものじゃなくても、類似アプリを作るのはやる気に繋がる。
382 名前:デフォルトの名無しさん (オッペケ Sr05-viEi) mailto:sage [2024/07/29(月) 22:02:41.02 ID:8hMQwTW/r.net] >>377 github にあがってるやつを、理解しようとして、助けになる本は、結局ない希ガス 実際、実践的なものがないので、文法理解で終わってしまうという https://github.com/TadaoYamaoka/cmajiang これ、再利用して、アプリを作りたいのだが
383 名前:デフォルトの名無しさん (ワッチョイ 4132-nuT0) mailto:sage [2024/07/29(月) 22:18:19.65 ID:cQQT2a1I0.net] >>382 言いたいことがわからん。 auto すら知らんかったということは文法もまだ十分に理解してないってことだろ? 文法が分かったら読めばいいだけなんだから何の本が必要なんだ?
384 名前:デフォルトの名無しさん (ワッチョイ 0168-qw7+) mailto:sage [2024/07/29(月) 23:36:56.61 ID:7XbSB18u0.net] >>382 立直麻雀のシミュレーターなら mjx の方がいいんじゃないかな? マイクロソフトで麻雀 AI Suphx の開発に携わってた人が作ったシミュレーターで 動作検証も天鳳の牌譜で実施したらしい https://github.com/mjx-project/mjx 他のシミュレーターだと - libriichi (Rust製 麻雀 AI Mortal に付属 天鳳ルール準拠 AGPL) https://github.com/Equim-chan/Mortal - kanachan.simulation (C++製 麻雀AI kanachan に付属 雀魂ルール準拠 MITL) https://github.com/Cryolite/kanachan/tree/v2 とかも参考になると思う 作りたいアプリの内容がわからないけど ネット麻雀を作りたいなら cmajiang の元ネタの電脳麻将 https://github.com/kobalab/Majiang https://kobalab.net/majiang/ AI 用の対戦シミュレーターなら mjai.app https://github.com/smly/mjai.app https://mjai.app/ が参考になりそう
385 名前:デフォルトの名無しさん (ワッチョイ 0168-qw7+) mailto:sage [2024/07/29(月) 23:43:38.11 ID:7XbSB18u0.net] >>382 書くのを忘れてた cmajiang の元ネタ majiang-core は作者が解説本を出してる 実際買ってみたけど、やっぱりソースコードだけ読むより分かりやすい https://www.shuwasystem.co.jp/book/9784798067889.html ブログでも解説されてるけど、お目当ての記事を探すのが大変だし本の方が見やすいと思った https://blog.kobalab.net/
386 名前:デフォルトの名無しさん (ワッチョイ bdf0-+IYp) mailto:sage [2024/07/30(火) 12:23:26.36 ID:8UDCP+we0.net] >>379 未規定というか、C++11よりも古い規格のは、古参でないと扱いが難しいからね そういう古い規格のものが仕事で入ってい来たりすると新人は頭悩ますかもしれんね 03~11まで結構間に空いてるしね
387 名前:デフォルトの名無しさん (ワッチョイ 5d01-viEi) mailto:sage [2024/07/30(火) 23:52:38.43 ID:KT8SFJ0h0.net] >>385 はい、 すべて、既読です make, pybind11 とか入ってて、 デバッグビルド、わかりませんorz
388 名前:デフォルトの名無しさん (ワッチョイ 1bef-BWtz) mailto:sage [2024/08/04(日) 06:24:46.59 ID:WlfSsbJh0.net] ラムダ式が渡された側って、キャプチャの内容をチェックしたりできないのでしょうか。 例えば以下の例で、funcA()の中でfの中のthisをチェックして挙動を変えたりとか? そういうことをしたいなら、ラムダの引数で渡したりすべきでしょうか? #include <iostream> class A { public: void funcA(const std::function<void(int)>& f, int a) { f(a); // can I check 'this' (B class) in f? }; }; class B { public: void print(int b) { A objA; objA.funcA([this](int i) { std::cout << "val = " << i << "\n"; }, b); } }; int main(void) { B objB; objB.print(2); }
389 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a932-NesV) mailto:sage [2024/08/04(日) 10:12:57.69 ID:w7HjtqNP0.net] >>388 キャプチャした変数はラムダ式の中で使う以外の方法ではアクセスできない。 どのような方法で解決すべきかはそれをしようとする意図によるのでなんとも言えない。
390 名前:デフォルトの名無しさん (ワッチョイ a94a-ImVy) [2024/08/04(日) 14:50:32.12 ID:ao1w9dwD0.net] それはラムダ式を使う理由とズレてるな A側で判定が必要なものならラムダ式の引数もしくはfuncAの引数で渡すべき A側は受け取るものを「intをひとつ受け取ってvoidを出力する関数」として抽象化してるんだから、それ以外のことは知れないし、知るべきではない Aは渡された関数が何であろうとintを一つ渡すだけで、その詳細 (関数がどのような値や参照をキャプチャしてるのか、渡した引数がどのように使われるのか) には触れられない ラムダ式を使うのはこのような抽象化が目的のはずだから、キャプチャした値を知りたいというのは用途から外れるかと思う
391 名前:デフォルトの名無しさん (ワッチョイ 9b72-3sGu) mailto:sage [2024/08/04(日) 18:55:04.35 ID:knGBcNlu0.net] なんか最近自分でで適切なインターフェースを定義して使うって発想がなくなってる気がする ひたすらありものを繋ぐだけで作り切るみたいな
392 名前:デフォルトの名無しさん (ワッチョイ c1f0-3TXu) mailto:sage [2024/08/04(日) 19:21:38.37 ID:oxQURbTu0.net] 仕組みを追求することをせずにどっかから完成した㌬をドッキングするだけの作業は情報収集力さえあれば組み込み系の作業員でもできるし己のチカラにはならんのよな で、いろんなもの付け合わせていった結果、とんでもない容量のものが出来上がる上におまえそれメンテとかどうするんだよって方向に走ってって…あとは想像のとおりに
393 名前:デフォルトの名無しさん (ブーイモ MM8b-3sGu) mailto:sage [2024/08/04(日) 19:54:18.08 ID:wSg2UiB1M.net] オブジェクト指向オワコン論からの風潮
394 名前:デフォルトの名無しさん (ワッチョイ 1320-cRFB) mailto:sage [2024/08/04(日) 21:00:47.00 ID:YVKn/U480.net] なんでオワコンなの?
395 名前:デフォルトの名無しさん mailto:sage [2024/08/06(火) 01:29:43.68 ID:DDRjgUjC0.net] 全然関係ないよな 取って貼っ付ける行為とオブジェクト指向は 全体の概要設計を把握してメンテ出来ていれば何の問題もない
396 名前:青木康善 [2024/08/07(水) 04:36:25.01 ID:S6qXQ6lv0.net] 素晴らしいなあみなさん。早すぎる!C plus plusは!
397 名前:デフォルトの名無しさん [2024/08/07(水) 09:54:05.95 ID:+pgWMXtY0.net] JavaはCの20倍速いを知らん人か
398 名前:デフォルトの名無しさん [2024/08/07(水) 17:07:58.21 ID:RPpAsXPKa.net] >>391-392 チェンジニアをチェンジ >>395 オブジェクト指向でもクラスライブラリを造る側とただ使う側では理解度に雲泥の差がある
399 名前:青木康善 [2024/08/08(木) 00:15:58.93 ID:Qfze0mfg0.net] マジっすか?Cの20倍?しかし、専門学校の先生に、青木!バカもん!プログラミング言語Cが一冊で事足りる、と言われても、高校数学でつまづいて大鬱病になったんで、問題が解けない。。。有隣堂本店さんで、リッチーの本置いているから、いつか買います!
400 名前:デフォルトの名無しさん mailto:sage [2024/08/08(木) 04:05:43.03 ID:G3QDAupS0.net] 今のANSI対応版は易しくなってると思うけどな。 不安ならアンサーブックとセットで買えば良いベ
401 名前:デフォルトの名無しさん mailto:sage [2024/08/08(木) 16:07:46.41 ID:fgfi2g+JM.net] VMのオーバーヘッドがあるのに20倍って? あるいは20倍時間が掛かる?
402 名前:青木康善 [2024/08/09(金) 13:02:28.92 ID:FZEpuz0a0.net] いや、プログミング言語は、駿台電子は、国語の倒置法なんです。夜間の一年で、javaからで、二年でCなんです。いや、アンサーブックは、池袋ジュンク堂本店さんには、置いてなかったような。。。。。ありがたいというか、ビックリ。。。。マジか。。。機械語を仕事でプログラミングしていた先生が、喫煙所で、青木、お前、一つのことを本当に深く考えたことがあるか?と質問してくれた恩師なんです。
403 名前:デフォルトの名無しさん [2024/08/10(土) 12:16:45.89 ID:xFKQiXk00.net] スカイネットの誕生日
404 名前:デフォルトの名無しさん [2024/08/10(土) 23:52:09.93 ID:oQf4NdPPd.net] 御巣鷹山ノボレ
405 名前:デフォルトの名無しさん [2024/08/24(土) 08:35:54.88 ID:yYuYqoCz0.net] すみません。教えて下さい。 template<class T, class U>void (T& x, const U& y) { x=y; ... } double ←complex<double> の代入がコンパイルエラーとなるconceptの書き方あるんでしょうか? complex<double> ← doubleの代入ではエラーが出てほしくないです。
406 名前:デフォルトの名無しさん [2024/08/24(土) 09:05:25.59 ID:yYuYqoCz0.net] あ、上では関数名fが抜けてましたね.concept使わずとも template<class T> void f(complex<T>& x, const T& y)とすればいいでしょうけど、 y=xのときはどうかとか、あるいは complex<double>←float の代入はokにしたいとか、 いろいろ考えているとテンプレート関数なのに関数のオーバーロードが増えてしまって面倒だなと思ったものですから。
407 名前:デフォルトの名無しさん (ワッチョイ 7f78-/FHh) [2024/08/24(土) 09:23:02.26 ID:yYuYqoCz0.net] y=xのときは忘れてください。(f(complex<T>& y, const T& x)とすればいいだけ)。どういう状況のためにconceptが必要なのか要点がまとまっていませんね。失礼しました。
408 名前:デフォルトの名無しさん mailto:sage [2024/08/24(土) 09:53:34.49 ID:PPcTgFGr0.net] conceptで無理やりくくるよりか、static_assertのほうが楽そう template<class T, class U>void f(T& x, const U& y) { static_assert(std::is_same<double,T>::value&&std::is_same<complex<T>,U>::value,"絶対にゆるさない!絶対ニダ!!"); x=y; ... }
409 名前:デフォルトの名無しさん [2024/08/24(土) 11:11:32.60 ID:yYuYqoCz0.net] && は右辺値参照ではなくてandの意味なんですね。std::is_same<double,T>はdouble型とT型が一致するかどうかを調べるヘルパー変数テンプレート、::value は trueかfalseのいずれかの値をとる定数ですか。static_assertは自分でエラーメッセージを作れるのがいいですね。完全にわかっていないですが、勉強します。ヒントありがとうございました。
410 名前:デフォルトの名無しさん mailto:sage [2024/08/24(土) 11:44:22.45 ID:6PXbzil00.net] 最近、初心者にいきなり右辺値参照とかテンプレート教える風潮は良くないと思うんだよなぁ・・・論理andとごっちゃになってるやんけ ともあれis_same自体は構造体で、中にあるvalueは定数値やで 変数テンプレートはis_same_vの方。利便性(::value書くのがめんどい)のために用意されてるだけ static_assertの第一引数(bool)に条件式を与えてるんだが、間違ってる static_assert(!(std::is_same<double,T>::value&&std::is_same<complex<T>,U>::value),"絶対にゆるさない!絶対ニダ!!");
411 名前:デフォルトの名無しさん mailto:sage [2024/08/24(土) 12:20:38.61 ID:PPcTgFGr0.net] !抜けてたわ スマソ
412 名前:デフォルトの名無しさん mailto:sage [2024/08/24(土) 12:40:45.95 ID:PPcTgFGr0.net] // こういう書き方もある if const_expr ( std::is_same<double,T>::value && std::is_same<complex<T>,U>::value ) { //許されない処理 static_assert(false,"許さんぞ!!"); }else { //正常処理 }
413 名前:デフォルトの名無しさん mailto:sage [2024/08/24(土) 12:43:11.34 ID:PPcTgFGr0.net] また間違えたw × const_expr ● constexpr
414 名前:デフォルトの名無しさん [2024/08/24(土) 14:40:14.03 ID:yYuYqoCz0.net] いろいろとありがとうございます。参考になりました。 template<class T, class U> void f(T& x, U& y) { if constexpr ( !(std::is_same<T,double>::value && std::is_same<U, std::complex<T>>::value) ) static_assert(false,"ワシャ許さんぞ!!"); y=x; } template <class T, class U> void g(T& x, U& y) { static_assert( (std::is_same<T,double>::value && std::is_same<U, std::complex<T>>::v alue),"ワシャ許さんぞ!!" ); y=x; } int main() { using namespace std; double x=3.14159265358979; complex<double> z; f(x,z); g(z,x); // 順番変えたり、xをfloatにするとエラー cout<<z<<endl; しかし、コンパイル時にifがつかえるんですねえ。凄いな、constexpr
415 名前:デフォルトの名無しさん [2024/08/24(土) 15:09:12.28 ID:yYuYqoCz0.net] std::is_same<T,double>::valueの代わりにstd::same_as<T,double>でも良いみたいですね.
416 名前:デフォルトの名無しさん mailto:sage [2024/08/24(土) 16:42:04.52 ID:6x2BzwZB0.net] #ifdef NDEBUG /*pass*/ #else class dbg_complex { std::complex<double> m_complex; public: // std::complex<double> のメソッドのうち使うやつ同じシグネチャのメソッドを書き並べ、m_complexに移譲 ... private: dbg_complex(doble); // 禁止 }; #define complex dbg_compled #endif ※ 個人の感想です。
417 名前:デフォルトの名無しさん mailto:sage [2024/08/24(土) 16:48:40.66 ID:6x2BzwZB0.net] いちいち移譲せねばならないのはstd::complex<T>の継承が禁止されているためorz 実際デストラクタが十中八九virtualではないし、 >>416 の最後の #define complex dbg_complex みたいな穴だらけの置換手段が嫌ならもうstd::complex<double> を普段からcomplexdbl という別名にすると決めてまう すると #ifdef NDEBUG using complexdbl = std::complex<double>; #else using complexdbl = dbg_complex; #endif で済む
418 名前:デフォルトの名無しさん mailto:sage [2024/08/24(土) 18:35:31.16 ID:BJpt+Mj00.net] >>412 これかなり新しめのコンパイラじゃないと動かないので注意
419 名前:デフォルトの名無しさん mailto:sage [2024/08/24(土) 19:16:42.78 ID:6PXbzil00.net] 行うべき解放処理が無い上ポリモーフィズムも不要なら、別にデストラクタがvirtualである必要は無いぞ このケースで継承すべきかどうかはまた別として
420 名前:デフォルトの名無しさん [2024/08/24(土) 23:53:59.32 ID:4DIR6G6I0.net] >>412 constexpr if が使える (= C++17以上) なら std::is_same<T, U>::value よりも std::is_same_v<T, U> を使う方がシンプルだと思う
421 名前:デフォルトの名無しさん mailto:sage [2024/08/25(日) 00:16:13.89 ID:LfSHCV3h0.net] ま、お好きなの使えいいんじゃないんすか~ こちとら例文示しているだけで極めているワケじゃないからぬ
422 名前:はちみつ餃子 [2024/08/25(日) 01:15:32.96 ID:zZ+WMAII0.net] >>414 テンプレート型引数に require 節などで制約を付けた場合に制約に合致しなければオーバーロード解決候補から除外されるが、 static_assert や if constexpr での判定は解決が終わってテンプレートが実体化されるときに判定される。 つまり、より優先順位の低い候補に当てはめたいかもしれない場合は static_assert や if constexpr での判定をすべきではない。 状況によって使い分けがある。 それと >>418 が注意しているのは、テンプレートはテンプレート引数に依存しない部分は実体化されなくても検証されるルールだから。 (Two phase name lookup について調べてみて。) つまり static_assert(false, ほにゃらら) と書いてあったらそのテンプレートが使われるかどうかに関係なく問答無用でエラーとして報告されていた。 新しい仕様では static_assert は実体化のときまで検証しないように挙動が改められたのだが、これは欠陥報告の形で問題提起されて過去の仕様に遡って修正されるので C++11 からこの仕様だったことになった。 新しいコンパイラでは C++11 を指定したときでも新しい挙動になる。
423 名前:デフォルトの名無しさん [2024/08/25(日) 01:34:45.73 ID:GxcwnqZY0.net] まあ、そんな小難しいこと言われても。C++が嫌われる理由だわ
424 名前:デフォルトの名無しさん mailto:sage [2024/08/25(日) 02:05:31.18 ID:LfSHCV3h0.net] 実体化ってどっちみちコンパイルするときにエラー発生するんだから結果かわらねぇだろバカがよう
425 名前:デフォルトの名無しさん mailto:sage [2024/08/25(日) 06:41:14.01 ID:n8ainESh0.net] static_assert(false, "")は何かしらダミーの値入れて回避してたけど修正されてたんだ、知らんかった
426 名前:デフォルトの名無しさん mailto:sage [2024/08/26(月) 00:27:52.82 ID:JWWBXqLI0.net] false効かないバカコンパイラはどうしようもないからどうにもならんか //requires を使った方法 template<class T, class U> requires(!(std::is_same_v<double,T>&&std::is_same_v<complex<T>,U>)) void f(T& x, const U& y) { x=y; ... }
427 名前:デフォルトの名無しさん (ワッチョイ 2963-G6Q9) mailto:sage [2024/08/27(火) 07:16:06.25 ID:NdPbjHCm0.net] 特定の引数型についてテンプレート展開を阻止したいんなら 特殊化してその中にstatic_assert(false, "*** ERR ***")書いても昔は駄目だったんか恐ろしい……
428 名前:デフォルトの名無しさん mailto:sage [2024/08/27(火) 07:35:09.57 ID:NdPbjHCm0.net] しかしまあ特殊化してテンプレート引数の型Tについて 態と存在しないメソッドを呼ぶように書いたらその特殊化ケースについて展開を阻止できうる(適当 クラス内でint型定数が欲しかったら古き良き enum { ONE, TWO, THREE } で十分やし 同じことをやる手段を増やせば良いってもんじゃないぞPerlじゃあるまいし……
429 名前:デフォルトの名無しさん [2024/08/27(火) 14:55:30.59 ID:oHcafaf7a.net] perlの面白仕様
430 名前:デフォルトの名無しさん mailto:sage [2024/08/27(火) 17:14:33.06 ID:K2iTXH930.net] まぁ普通にSFINAEなり=delete指定なりコンセプトなりでオーバーロード候補から外す方が利用者視点でいえば自然だな
431 名前:デフォルトの名無しさん [2024/08/27(火) 17:33:30.75 ID:K7dNHCWQ0.net] #include <iostream> #include <complex> template <class T> decltype(auto) f(T x) { decltype(abs(std::declval<T>())) w; w=abs(x); return w; } int main() { using namespace std; cout<<f(-1) << endl; cout<<f(2.f)<< endl; complex<double> z=complex<double>(1.0,1.0); cout<<f(z)<<endl; cin.get(); return 0; } いちかばちかでやったら、通りました。abs! Who are you? sizeof演算子と同じくコンパイル時に評価されるんですか? というか、地味だけど declval が凄い。
432 名前:はちみつ餃子 mailto:sage [2024/08/27(火) 18:27:19.33 ID:WfqXHPCU0.net] >>431 sizeof や decltype のオペランドは評価されないということになってる。 だからその文脈で関数を使う場合でもその関数が定義されている必要はない。 (宣言だけあればよい。) 評価されないけど実体化は起こるのでそのへんの理屈は複雑でよくわからん。
433 名前: mailto:sage [2024/08/30(金) 02:40:03.60 ID:qLymVnYK0.net] decval使ったコード始めてみたかも
434 名前:デフォルトの名無しさん mailto:sage [2024/08/30(金) 05:15:18.21 ID:ZIPlhev80.net] 相互参照わっかんねぇ
435 名前:デフォルトの名無しさん [2024/09/02(月) 12:36:59.33 ID:bqeYsc0k0.net] 相互参照は必要ない 最近はウェブプログラマのほうが賢くなった すそ野が広がると質が良くなるらしい
436 名前:デフォルトの名無しさん mailto:sage [2024/09/02(月) 13:00:06.45 ID:Rco2Fp/20.net] 必要ない理由ぐらい言ったら?
437 名前:はちみつ餃子 mailto:sage [2024/09/02(月) 14:42:22.37 ID:o+5p2SR60.net] プログラムの文法要素が相互参照になっている状況という意味? たとえば前方宣言が必要な場合とか。 それとも (実行時の) データ構造が相互参照ということ? たとえば循環構造の後始末のやり方がわからんとか。
438 名前:デフォルトの名無しさん (ワッチョイ 0701-+rOo) mailto:sage [2024/09/02(月) 19:52:42.06 ID:cn5uZ01w0.net] >>435 その「相互参照」って何?
439 名前:デフォルトの名無しさん [2024/09/05(木) 00:06:16.92 ID:/oUqYYg3a.net] 相互参照も自己参照も一緒 自己参照なんて参照してるのは自己ではない ホントの意味での自己参照は循環参照
440 名前:デフォルトの名無しさん [2024/09/05(木) 18:17:57.29 ID:xTcyjaky0.net] shared_ptrを使いたくなったら設計を見直すべき
441 名前:デフォルトの名無しさん mailto:sage [2024/09/06(金) 07:27:10.33 ID:Qb4sTpDj0.net] >>440 それは無理があるんじゃないのかね。 データ共有とかインターフェイス共有とか本質的に所有者が複数存在するオブジェクトはsharedptr使うべきかと。 設計ではモジュール間の疎結合・インターフェイスの汎用化を重視すべきで、そのためにはデータの共有方法が重要になる。
442 名前:デフォルトの名無しさん mailto:sage [2024/09/06(金) 11:54:45.03 ID:onD85wsiM.net] >>440 マルチスレッドセーフ考えたら使わざるを得ない場合は多々ある 言ってる意味がわからないならお前は経験不足
443 名前:デフォルトの名無しさん [2024/09/06(金) 22:35:55.77 ID:0hxwMUxG0.net] recurcive_mutexが欲しくなったら設計を見直したい、なら分かる気もする
444 名前:デフォルトの名無しさん mailto:sage [2024/09/07(土) 11:45:08.02 ID:Zy1zUumM0.net] C++11あたりから「生ポは使うな」みたいな極論で分かった気になってる思い上がった初心者が増えたからなぁ
445 名前:デフォルトの名無しさん mailto:sage [2024/09/07(土) 11:58:09.00 ID:UFsx2JaR0.net] >>444 生ポ使うよりかスマートポインタの参照を使った方がマシだったりするからなぁ。スマートポインタがスタックフレームにあるなら安全だし。 スタック変数専用仮引数とかあればもっと安全になるのになぁ。 仮引数の種類はもっとあっていいと思う。
446 名前:デフォルトの名無しさん mailto:sage [2024/09/07(土) 16:26:14.57 ID:lSV8lU690.net] >>445 考え方にもよるだろうけど、確保も解放も所有もしない関数でスマポ受け取る必要あるか? 特定の用途で管理されている特定のポインタしか許容しない、という意図ならスマポの参照でもいいだろうけど、汎用性は無いよね 生ポ受け取る場合暗黙のキャストも効かないし
447 名前:デフォルトの名無しさん mailto:sage [2024/09/07(土) 20:17:38.39 ID:Ci+xhqlU0.net] >>442 むしろshared_ptr<T>でスレッド間共有オブジェクトを保持するのは 生ポに対するshared_ptr<T>のメリットが無い…… 可能な限りスレッド間共有なんてことはやめてconstオブジェクトのコピーにするのが正義…… >>439 自己参照ではないが前方宣言が必須の例、 class TreeNode; class TreeNode { std::shared_ptr<TreeNode> m_pLeft; std::shared_ptr<TreeNode> m_pRight; public: TreeNode(); ... };
448 名前:デフォルトの名無しさん mailto:sage [2024/09/07(土) 20:21:44.33 ID:Ci+xhqlU0.net] んまー前方宣言が必須というのは言い杉やったかもしれんorz TreeNodeみたいなクラスはノード毎にヒープを確保するなんてことはやめて専用のアロケーターを設けて 専用の領域をまとめて確保して、 木全体がいらなくなったら木をトラバースすることなく一気に解放するのが本当やが その場合m_pLeftやm_pRightにあたるのはポインタではなくて専用の領域(配列)のindexとかにすれば 前方宣言は不要、
449 名前:デフォルトの名無しさん mailto:sage [2024/09/07(土) 21:38:34.24 ID:lSV8lU690.net] >>442 使わざるを得ないは言い過ぎじゃね 同期取るのにshared_ptrのアトミック保証に依存するしか方法が無いの? 競技プログラマか何かか?
450 名前:デフォルトの名無しさん mailto:sage [2024/09/08(日) 00:33:39.65 ID:vgBqrjWA0.net] shared_ptrの内部的な参照カウンタとかはともかく 保持しているオブジェクト自体はアトミックでもなんでもないでしょ ってなんか勘違いしてる?
451 名前:デフォルトの名無しさん mailto:sage [2024/09/08(日) 01:27:17.93 ID:6Lpw1aoe0.net] 持ってるポインタの指す先のオブジェクトがアトミックになるとか言ってると思ってんの?アホかw
452 名前:デフォルトの名無しさん mailto:sage [2024/09/08(日) 01:32:50.82 ID:TMvzCbR60.net] そこでRustですよ!
453 名前:デフォルトの名無しさん [2024/09/08(日) 12:52:42.06 ID:Lw7YNDXG0.net] でたw 布教マソw
454 名前:デフォルトの名無しさん mailto:sage [2024/09/10(火) 11:29:59.05 ID:v6KS9t6sM.net] >>447 お前の理解はshared_ptrの一面だけだな ようするにunique_ptrの延長でしか見てない shared_ptrがどうしても欲しくなるのは オブジェクトのリリースタイミングが非決定的であるとき これは一般的にマルチスレッド環境 お前のTreeNodeの例はそれこそ生ポで実装しても対して苦労しないが 例えば動的可変multi producerなqueueの場合確実に安全なqueueの解放タイミングを知るにはリファレンスカウントのような制御が必要となる 当然この場合コピーすれば安全なんて寝ぼけたことにはならない
455 名前:デフォルトの名無しさん [2024/09/10(火) 13:20:49.36 ID:KGjTz1X0a.net] x 対して
456 名前:デフォルトの名無しさん mailto:sage [2024/09/10(火) 15:36:50.97 ID:+l9ylb2n0.net] それで自己参照ってのは結局何のことを指して言っていたんだい
457 名前:デフォルトの名無しさん mailto:sage [2024/09/10(火) 15:39:03.70 ID:+l9ylb2n0.net] あ、相互参照が先か >>435 >>436 の言うところの
458 名前:デフォルトの名無しさん [2024/09/11(水) 12:14:54.12 ID:n6/LwjNL0.net] (*this) ↑ 自己参照
459 名前:デフォルトの名無しさん [2024/09/11(水) 12:19:01.05 ID:n6/LwjNL0.net] 木のノードはstd::vector<>で確保する と言われて、だよねってなる人はnewもほとんど必要ない
460 名前:デフォルトの名無しさん [2024/09/11(水) 12:22:29.60 ID:n6/LwjNL0.net] 木の巡回は、巡回方向別にアダプタとしてイテレータを用意することが出来る 良くある行きがかり順のイテレータはスタックを使って作る
461 名前:デフォルトの名無しさん mailto:sage [2024/09/11(水) 15:12:04.16 ID:1n/VD1trM.net] でvectorの拡張で破綻すんだろ?
462 名前:デフォルトの名無しさん [2024/09/13(金) 16:29:50.66 ID:bblj+c3pa.net] move禁止
463 名前:デフォルトの名無しさん mailto:sage [2024/09/13(金) 19:59:43.80 ID:2C9M8qgO0.net] move禁止したらvector使えないし
464 名前:デフォルトの名無しさん mailto:sage [2024/09/17(火) 12:59:42.12 ID:TMGdiCOOa.net] それならオブジェクトを保持するためのオブジェクトと moveためだけのインデックスを分けるかな
465 名前:デフォルトの名無しさん mailto:sage [2024/09/17(火) 16:24:30.60 ID:DN+X/Cyr0.net] 何がしたい あほでしょ
466 名前:447 mailto:sage [2024/09/21(土) 20:05:42.93 ID:FUSKAHoo0.net] 何やら集中砲火を浴びている>>442 やが マルチスレッド状況でshared_ptr<T>を超有効活用できる手が一つあったわ;;; スレッド間の共有オブジェクトをポインタpで保持する際の問題点は、 そのポインタを知っている複数スレッドの間でpが指すオブジェクト*pへのアクセスを悉く排他制御せなばならない点やが 逆にpを知っているスレッドが任意の時刻につき1つだけなら、オブジェクトのアクセスに対して排他の必要が無い それでいてスレッドへのデータの受け渡しに関してコピーの手間は減らせる 例: なんちゃらWorkerスレッドオブジェクトをshared_ptr<Worker>のキューで保持しておく スレッドfooが使うときWorker1をshared_ptr<Worker>としてpopする(←これは排他が要る スレッドbarが使うときWorker2をshared_ptr<Worker>としてpopする(←これは排他が要る ... (スレッドfooやbarはWorker1、2をそれぞれ独占的に使用できる) ←重要 ... スレッドfooが使い終わったWorker1をキューにpushする(←これは排他が要る スレッドbarが使い終わったWorker2をキューにpushする(←これは排他が要る
467 名前:447 mailto:sage [2024/09/21(土) 20:13:25.63 ID:FUSKAHoo0.net] ていうか2週間ぐらい前から作っていたやつが今さっき完動すた、
468 名前:デフォルトの名無しさん mailto:sage [2024/09/21(土) 20:35:47.52 ID:FUSKAHoo0.net] std::vector<TreeNode> nodes; ならnodesを拡張したとき破綻するかもしれんが(nodeをnodesのindexで管理するならその限りではない std::vector<std::shared_ptr<TreeNode> > apNodes; ならapNodesを拡張しても破綻しないYO!(要素の実アドレスは保たれる
469 名前:デフォルトの名無しさん mailto:sage [2024/09/22(日) 08:21:05.99 ID:e5FZYjui0.net] それ何のためのshared_ptrなの?unique_ptrでいいというか横からコピーされないようにそうすべきでは
470 名前:デフォルトの名無しさん mailto:sage [2024/09/25(水) 13:57:54.93 ID:N5yN4IuU0.net] >>466 >>442 を書いたのおれだけど、なんでおれが集中砲火浴びてることになってんだよ 生ポとか意味不明なこといってる>>447 は一見してわかるクソレスだろ おまえはそれ以上のクソレスにクソコード でもお前の勝ちだ クソコードに2週間かけた情熱に免じて親切におしえてやるわ shared_ptrはpに誰かがアクセスしている可能性がある間は決してdeleteされないことを保証できるのが肝 (pの先の排他ではこれは実現できない) もちろんこれも正しく使わないと保証できない よくあるミスは知ったかぶって参照カウントを操作しないようにshared_ptrを参照渡しとかにするやつな その間に絶対deleteされない保証がないならやってはいけない
471 名前:デフォルトの名無しさん mailto:sage [2024/09/26(木) 03:21:09.01 ID:5BtHXQaO0.net] あーなるほど、一貫してshared_ptrの実体を渡してればそういう保証も出来るのか 自分の場合自前で排他処理や生存保証作ってたけど確かに大きなメリットだね (オブジェクト内部の排他は別に必要だとしても)
472 名前:デフォルトの名無しさん [2024/09/26(木) 10:52:52.31 ID:R5lWYvWFa.net] そんなあなたにRust
473 名前:デフォルトの名無しさん mailto:sage [2024/09/26(木) 11:26:35.22 ID:r0pzUHiv0.net] >>472 c++コードと混在できるようになってからの話だな。 既存c++を捨てなきゃならんのなら要らん。
474 名前:デフォルトの名無しさん [2024/09/26(木) 11:37:49.48 ID:R5lWYvWFa.net] もちろんRustをやるにはC++を捨てる覚悟が必要 C++コード(特にテンプレやclass)とは相性最悪
475 名前:デフォルトの名無しさん [2024/09/26(木) 11:38:22.04 ID:R5lWYvWFa.net] >c++コードと混在できるようになって Rustについて言うなら おそらくそんな未来は永久に来ない
476 名前:デフォルトの名無しさん [2024/09/26(木) 11:39:08.38 ID:R5lWYvWFa.net] 誤解の無いように言っておくと (一部機能に限れば今でも混在出来るけど) 基本的にはC++とは相いれない
477 名前:デフォルトの名無しさん mailto:sage [2024/09/26(木) 18:22:32.63 ID:sl+cfKHN0.net] ならc++にRustの機能が取り込まれるのを待つ。 Rustが大人気になったら、さすがに標準委員の連中も初心者・コーダー向けの"Safe c++"をやる気になるだろ。
478 名前:はちみつ餃子 mailto:sage [2024/09/26(木) 18:52:53.17 ID:B+Au+yIB0.net] >>477 もう Rust を使えばよくない……?
479 名前:デフォルトの名無しさん mailto:sage [2024/09/26(木) 19:43:24.82 ID:sl+cfKHN0.net] >>478 >>473 だっつうの。 Kotlinみたいなのが欲しいのであって、Clojureみたいなのは要らん。
480 名前:はちみつ餃子 mailto:sage [2024/09/26(木) 20:25:47.69 ID:B+Au+yIB0.net] >>165 C++ のコードを Rust から呼び出したりするくらいのことは簡単に出来るよ。 たぶん (Java に対する) Kotlin みたいなこととして思い浮かべているようなことは出来る。 Rust がやってるような安全性の保障を自動では受けられない。 当然だが安全ではない (安全性が検証されていない) C++ のコードが Rust から呼び出すことで安全になったりはしない。 大抵の場合に Rust の都合に合わせてラッパーを書くことになる。
481 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 10:23:27.00 ID:n6BA5joS0.net] >>480 KotlinとJavaみたいにソースコードを混在できるレベルの相互運用性てあったっけ? Rustとc++では無理だと思うけど。
482 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 10:44:00.51 ID:02Aq/BhWM.net] cxxとかあるけど個人的には中途半端だから使わない 普通に共有ライブラリにして呼び出す方が素直で汎用的で良い
483 名前:デフォルトの名無しさん [2024/09/27(金) 12:33:43.81 ID:6/1p1gGO0.net] スマートポインターを使うように強制できる機能とかなら必要ないなあ
484 名前:デフォルトの名無しさん [2024/09/27(金) 16:51:52.33 ID:pgg/4VuRa.net] >>473 のような未来は永遠に来ない
485 名前:デフォルトの名無しさん [2024/09/27(金) 16:54:13.57 ID:pgg/4VuRa.net] >>482 結局Cが正解なんよ C++のスレで言うのもなんだけど
486 名前:デフォルトの名無しさん [2024/09/27(金) 16:54:31.95 ID:pgg/4VuRa.net] >>481 同意
487 名前:デフォルトの名無しさん [2024/09/27(金) 16:54:58.40 ID:pgg/4VuRa.net] >>480 嘘つくな 出鱈目言うな
488 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 17:14:28.28 ID:n6BA5joS0.net] >>483 コーダー向けので考えるなら、スマポ強制は最優先だろ。 生ポインタを(コーダーが)保存できなくするだけでも随分安全になる。あと生ポインタdelete禁止とか。
489 名前:デフォルトの名無しさん (ワッチョイ 728c-rNKn) mailto:sage [2024/09/27(金) 18:24:18.27 ID:dg7IL8lg0.net] 極限のパフォーマンスは別に要らないから安全にしたいという要件なら GC が既に解決しているし 今更生ポインタを禁止したところで C# や Java と同じ方向性のナニカにしかならんじゃろ
490 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 18:46:28.46 ID:EoeiRCVP0.net] gcがあったらメモリリークしないなんて幻想未だに信じてるとはね
491 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 18:59:34.32 ID:RwmUzOsi0.net] リークの話なの?
492 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 19:07:06.62 ID:n6BA5joS0.net] >>489 ライブラリとかフレームワークを使う側のコーダーと作る側のライブラリアンは性能要件が全然別。 コーダーに対してライブラリアンが「コーダーのコードに極限のパフォーマンスは別に要らないから安全に「させたい」」というのはあるだろ。
493 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 23:12:04.55 ID:cfj6fT7K0.net] >>492 それならライブラリ側でメモリ周りを隠蔽するような作り方も出来ると思うけど ユーザー(コーダー)にはインスタンス使わせるけど内部では参照カウントなりスマポなり使ってるみたいな それですら問題が起きるようならユーザーがクソ
494 名前:デフォルトの名無しさん mailto:sage [2024/09/28(土) 10:42:06.28 ID:swed/tX60.net] C++はどんな安全策敷いてもユーザー側がその気になればいくらでもぶち壊せるからね ライブラリがあんまりそこ頑張っても仕方ない
495 名前:デフォルトの名無しさん (アウアウエー Saaa-rNKn) [2024/09/28(土) 12:39:39.83 ID:gf2/NL3ha.net] Rustなら壊れないみたいな言い草だな
496 名前:デフォルトの名無しさん (ワッチョイ 77ba-vp5J) [2024/09/28(土) 13:06:22.71 ID:ZP4SxDa50.net] C++で書かれたChrome V8エンジンをRustから扱えるRusty V8というライブラリがリリースされたというニュースを見た メモリ安全性を確保して呼び出しオーバーヘッドもゼロなんだって ほんとかな? ただのラッパーじゃないの? C++側でメモリアクセス違反があれば落ちそうだけど
497 名前:デフォルトの名無しさん mailto:sage [2024/09/28(土) 14:26:57.72 ID:yW35cSECM.net] その手の話はMICROSOFTの新機能ぐらいい思っておけば 腹も立たない
498 名前:はちみつ餃子 mailto:sage [2024/09/30(月) 22:26:30.09 ID:JxqgGnHQ0.net] >>496 Rust の標準ライブラリだって内部は unsafe だらけだぞ。 unsafe は Rust のメモリ安全性検査の例外とする指定で、検査はされないが安全であることはプログラマが保証しないといけない。 ただ、 unsafe な部分を慎重に押し込めて (押し込めるのが正しく出来ていれば) あとは Rust のメモリ安全性検査に頼ることが出来る。 ずっと気を付けなきゃならない C++ よりは面倒ごとを基盤に押し込めたら後は機械が検査してくれるほうがマシという程度の話。 押し込めた中に問題があればそりゃ当然駄目だよ。
499 名前:デフォルトの名無しさん mailto:sage [2024/10/01(火) 02:05:59.60 ID:J7GPtKrz0.net] V8エンジンてCVE脆弱性で毎月アップデートの口実にされる迷惑なやつだからさっさとRustで書き直せよ
500 名前:デフォルトの名無しさん [2024/10/01(火) 15:19:57.32 ID:KXGxeTHwM.net] >>498 >押し込めた中に問題があればそりゃ当然駄目だよ。 当然分かっているだろうが、unsafeの中だけでなく、 それが外側に及ぼす影響にも問題が生じないように作らなければなら ないが、それにはunsafeとRustの両方に対する深い理解が 必要となるだろうな。
501 名前:デフォルトの名無しさん mailto:sage [2024/10/01(火) 18:36:21.46 ID:al1nAqGBM.net] >>500 unsafeの中を通過する時には問題ないが、 戻り値などや、連携する他のメソッドなどが 関係した結果、どこかで分かりにくいメモリーエラー になるようなことも避ける必要が有るが、 それにはかなりRustの内部構造(?)に対する深い知識 と理解が必要となりそうだ。
502 名前:デフォルトの名無しさん (ワッチョイ 1fb1-/QnX) mailto:sage [2024/10/17(木) 11:01:19.65 ID:P7X9/HPx0.net] >>422 これ、static_assertだけ修正してもしょうがない気がするんだけどなぁ 他にも実体化しないはずの分岐でチェックされてエラーにされることあるし まぁ条件式に無理矢理テンプレート入れて回避は出来るけど
503 名前:デフォルトの名無しさん mailto:sage [2024/10/19(土) 17:30:35.94 ID:vb3IsOJN0.net] >>491 Rustのオブジェクトの所有権管理の強制はコンパイラに従う限りリークしない (病的な反例があるかどうかは知らん からリークの話ではないが、GC付き言語で解決という香具師が現れたから
504 名前:デフォルトの名無しさん mailto:sage [2024/10/19(土) 17:31:10.99 ID:vb3IsOJN0.net] >>490 な発言になったんじゃないの 知らんけど
505 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 07:19:50.64 ID:ThoL8xQh0.net] >>503 RustはRcの循環参照解決できたの? 公式ソースある?
506 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 14:54:46.51 ID:WHCxApN50.net] C++派だが、Rustをもってしても、相互参照みたいなものは、人類には早いらしい (設計段階で)無理しないこったな。。
507 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 15:57:11.21 ID:Hhc6wfX80.net] そもそも静的解析で解決できる問題か?
508 名前:はちみつ餃子 mailto:sage [2024/10/21(月) 16:03:29.88 ID:6JU3cZPt0.net] 循環参照をしたいときに出来ないのも困るしな。 なるべくやらないに越したことはないが、やるなら後始末は人が考えないと仕方ないわ。
509 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 22:48:14.20 ID:XvJERuqr0.net] 食事する哲学者の問題…… Rustだと循環参照するコードを書きにくくなっているから 循環参照によるリークとか病的な反例のうちなんじゃないの 知らんけど ノードNode同士が論理的には循環参照し得るんだけど その所有権をスーパーバイザ的な配列superArray: Node[]が持っていて、
510 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 22:53:33.76 ID:XvJERuqr0.net] Node間の参照はsuperArrayのindexで済ませるというのもRustではすんなり通してくれな いんだっけどうだっけ…… Node& node1 = superArray[0]; Node& node2 = superArray[1]; node1.next = 1; superArray[node1.next].value = 123; // node2.valueに書く node1.nextがsuperArray[]の添え字範囲内であることを機械的に保証するためにRustはどんな魔法を使ってくれる のか
511 名前:はちみつ餃子 mailto:sage [2024/10/22(火) 11:28:00.82 ID:UXnTPhGj0.net] >>510 Rust では実行時にチェックされて範囲から外れていたら panic (C/C++ で言うところの abort みたいなもの) する。 https://doc.rust-lang.org/std/ops/trait.Index.html#tymethod.index C/C++ のように配列がポインタになるということはなく、スライス (C++ で言うところの span みたいなもの) が基本型として組み込まれているので範囲チェック出来る。 コンパイル時に範囲内であることがわかる状況なら最適化で消えることもあるみたいだけど 実行時に外部から入ってくる値に依存することもあるので実行時にチェックしないとどうしようもない。
512 名前:デフォルトの名無しさん mailto:sage [2024/10/28(月) 13:44:32.71 ID:A9ortPvu0.net] enum、 文字列への変換、 大変すぎて、ビックリした
513 名前:デフォルトの名無しさん mailto:sage [2024/10/28(月) 14:06:10.17 ID:/lht/Ba/0.net] 俺はenumの機能を拡張するクラスを自分で定義してるな それで文字列変換も文字列からの変換も出来る
514 名前:デフォルトの名無しさん mailto:sage [2024/10/28(月) 15:41:01.09 ID:xcgYWtNU0.net] autogenerated.txt.c みたいなの使うのも手だぞ 急がば回れ そしてCよりはうまく書ける
515 名前:デフォルトの名無しさん mailto:sage [2024/10/29(火) 08:22:28.04 ID:XRXAB2XQ0.net] >>514 うーん、どんなもの?それ
516 名前:デフォルトの名無しさん mailto:sage [2024/10/29(火) 13:58:12.41 ID:WYOK+g300.net] 好きなように書いて、好きなように変換して、途中でincludeする 簡単に書くもよし、ガッチガチにチェックするもよし
517 名前:デフォルトの名無しさん mailto:sage [2024/10/30(水) 23:11:10.17 ID:x0G86HEF0.net] HAGE(CAUWA1) HAGE(CAUWA2) HAGE(CAUWA3) : みたいなテキスト作っといて 手コキストを#includeする手前でHAGEの意味を変えてやるとうまいこと一元化できる
518 名前: mailto:sage [2024/10/31(木) 00:43:29.18 ID:ET2RcGMR0.net] カウワ?
519 名前:デフォルトの名無しさん mailto:sage [2024/10/31(木) 01:08:33.55 ID:gisW4Gdb0.net] magic_enum教えてやれや じじいは感度低いから知らんか
520 名前:デフォルトの名無しさん mailto:sage [2024/10/31(木) 05:43:35.79 ID:J4xtBqBy0.net] みてきた それが人気の実装か やりたいこと次第だが、オーバスペック感はある ちょうどほしかったんなら止めないけどね
521 名前:デフォルトの名無しさん mailto:sage [2024/10/31(木) 10:56:16.92 ID:++2hP8JV0.net] 横からなるほどー! __PRETTY_FUNCTION__ / __FUNCSIG__
522 名前:デフォルトの名無しさん mailto:sage [2024/10/31(木) 15:32:14.58 ID:IcW65SaY0.net] あのー、アメリカグーグルで、検索すれば、良いのがでてきた 日本は、でてこない これは、やっぱり、レベルなんだろうね
523 名前:デフォルトの名無しさん [2024/11/01(金) 19:53:27.66 ID:TgBKHsuNa.net] >>518 あさひ奈央
524 名前:デフォルトの名無しさん mailto:sage [2024/11/02(土) 09:17:27.71 ID:KpOoS8wa0.net] >>522 アメリカグーグルって言い方からして頭悪そう
525 名前:デフォルトの名無しさん (ワッチョイ 5910-fVPo) mailto:sage [2024/11/05(火) 08:04:39.53 ID://VVBUiD0.net] magic_enumは個数制限がきついんだよな・・256くらいが限度じゃなかったっけ
526 名前:青木康善 mailto:sage [2024/11/06(水) 17:05:23.05 ID:vfgxFq1Ya.net] c plus plusとjava、電子音楽作成にどっちが向いてるかな?早いのは無論c plus plusだろうけど。
527 名前:デフォルトの名無しさん mailto:sage [2024/11/06(水) 17:09:08.31 ID:jrSvpMvx0.net] 作成というが、記述したいのか、波形合成したいのか、はたまた生成(AI等)したいのか。。
528 名前:デフォルトの名無しさん mailto:sage [2024/11/06(水) 17:14:36.09 ID:P7rcAaD30.net] なんでjava?
529 名前:デフォルトの名無しさん mailto:sage [2024/11/06(水) 20:06:37.45 ID:TrFjb6KE0.net] >>526 C++ね 記号の入れ方知らないのかな
530 名前:青木康善 mailto:sage [2024/11/06(水) 20:56:51.96 ID:XG1hV+N8a.net] C soundというのはかつてありましたが。javaでやろうかな。C++は自分にはハードル高すぎます。
531 名前:はちみつ餃子 mailto:sage [2024/11/06(水) 21:37:08.81 ID:O6Mhx+Gj0.net] 相談スレなんだから相談しなさいよ。 独り言を書きたいなら X で。
532 名前:デフォルトの名無しさん mailto:sage [2024/11/06(水) 22:48:47.88 ID:tlKINjNQr.net] 5ちゃん初めてなんでしょ。浮いてるのはほっとこう、じきに慣れてくれる コンパイラがCらしいね。でもjavaからも操作できる実績があるって こういうときは、「やってみて脳汁が出そうなほう」でいいとおもう 結局モチベなんで
533 名前:はちみつ餃子 mailto:sage [2024/11/07(木) 03:05:44.48 ID:LEgJ6Wm00.net] Csound は公式に Python や Java 用のラッパーは用意してるみたいだから得意なのでやればよさそう。 ところで固有名詞は正確に表記してくれないと探しにくいやで。
534 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 17:26:41.87 ID:k0cYSKPq0.net] g++とclang++が混ざった環境なのですが、g++でコンパイルしたバイナリはstd::stringとか 名前に__cx11というプレフィックスが付き、一方clang++の方は__1というものが付くようです とりあえず、clang++の方で__cx11が付くようなバイナリを生成するにはどうしたら いいでしょうか?
535 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 17:28:48.87 ID:k0cYSKPq0.net] すみません、__cx11じゃなくて__cxx11でした
536 名前:はちみつ餃子 mailto:sage [2024/11/08(金) 17:41:34.61 ID:Me1tPYCI0.net] 名前だけ合わせても具体的な実装方法が違えばどうせクラッシュするから意図的にマングルルールを違えている。 https://gcc.gnu.org/onlinedocs/gcc/Interoperation.html#Interoperation
537 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 17:52:36.03 ID:k0cYSKPq0.net] >>536 なるほど、要は「C++コンパイラ、混ぜるな危険」ということでしょうか?
538 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 18:12:15.75 ID:6Qfff3nN0.net] 例外とか互換性があるんかいな?
539 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 18:14:37.25 ID:6Qfff3nN0.net] C++コンパイラでコンパイルするにしても ソースコードをCの範囲に留めて 関数プロトタイプを extern "C" すれば大丈夫だよ
540 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 18:18:53.42 ID:k0cYSKPq0.net] >>539 なるほど、例えばこんな感じなら大丈夫なんですかね? g++でコンパイルされたバイナリのグループAとclang++でコンパイルされたバイナリの グループBがあったとき、AからB(またはその逆)を呼ぶときは必ずCリンケージの関数 経由にする、とか....
541 名前:はちみつ餃子 mailto:sage [2024/11/08(金) 18:25:46.25 ID:Evz7xgHe0.net] >>540 OK。 C インターフェイスの範囲ではどちらも同じ ABI (Application Binary Interface) に従ってるはず。
542 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 18:35:59.90 ID:k0cYSKPq0.net] >>541 なるほど 皆さんどうもありがとうございます
543 名前:デフォルトの名無しさん mailto:sage [2024/11/09(土) 19:08:22.86 ID:djyKk80a0.net] 昔std::vector<T>とかstd::stringを前のコンパイラでビルドしたDLLに渡したら以下略 やっぱコンパイラを混ぜるときはextern "C" な関数にプリミティブな型のみを渡すインターフェース設計にするパティーンが安牌 文字列とか渡したかったらあくまでchar[]にすべき……
544 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 16:10:22.46 ID:ck6aMoNGM.net] >>536 この場合は別々に標準ライブラリがリンクされる、つまり2つ動くのかな?
545 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 17:48:03.99 ID:cLh8//6O0.net] 単にリンクするだけではどっちかのライブラリのスタートアップしか呼ばれないから 呼ばれてない方のライブラリの初期化がされなくてまともに動作しない問題が残ると思う
546 名前:はちみつ餃子 mailto:sage [2024/11/10(日) 18:18:05.60 ID:R/A45v0+0.net] 仮にどうにか辻褄合わせが出来てちゃんと動いたとしても将来の開発環境・実行環境でどうなるか予想しづらいというのもある。
547 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 18:55:50.75 ID:g8WH2rn90.net] こういう感じの実装を見かけたんだけど、ptrって解放済みの領域を指してないよね? int *ptr = NULL; std::map<char, int> m; m.insert(std::make_pair('a', 30)); { std::map<char, int>::iterator itr = m.find('a'); if (itr != m.end()) ptr = &(itr->second); // ここでitrは解放される } if (ptr) printf("*ptr = %d\n", *ptr); // 大丈夫?
548 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-bar5) mailto:sage [2024/11/10(日) 19:59:53.20 ID:a6nPaG4v0.net] >>547 itr が指してる先は m の一部なのでまだ生きてる。 問題ない。
549 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 20:31:11.60 ID:g8WH2rn90.net] >>548 あざっす!なるほど、よかった〜
550 名前:デフォルトの名無しさん mailto:sage [2024/11/11(月) 00:36:44.76 ID:6qsu0cnY0.net] >>545 ヤヴァイやん>>539 しても全然OKじゃないやん……
551 名前:デフォルトの名無しさん mailto:sage [2024/11/11(月) 00:38:49.39 ID:6qsu0cnY0.net] ただしウィンドーズのDLLの呼び出し場合は>>539 に従っていれば問題無いはず…… ランタイムの初期化エントリはDLL毎に_DllMainCRTStartup が用意されてDLL初期化時に呼ばれる
552 名前:デフォルトの名無しさん (ワッチョイ 759b-NX7e) mailto:sage [2024/11/11(月) 16:46:00.51 ID:XlNa4SSE0.net] https://www.openwork.jp/company.php?m_id=a0910000000FrzY
553 名前:青木康善 mailto:sage [2024/11/12(火) 22:22:32.82 ID:svwbS+Oga.net] 独習C++を図書館で借りました。よく、こんな、難しく、エグい言語が出来ますねみなさん。
554 名前:デフォルトの名無しさん (ワッチョイ 1d1f-hYHe) mailto:sage [2024/11/12(火) 22:26:44.98 ID:r67kfyB40.net] 他に選択肢がなかったんや😭 あと最近はobjective-cとかいう悪魔合体に比べたらなんでもマシな言語に思えてきてる
555 名前:デフォルトの名無しさん mailto:sage [2024/11/13(水) 01:53:29.63 ID:CoujH3FQ0.net] Objective-C++もよろしく
556 名前:はちみつ餃子 mailto:sage [2024/11/13(水) 02:14:12.02 ID:Gj2zjD3b0.net] >>553 汚いが、必要なものはある。 綺麗に整理されてても必要なものがないよりは良い。
557 名前:デフォルトの名無しさん mailto:sage [2024/11/13(水) 03:47:19.43 ID:rKuXlBFV0.net] そーだそーだ C++は難しいからObject Pascalやろうぜ!
558 名前:デフォルトの名無しさん [2024/11/14(木) 07:49:57.71 ID:z8CYzrjO0.net] C++女学院の人々ってまだ読める所ある? 大好きだったんだけど。
559 名前:デフォルトの名無しさん (ワッチョイ a501-3n/g) mailto:sage [2024/11/14(木) 12:23:07.88 ID:DkukOutW0.net] >>554 C++と悪魔合体してObjective-C++とかなってるけど自分は実用的に感じた 全部それで書こうとは思わんけど、C++との共存のレベルが高くて鼻血出そうになったわ OSやその他Apple系APIとのやり取りはObjC++、それ以外のソースはC++のみ、とかも簡単だし
560 名前:デフォルトの名無しさん (アウアウエー Sa13-vkNS) [2024/11/14(木) 14:52:24.21 ID:a5xmyjQfa.net] >>553 若い人がCからC++の増築増築で可笑しくなって行った歴史をなぞるのは無意味ではない >>554-555 Objective-C や Objective-C++ の方がまし やる気は無いけどObjectPASCALはDelphiだっけ
561 名前:デフォルトの名無しさん [2024/11/19(火) 11:41:41.34 ID:1x1cv+pZH.net] 演算子のオーバーロードない言語はダメだ
562 名前:デフォルトの名無しさん mailto:sage [2024/11/19(火) 11:53:31.53 ID:5+FMYvHmM.net] 演算子オーバーロードがもたらす言語仕様の複雑性を理解してたら軽々しくそういうことは言えない
563 名前:デフォルトの名無しさん [2024/12/08(日) 01:45:50.04 ID:EhZF4lXKz] 5chの管理人がRustマンセー野郎でRustの悪口言ったらBBS規制になっちまった。 それでこっちに書いときます。eigenという行列演算、線形代数ライブラリが ありますが、これ列主順なんですね。なので、[]演算子のオーバーロードでは 行列Aのi行j列の要素にアクセスするときにA[j][i]という奇妙な順番でないと いけない。それでeigenでは行列に対してA[i][j]みたいなサポートはしていない。 だから[]ではなく[][]演算子みたいな拡張がほしいと思いました。
564 名前:デフォルトの名無しさん [2024/12/08(日) 02:15:01.21 ID:EhZF4lXKz] マトリックスクラスを宣言すると matrix_<double> a[3][3]; で何の対策もせずに、a[0][1][2][3]=1; みたいなアクセスは問題なくできるんですよ。 サイズ宣言時にa[3][3](3,3);というダサい形に。でもこれはstdsize(3,3);とでもして おけば解決します。でも、列主順のときにはa[j][i]がネックに。()演算子なら列主順 だろが行主順だろが問題なくオーバーロードで解決できるんですが、A(i,j)の添字が0 から始まるのはfortran使っていた自分には違和感があります。 それでA[i,j]? C言語のA[i][j]の伝統を捨てるんですか? 感性の問題ですけど。
565 名前:デフォルトの名無しさん [2024/12/08(日) 17:15:54.70 ID:EhZF4lXKz] なるほど。C#に引っ張られたわけですね。a[i][j]の ][ を , に置き換えるプログラム を作成すれば大きな影響もなく変換できそうですね。 でも、a[i][j]は残すんですよね?残さないと、ブーイングもしくはC++23もういいわ になりそう。