- 1 名前:デフォルトの名無しさん mailto:sage [2019/11/07(木) 11:35:36.76 ID:4wggfTwe.net]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part145 mevius.5ch.net/test/read.cgi/tech/1568362404/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.105【環境依存OK】 mevius.5ch.net/test/read.cgi/tech/1556142878/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語)
- 277 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:46:50.29 ID:FauhtWma.net]
- >>270
多謝!!! しりませんでした。
- 278 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:49:29.81 ID:sE/nea3J.net]
- >>269
私は特に仮定はしていませんが、四倍浮動小数点型などに興味があり、 それを整数演算に置き換えて実装してみようかと思っていたりするので、 割る数も割られる数も同じくらいのBIT数の整数の場合に興味があります。 前に調べたところ、倍精度浮動小数点演算を用いて、四倍精度浮動小数点 の乗算、除算まで実装する方法があるようですね。ただし、その場合、 Intelの内部拡張倍精度(80BIT)方式をONにしていると駄目なんだそうですが。
- 279 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:57:18.80 ID:78UVTJ0X.net]
- >>272
4倍弱精度なら Haswell以降で使えるFMA命令がとても約に立ちます
- 280 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:58:49.33 ID:YRq1zw3m.net]
- >>264
こっちで試した限りだと、debugとreleaseでコンソール表示の長さは変わらんかったぞ x86とx64なら差が出たが
- 281 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:59:27.13 ID:sE/nea3J.net]
- >>265
aがN BIT の場合、例えば、1/a を、64BIT 程度で求めた場合は、 (N / 64) (回) 程度の乗算が必要になりそうです。 1/a を高速に N BIT まで求めるアルゴリズムがありますでしょうか?
- 282 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 22:59:32.53 ID:78UVTJ0X.net]
- それ以前の普通の乗算でも出来るけど
AVXでSIMD化出来るのでたくさん計算するならぜひ
- 283 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:01:27.32 ID:sE/nea3J.net]
- >>273
興味深いです。教えていただければ幸いです。
- 284 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:02:58.56 ID:YRq1zw3m.net]
- >>274
メモリダンプという言葉をみおとしていた スレ汚しすまぬ
- 285 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:05:02.93 ID:78UVTJ0X.net]
- >>275
私が何度か除算は乗算の3倍の時間と書いたのは 例えば100万桁同士の除算は100万桁同士の乗算の3倍な時間という意味 乗算命令の回数ではなくて aが100万桁で1/aを100万桁精度で求めるのは 100万桁同士の乗算の2倍くらいの時間で出来る
- 286 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:10:41.35 ID:sE/nea3J.net]
- 例えば、割り算部分をテーラー展開ですか。
- 287 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:17:37.02 ID:78UVTJ0X.net]
- >>277
{a_hi, a_lo} と {b_hi, b_lo} の乗算で a_hi * b_hi を求めてから、 本当の a_hi * b_hi との誤差を求めるところ c_hi = a_hi * b_hi とやってから a_hi * b_hi - c_hi をFMAでやれば誤差が簡単に求まる
- 288 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:19:37.46 ID:78UVTJ0X.net]
- fusedな3個の足し算命令とかもあると
加減算も簡単になるんだけど そんな命令は(他のCPU含めて)見たことがない
- 289 名前:デフォルトの名無しさん mailto:sasge [2019/11/26(火) 23:24:07.48 ID:sE/nea3J.net]
- a=1+q の時:
y/a=y/(1+q) =y*{1 - q + q^2 - q^3 + ... } =y*(1-q*(1-q*(1-q...))}
- 290 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:30:51.74 ID:sE/nea3J.net]
- >>283
この式は、|q|<1の場合にだけ正しいので、 aをa=u*2^n (u = 1.0 + q)の形式に直してから 1/a = 1/(u*2^n)=1/(1+q)*2^(-n) = (1-q*(1-q*(1-q...)))*2^(-n) とするのですかね。 なるほど、qの精度を考えれば、乗算の回数は2個くらいまで で済みそうですね。
- 291 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:36:41.80 ID:sE/nea3J.net]
- >>284
すみません、これだと二回では精度が足りなさそうですね。
- 292 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:37:21.85 ID:78UVTJ0X.net]
- 多倍長の1/aの話なら
テーラー展開は遅すぎて使いませんよ 4倍弱精度の話であれば 除算命令やテーラー展開は使いますが どれの話をしてるのかわかるようにかいてくれませんか? >>238 の通りなので
- 293 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:49:53.60 ID:sE/nea3J.net]
- >>286
多倍長の 1/a はどうやって求めたら効率が良いのでしょうか?
- 294 名前:デフォルトの名無しさん mailto:sage [2019/11/26(火) 23:53:50.60 ID:78UVTJ0X.net]
- >>228
- 295 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 00:00:48.09 ID:T7KqQ5kC.net]
- >>288
もしかすると、 y = 1/(a*x) - 1 と y = 0 の交点をニュートン法で求めるのでしょうか。
- 296 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 00:02:25.36 ID:T7KqQ5kC.net]
- >>289
すみません、違いますね。
- 297 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 00:27:57.72 ID:tKRTExPe.net]
- 初歩的な質問ですみません
2つのdouble型実数xとyを引数とし、x/yとy/xの大きい方を返却する関数を作成せよ。xあるいはyのときは0を返却するとする。という問題でコード書いてみたんですがうまくいきません どこが間違っているのでしょうか #include<stdio.h> double func(double,double); /*プロトタイプ宣言*/ int main(void) { double a,b; printf("実数をスペースで区切って入力してください\n"); scanf("%d %d",&a,&b); printf("%d",func(a,b)); /*呼び出し*/ return 0; } double func(double x,double y) { if(x/y > y/x) return x/y; if(y/x > x/y) return y/x; if(x==0) return 0; if(y==0) return 0; }
- 298 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 00:33:48.17 ID:ynQDuheL.net]
- %dのところがおかしい
それは整数用
- 299 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 00:42:47.79 ID:tKRTExPe.net]
- ありがとうございます 1時間くらい悩んでたのが馬鹿みたいだ
- 300 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 00:53:21 ID:ynQDuheL.net]
- 入力に0を含めてテストするように
- 301 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 01:11:14 ID:tKRTExPe.net]
- ifの順番変えたら完成しました
- 302 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 02:13:53.15 ID:XGkmLsxS.net]
- QZは馬鹿
- 303 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 02:41:24 ID:Q9FMbuzn.net]
- xとyが等しいケースは書いたんじゃろうか
- 304 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 11:43:48.59 ID:g3LmaZYt.net]
- 世にある仕事の数でいうと
java:C#:C++が5:3:1くらいだな。
- 305 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 12:16:41.56 ID:zdI/1sLa.net]
- このスレ過疎かと思ったら話題でた途端に加速するな
- 306 名前:デフォルトの名無しさん [2019/11/27(水) 13:47:03 ID:KtqS+hCI.net]
- const は要らない子
- 307 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 14:58:41.90 ID:vSkP4LPU.net]
- 本当はね・・・constの逆が欲しいのさ
デフォが書き込み禁止で許可を明示だったらと キャプチャのmutableみたいな
- 308 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:05:41.36 ID:Yu9S3/3Y.net]
- めんどくさいだけ
- 309 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:08:54.83 ID:lAIqGT0K.net]
- Pointという点を表すクラスがあって、2点間の距離を取得する関数を追加したいのですが、
double Point::GetDistance(const Point &p) const にすべきか、ただのCの関数で double GetDistance(const Point &p1, const Point &p2) にしたほうがいいのか迷っています。 設計的にいいのはどっちなんでしょうか?
- 310 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:13:19.55 ID:zdI/1sLa.net]
- >>303
下 Pointに必要以上の機能を作らない
- 311 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:32:27 ID:FMRbYBnJ.net]
- 下に1票。同じ理由
- 312 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:33:34 ID:vYtjQlD0.net]
- 下だな
なんでもかんでもインスタンスに生やすのは厨臭くてダサいし、対称な操作は対象に見えるべき
- 313 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:34:48 ID:lAIqGT0K.net]
- >>304
ありがとうございます。 ですよね。前者の考えでいくと、いくらでもメンバ関数が増えそうな気がしていました。
- 314 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:43:43.07 ID:PahKH909.net]
- 下の方が、スカラー値等の既存型や配列向けの特殊化をし易いメリットもあるかもねー
- 315 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 15:55:14.01 ID:xImtWZAs.net]
- ベクトルの引き算を定義してやるのはありでは
- 316 名前:デフォルトの名無しさん [2019/11/27(水) 16:11:06 ID:KtqS+hCI.net]
- 下を造っておいて
operator - で下のを利用 >>309 と同じ どちらも inline
- 317 名前:デフォルトの名無しさん [2019/11/27(水) 16:12:16 ID:KtqS+hCI.net]
- ああ同じではないわ
ベクトルの引き算はスカラーじゃなくてベクトル ベクトルの絶対値を定義する
- 318 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 16:29:07.34 ID:MN5dlGGA.net]
- abs(a-b)
- 319 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 18:11:30.16 ID:p98u22dC.net]
- ベクトルの加減算や符号は紛れが無いのでオペレータで実装
乗算は内積、外積と要素ごとの積の3種類あるので 関数にする 3次元ベクトルも作る可能性があるなら 2次元ベクトルだとわかる名前にしておく 可能性が無いならそのままで 絶対値やノルム、象限などをグローバルにするかメンバ関数にするかは一長一短 設計ポリシー次第
- 320 名前: mailto:sage [2019/11/27(水) 19:16:22.98 ID:N9ggbkQ1.net]
- >>303
私も下 >double GetDistance(const Point &p1, const Point &p2) を friend 関数にします、大事にするのは対照であること、です
- 321 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:21:07.28 ID:fyVQDs9d.net]
- >>187
メモリフラグメントを起こさないようにわざわざメモリプール切ってるのに new/delete繰り返すオマエみたいなアホがいるからまともな製品ができねぇんだろww
- 322 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:29:28.78 ID:vSkP4LPU.net]
- >>315
ほーう? メモリプールでフラグメントが防げるのかww
- 323 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:31:20.95 ID:nSz8Pwyp.net]
- >>314
オペレータだとメンバ関数な実装多いよね なんでだろう
- 324 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:40:34.02 ID:nSz8Pwyp.net]
- RTOSを使うような小規模環境だと
ヒープをしなかったりアロケートのみにしたりする そんな環境でもC++は便利なので使えるなら使いたい
- 325 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:40:48.50 ID:nSz8Pwyp.net]
- ヒープを搭載しなかったり
- 326 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:48:12.34 ID:nSz8Pwyp.net]
- OSレスでもC++が使えるなら使う
実際それで製品出した
- 327 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:52:22.88 ID:q8B3tEUN.net]
- 対称が大事なのって、交換法則が成り立つ計算だから?
- 328 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:54:03.88 ID:nSz8Pwyp.net]
- 引き算の立場は?
- 329 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:57:18.53 ID:nSz8Pwyp.net]
- 主役がはっきりしてる場合はメンバ
同等な重要度の時は非メンバ 私の場合はだいたいこんな感じ
- 330 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 19:58:30.31 ID:nSz8Pwyp.net]
- 対称かどうかはあまり関係ない
- 331 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 20:25:32.56 ID:vYtjQlD0.net]
- 対称性が特に問題になるのはオペランドの型が異なるケースだな
対称な演算a.op(b)をaのクラスに実装したらbのクラスにも同じものをコピペするのか? C#の演算子オーバーロードがstaticなのはそのへんが理由だとか Pythonなどのスクリプト言語では基本的にインスタンスメソッドとして演算子を実装するけど、 それは動的型故に事前に実装を解決できないからだね
- 332 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 20:29:53.87 ID:EGeQZX97.net]
- >>317
かつて非メンバ関数のオペレータを名前空間の外から呼び出そうとするととても残念な気持ちになるからじゃね
- 333 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 20:44:42.44 ID:0U9h+SK3.net]
- オペレータオーバーロードを使うとカッコイイ気分にひたれるからだろ
それ以外の理由なんてあるのか?
- 334 名前:デフォルトの名無しさん mailto:sage [2019/11/27(水) 20:45:44.57 ID:E2H9effp.net]
- private変数の書き換えを伴うものだけメンバだな
Pointが座標値しか持ってないようなのならコンストラクタ以外は持たせない
- 335 名前:デフォルトの名無しさん mailto:sage [2019/11/28(Thu) 01:38:08 ID:PoPpbfsh.net]
- 代入は普通メンバだろ
= += -= *= /= [ ]も
- 336 名前:デフォルトの名無しさん mailto:sage [2019/11/28(Thu) 01:44:12 ID:PoPpbfsh.net]
- 当然符号も
- 337 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2019/11/28(Thu) 02:14:28 ID:+45JwpRI.net]
- >>303
これは後者が良い場合が多い。 型変換の対称性が絡むんだよ。 たとえば std::tuple<double, double> から Point への変換コンストラクタが用意されているようなとき、 メンバ関数として実装されていると左辺ではこの型変換が考慮されず、右辺では考慮されるということになる。
- 338 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 02:50:39.48 ID:4GnG2KNj.net]
- >>329
代入系と添字はそもそもメンバとしてしか書けない
- 339 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 06:43:27.57 ID:PoPpbfsh.net]
- >>332
>>328に言って >>331 対称性は関係ないって Point * double だって型変換された方が都合が良いなら非メンバだろうに
- 340 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 08:02:30.92 ID:A3g54Di2.net]
- >>316
ほーう? そんなことすら知らないのかww
- 341 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 08:09:05.07 ID:YpOyjZW5.net]
- >>334
ハッタリしかできることねえようだな まあ、そうだろう
- 342 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 08:20:32.24 ID:PoPpbfsh.net]
- フラグメントが問題になるならアロケート専用で解放出来ないようにするとかそもそもアロケート出来ないようにするとか
固定サイズを頻繁になら独立させておけばフラグメントしない
- 343 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 08:21:42.93 ID:PoPpbfsh.net]
- ヒープはヒープで1個の研究分野になるくらい
いろんな技術、方法がある
- 344 名前:はちみつ餃子 mailto:sage [2019/11/28(木) 17:46:42.56 ID:+45JwpRI.net]
- >>333
??? 理解できないのでもうちょっとくやしく
- 345 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 18:11:40.54 ID:PoPpbfsh.net]
- >>338
今回たまたま対称であったというだけで 対称性が理由じゃないってこと ベクトル※ベクトル ベクトル※スカラー ベクトル※行列 ベクトル※矩形 なんであれ型変換された方が良いなら非メンバ
- 346 名前:はちみつ餃子 mailto:sage [2019/11/28(木) 18:23:49.08 ID:+45JwpRI.net]
- >>339
なるほど、一般化した場合の話になってるわけね。
- 347 名前:デフォルトの名無しさん [2019/11/28(木) 19:15:35.47 ID:nxFPf5Ar.net]
- begin()とend()があればRangeなんですか?
- 348 名前:デフォルトの名無しさん mailto:sage [2019/11/28(木) 23:41:46.98 ID:iCLeSa8c.net]
- だいたいそうよ
- 349 名前:デフォルトの名無しさん [2019/11/29(金) 04:19:50 ID:KHTBF+uC.net]
- そうですか。
どうもありがとうございます。
- 350 名前:デフォルトの名無しさん [2019/11/29(金) 08:06:17 ID:R3LtoROu.net]
- 新明解C++買ったけどなにもしてない
- 351 名前:デフォルトの名無しさん [2019/11/29(金) 08:29:36 ID:KHTBF+uC.net]
- std::uint8_tってstd名前空間にあるけど、名前空間で修飾しなくても使えるのは何故ですか?
- 352 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2019/11/29(金) 08:53:08 ID:7m3ynrwG.net]
- >>345
usingを使っているから。
- 353 名前:デフォルトの名無しさん [2019/11/29(金) 09:06:38 ID:KHTBF+uC.net]
- >>346
自分でusingしてなくても大丈夫ですか?
- 354 名前:デフォルトの名無しさん [2019/11/29(金) 09:34:32 ID:N/f9f1S7.net]
- a[i] = b;
みたいなのき a に対して a.setitem(i, b); するのと a.getitem(i) が参照を返す様にしておいて a.getitem(i) = b; するのと どっちが正解?
- 355 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 09:41:11.46 ID:B0LTR+GE.net]
- JavaのArrayListは a.get(i) = b; になってるので長いもんには巻かれろと思考停止で真似るだけ
- 356 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 11:40:28.80 ID:oVgX/GuB.net]
- >>345
#include <cstdint>は #include <stdint.h> つまりCのライブラリだからだ typedef unsigned char uint8_t; #ifdef __cplusplus namespace std { using ::uint8_t; } #endif こうなっているだけだ
- 357 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 11:53:00.94 ID:Ml/gOmNO.net]
- さすがに整数型にまでstdつけるのはうざい
なのでcのヘッダーを使ってる
- 358 名前:デフォルトの名無しさん [2019/11/29(金) 12:40:38.17 ID:pYMGuCeV.net]
- stdを省略する方がウザい
- 359 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 12:45:20.21 ID:gmGtMFq3.net]
- 何の情報も増えないし紛れも何もない
意味の無い情報に5文字も余分に使いたくない 画面も入力の手間も
- 360 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 12:47:51.78 ID:gmGtMFq3.net]
- int8_t がcharで、std::int8_t がsigned char とか?
それは御愁傷様
- 361 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 12:52:13.51 ID:lef7gBlN.net]
- STL使ってスタティックビルドしてるコンソールプログラムあるけど、
ファイルサイズ 400KBぐらいだな。圧縮した状態で200KB これが20KBぐらいに減るのかー、でも誰も喜ばないだろうな。
- 362 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 13:01:25.99 ID:0dBBAnUQ.net]
- STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
- 363 名前:はちみつ餃子 mailto:sage [2019/11/29(金) 14:15:39.12 ID:J8eB3+F9.net]
- >>350 >>350
cstdint 内の名前はマクロを除いて std に入るはず。 グローバル名前空間でも定義されるかどうかは処理系定義じゃなかったっけ? 逆に stdint.h 内の定義はグローバル名前空間でアクセスできるけど、 std 内でも定義されるかどうかは未規定だったように記憶してる。 仕様を読み返すのが面倒なので誰か調査よろ。
- 364 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 14:21:40.41 ID:Tp6caFY5.net]
- 変数名をメモリやオーバーヘッド無しでエイリアスつける方法ありますか?
メンバ変数に shared_ptr<Data> m_data; みたいなのがあるとして using text = this->m_data->member.text; みたいに使いたい変数だけ別名で取り出したい
- 365 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 14:30:09.62 ID:oVgX/GuB.net]
- 現実問題としてCのライブラリをstdに入れるということ自体が馬鹿げた話だ
今の流れはuint8_tの話だが、extern "C"の関数は装飾名に名前空間が含まれない
- 366 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 14:35:12.66 ID:yQ0DwMtc.net]
- >>358
一番簡単なのは、 auto &text = this->m_data->member.text; とすることです。
- 367 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 14:37:49.63 ID:Tp6caFY5.net]
- >>360
現状それでやってますが、コンパイル時に確定できるのなら他に方法があるのかと思いました
- 368 名前:はちみつ餃子 mailto:sage [2019/11/29(金) 14:45:49.13 ID:J8eB3+F9.net]
- >>361
そういう簡単なケースだと最適化でちゃんと消えてくれるんじゃね?
- 369 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 14:56:28.90 ID:KzrCIvE1.net]
- 参照解決のコストすら嫌なら
#define text this->m_data->member.text
- 370 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 14:56:51.37 ID:GB3X2IZU.net]
- コンパイル時に確定してるじゃん
- 371 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 15:07:19.89 ID:M3WjIH4t.net]
- むしろもとの書き方だと2度参照解決して3度足し算しているような…
- 372 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 15:21:18.81 ID:YkvT9y9m.net]
- textに実行時にアクセスするなら
いずれにしろアドレス計算は必須になる >>360のようにすれば 最適化がうんこで複数回計算されるのを防ぐ可能性すらある アクセスしないならおそらく最適化によってアドレス計算コードは生成されない
- 373 名前:デフォルトの名無しさん [2019/11/29(金) 15:50:36.19 ID:N/f9f1S7.net]
- inline付けるとかえって損か
- 374 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 17:45:51.93 ID:/RbGsSZk.net]
- m_data の型が shared_ptr<Data> なことを気にしてるのかな。
shared_ptr の指す先のメンバを参照変数でバインドするのは無作法か、とか。 と言うか、上の話は俺の疑問でもあるんだけど。
- 375 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 18:15:50.93 ID:4DEcYZGM.net]
- ->
に副作用があるならそりゃ話は別だ
- 376 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 18:44:49.74 ID:xP2G2+ZO.net]
- STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 え?リリースするときスタティックリンクして配布するのかって? ダイナミックリンクするけど?
- 377 名前:デフォルトの名無しさん mailto:sage [2019/11/29(金) 18:46:27.54 ID:xP2G2+ZO.net]
- STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 え?リリースするときスタティックリンクして配布するのかって? ダイナミックリンクするけど? え?なんで俺が笑われてるの?
|

|