前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1645239402/
C++相談室 part160
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2022/04/15(金) 08:39:32.42ID:WMzvufu2527デフォルトの名無しさん
2022/05/01(日) 14:53:21.11ID:vJsN8meg こんなんでいいんじゃね
mytype* p = reinterprit_cast<mytype*>(0xaabbccdd);
*p = 1000
mytype* p = reinterprit_cast<mytype*>(0xaabbccdd);
*p = 1000
528デフォルトの名無しさん
2022/05/01(日) 14:55:46.12ID:t4/NhzPt 他のプロセスからってことじゃないの
WindowsならReadProcessMemory/WriteProcessMemory
WindowsならReadProcessMemory/WriteProcessMemory
529デフォルトの名無しさん
2022/05/01(日) 14:56:17.49ID:KjQtFKQ9 アドレスがわかってると言いながら実は空間が違うとか。
530デフォルトの名無しさん
2022/05/01(日) 14:58:07.61ID:ukM6vErn すみません、説明不足でした。
自分がやりたいのは、あるプロセスの変数をc++で作った別のプログラムから書き換えることです。
a.exeが持つ変数をb.exeから書き換える、みたいなことです。
自分がやりたいのは、あるプロセスの変数をc++で作った別のプログラムから書き換えることです。
a.exeが持つ変数をb.exeから書き換える、みたいなことです。
531デフォルトの名無しさん
2022/05/01(日) 15:03:02.21ID:9TCpWNNH linux的にはptraceを調べるとか…
532デフォルトの名無しさん
2022/05/01(日) 15:07:04.74ID:t4/NhzPt リバースエンジニアリングでしょ
環境依存だしここで有益な答えが返ってくるとは思えない
環境依存だしここで有益な答えが返ってくるとは思えない
533デフォルトの名無しさん
2022/05/01(日) 15:07:49.80ID:k85aGXIq 実行時に書き換えるならば排他制御が必須
534デフォルトの名無しさん
2022/05/01(日) 15:11:01.84ID:Z9kcLIQb スタック変数やヒープ変数を実行前に書き換えるのは不可能
535デフォルトの名無しさん
2022/05/01(日) 15:13:35.34ID:ukM6vErn 皆さんありがとうございます。
>>528さんのものが使えるかもしれないので、一回調べながら触ってみます。
>>528さんのものが使えるかもしれないので、一回調べながら触ってみます。
536デフォルトの名無しさん
2022/05/01(日) 15:47:36.66ID:V8gMjhaX >>534
プロセスって言ってんだから実行中の話だろうjk
プロセスって言ってんだから実行中の話だろうjk
537デフォルトの名無しさん
2022/05/01(日) 16:19:28.57ID:pvwx8N/t >>521
oneapi でなく openapi というのがあるの?
oneapi でなく openapi というのがあるの?
538デフォルトの名無しさん
2022/05/01(日) 16:52:28.16ID:ukM6vErn readprocessmemory, writeprocessmomoryの詳しい使い方が載ってるサイトってありますかね...
539デフォルトの名無しさん
2022/05/01(日) 18:15:25.12ID:fSFndGfw540はちみつ餃子 ◆8X2XSCHEME
2022/05/01(日) 18:35:08.33ID:qIevfvlJ >>538
https://docs.microsoft.com/ja-jp/windows/win32/api/memoryapi/nf-memoryapi-readprocessmemory
https://docs.microsoft.com/ja-jp/windows/win32/api/memoryapi/nf-memoryapi-writeprocessmemory
プロセスハンドルとアドレスと大きさを指示するだけで難しいことはなんもない。
ターゲットになるプロセスを見つける方法とかはたぶんこのあたりが参考になるかな……
https://docs.microsoft.com/ja-jp/windows/win32/psapi/enumerating-all-processes
公式ドキュメントは全体像が掴みづらい場合もあるけど、
この場合はたいした規模の話でもないからこれで十分でしょ。
外部のプロセスから逐一コピーして操作するのが面倒なら DLL Injection でプロセス内にプログラムを注入する方法もあるよ。
https://docs.microsoft.com/ja-jp/windows/win32/api/memoryapi/nf-memoryapi-readprocessmemory
https://docs.microsoft.com/ja-jp/windows/win32/api/memoryapi/nf-memoryapi-writeprocessmemory
プロセスハンドルとアドレスと大きさを指示するだけで難しいことはなんもない。
ターゲットになるプロセスを見つける方法とかはたぶんこのあたりが参考になるかな……
https://docs.microsoft.com/ja-jp/windows/win32/psapi/enumerating-all-processes
公式ドキュメントは全体像が掴みづらい場合もあるけど、
この場合はたいした規模の話でもないからこれで十分でしょ。
外部のプロセスから逐一コピーして操作するのが面倒なら DLL Injection でプロセス内にプログラムを注入する方法もあるよ。
541デフォルトの名無しさん
2022/05/01(日) 18:37:39.22ID:dvAJjIlE srd::vectorも最初は誰がこんなクソコンテナ使うんだよっ
て言われてて皆好き勝手に独自のコンテナ実装してたらしいなw
て言われてて皆好き勝手に独自のコンテナ実装してたらしいなw
542デフォルトの名無しさん
2022/05/01(日) 18:42:14.03ID:Rd1MW222 >>539
まあ結構ニッチだと言うのとリンク先にも書いてある通り
struct STRUCT {
int* array;
};
int STRUCT::*pt = &STRUCT::array[2];
ってやられたら違うコードにしないといけないから面倒なんだろうね
まあ結構ニッチだと言うのとリンク先にも書いてある通り
struct STRUCT {
int* array;
};
int STRUCT::*pt = &STRUCT::array[2];
ってやられたら違うコードにしないといけないから面倒なんだろうね
543デフォルトの名無しさん
2022/05/01(日) 18:48:00.04ID:ukM6vErn >>540
ありがとうございます!試してみます!
ありがとうございます!試してみます!
544デフォルトの名無しさん
2022/05/01(日) 18:54:08.08ID:fSFndGfw >>542
その例を上げるのはメンバポインタがわかってない人と思う
その例を上げるのはメンバポインタがわかってない人と思う
545デフォルトの名無しさん
2022/05/01(日) 19:01:02.73ID:fSFndGfw その例は構造体の中のintを指してないから
出来ないのは当たり前
出来ないのは当たり前
546デフォルトの名無しさん
2022/05/01(日) 21:50:45.69ID:t6KXJfhj547デフォルトの名無しさん
2022/05/01(日) 22:03:23.83ID:Rd1MW222 >>544-545
だからできないって話なんだがw
だからできないって話なんだがw
548デフォルトの名無しさん
2022/05/02(月) 06:08:38.44ID:9K9pP+jI struct STRUCT
{
int array[2];
};
arrayはSTRUCT直属のメンバだからメンバポインタで指せるが
array[1]はあくまでarrayの要素であってSTRUCT直属のメンバではないので
これを指すようなメンバポインタは存在しない
{
int array[2];
};
arrayはSTRUCT直属のメンバだからメンバポインタで指せるが
array[1]はあくまでarrayの要素であってSTRUCT直属のメンバではないので
これを指すようなメンバポインタは存在しない
549デフォルトの名無しさん
2022/05/02(月) 06:48:46.84ID:LNpTFVSP classのメンバ関数型が存在しない理由って何?
classのメンバ関数へのポインタのことではないよ
関数型も関数への参照も関数へポインタも認めてるのになぜメンバ関数は存在しないんだ
classのメンバ関数へのポインタのことではないよ
関数型も関数への参照も関数へポインタも認めてるのになぜメンバ関数は存在しないんだ
550デフォルトの名無しさん
2022/05/02(月) 07:02:09.71ID:8dvAAWOX できない話をいつまでもしてるのは脳に何か障害でもあるのか?
551デフォルトの名無しさん
2022/05/02(月) 07:08:05.16ID:LNpTFVSP 理由を問うているんだけ、理解できないのか
脳に何か障害でもあるのか?
脳に何か障害でもあるのか?
552デフォルトの名無しさん
2022/05/02(月) 07:36:33.49ID:9K9pP+jI void func(void (CLASS::*pm)(), CLASS& ref)
{
*pm; //Error. メンバ関数ポインタには逆参照演算子が存在しない
(ref.*pm)(); //pmを実体化するには.*か->*しかない
}
メンバ関数型というのがもし存在するなら*pmのはずだが現実にはできない
{
*pm; //Error. メンバ関数ポインタには逆参照演算子が存在しない
(ref.*pm)(); //pmを実体化するには.*か->*しかない
}
メンバ関数型というのがもし存在するなら*pmのはずだが現実にはできない
553デフォルトの名無しさん
2022/05/02(月) 07:56:46.72ID:LNpTFVSP 出来るできないを聞いているわけじゃない・・・
日本語理解できますか?
日本語理解できますか?
554デフォルトの名無しさん
2022/05/02(月) 08:09:32.17ID:rW7ccw75 単純な逆参照*pmができるメンバ関数型はすべからくクロージャなるべし?
class Foo a; // std::string Foo::someMemberFunc(int a, int b, double c)を持つ
class Bar b; // std::string Bar::anotherMemberFunc(int a, int b, double c)を持つ
auto someMemberFunc = [=, &a](int a, int b, double c) -> std::string { return a.someMemberFunc(a, b, c); };
auto anotherMemberFunc = [=, &b](int a, int b, double c) -> std::string { return b.anotherMemnberFunc(a, b, c); };
std::function<std::string(int, int, double>* pm;
pm = &someMemberFunc;
std::cout << (*pm)(1, 2, 3.4); // a.someMemberFunc()が呼ばれる
pm = &anotherMemberFunc;
std::cout << (*pm)(5, 6, 7.8); // b.anotherMemberFunc()が呼ばれる
std::function<std::string(int, int, double)> fn = *pm; // b.anotherMemberFunc()が呼ばれるためのクロージャにデリファレンスされる
class Foo a; // std::string Foo::someMemberFunc(int a, int b, double c)を持つ
class Bar b; // std::string Bar::anotherMemberFunc(int a, int b, double c)を持つ
auto someMemberFunc = [=, &a](int a, int b, double c) -> std::string { return a.someMemberFunc(a, b, c); };
auto anotherMemberFunc = [=, &b](int a, int b, double c) -> std::string { return b.anotherMemnberFunc(a, b, c); };
std::function<std::string(int, int, double>* pm;
pm = &someMemberFunc;
std::cout << (*pm)(1, 2, 3.4); // a.someMemberFunc()が呼ばれる
pm = &anotherMemberFunc;
std::cout << (*pm)(5, 6, 7.8); // b.anotherMemberFunc()が呼ばれる
std::function<std::string(int, int, double)> fn = *pm; // b.anotherMemberFunc()が呼ばれるためのクロージャにデリファレンスされる
555デフォルトの名無しさん
2022/05/02(月) 09:03:37.01ID:8dvAAWOX >>553
自分が欲しい機能は全て揃ってないとおかしいとかガイジすぎだろw
自分が欲しい機能は全て揃ってないとおかしいとかガイジすぎだろw
556デフォルトの名無しさん
2022/05/02(月) 09:06:55.61ID:6vh8Gvry あれが「揃ってないとおかしい」と読める読解力の方に問題がありそうだが
557デフォルトの名無しさん
2022/05/02(月) 10:01:16.40ID:8dvAAWOX 理由「仕様です」ということも理解できないの?
まじで脳障害を疑った方がいいぞw
まじで脳障害を疑った方がいいぞw
558デフォルトの名無しさん
2022/05/02(月) 10:12:11.24ID:Lc/e3xtf 仕様がクソすぎる
559デフォルトの名無しさん
2022/05/02(月) 11:03:41.58ID:/YgtvrIl 無能ワイ、メンバ関数型がなんなのかよく分からない
560デフォルトの名無しさん
2022/05/02(月) 11:30:26.72ID:m3O8Sm5F ちんちんシュッ!シュッ!シュッ!
561デフォルトの名無しさん
2022/05/02(月) 11:53:48.09ID:JwCZPFEF >>549
適切な規格化(めんどくさい)や新たな実装(めんどくさい)が必要なわりに見合う有用性が無いと考えられているからでしょう。
適切な規格化(めんどくさい)や新たな実装(めんどくさい)が必要なわりに見合う有用性が無いと考えられているからでしょう。
562デフォルトの名無しさん
2022/05/02(月) 12:05:29.20ID:9K9pP+jI >>553
いいだろう
では、仮にあったとしてどんな使い方を考えているんだ?
decltype(CLASS::func) mirror;
CLASS obj;
obj.mirror(); //これでobj.func();になればいいのか?
いいだろう
では、仮にあったとしてどんな使い方を考えているんだ?
decltype(CLASS::func) mirror;
CLASS obj;
obj.mirror(); //これでobj.func();になればいいのか?
563デフォルトの名無しさん
2022/05/02(月) 12:29:35.60ID:9K9pP+jI operator ?: がない理由も
仮にあったとして以下略への答えがないからだね
仮にあったとして以下略への答えがないからだね
564デフォルトの名無しさん
2022/05/02(月) 12:40:24.60ID:+FOPwlZG >>559
安心しろ。俺もわからん。
安心しろ。俺もわからん。
565デフォルトの名無しさん
2022/05/02(月) 13:38:33.63ID:WQmMvuhJ566はちみつ餃子 ◆8X2XSCHEME
2022/05/02(月) 13:50:32.84ID:dhIldcoi >>565
メンバでないものをメンバポインタの範囲で扱うことは出来るけど「やるべきでない」からやってないって話だろ。
まあそれを言ったら C++ には奇妙なものはいっぱいあるから今更ではあるけどさ。
それに offsetof は offsetof で色々と制約があるからなぁ。
特にスタンダードレイアウトである必要がある (そうでないときは未定義) というのがなかなか厳しい。
可能な場合には型システムの枠組み内で扱いたい。
メンバでないものをメンバポインタの範囲で扱うことは出来るけど「やるべきでない」からやってないって話だろ。
まあそれを言ったら C++ には奇妙なものはいっぱいあるから今更ではあるけどさ。
それに offsetof は offsetof で色々と制約があるからなぁ。
特にスタンダードレイアウトである必要がある (そうでないときは未定義) というのがなかなか厳しい。
可能な場合には型システムの枠組み内で扱いたい。
567デフォルトの名無しさん
2022/05/02(月) 14:01:47.48ID:8dvAAWOX >>565
仕様として出来ないことと実現不可能なことの区別もつかないのかよw
仕様として出来ないことと実現不可能なことの区別もつかないのかよw
568デフォルトの名無しさん
2022/05/02(月) 16:26:17.62ID:WQmMvuhJ >>566
配列の要素はメンバ
ではないと
まあそんな言葉の定義はどうでもいいとして
なぜやるべきでないと思う?
出来たら何がまずい?
何が不都合?
誰もこの点にふれてない
ただ単に仕様と言われても
その仕様が糞と思うだけ
配列の要素はメンバ
ではないと
まあそんな言葉の定義はどうでもいいとして
なぜやるべきでないと思う?
出来たら何がまずい?
何が不都合?
誰もこの点にふれてない
ただ単に仕様と言われても
その仕様が糞と思うだけ
569デフォルトの名無しさん
2022/05/02(月) 16:53:07.08ID:9K9pP+jI >>568
よくわからんが、こう言いたいの?
struct STRUCT
{
int array[2];
};
int STRUCT::*pm;
pm = &STRUCT::array[0];
pm = &STRUCT::array[1];
STRUCT obj;
(obj.*pm) = 1; //obj.array[1] = 1; こうなるべき
よくわからんが、こう言いたいの?
struct STRUCT
{
int array[2];
};
int STRUCT::*pm;
pm = &STRUCT::array[0];
pm = &STRUCT::array[1];
STRUCT obj;
(obj.*pm) = 1; //obj.array[1] = 1; こうなるべき
570はちみつ餃子 ◆8X2XSCHEME
2022/05/02(月) 17:15:19.01ID:dhIldcoi571デフォルトの名無しさん
2022/05/02(月) 17:32:38.90ID:9K9pP+jI572デフォルトの名無しさん
2022/05/02(月) 17:34:25.32ID:JwCZPFEF >>570
配列の要素がメンバでないことは、現状のメンバ変数へのポインタが配列要素に適用できない理由を示すものと思いますが、
メンバ変数へのポインタを配列要素に適用可能にするという拡張の話について「やるべきでない」という理由にはならないかと。
配列の要素がメンバでないことは、現状のメンバ変数へのポインタが配列要素に適用できない理由を示すものと思いますが、
メンバ変数へのポインタを配列要素に適用可能にするという拡張の話について「やるべきでない」という理由にはならないかと。
573はちみつ餃子 ◆8X2XSCHEME
2022/05/02(月) 17:56:52.90ID:dhIldcoi >>572
そいういう拡張はあり得ると思う。
私の感覚では (メンバ内の) 配列の要素を許すのだともはやメンバポインタではない何かだろうという意識で書いてた。
つまり、メンバポインタとしてやるべきではないということと、
メンバポインタを拡張して出来上がる何者かで出来るようにするというのは両立するってことね。
そいういう拡張はあり得ると思う。
私の感覚では (メンバ内の) 配列の要素を許すのだともはやメンバポインタではない何かだろうという意識で書いてた。
つまり、メンバポインタとしてやるべきではないということと、
メンバポインタを拡張して出来上がる何者かで出来るようにするというのは両立するってことね。
574デフォルトの名無しさん
2022/05/02(月) 18:01:04.13ID:+FOPwlZG なんとなくわかったけど、
c において配列を指す変数がポインタと同一視されるんだから、cを踏襲するc++でも配列を指す変数がポインタ扱いになるのはおかしなことじゃない。そうすると配列の要素はポインタの先になるので、配列を指すメンバー変数の要素もポインタの先になってメンバーじゃなくなりますな。
というか、こんなくだらないことでゴチャゴチャやってたの?
c において配列を指す変数がポインタと同一視されるんだから、cを踏襲するc++でも配列を指す変数がポインタ扱いになるのはおかしなことじゃない。そうすると配列の要素はポインタの先になるので、配列を指すメンバー変数の要素もポインタの先になってメンバーじゃなくなりますな。
というか、こんなくだらないことでゴチャゴチャやってたの?
575デフォルトの名無しさん
2022/05/02(月) 18:06:02.86ID:+FOPwlZG576デフォルトの名無しさん
2022/05/02(月) 18:23:20.44ID:WQmMvuhJ >>570
構造体の中の配列の各要素は当然構造体の一部
つまりメンバ
というのが私の認識だが
その結果はどうでも良い
ここを議論しても意味がない
単なる言葉の定義の話だから
そうじゃなくて
技術的な話をしたいわけで
以下なら&S::a1と出来る
これで実質&S::a[1]になる
struct S {
...
union {
int a[3];
struct {
int a0;
int a1;
int a2;
};
};
};
こんな事をやらないと出来ないのはなぜか?
構造体の中の配列の各要素は当然構造体の一部
つまりメンバ
というのが私の認識だが
その結果はどうでも良い
ここを議論しても意味がない
単なる言葉の定義の話だから
そうじゃなくて
技術的な話をしたいわけで
以下なら&S::a1と出来る
これで実質&S::a[1]になる
struct S {
...
union {
int a[3];
struct {
int a0;
int a1;
int a2;
};
};
};
こんな事をやらないと出来ないのはなぜか?
577デフォルトの名無しさん
2022/05/02(月) 18:27:19.33ID:WQmMvuhJ579デフォルトの名無しさん
2022/05/02(月) 18:40:58.17ID:HZ9CcBZq おじいさんみたいな改行と文体
580デフォルトの名無しさん
2022/05/02(月) 18:45:56.08ID:JwCZPFEF >>578
>576は抽象の問題は話していないので、そういうことにはならないかと。
言葉の定義が重要というならまず「メンバポインタ」などという未定義の用語を使うべきではないでしょうし。
なお>574の「配列を指す変数がポインタと同一視される」といった不正確な理解も、
厳密な定義を語るにあたっては前提が不適切と思います。
>576 などでは現行の pointer to data member を拡張した "pointer to subobject" とでも言うようなものの
可能性が探られているものと理解しています。
現状でそういった機能が無い理由は >561 になると思ってますが。
>576は抽象の問題は話していないので、そういうことにはならないかと。
言葉の定義が重要というならまず「メンバポインタ」などという未定義の用語を使うべきではないでしょうし。
なお>574の「配列を指す変数がポインタと同一視される」といった不正確な理解も、
厳密な定義を語るにあたっては前提が不適切と思います。
>576 などでは現行の pointer to data member を拡張した "pointer to subobject" とでも言うようなものの
可能性が探られているものと理解しています。
現状でそういった機能が無い理由は >561 になると思ってますが。
581デフォルトの名無しさん
2022/05/02(月) 18:53:30.65ID:WQmMvuhJ 配列にも入れ子の構造体にも使えない
offsetofの劣化コピーじゃ
何のためにわざわざ仕様追加したんだかわからんねえ
offsetofの劣化コピーじゃ
何のためにわざわざ仕様追加したんだかわからんねえ
582デフォルトの名無しさん
2022/05/02(月) 19:03:28.83ID:JwCZPFEF >>581
追加された理由は offsetof に伴う危険なキャスト無しで同等の機能を提供したかったからでしょうね。
そもそもCでさえ offsetof を使ったメンバアクセスはすべて規格上は未定義動作の範疇のままであり、
未定義動作を認めないとする観点で言えば pointer to data member は純粋な拡張として有用です。
現行コンパイラ実装での挙動まで含めて考えれば、挙げられているとおり offsetof の適用可能範囲のほうが
ずっと広いんですけども。
追加された理由は offsetof に伴う危険なキャスト無しで同等の機能を提供したかったからでしょうね。
そもそもCでさえ offsetof を使ったメンバアクセスはすべて規格上は未定義動作の範疇のままであり、
未定義動作を認めないとする観点で言えば pointer to data member は純粋な拡張として有用です。
現行コンパイラ実装での挙動まで含めて考えれば、挙げられているとおり offsetof の適用可能範囲のほうが
ずっと広いんですけども。
583デフォルトの名無しさん
2022/05/02(月) 20:14:09.92ID:pVfL1f+B ninja使わないで普通にmakeするとものすごく遅いな。
ninjaって凄く速かったんだな。
ninjaって凄く速かったんだな。
584デフォルトの名無しさん
2022/05/02(月) 20:49:04.97ID:/YgtvrIl 純粋な疑問なんだけどメンバ変数である配列の要素のポインタを変数として扱えて何が嬉しいの?
使い方が思い浮かばない…
使い方が思い浮かばない…
585はちみつ餃子 ◆8X2XSCHEME
2022/05/02(月) 20:59:32.26ID:dhIldcoi そもそもメンバを指すポインタだってそんなに使うもんじゃないしな。
std::is_class の実装に使えるんじゃねーのという文脈で登場する程度。
std::is_class の実装に使えるんじゃねーのという文脈で登場する程度。
586デフォルトの名無しさん
2022/05/03(火) 10:38:15.40ID:J5PtY6cN587デフォルトの名無しさん
2022/05/03(火) 10:41:06.53ID:J5PtY6cN 構造体STRUCTのメンバを指すメンバポインタというものが
構造体STRUCTの直接の配下のメンバ以外まで指せる仕様にしたら
構造体STRUCTの中に構造体SSTTRRUUCCTTが存在する入れ子のケースにおいて
構造体STRUCTのメンバポインタでなんでSTRUCT::SSTTRRUUCCTTのメンバを指せないんじゃヴォケ、
おなじSTRUCTのメンバやろうが、
みたいなお馬鹿疑問を抱くアフォが出てくるに違いないのと同じ
構造体STRUCTの直接の配下のメンバ以外まで指せる仕様にしたら
構造体STRUCTの中に構造体SSTTRRUUCCTTが存在する入れ子のケースにおいて
構造体STRUCTのメンバポインタでなんでSTRUCT::SSTTRRUUCCTTのメンバを指せないんじゃヴォケ、
おなじSTRUCTのメンバやろうが、
みたいなお馬鹿疑問を抱くアフォが出てくるに違いないのと同じ
588デフォルトの名無しさん
2022/05/03(火) 12:03:52.41ID:uzYP/aDa エラーログかとおもた
Amnesty International USA
https://twitter.com/amnestyusa/status/1521295013044539392
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
https://twitter.com/5chan_nel (5ch newer account)
Amnesty International USA
https://twitter.com/amnestyusa/status/1521295013044539392
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
Abortion is a human right
https://twitter.com/5chan_nel (5ch newer account)
589デフォルトの名無しさん
2022/05/03(火) 18:51:24.96ID:TQMg8rzt >>587
最後の止め乙
最後の止め乙
590デフォルトの名無しさん
2022/05/03(火) 22:24:19.43ID:J5PtY6cN ついでに漏れもお馬鹿質問したいのですが
ファイルスコープの関数をextern "C"する正しいやり方教えてクレメンスorz
目的はatexit()への登録で、登録する関数自体は公開したっくないケース
// (1)
extern "C" void foo(void) { ... } // NG: ファイルスコープにならない
// (2)
extern "C" void foo(void);
static void foo(void) { .. } // NG(?): コンパイラに怒られそう
// (3)
namespace {
extern "C" void foo(void) { ... } // NG(?): コンパイラに怒られそう 怒られないとしたら漏れの知っている無名名前空間の実装と違う
}
// (4)
extern "C" {
static void foo(void) { ... } // NG(?): コンパイラに怒られそう
}
ファイルスコープの関数をextern "C"する正しいやり方教えてクレメンスorz
目的はatexit()への登録で、登録する関数自体は公開したっくないケース
// (1)
extern "C" void foo(void) { ... } // NG: ファイルスコープにならない
// (2)
extern "C" void foo(void);
static void foo(void) { .. } // NG(?): コンパイラに怒られそう
// (3)
namespace {
extern "C" void foo(void) { ... } // NG(?): コンパイラに怒られそう 怒られないとしたら漏れの知っている無名名前空間の実装と違う
}
// (4)
extern "C" {
static void foo(void) { ... } // NG(?): コンパイラに怒られそう
}
591デフォルトの名無しさん
2022/05/03(火) 22:26:06.85ID:J5PtY6cN やっぱ拡張子を ".c" にしてstatic void foo(void) { ... }するしかなさげ?
592デフォルトの名無しさん
2022/05/03(火) 22:39:49.52ID:k6J/qudN > ファイルスコープの関数をextern "C"する
一行で矛盾しているが
一行で矛盾しているが
593デフォルトの名無しさん
2022/05/03(火) 22:40:29.61ID:EqZaa2d1 atexitが求めているのは関数ポインタだけなのでextern "C" はそもそも必要ない
extern "C" は関数の内部名をC言語形式(func()→_func)で扱うか、
C++形式で扱うか(func()→_Z3funcv、引数の型によって名前が変わる)だけの違い
namespaceとの相互作用は知らん
extern "C" は関数の内部名をC言語形式(func()→_func)で扱うか、
C++形式で扱うか(func()→_Z3funcv、引数の型によって名前が変わる)だけの違い
namespaceとの相互作用は知らん
594デフォルトの名無しさん
2022/05/03(火) 23:03:04.80ID:J5PtY6cN >>593
た確かに…!
VCだとC++リンケージの関数でも問題無く登録できてイゴイタ
ここの記述に引きずられてしまった↓
https://www.ibm.com/docs/ja/zos/2.2.0?topic=functions-atexit-register-program-termination-function
C および C++ のリンケージ規約は非互換の ため、atexit() は C++ 関数ポインターを受け取ることができない。
C++ 関数ポインターを atexit() へ渡そうとすると、コンパイラーが エラーとしてこれにフラグを付けることになる。
C++ atexit() 関数を使用するには、atexit() に登録されたすべての 関数を extern “C” として宣言することに より、
これらの関数が C リンケージを必ず持つようにしなければならない。
た確かに…!
VCだとC++リンケージの関数でも問題無く登録できてイゴイタ
ここの記述に引きずられてしまった↓
https://www.ibm.com/docs/ja/zos/2.2.0?topic=functions-atexit-register-program-termination-function
C および C++ のリンケージ規約は非互換の ため、atexit() は C++ 関数ポインターを受け取ることができない。
C++ 関数ポインターを atexit() へ渡そうとすると、コンパイラーが エラーとしてこれにフラグを付けることになる。
C++ atexit() 関数を使用するには、atexit() に登録されたすべての 関数を extern “C” として宣言することに より、
これらの関数が C リンケージを必ず持つようにしなければならない。
595デフォルトの名無しさん
2022/05/03(火) 23:16:58.67ID:LdVfvoP5 >>594
なんだそれは...IBMコンパイラ特有の制限か?
Linuxでもそんな制限はないし
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/atexit.3.html
なんだそれは...IBMコンパイラ特有の制限か?
Linuxでもそんな制限はないし
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/atexit.3.html
596デフォルトの名無しさん
2022/05/04(水) 06:21:09.19ID:TqagpjaD 9.11 Linkage Specification
2 Two function types with different language linkages are distinct types even if they are otherwise identical.
2 Two function types with different language linkages are distinct types even if they are otherwise identical.
597デフォルトの名無しさん
2022/05/04(水) 10:35:59.45ID:GAB8HZoP 2^17179869183って計算できる?
598デフォルトの名無しさん
2022/05/04(水) 11:01:15.82ID:vYlyugAJ 俺の脳じゃ無理
599デフォルトの名無しさん
2022/05/04(水) 11:12:19.56ID:OOPwcDJ/600デフォルトの名無しさん
2022/05/04(水) 11:15:08.92ID:GAB8HZoP601デフォルトの名無しさん
2022/05/04(水) 11:16:25.61ID:OOPwcDJ/602デフォルトの名無しさん
2022/05/04(水) 11:19:13.87ID:OOPwcDJ/ でもその前にどのくらいのメモリが必要そうかの見積もりはざっくりやったほうが良さそうね
603デフォルトの名無しさん
2022/05/04(水) 11:20:53.78ID:OOPwcDJ/ ざっくり2GBなのか
なんか現実的ではない気がしてきた
少なくとも家庭用のPCなんかでは無理そうかも
なんか現実的ではない気がしてきた
少なくとも家庭用のPCなんかでは無理そうかも
604デフォルトの名無しさん
2022/05/04(水) 11:48:39.54ID:GAB8HZoP605デフォルトの名無しさん
2022/05/04(水) 14:50:41.22ID:RRH/ygkO 128倍精度ってなんですか(・∀・)?
倍精度で表せる最大値((2^(1023+1)) - epsilon)の2^128倍は
(2^(130944+1)) - epsilon
であって
2^17179869183
よりカナーリ小さげ
倍精度で表せる最大値((2^(1023+1)) - epsilon)の2^128倍は
(2^(130944+1)) - epsilon
であって
2^17179869183
よりカナーリ小さげ
606デフォルトの名無しさん
2022/05/04(水) 15:26:18.04ID:RRH/ygkO ゴメス落ち着いて考えたら倍精度で表せる最大値は
((2^(1023+1)) - epsilon*(2^1023) = (2^(1023+1)) - (2^970)
で、その128倍の精度だとしたら
((2^(130944+1)) - (128倍精度のepsilon)*2^130944) = ((2^(130944+1)) - (2^122771)
ここで
128倍精度のepsilon = 2^(-8173)
と仮定ェ、
(∵全体が倍精度の128倍=1024 byte = 8192 bitで指数部が8 bit増加で19 bit、符号ビット1 bit
やったら仮数部は8192-19-1 = 8172 bitで、最上位の1を省略する
ケチ表現なので実質2^(-8173)が仮数部で表せる最小値すわなち128倍精度のepsilon
((2^(1023+1)) - epsilon*(2^1023) = (2^(1023+1)) - (2^970)
で、その128倍の精度だとしたら
((2^(130944+1)) - (128倍精度のepsilon)*2^130944) = ((2^(130944+1)) - (2^122771)
ここで
128倍精度のepsilon = 2^(-8173)
と仮定ェ、
(∵全体が倍精度の128倍=1024 byte = 8192 bitで指数部が8 bit増加で19 bit、符号ビット1 bit
やったら仮数部は8192-19-1 = 8172 bitで、最上位の1を省略する
ケチ表現なので実質2^(-8173)が仮数部で表せる最小値すわなち128倍精度のepsilon
607デフォルトの名無しさん
2022/05/04(水) 15:36:55.26ID:GAB8HZoP 倍精度浮動小数点数が64ビット浮動小数点数なので、
128倍精度浮動小数点数は4096ビット浮動小数点数。
IEEE754-2008の推奨による仕様での最大値の計算をしていたんです。
128倍精度浮動小数点数は4096ビット浮動小数点数。
IEEE754-2008の推奨による仕様での最大値の計算をしていたんです。
608デフォルトの名無しさん
2022/05/04(水) 15:38:07.79ID:GAB8HZoP609デフォルトの名無しさん
2022/05/04(水) 15:39:34.72ID:GAB8HZoP ちなみに128倍精度の最大値は
(2^((2^(35-1))-1))*(2-(2^-4060))
で計算可能かと。
(2^((2^(35-1))-1))*(2-(2^-4060))
で計算可能かと。
610デフォルトの名無しさん
2022/05/04(水) 15:59:04.91ID:GAB8HZoP 倍精度浮動小数点数の場合。
>(2^((2^(11-1))-1))*(2-(2^-52))
=
+ 1797 69313
48623 15708 14527 42373 17043 56798 07056 75258 44996 59891
74768 03157 26078 00285 38760 58955 86327 66878 17154 04589
53514 38246 42343 21326 88946 41827 68467 54670 35375 16986
04991 05765 51282 07624 54900 90389 32894 40758 68508 45513
39423 04583 23690 32229 48165 80855 93321 23348 27479 78262
04144 72316 87381 77180 91929 98812 50404 02618 41248 58368.
309桁の値。
となるので、計算式は合っているはずだが根拠を失念してしまったw
ネットのどこかに書いてあったはず。その式を使っただけ。
128倍精度の場合、35が指数部(符号含む)で4060が仮数部(符号含まない)
>(2^((2^(11-1))-1))*(2-(2^-52))
=
+ 1797 69313
48623 15708 14527 42373 17043 56798 07056 75258 44996 59891
74768 03157 26078 00285 38760 58955 86327 66878 17154 04589
53514 38246 42343 21326 88946 41827 68467 54670 35375 16986
04991 05765 51282 07624 54900 90389 32894 40758 68508 45513
39423 04583 23690 32229 48165 80855 93321 23348 27479 78262
04144 72316 87381 77180 91929 98812 50404 02618 41248 58368.
309桁の値。
となるので、計算式は合っているはずだが根拠を失念してしまったw
ネットのどこかに書いてあったはず。その式を使っただけ。
128倍精度の場合、35が指数部(符号含む)で4060が仮数部(符号含まない)
611デフォルトの名無しさん
2022/05/04(水) 17:03:38.52ID:TqagpjaD612デフォルトの名無しさん
2022/05/04(水) 17:27:38.78ID:fooXr7Ib 10進数でデータが欲しいって書いてあるのが見えないかw
613デフォルトの名無しさん
2022/05/04(水) 17:31:26.47ID:Dfc3wQ1w C++でやることにこだわりないならPythonが手っ取り早いぞ
あれのintはデフォルトで多倍長だから
>>> f=open(r"C:\pow2.txt", "w")
>>> print(2**17179869183, file=f)
あれのintはデフォルトで多倍長だから
>>> f=open(r"C:\pow2.txt", "w")
>>> print(2**17179869183, file=f)
614デフォルトの名無しさん
2022/05/04(水) 17:31:51.73ID:tbM1xmku 10進数でデータの意味が分からんが一桁づつ印字すれば良いだけだろ
615デフォルトの名無しさん
2022/05/04(水) 17:32:35.63ID:GAB8HZoP616デフォルトの名無しさん
2022/05/04(水) 17:57:22.19ID:GAB8HZoP スレチだけど
https://paiza.io/projects/
のpython3で
print(2**17179869183)
をやってみたところエラーになった。
print(2**171798)
では答えが出る。
メモリかな?
https://paiza.io/projects/
のpython3で
print(2**17179869183)
をやってみたところエラーになった。
print(2**171798)
では答えが出る。
メモリかな?
617デフォルトの名無しさん
2022/05/04(水) 19:39:52.57ID:CsYq7Xth http://codepad.org/ でも print(2**171798) までやね
print(2**1717986) だと time out
print(2**171798691) だと MemoryError
print(2**1717986) だと time out
print(2**171798691) だと MemoryError
618デフォルトの名無しさん
2022/05/05(木) 00:09:45.17ID:u08Uuhhj 下記は一部ですので不完全です、型をソートしています。
index_sequenceで展開が面倒なんですよね、何かうまい方法ありませんか
template
<
template<typename> class Orderable,
typename ListT
>
class SortTypes;
template
<
template<typename> class Orderable,
template<typename...> class List,
typename... Ts
>
class SortTypes<Orderable,List<Ts...>>
{
template<typename SeqT> struct Impl;
template<std::size_t... Is>
struct Impl<std::index_sequence<Is...>>
{
static constexpr std::array<std::size_t,sizeof...(Ts)> indexes =
[]{
using Ord = std::common_type_t<decltype(Orderable<Ts>::value)...>;
struct Pair {Ord;std::size_t ndx;};
Pair arr[] = {{Orderable<Ts>::value,Is}...};
insert_sort(arr,0,sizeof...(Ts),[](auto x,auto y){
return x.ord < y.ord;
});
return std::array<std::size_t,sizeof...(Ts)>{ arr[Is].ndx...};
}();
using type = List<std::tuple_element<indexes[Is],TypelList<Ts...>>...>;
};
};
index_sequenceで展開が面倒なんですよね、何かうまい方法ありませんか
template
<
template<typename> class Orderable,
typename ListT
>
class SortTypes;
template
<
template<typename> class Orderable,
template<typename...> class List,
typename... Ts
>
class SortTypes<Orderable,List<Ts...>>
{
template<typename SeqT> struct Impl;
template<std::size_t... Is>
struct Impl<std::index_sequence<Is...>>
{
static constexpr std::array<std::size_t,sizeof...(Ts)> indexes =
[]{
using Ord = std::common_type_t<decltype(Orderable<Ts>::value)...>;
struct Pair {Ord;std::size_t ndx;};
Pair arr[] = {{Orderable<Ts>::value,Is}...};
insert_sort(arr,0,sizeof...(Ts),[](auto x,auto y){
return x.ord < y.ord;
});
return std::array<std::size_t,sizeof...(Ts)>{ arr[Is].ndx...};
}();
using type = List<std::tuple_element<indexes[Is],TypelList<Ts...>>...>;
};
};
619デフォルトの名無しさん
2022/05/05(木) 02:32:03.93ID:FeY8iOM4 フリーランスに立ちはだかる「常駐」の壁。慣例を打ち壊し、
“テレワーク”案件3割→8割へと成長を遂げた「クラウドテック」の軌跡
リモートワーク求人専門サイト「プロリモート」がリニューアルオープン、
業務委託契約の求職者と企業をマッチング
1/3以上が採用につながる高マッチング率、リモートワーク×エンジニア・デザイナー専門の
人材紹介サービス「ReworkerAgent」正式リリース場所からも時間からも自由な働き方を実現!
『ReWorks(リワークス)』リモートワーク特化型転職サイトとして 3月5日 リニューアル
副業・兼業マッチングサービス「クラウドリンクス」登録者数2万人突破
中小企業で進む副業人材の採用、96%が継続採用を希望
茨城県日立市、県外からの「テレワーク移住者」に最大151万円の助成金
長野市、市内に移転・事業所設置し、移住することで最大550万円の支援金を支給
フリーランスが活用できる「最大1,000〜3,000万円・補助率50%〜75%」の
『ものづくり・商業・サービス補助金』とは?概要や条件を解説
“テレワーク”案件3割→8割へと成長を遂げた「クラウドテック」の軌跡
リモートワーク求人専門サイト「プロリモート」がリニューアルオープン、
業務委託契約の求職者と企業をマッチング
1/3以上が採用につながる高マッチング率、リモートワーク×エンジニア・デザイナー専門の
人材紹介サービス「ReworkerAgent」正式リリース場所からも時間からも自由な働き方を実現!
『ReWorks(リワークス)』リモートワーク特化型転職サイトとして 3月5日 リニューアル
副業・兼業マッチングサービス「クラウドリンクス」登録者数2万人突破
中小企業で進む副業人材の採用、96%が継続採用を希望
茨城県日立市、県外からの「テレワーク移住者」に最大151万円の助成金
長野市、市内に移転・事業所設置し、移住することで最大550万円の支援金を支給
フリーランスが活用できる「最大1,000〜3,000万円・補助率50%〜75%」の
『ものづくり・商業・サービス補助金』とは?概要や条件を解説
620デフォルトの名無しさん
2022/05/05(木) 03:10:15.14ID:Hm4Z5Kkb >>597
やったったが愚直に10で割って下の桁から求めるだと手元のPCでは200年ぐらいかかりそう……
https://ideone.com/6BG7hf
つなみにこれは2^0、2^8、2^64、2^1000には一瞬で正解する
[302] 100.000000 % (38/38) --- 0 sec
2^1000 = 1.071508607186267320948425049060001810561404811705533607443750388 x 10^301
やったったが愚直に10で割って下の桁から求めるだと手元のPCでは200年ぐらいかかりそう……
https://ideone.com/6BG7hf
つなみにこれは2^0、2^8、2^64、2^1000には一瞬で正解する
[302] 100.000000 % (38/38) --- 0 sec
2^1000 = 1.071508607186267320948425049060001810561404811705533607443750388 x 10^301
621デフォルトの名無しさん
2022/05/05(木) 03:10:34.57ID:Hm4Z5Kkb 10より大きい10^n(100万とか)で割ることにしたら多少は改善するかもしれないが、
最終的に10^nのn桁を10進数表示することを繰り返すことを考えると10で割るトータルの回数に違いが出ないから改善しなさげ……orz
むしろ2進数で計算して10進数にするのではなく最初から10^n進数表現(ただし10^n < UINT32_MAXとか)で2^Nの計算の方を実質10進数でやった方が速そう
計算の手間がO(N^2)なのは変わらないが、割り算無しで済むのは大きいい(多分、
最終的に10^nのn桁を10進数表示することを繰り返すことを考えると10で割るトータルの回数に違いが出ないから改善しなさげ……orz
むしろ2進数で計算して10進数にするのではなく最初から10^n進数表現(ただし10^n < UINT32_MAXとか)で2^Nの計算の方を実質10進数でやった方が速そう
計算の手間がO(N^2)なのは変わらないが、割り算無しで済むのは大きいい(多分、
622デフォルトの名無しさん
2022/05/05(木) 03:19:38.09ID:Hm4Z5Kkb 2^Nを10^n進数表現(ただし10^n < UINT32_MAXとか)で計算するのはうまくやれば(10^nをUINT_MAXとかよりやや小さめにしたら)
掛け算によるキャリーの伝搬頻度を減らせるから副次的にさらなる高速化の余地が生まれ得る、
掛け算によるキャリーの伝搬頻度を減らせるから副次的にさらなる高速化の余地が生まれ得る、
623デフォルトの名無しさん
2022/05/05(木) 06:04:52.05ID:zLdy+6M7 繰り返し二乗法で大きい素数のmodを計算すれば良いだけ
整数の商がいくらかもすぐ計算できるので、簡単に復元できる
復元した値をメモリに持つかどうかは別の話
はい終わり
これしきのことも分からない奴ら頭ヤバいよ
言語仕様の話ばっかり大好きでアルゴリズムの知識が微塵もないボンクラ
競プロキッズのこと馬鹿にできないね
整数の商がいくらかもすぐ計算できるので、簡単に復元できる
復元した値をメモリに持つかどうかは別の話
はい終わり
これしきのことも分からない奴ら頭ヤバいよ
言語仕様の話ばっかり大好きでアルゴリズムの知識が微塵もないボンクラ
競プロキッズのこと馬鹿にできないね
624デフォルトの名無しさん
2022/05/05(木) 06:34:28.46ID:JqRzkj2D 素直に10進多倍長で計算すればいいだけ
今のPCならすぐ
今のPCならすぐ
625デフォルトの名無しさん
2022/05/05(木) 06:58:12.94ID:ghaa3vLm626デフォルトの名無しさん
2022/05/05(木) 08:43:37.74ID:Hm4Z5Kkb 自演ちゃうねん
繰り返し二乗法の適用を思いつかなかったのは太くの至りで宦官の至りやが
2^N計算を10^n進数ベースでやるときに適用して高速化するやり方しか思いつかん
>大きい素数のmodを計算すれば良いだけ
とは何ですか(・∀・)?
繰り返し二乗法の適用を思いつかなかったのは太くの至りで宦官の至りやが
2^N計算を10^n進数ベースでやるときに適用して高速化するやり方しか思いつかん
>大きい素数のmodを計算すれば良いだけ
とは何ですか(・∀・)?
627デフォルトの名無しさん
2022/05/05(木) 10:32:36.82ID:CLlK/Ylr 興味本位で全桁表示したいだけなら5171655947桁あることを知って諦めてほしい
/と%による単純な基数変換を使うにしても、/も%も桁数Nに対してO(NlogN)程度かかるらしく、それだけかかってようやく1桁求まるレベルなんで、まあ無理よ
概算したいだけなら高校生でも知ってる対数を使う方法で4.637182185+e5171655947くらいと分かる
/と%による単純な基数変換を使うにしても、/も%も桁数Nに対してO(NlogN)程度かかるらしく、それだけかかってようやく1桁求まるレベルなんで、まあ無理よ
概算したいだけなら高校生でも知ってる対数を使う方法で4.637182185+e5171655947くらいと分かる
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★5 [BFU★]
- 「母の部屋に安倍氏が表紙の機関誌が」「(安倍氏が被害者なのは)不思議に思いませんでした」山上被告の妹が証言 [おっさん友の会★]
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
- 「韓国人の高市早苗評」、限界突破。 [592058334]
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- 【悲報】サッカー北朝鮮代表、日本代表に思いっきりグーパン。想像以上に殴ってるやつが居る [483862913]
- 1,000万円のBMWに擦ってしまった札幌のガキ、捕らえられてガチで詰む [329329848]
- 青森のラーメン店、ライス・メンマ無料サービスを始める→ありえない残し方をした人が100人になったら即終了→すでに2人残してあと98人 [808139444]
- 【悲報】ヤフコメ民「中国が水産物を輸入禁止にするなら、日本国民向けに安く販売すればいい。中国依存から脱するべき」 [153736977]
