24/10/22 11:28:00.82 UXnTPhGj0.net
>>510
Rust では実行時にチェックされて範囲から外れていたら panic (C/C++ で言うところの abort みたいなもの) する。
URLリンク(doc.rust-lang.org)
C/C++ のように配列がポインタになるということはなく、スライス (C++ で言うところの span みたいなもの) が基本型として組み込まれているので範囲チェック出来る。
コンパイル時に範囲内であることがわかる状況なら最適化で消えることもあるみたいだけど
実行時に外部から入ってくる値に依存することもあるので実行時にチェックしないとどうしようもない。
512:デフォルトの名無しさん
24/10/28 13:44:32.71 A9ortPvu0.net
enum、
文字列への変換、
大変すぎて、ビックリした
513:デフォルトの名無しさん
24/10/28 14:06:10.17 /lht/Ba/0.net
俺はenumの機能を拡張するクラスを自分で定義してるな
それで文字列変換も文字列からの変換も出来る
514:デフォルトの名無しさん
24/10/28 15:41:01.09 xcgYWtNU0.net
autogenerated.txt.c みたいなの使うのも手だぞ 急がば回れ
そしてCよりはうまく書ける
515:デフォルトの名無しさん
24/10/29 08:22:28.04 XRXAB2XQ0.net
>>514
うーん、どんなもの?それ
516:デフォルトの名無しさん
24/10/29 13:58:12.41 WYOK+g300.net
好きなように書いて、好きなように変換して、途中でincludeする
簡単に書くもよし、ガッチガチにチェックするもよし
517:デフォルトの名無しさん
24/10/30 23:11:10.17 x0G86HEF0.net
HAGE(CAUWA1)
HAGE(CAUWA2)
HAGE(CAUWA3)
:
みたいなテキスト作っといて
手コキストを#includeする手前でHAGEの意味を変えてやるとうまいこと一元化できる
518:
24/10/31 00:43:29.18 ET2RcGMR0.net
カウワ?
519:デフォルトの名無しさん
24/10/31 01:08:33.55 gisW4Gdb0.net
magic_enum教えてやれや
じじいは感度低いから知らんか
520:デフォルトの名無しさん
24/10/31 05:43:35.79 J4xtBqBy0.net
みてきた それが人気の実装か
やりたいこと次第だが、オーバスペック感はある
ちょうどほしかったんなら止めないけどね
521:デフォルトの名無しさん
24/10/31 10:56:16.92 ++2hP8JV0.net
横からなるほどー!
__PRETTY_FUNCTION__ / __FUNCSIG__
522:デフォルトの名無しさん
24/10/31 15:32:14.58 IcW65SaY0.net
あのー、アメリカグーグルで、検索すれば、良いのがでてきた
日本は、でてこない
これは、やっぱり、レベルなんだろうね
523:デフォルトの名無しさん
24/11/01 19:53:27.66 TgBKHsuNa.net
>>518
あさひ奈央
524:デフォルトの名無しさん
24/11/02 09:17:27.71 KpOoS8wa0.net
>>522
アメリカグーグルって言い方からして頭悪そう
525:デフォルトの名無しさん (ワッチョイ 5910-fVPo)
24/11/05 08:04:39.53 //VVBUiD0.net
magic_enumは個数制限がきついんだよな・・256くらいが限度じゃなかったっけ
526:青木康善
24/11/06 17:05:23.05 vfgxFq1Ya.net
c plus plusとjava、電子音楽作成にどっちが向いてるかな?早いのは無論c plus plusだろうけど。
527:デフォルトの名無しさん
24/11/06 17:09:08.31 jrSvpMvx0.net
作成というが、記述したいのか、波形合成したいのか、はたまた生成(AI等)したいのか。。
528:デフォルトの名無しさん
24/11/06 17:14:36.09 P7rcAaD30.net
なんでjava?
529:デフォルトの名無しさん
24/11/06 20:06:37.45 TrFjb6KE0.net
>>526
C++ね
記号の入れ方知らないのかな
530:青木康善
24/11/06 20:56:51.96 XG1hV+N8a.net
C soundというのはかつてありましたが。javaでやろうかな。C++は自分にはハードル高すぎます。
531:はちみつ餃子
24/11/06 21:37:08.81 O6Mhx+Gj0.net
相談スレなんだから相談しなさいよ。
独り言を書きたいなら X で。
532:デフォルトの名無しさん
24/11/06 22:48:47.88 tlKINjNQr.net
5ちゃん初めてなんでしょ。浮いてるのはほっとこう、じきに慣れてくれる
コンパイラがCらしいね。でもjavaからも操作できる実績があるって
こういうときは、「やってみて脳汁が出そうなほう」でいいとおもう
結局モチベなんで
533:はちみつ餃子
24/11/07 03:05:44.48 LEgJ6Wm00.net
Csound は公式に Python や Java 用のラッパーは用意してるみたいだから得意なのでやればよさそう。
ところで固有名詞は正確に表記してくれないと探しにくいやで。
534:デフォルトの名無しさん
24/11/08 17:26:41.87 k0cYSKPq0.net
g++とclang++が混ざった環境なのですが、g++でコンパイルしたバイナリはstd::stringとか
名前に__cx11というプレフィックスが付き、一方clang++の方は__1というものが付くようです
とりあえず、clang++の方で__cx11が付くようなバイナリを生成するにはどうしたら
いいでしょうか?
535:デフォルトの名無しさん
24/11/08 17:28:48.87 k0cYSKPq0.net
すみません、__cx11じゃなくて__cxx11でした
536:はちみつ餃子
24/11/08 17:41:34.61 Me1tPYCI0.net
名前だけ合わせても具体的な実装方法が違えばどうせクラッシュするから意図的にマングルルールを違えている。
URLリンク(gcc.gnu.org)
537:デフォルトの名無しさん
24/11/08 17:52:36.03 k0cYSKPq0.net
>>536
なるほど、要は「C++コンパイラ、混ぜるな危険」ということでしょうか?
538:デフォルトの名無しさん
24/11/08 18:12:15.75 6Qfff3nN0.net
例外とか互換性があるんかいな?
539:デフォルトの名無しさん
24/11/08 18:14:37.25 6Qfff3nN0.net
C++コンパイラでコンパイルするにしても
ソースコードをCの範囲に留めて
関数プロトタイプを
extern "C"
すれば大丈夫だよ
540:デフォルトの名無しさん
24/11/08 18:18:53.42 k0cYSKPq0.net
>>539
なるほど、例えばこんな感じなら大丈夫なんですかね?
g++でコンパイルされたバイナリのグループAとclang++でコンパイルされたバイナリの
グループBがあったとき、AからB(またはその逆)を呼ぶときは必ずCリンケージの関数
経由にする、とか....
541:はちみつ餃子
24/11/08 18:25:46.25 Evz7xgHe0.net
>>540
OK。
C インターフェイスの範囲ではどちらも同じ ABI (Application Binary Interface) に従ってるはず。
542:デフォルトの名無しさん
24/11/08 18:35:59.90 k0cYSKPq0.net
>>541
なるほど
皆さんどうもありがとうございます
543:デフォルトの名無しさん
24/11/09 19:08:22.86 djyKk80a0.net
昔std::vector<T>とかstd::stringを前のコンパイラでビルドしたDLLに渡したら以下略
やっぱコンパイラを混ぜるときはextern "C" な関数にプリミティブな型のみを渡すインターフェース設計にするパティーンが安牌
文字列とか渡したかったらあくまでchar[]にすべき……
544:デフォルトの名無しさん
24/11/10 16:10:22.46 ck6aMoNGM.net
>>536
この場合は別々に標準ライブラリがリンクされる、つまり2つ動くのかな?
545:デフォルトの名無しさん
24/11/10 17:48:03.99 cLh8//6O0.net
単にリンクするだけではどっちかのライブラリのスタートアップしか呼ばれないから
呼ばれてない方のライブラリの初期化がされなくてまともに動作しない問題が残ると思う
546:はちみつ餃子
24/11/10 18:18:05.60 R/A45v0+0.net
仮にどうにか辻褄合わせが出来てちゃんと動いたとしても将来の開発環境・実行環境でどうなるか予想しづらいというのもある。
547:デフォルトの名無しさん
24/11/10 18:55:50.75 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)
24/11/10 19:59:53.20 a6nPaG4v0.net
>>547
itr が指してる先は m の一部なのでまだ生きてる。
問題ない。
549:デフォルトの名無しさん
24/11/10 20:31:11.60 g8WH2rn90.net
>>548
あざっす!なるほど、よかった~
550:デフォルトの名無しさん
24/11/11 00:36:44.76 6qsu0cnY0.net
>>545
ヤヴァイやん>>539しても全然OKじゃないやん……
551:デフォルトの名無しさん
24/11/11 00:38:49.39 6qsu0cnY0.net
ただしウィンドーズのDLLの呼び出し場合は>>539に従っていれば問題無いはず……
ランタイムの初期化エントリはDLL毎に_DllMainCRTStartup が用意されてDLL初期化時に呼ばれる
552:デフォルトの名無しさん (ワッチョイ 759b-NX7e)
24/11/11 16:46:00.51 XlNa4SSE0.net
URLリンク(www.openwork.jp)
553:青木康善
24/11/12 22:22:32.82 svwbS+Oga.net
独習C++を図書館で借りました。よく、こんな、難しく、エグい言語が出来ますねみなさん。
554:デフォルトの名無しさん (ワッチョイ 1d1f-hYHe)
24/11/12 22:26:44.98 r67kfyB40.net
他に選択肢がなかったんや😭
あと最近はobjective-cとかいう悪魔合体に比べたらなんでもマシな言語に思えてきてる
555:デフォルトの名無しさん
24/11/13 01:53:29.63 CoujH3FQ0.net
Objective-C++もよろしく
556:はちみつ餃子
24/11/13 02:14:12.02 Gj2zjD3b0.net
>>553
汚いが、必要なものはある。
綺麗に整理されてても必要なものがないよりは良い。
557:デフォルトの名無しさん
24/11/13 03:47:19.43 rKuXlBFV0.net
そーだそーだ
C++は難しいからObject Pascalやろうぜ!
558:デフォルトの名無しさん
24/11/14 07:49:57.71 z8CYzrjO0.net
C++女学院の人々ってまだ読める所ある?
大好きだったんだけど。
559:デフォルトの名無しさん (ワッチョイ a501-3n/g)
24/11/14 12:23:07.88 DkukOutW0.net
>>554
C++と悪魔合体してObjective-C++とかなってるけど自分は実用的に感じた
全部それで書こうとは思わんけど、C++との共存のレベルが高くて鼻血出そうになったわ
OSやその他Apple系APIとのやり取りはObjC++、それ以外のソースはC++のみ、とかも簡単だし
560:デフォルトの名無しさん (アウアウエー Sa13-vkNS)
24/11/14 14:52:24.21 a5xmyjQfa.net
>>553
若い人がCからC++の増築増築で可笑しくなって行った歴史をなぞるのは無意味ではない
>>554-555
Objective-C や Objective-C++ の方がまし
やる気は無いけどObjectPASCALはDelphiだっけ
561:デフォルトの名無しさん
24/11/19 11:41:41.34 1x1cv+pZH.net
演算子のオーバーロードない言語はダメだ
562:デフォルトの名無しさん
24/11/19 11:53:31.53 5+FMYvHmM.net
演算子オーバーロードがもたらす言語仕様の複雑性を理解してたら軽々しくそういうことは言えない
563:デフォルトの名無しさん
24/12/08 01:45:50.04 EhZF4lXKz
5chの管理人がRustマンセー野郎でRustの悪口言ったらBBS規制になっちまった。
それでこっちに書いときます。eigenという行列演算、線形代数ライブラリが
ありますが、これ列主順なんですね。なので、[]演算子のオーバーロードでは
行列Aのi行j列の要素にアクセスするときにA[j][i]という奇妙な順番でないと
いけない。それでeigenでは行列に対してA[i][j]みたいなサポートはしていない。
だから[]ではなく[][]演算子みたいな拡張がほしいと思いました。
564:デフォルトの名無しさん
24/12/08 02:15:01.21 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:デフォルトの名無しさん
24/12/08 17:15:54.70 EhZF4lXKz
なるほど。C#に引っ張られたわけですね。a[i][j]の ][ を , に置き換えるプログラム
を作成すれば大きな影響もなく変換できそうですね。
でも、a[i][j]は残すんですよね?残さないと、ブーイングもしくはC++23もういいわ
になりそう。