22/05/21 15:01:05.79 0jWT+RR4.net
>>982
そんな曖昧な態度だから、マクロによるインラインが跋扈してしまうんです、inline に限っては強制力を伴うべきでしょう、#define マクロを葬り去りたいのなら
1028:デフォルトの名無しさん
22/05/21 15:01:21.03 OwY6A3+8.net
そう
あくまでヒント
ヒントになった理由は
世の中のプログラマーがアホだから
1029:デフォルトの名無しさん
22/05/21 15:01:54.43 OwY6A3+8.net
#defineは永遠に不滅です
1030:デフォルトの名無しさん
22/05/21 15:23:50.89 ocVGFLUP.net
CRTPにするとインターフェース継承してもインライン展開されるのほんとまじ意味わからん
1031:デフォルトの名無しさん
22/05/21 15:35:03.49 0jWT+RR4.net
>>984
マクロ跋扈とを許す設計者の方がもっとアホですね
1032:デフォルトの名無しさん
22/05/21 15:39:45.82 LSoM7sSc.net
誰の方がアホとかどうでもよくて
アホだからそういう仕様になった
1033:デフォルトの名無しさん
22/05/21 16:03:58.87 DcWHGr0j.net
ちと別件に取り掛かったのでソースコードを見ながらではなく想像やが
>>695 のソースコードでやっている頻繁なswapの意図がわかった希ガス
X(k) = Σ[j=0..n-1]{ x(j) * w^(j*k) }
を計算するとき項の足し合わせ順序はどうでも良く、かつk>1なら
j * k = 0 (mod n) --- (1)
となるx(j) * w^(j*k)が複数回現れるから、(1)を満たす項の出現回数が大きいものを最初に足し合わせたらたちまち
(出現回数)-1語 のメモリが空く、というのが基本的着想で、
これを異なるkについて繰り返し行う場合(1)を満たす最大の出現回数となるjの系列jはk毎に相違するから、
kについての繰り返しについても部分計算を片付けてメモリを空けつつ進められ、
結局jとkの2重ループについてメモリを空けつつつつがなく進められるというしくみ(多分
1034:はちみつ餃子
22/05/21 16:11:12.45 JD6rd3hb.net
>>981
inline は ODR の例外。 また、異なる翻訳単位の同じ定義が統合されることを保証する。
これは C++98 のときからそう。
インライン化が望ましいことの指示であるとは書いてあるけど、
今では変数にも inline を付けることが出来るようになったのはもはや inline は ODR の例外としての意味がメインだと考えるべき。
1035:デフォルトの名無しさん
22/05/21 16:29:48 9lV47uLv.net
>>981
展開を強制したいならforceinlineあるやんけ(メジャーなコンパイラの拡張だけど
1036:デフォルトの名無しさん
22/05/21 16:47:52.13 x3bK44aY.net
onlineも導入すべき
1037:デフォルトの名無しさん
22/05/21 17:00:45.58 +x02zxlN.net
>>952
こんなのあるんか便
1038:利そうだな まあ汎用的なデータ構造だと暫定未定義にするだけでもいいと思うけど、用途が決まってるクラスに関しては制約をつけたものを用意しておくのが無難だろうね
1039:ハノン
22/05/21 17:25:58.12 0jWT+RR4.net
>>991
情報ありがとうございます。
>>990
ここで One Definition Rule がリファーされるのに直観的違和感を覚えます‥‥
が、反論はゆっくり考えますのでしばらくお待ちください、様々な視点を提供いただき感謝しております
1040:はちみつ餃子
22/05/21 17:56:26.14 JD6rd3hb.net
>>994
inline というキーワードの選択が不自然なのはわかるが inline はインライン化の指示というよりは
インライン化に都合のよいように制限する指示と考えるとそんなに不自然でもない。
① C/C++ は翻訳単位ごとに個々にコンパイルしてからリンクする手順を取る
② 他のコンパイル単位にある定義の内容はわからんのでインライン化するためには翻訳単位の中に定義がある必要がある
③ ヘッダに関数定義を書きたい
④ ヘッダに定義を書くと ODR 違反やろ
⑤ じゃあ ODR の例外を設けよう。 inline って付けたら ODR の例外な!
1041:デフォルトの名無しさん
22/05/21 18:53:36.34 0jWT+RR4.net
>>995
>>995 でいう定義は宣言に置き換えるべきでは?
ODR はあくまでも定義の話であって、宣言の話ではないかと考えます、私の勘違いでしょうか?
実装的には inline のついた関数定義が外部にリンクされる可能性があれば、すなわち extern な iniline 関数があれば、リンクのためのコード体を、各所に inline に展開されるコード体とは別に(こっそり)用意しておく、見たいな感じで十分に実装可能ですね
1042:はちみつ餃子
22/05/21 19:24:52.72 JD6rd3hb.net
>>996
外部に見せる用の実体のある定義は実際に用意される実装が多いと思う。
でも、その外部では実体を参照することは出来てもインライン化できないよね、各翻訳単位で定義が存在する必要があるよねということを言ってる。
その上で現在では LTO が普及したのでどうでもよくなったけど。
1043:デフォルトの名無しさん
22/05/21 20:03:09.89 0jWT+RR4.net
>>997
なるほど、やっと理解しました
LTO: Link Time Optimization ですか‥‥、トラブルの元で胡散臭いと思っている私は古い人なんでしょうね‥‥、.obj がコンパイラ固有になるのも嫌ですし
1044:デフォルトの名無しさん
22/05/21 20:12:03.42 kYXfaM+5.net
海外の専門用語はわかりにくいのう
日本風にリンオプとか略してくれればいいのに
イニシャリズムみたいな言い方だとなんて言うんだろ
1045:デフォルトの名無しさん
22/05/21 20:15:04.92 0jWT+RR4.net
>>999
村上龍の「5分後の世界」では、略語は使うな、ちゃんと元の言葉を使え、と教育されていますね
ジョージ・オーウェルの「1984」では、略語は謀略的な意味で使われる(小説末尾の appendix: New Speak 解説のカテゴリーB)ようですね
これらに影響されて、略語を連発するのは望ましくないという言語観を私は持っていますが
1046:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 36日 11時間 35分 33秒
1047:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています