1 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 18:49:18.44 ID:I69rZ/Of.net] 前スレ C++相談室 part157 https://mevius.5ch.net/test/read.cgi/tech/1628474251/
593 名前:デフォルトの名無しさん mailto:sage [2021/12/29(水) 21:55:43.45 ID:+eZ32Uo6.net] >sin(x)=0の所は微分が1または-1、入力のずれがそのまま出力に出る所 x << 1のとき sin(x) ≒ x であることの見事な工学的応用、
594 名前:デフォルトの名無しさん mailto:sage [2021/12/29(水) 21:57:34.77 ID:+eZ32Uo6.net] まつがえた |x| << 1 やったorz
595 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 01:48:03.91 ID:L6Vpkxay.net] よっしゃ、よっしゃ、おっちゃんがいいもん作ったろう https://ideone.com/fjxKtS n=0,10000, 20000, 30000, ...,1000000 (とりあえず10000刻み)として、 2分探索でsin(x)=0となるxを、2π*n付近について調べてやった そうやって求めたxをM_PIで割った結果はきっちり2*nになるから sin(x)がxの周期関数だからといって必ずしもxの増大につれ誤差が増えるわけではないことがワカル sin_valの値(=sin(x))が0に対して増えたり減ったりするのはマクローリン展開の近似多項式の係数を 結果があたりさわりのない誤差範囲でうろうろするように調整してあるんだろJK、
596 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 01:51:27.40 ID:L6Vpkxay.net] やっぱ>>562 というものが>>559 の誤差の真相なのではな いか
597 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 02:32:05.49 ID:7UdZ08Kf.net] >>588 結果見たけど、sin_valの値は、きっちり0から10000になったときに5桁精度悪化してるし、100000で6桁精度悪化してるのでは…?
598 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 07:31:31.40 ID:xtSEOuqd.net] >>589 パッと見だけど>>565 が答えじゃねえの 浮動小数点てのは文字通り小数点位置が異なる 数値が1付近と100万付近じゃ精度が異なるのは当たり前 精度を保つなら固定小数点使わないと
599 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 11:37:53.79 ID:ZhVAaRAF.net] まだやってたのか小学生・・・ID変えてご苦労様
600 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 11:39:17.39 ID:ZhVAaRAF.net] 何度も言ってるが>>560 でこの話は終了している
601 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 12:38:33.70 ID:A3EHubzP.net] 質問主が現れないからもう何議論しても無駄な気がする ソースコードがあるわけでもないし 100万程度で誤差ヤバい言うぐらいだからfloatで計算してないか疑たくもなる
602 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 14:43:33.58 ID:Wt/MKF34.net] 誰も計算機上のゼロについて理解できてない
603 名前:デフォルトの名無しさん mailto:sage [2021/12/30(木) 16:49:59.36 ID:uaiyfMI5.net] もまいら、浮動小数点のゼロ判定どうしてる?
604 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 00:22:01.38 ID:kcosmPcn.net] vectorでクラスへのポインタを持ってて、それを参照で受け取る関数を作るとき、クラスの変更を禁止したいんですが、どうすればいいですか? 例えば、 struct testclass{ int member; }; というクラスがあって、 vector<testclass*> を参照渡しで受け取る関数を作るとき、引数をconst vector<testclass*>& vecとしてもvec[0]->member =0みたいなクラスのメンバ変数の変更は関数の中で出来てしまうと思うのですが、そういうのをできないようにしたいです(testclassの変更が無いことを関数宣言で保証したいです) 何か良い方法ありますか? vectorが1重であればtestclass const*const*を引数にすればいいとは思うのですが、vector<vector<testclass*>>のように多重vectorみたいな場合も作りたくて、そのときは関数を呼ぶ側で多重vectorから多重配列に変換するのは面倒なので、できればvectorではなく配列を使うというのはしたくないです
605 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 00:36:47.69 ID:ysmsTKqS.net] >>597 禁止しない もしくはメンバ変数を非publicにしてgetter/setter
606 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 05:02:18.38 ID:zF3P5q1E.net] だから絶対値が1e-14とかより小さいかどうかだって >>585 なんかは全く理解してないようだが
607 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 05:10:34.66 ID:zF3P5q1E.net] ちなみにsinがゼロのとこは微分が1か-1でsinが1のとこは微分がゼロだから違うってのは、事実だが今回の事象の説明としては感覚的に過ぎるね なぜならf(x) = xなる関数は微分は1だが f(1000000.3575642) は14桁正しいw sinの挙動について理解したいなら実装に踏み込むしかないよ あるいは>>576 あたりで思考停止しとくか
608 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 06:37:46.15 ID:qJZ2APUI.net] >>597 アクセスを厳密に禁止したいなら、配列操作のみ定義したラッパークラスを用意して渡したほうが良い。
609 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 08:06:29.68 ID:FnYy2lty.net] んだね
610 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 08:45:47.76 ID:FPee+d5o.net] クラス T のメンバ関数で自身のコピーを返す(つまり返り値の型が T)ものを考える メンバ関数の修飾が && のときは std::move(*this) とかしたいけどこれはいちいち書かないとダメ? 普通は std::forward で統一できるが
611 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 09:05:22.16 ID:FnYy2lty.net] *thisはxvalueではないからムブコンに渡したければstd::move()か(T&&)がいるね
612 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 11:52:30.35 ID:kcosmPcn.net] >>598 ありがとうございます ただ、 >メンバ変数を非publicにしてgetter/setter これだと結局setterでメンバ変数を変更できてしまいますよね? >>601 ありがとうございます、検討してみます
613 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 14:47:55.66 ID:fEOKhR13.net] instance.field; が暗黙のうちに書き変わらないだけでも効果あるんだよ void f(T&t){ t.clear();} f(instance.field); うっかりこんなことしたらヤバいし const T& get_field() const; を使っとけばコンパイル時エラーにしてくれる >>597 冒頭の質問なら、参照渡し引数に void f(const T&); のようにconstつけとけばいい
614 名前:デフォルトの名無しさん mailto:sage [2021/12/31(金) 15:16:00.18 ID:7kXupeFa.net] >>597 まだ標準に入ってないけど、propagate_const使うとか https://ideone.com/O8a0hn
615 名前:デフォルトの名無しさん [2022/01/04(火) 07:21:58.04 ID:5hvio7Nh.net] Packtpubが不安定になってるんだけど。 見れますか?
616 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 21:49:37.99 ID:2R8vvmqQ.net] クラステンプレートについて、明示的実体化しておけば実装を.cppでもできるというのを知ったのですが、その場合、テンプレートでない普通のクラスと同じように 部分的にヘッダに実装を書いて、残りを.cppに書く、というのは正式な書き方として許されるでしょうか?
617 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 22:24:10.67 ID:tiBxT68+.net] 許される。
618 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 22:48:02.56 ID:2R8vvmqQ.net] >>610 ありがとうございます!
619 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 15:12:35.27 ID:C9LB+2SX.net] その昔、exportテンプレートというのがあってだな
620 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 00:07:55.52 ID:UgPywUlD.net] class T; class C { public: T t; }; とあったとき C c{T()}; と集成体初期化を行うと T のコンストラクタが1回だけ呼ばれます メンバ t をカプセル化してコンストラクタを自分で用意するとどうやっても T のムーヴコンストラクタが余計に1回呼ばれてしまうと思ったのですが回避する方法はありますか?
621 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 02:01:17.79 ID:uUhimsKL.net] >>613 直接的にはないけど optionalとかvariantにあるin_placeコンストラクタと同じことをすればTのコンストラクタ呼び出しは一回で済みそう
622 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 20:51:50.26 ID:UgPywUlD.net] >>614 ありがとうございます!
623 名前:デフォルトの名無しさん mailto:sage [2022/01/09(日) 10:55:01.80 ID:7BGFeByJ.net] >>597 配列の定義を vector<const testclass*> にすればよくない?
624 名前:デフォルトの名無しさん mailto:sage [2022/01/09(日) 11:30:20.08 ID:BcvcYHng.net] 外では変更するけど関数内では変更しないことを明示したいんでしょ
625 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 09:32:50.44 ID:kvnPCGqB.net] 関数の定義で auto foo() -> void{} みたいに書くの見かけたけどこのやり方何かメリットありますか?
626 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 12:16:01.64 ID:SK9+pElf.net] あるね auto s = std::string{"test"}; みたいな宣言とかも
627 名前:デフォルトの名無しさん [2022/01/12(水) 12:26:17.78 ID:Z0p/7uhd.net] >>618 は型推論効いてないやん
628 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 12:28:40.33 ID:VUzGdiiG.net] 戻り値の型を->の先に書いてあるだけだよ。 だからこれはvoid型の戻り値ね。 利点は引数からdecltype使って戻り値の型を指定できるくらいじゃない?
629 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 13:45:01.07 ID:uq5/9jO3.net] https://www.fluentcpp.com/2018/09/28/auto-stick-changing-style/ この記事で論じられているね
630 名前:はちみつ餃子 mailto:sage [2022/01/12(水) 13:59:43.98 ID:7Sv8jpqL.net] ラムダ式で返却値の型をどう書くかというのが後置スタイルを導入した直接の動機だと思う。 普通の関数で後置にするメリットがない場合であっても、 メリットがある場合とない場合で区別して使い分けるよりは全部を後置で一貫させたほうが綺麗だと思うこともあるだろ。
631 名前:デフォルトの名無しさん [2022/01/12(水) 17:10:39.04 ID:VRtGvzgV.net] みずほが復旧をあきらめるとかどうみてもfukkyu
632 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 18:43:03.08 ID:NICGWYWs.net] 人がつくったものネットから持ってきて何個も組み合わせて合体させるとみずほみたいになるんだろうな 自分で作ってない部分はメンテしようがないからな
633 名前:デフォルトの名無しさん [2022/01/12(水) 19:53:35.19 ID:UH3nST5b.net] Windows serverにしたのが最大の間違い。
634 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 20:51:55.49 ID:VUzGdiiG.net] std::stringの大文字を全て小文字に変換するのってstd::transformより良いものあるの?
635 名前:デフォルトの名無しさん [2022/01/12(水) 22:50:55.12 ID:VRtGvzgV.net] Windowsで文字列中の大文字を小文字に変換する_mbslwr()って今やランタイムで使えなくなってんだね、知らんかったわ
636 名前:蟻人間 mailto:sage [2022/01/12(水) 23:14:22.56 ID:htST1fFk.net] CharLower CharLowerBuff
637 名前:デフォルトの名無しさん mailto:sage [2022/01/13(木) 21:50:13.52 ID:bN4t5i1e.net] c++のexe → ライブラリA(c++のdll) と c++のcリンケージのdll → ライブラリA(c++のdll) で 同じライブラリの同じ関数を呼び出してるのに 呼び出し元の形態によって挙動が変わるなんてこと有り得ますか?
638 名前:デフォルトの名無しさん mailto:sage [2022/01/13(木) 22:14:06.74 ID:+PFReeTS.net] ライブラリも呼び出し元も外部の同名のdllをリンクしているけれども 呼び出し元が参照しているdllの実体が別だったとか。
639 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 09:16:33.28 ID:ovvIshUS.net] struct Vector2 { float x, y; };のような64bitで済んでしまうものの計算にSSE命令を使っても高速化は見込めないのでしょうか? 上記に対して_mm_mul_psを行うと上位2float分を余計に計算させることになってしまいますよね
640 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 05:56:06.60 ID:ps658RNN.net] >>603 deducing thisがC++23で入るね
641 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 16:29:52.27 ID:fx8S/FAM.net] >>632 余計に計算させるけど一命令で済むよ ただし速度以外のデメリット出てくるけど
642 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 12:31:04.34 ID:20f7Ghpo.net] >>630 同じ関数というのが関数名と引数の数が同じというだけなら extern "C" double sqrt(double x); extern float sqrt(float x); とから有り得る
643 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 15:18:31.08 ID:sD13NBSV.net] pair<int, int> の first と second に、例えば座標と向きのような意味をもたせてるとします このとき、using なんかを使って pair<int, int> x の第一要素と第二要素に x.pos、x.dir のようにアクセスする方法ってありますか?
644 名前:はちみつ餃子 mailto:sage [2022/01/17(月) 15:34:47.07 ID:jU2WrI4n.net] >>636 C++ ではメンバ (のように見えるもの) を後から生やすことは出来ない。
645 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 16:04:32.58 ID:+6BKuldY.net] auto& [x, y] = obj; x = 100; y = 100; 動くかは試してない
646 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 16:07:55.78 ID:h5bglXe3.net] >>636 そういうあちこちで使う用途の、はっきり意味が決まった構造体は pairやtupleに頼らない方が(大抵の場面では)便利だよ その一箇所でしか使わないならpairでいいと思うけど
647 名前:はちみつ餃子 mailto:sage [2022/01/17(月) 16:18:00.13 ID:jU2WrI4n.net] いくつかの要件を満たして "Tuple-like" であるようなクラスはタプルのように扱える仕組みがある。 タプルを多用途に使うよりは個別のクラスを作った上でタプルのインターフェイスを持たせるほうが 使いやすくなると思う。
648 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 16:55:14.33 ID:aOF99LGB.net] >>636 まず構造体を勉強しよう
649 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 17:09:52.53 ID:bBHBfELI.net] struct だと困るんですか?
650 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 17:35:43.45 ID:AdXHrviP.net] みなさん御機嫌よう このスレには何度も助けられているものです 再度お知恵を拝借したいです 任意のユーザー定義型のインスタンスhogeが、基底クラスbaseを継承しているか調べたいです。 この一例のみならtypeidで合致させればいいと思うのですが、実際は派生クラスが200くらいある予定です。 type-traitでインクルード出来るstd::is_base_ofで、RTTIを使い判定しようとしたのですが、typeidで取得できる型で合致させようとしたところ型情報が合いません……orz どんな方法でもいいので何かいい方法がございましたらご教授いただければと思います。 class base{}; class driv:public base{}; class foo{}; //もしhogeがfoo型のインスタンスなら偽を、drivのインスタンスなら真を返したい関数 bool exHantei(){}
651 名前:はちみつ餃子 mailto:sage [2022/01/17(月) 17:43:03.78 ID:jU2WrI4n.net] 老眼なので Hantei が Hentai に見えた。
652 名前:はちみつ餃子 mailto:sage [2022/01/17(月) 17:49:59.30 ID:jU2WrI4n.net] >>643 静的な型を判定するならこういうのでいけると思うが、 RTTI が出てくるってことは状況が違うのかな? #include <iostream> #include <type_traits> class base{}; class driv : public base{}; class foo{}; template<class T> bool exHantei(const T&){ return std::is_base_of<base, T>::value; } int main(void) { driv hoge; foo huga; std::cout << exHantei(hoge) << std::endl; std::cout << exHantei(huga) << std::endl; }
653 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 20:3
] [ここ壊れてます]
654 名前:6:31.89 ID:PMmhhAT1.net mailto: dynamic_cast<base*>(hoge)がnullptrかどうかを見ろ [] [ここ壊れてます]
655 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 20:47:22.64 ID:6BYLlYWJ.net] >>643 bool exHentai(){ return std::is_base_of_v<base, std::remove_reference_t<decltype(hoge)>>; }
656 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 20:49:09.31 ID:AdXHrviP.net] >>645 ありがとうございます。 ただ今これで動作確認はしました。 が本来は基底クラスのポインタに格納されているのです…… 書き込む時に蛇足と思って省いてしまったのですが、実際は class base{}; class driv:public base{}; class WantToFind:public driv{} std::vector<base*> VecBasePtr; void pusbak() { WantToFind f1; VecBasePtr.push_back(&f1); } というようにベースポインタに押し込んで使っていて、exHantei()を使用する時にはベースとこのポインタを比較することになります。 今はちみつ餃子様のコードで動作確認をした後、自分のコード用に書き直したところ、ポインタから型を取得させる動作ができません(泣) てっきりtypeidと同じ様に、exHantei(*VecBasePtr[0]);と*を付けてポインタの中身を外に出せば生のWantToFind型が出てくるかと思ったのですが…… 思い通りの動作が出来ませんでした。 どうしてなんですかね、、、 デバッグモードで確認してもわからない もちろんbaseに仮想関数は置いてあるので、RTTIで動作してくれるものと思っていましたが。 Templateの機序が違うのかな……?
657 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 21:03:17.46 ID:PMmhhAT1.net] だからdynamic_castで調べろって そのための機能だから
658 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 21:36:21.92 ID:AdXHrviP.net] >>649 ありがとうございます!!! 確認しましたところ自分の思っている動作が得られました☆*:.。. o(≧▽≦)o .。.:*☆ こんなに簡単に出来るとは、is_base_ofの使い所さんはどうなってしまうんだ。。。 レスへの返信を書きながら、自分でもコード確認やリファレンスを検索していたため、スレの確認が遅くなってしまい、多くの型と行き違いになってまいました。 返信をくださった方々には重ね重ねお礼申し上
659 名前:げます。 まだまだ弱輩者ですが、これからも生暖かい目で返信くださると幸いです。 皆さんありがとうございます! [] [ここ壊れてます]
660 名前:はちみつ餃子 mailto:sage [2022/01/17(月) 21:36:54.84 ID:jU2WrI4n.net] >>648 動的型で継承関係を確かめるなら >>646 が述べている通り dynamic_cast で実際に変換してみるのは手っ取り早い方法だと思う。 > 生のWantToFind型が出てくるかと思ったのですが…… 「生の」ってなんやねん。 その場合の *VecBasePtr[0] の静的型はあくまで base だよ。 オブジェクトの base である部分 (サブオブジェクト) が取り出される。 いわゆるスライシング。
661 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 21:37:50.95 ID:AdXHrviP.net] dynamic_castは知ってたはずなのに思い出さなかったというか思いつかなかった……
662 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 21:46:56.12 ID:AdXHrviP.net] >>651 ありがとうございます。 自分はスライシングもちゃんと理解してないですね…… ポインタのメモリ確保サイズが一様に8バイト(4バイト)なので、基底型が派生型の型を丸ごと格納している(派生型のポインタを確保している)と理解していました。。。(*を付けると派生型が出てくる) 悪魔でも基底型なのですね? キャストで受けるまでは基底型として扱われるので、型情報が合致しなかったのかな。 type_infoは、全く別の型を型合致に使うから*baseが有効なのかな。
663 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 21:55:40.15 ID:h5bglXe3.net] dynamic_castって仮想関数テーブル必要じゃなかったっけ? まぁいずれにせよ仮想関数テーブルでぐぐればそこらへんの理解が進むと思う 多分
664 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 17:29:06.73 ID:u/w202Yd.net] スライシングとか知らない単語使わないで
665 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 18:16:17.94 ID:oZ05fVjC.net] 用語って大事だよな 言葉遣いがおかしいの指摘されると逆ギレする DQN気質なやつが残念ながら後を経たない
666 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 05:34:44.25 ID:tJtJ60TC.net] https://cpplover.blogspot.com/2018/07/c20.html?m=1 汎用エイリアス宣言の提案ってどうなったんだろう
667 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 09:07:39.69 ID:PFfSIkf2.net] #include <cctype> //#include <string> template <typename F> void test(F&& f){} int main(){ test(std::isprint); } これ<string>を有効にするとcouldn't deduceになるんだけど なんで? コンパイラはMSYS2 g++ 10.3.0
668 名前:デフォルトの名無しさん [2022/01/20(木) 09:24:47.83 ID:MuVW7weO.net] 名前衝突してんじゃないの?
669 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 09:37:40.24 ID:PFfSIkf2.net] <locale>のテンプレートが干渉してるっぽいことはわかった これ、俺の落ち度なの?
670 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 13:32:22.34 ID:NzUGMacM.net] >>660 オーバーロードやデフォルト引数が追加される可能性があるから、 一般的に標準ライブラリ関数のアドレスは取れないと思ったほうがいい。 https://isocpp.org/std/standing-documents/sd-8-standard-library-compatibility
671 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 18:29:19.36 ID:PFfSIkf2.net] ぐぶー・・・
672 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 22:37:24.73 ID:Df2OyNH0.net] ランタイムサポートが必要なC++言語機能ってRTTIやdynamic_cast、例外くらい?
673 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 23:29:32.85 ID:a5eQ4sV9.net] そもそもランタイムサポートの定義をちゃんとしないとな・・・
674 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 00:00:01.47 ID:/d5tBos9.net] RTTIも例外も標準C++の一部 それが使えないような設定は厳密には規格違反だし、それで高速化や効率化しますってのは各コンパイラの独自機能に過ぎない
675 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 01:04:31.52 ID:VVQk5y8F.net] アホすぎるw
676 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 07:18:18.80 ID:j/G12RQ8.net] dynamic initializationも裏で色々やってるね
677 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 07:28:47.34 ID:VVQk5y8F.net] とりあえずOSないところか、簡単な仕組みしかないところでC++で何か書いてみればいいよ 処理系が何をしてくれているのか分かる
678 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 07:43:11.40 ID:j/G12RQ8.net] ベアメタルはオモロイ
679 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 07:59:33.55 ID:j/G12RQ8.net] 658だけど、自己解決の報告。 テンプレートにしないで void test(int(*f)(int)){} にしたら<locale>のisprintが干渉しなくなった 最初の発想がいかんかった
680 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 08:26:30.46 ID:VVQk5y8F.net] isprintのテンプレート引数が決まらないからだろ test(std::isprint<int>); とかなら通ると思う
681 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 08:32:03.82 ID:VVQk5y8F.net] compiler explorerのarm g++ 10.3で確認した。ヘッダはlocaleにした。 #include <locale> template <typename F> void test(F&& f){} int main(){ //test(std::isprint); test(std::isprint<int>); }
682 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 08:47:07.93 ID:VVQk5y8F.net] 元のコードをなるべく変えずにだと #include <string> #include <cctype> template <typename F> void test(F&& f){} int main(){ test(static_cast<int (*)(int)>(std::isprint)); } ※オーバーロードを選択させるべくキャストする
683 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 09:54:53.25 ID:j/G12RQ8.net] conceptでテンプレートテンプレート引数を弾いたりできないかとも思ったけど SFINAEは関数の除外なので引数の候補を絞るのは無理だった
684 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 10:28:58.52 ID:om6KWGu4.net] class A { static inline struct SubStruct { int value; } Field1; } //通常の構造体のスタティックメンバ変数はヘッダファイル、cppファイル共に実体は同じ class A { static inline struct { int value; } Field1; } //無名構造体のスタティックメンバ変数はヘッダファイルとcppファイルとでそれぞれ別の実体が生成されアドレスが異なる この挙動は仕様なのでしょうか?
685 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 10:57:07.60 ID:OQdcFc3P.net] 名前書き忘れて0点取ったことないのか
686 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 11:38:04.16 ID:+VFNw8nk.net] 今だと仮想関数とvariantとどっち使うのが主流ですか?
687 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 11:49:22.43 ID:XNgWTOyh.net] >>675 名前のない構造体には実体がなく外部リンケージを持たないのでそこに対するinline指定は無視されるってことでは? 分かりにくいけど仕様として矛盾してはいないと思う
688 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 13:06:33.51 ID:BllOBQpy.net] >>675 「ヘッダファイルとcppファイルとでそれぞれ別の実体が生成されアドレスが異なる」という状態をどうやって観測しているの? そんな挙動しないと思うんで、観測方法に間違いがありそう。 >>678 名前のない構造体もクラス型としては存在するし、それとは別に変数 A::Field1 は外部リンケージを持つよ。 https://timsong-cpp.github.io/cppwp/n4861/basic.link#5 > In addition, a member function, static data member, ..., has the same linkage, if any, as the name of the class of which it is a member.
689 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 13:08:52.36 ID:BllOBQpy.net] >>678 あと仮にinline指定が無視されたとしても「別の実体が生成される」というような動作には繋がらないね。
690 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 13:59:06.18 ID:0LC8SyT+.net] >>599 アーハン? doubleで表現可能な最小の数と1e-14の大小関係もわかんない人なんですかね、、、
691 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 14:05:40.45 ID:0LC8SyT+.net] >>593 その2π周期というのが厳密に2*M_PI周期であることの根拠は? >>560 の時点ではそれは示されていなかった >>588 で2*M_PI周期と言う実験結果がデタ
692 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 14:11:22.71 ID:0LC8SyT+.net] >>596 万能の一般論は無い(キリ なぜなら、f(x)が0かどうかの判定をしたいとして、±|處を0とみなすべきなのかは f(x)の精度に依存するから ただし、>>560 式に f(x1) と f(x2) の等値判定なら >>560 式にやりうる これは f(x1) - f(x2) のゼロ判定として>>560 式にやればよろっし
693 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 14:15:01.32 ID:0LC8SyT+.net] アンカーミスった;;;orz s/>>560 />>588 /g