[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 04/25 06:12 / Filesize : 214 KB / Number-of Response : 1028
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part147



1 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 17:56:53.03 ID:uFDqtnkl.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part146
https://mevius.5ch.net/test/read.cgi/tech/1573094136/
このスレもよろしくね。
【初心者歓迎】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/ (日本語)

STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

↑え?だってお前、普通ダイナミックリンクするだろ?
"ダイナミックリンク"す・れ・ば、ファイルサイズ**増えないです**

449 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 11:14:14 ID:wNCym70P.net]
少なくともVC2019はclearでデストラクタが呼ばれてる

450 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 11:20:47 ID:N9WxJN6X.net]
>>438
それはvectorに格納した要素ごとのデストラクタの話であって、それらを格納するためにvector自身が確保した領域が解放されるわけではないだろ

451 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 11:29:18.51 ID:SZK6NMcF.net]
>>437
情報持ってるのに出してくれないのはわかったよ、無理にとは言わん
g++の挙動については情報ありがとう

452 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 11:53:45 ID:JGG/x92o.net]
むしろclearで解放せず、capacityが減らないことを保証してほしいよね
capacity減らす手段は用意されているのだから

453 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 12:32:03.74 ID:xWGHAxxP.net]
結局何を保証して欲しがってるのかさっぱりわからんが
言語仕様はvectorの何やらはもちろん、deleteだってfreeだって、OSにメモリ領域を確実にお返しになる事なんか保証してない事は覚えておこうな

454 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 12:33:54.17 ID:RAANiraF.net]
>>441
> capacity減らす手段は用意されているのだから
いや>>432はそれが確実じゃないって話だろ
まあそんな実装は

455 名前:見たことないけど []
[ここ壊れてます]

456 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 12:52:13 ID:JGG/x92o.net]
>>443
いや空とswapすれば減るじゃん

457 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 13:22:01 ID:hv8WW6TF.net]
>>444
空とswapは場当たり的に見えて却下と質問者様がおっしゃったからこの論争になったんだぞ



458 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 13:22:46 ID:SZK6NMcF.net]
>>442
OSに返すかどうかの問題じゃねえだろ
allocatorが管理するサブプールに還元でもいいわけで

459 名前:デフォルトの名無しさん [2020/01/20(月) 14:27:22 ID:0GX6odYx.net]
概出鴨試練蛾
do{...}while(0); と
{...} の違いって決定的なのは何かって
break; を入れられるかどうかだと思うんだけど
ループじゃないものに do{...}while(0); を使うのは可笑しいって派の人らは
後者に break; 入れられるようにしておけば良かっただけなんだよな

460 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 14:50:16 ID:hv8WW6TF.net]
ループする気もないのにループ構文を使うのは誤解の元
同様のことは他にもいくつも手段はあるのにループを使う必要がない
モダンな書き方だと[&](){...}();

461 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 15:02:12 ID:KVDidwnp.net]
違うだろ
while使わないよ派はgotoで充分だろ
ブロックを抜けるbreakが欲しいのは現状while使うよ派だろ

462 名前:デフォルトの名無しさん [2020/01/20(月) 15:15:43 ID:0GX6odYx.net]
once{};
みたいな構文で良いんじゃね
マクロとか書けば

463 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 15:21:36 ID:hv8WW6TF.net]
マクロ()
ベターCとか03で脳みそ止まってんだろうなw

464 名前:デフォルトの名無しさん [2020/01/20(月) 15:26:55.87 ID:0GX6odYx.net]
C++スレだからlambdaでも許されるけどCだと使えないやん?

465 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 15:29:38.41 ID:hv8WW6TF.net]
ほぉ、じゃあお前はCで使える文法のみでC++を書いてんだな
ボケてんのか?

466 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 17:52:26.33 ID:SZK6NMcF.net]
>>447
GOTO文有害説で言われる無条件分岐のスペルがbreakであろうとgotoであろうと同じことだ
同じ意味合いのことを書くために、ループでないものをループという嘘をつくことに俺は反対だ

467 名前:デフォルトの名無しさん [2020/01/20(月) 20:28:01.32 ID:KSbNzMqr.net]
結局、gotoは使わないほうが良いのですか?



468 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 20:51:28.03 ID:SZK6NMcF.net]
{ から } までを1命令と読めるようにするのにgotoは無用と言っているに過ぎない
そのようにまとめようとしていないときやgotoを使っても1命令と読める場合にまで
GOTO有害説に囚われ強弁するのは何も分かってないやつのすることということだ

469 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 20:56:48.81 ID:rZl1icD3.net]
つまんないことに拘りすぎ
どっちでもええがな

470 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 21:36:31 ID:hWOi4sNW.net]
>>448
今だとdo-whileでループする方が誤解の元になりそうな。

471 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 21:38:12 ID:jzGRQ/VP.net]
#define BLOCK(stmt) do { stmt; } while(0);

BLOCK(
if (error) break;
);

472 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 21:53:50 ID:IuISEeYy.net]
do{}while(0)とか初めて見たけど
ダサすぎてそりゃ思いつかねーわwww

473 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 21:55:40 ID:dqQuCzGx.net]
結局goto有害説に流されないオレカッケーが言いたいだけだろ?
それでもgotoが有効な場面なんかないけどな。禁止にしても問題なんかない。

474 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 22:00:17.76 ID:SZK6NMcF.net]
GOTO有害説に流されるのがオレカッケーと思っているようだな
アホwバカwww

禁止にしたら問題あるからlongjmpやthrowができてきたんだよ

475 名前:デフォルトの名無しさん [2020/01/20(月) 22:11:05 ID:KSbNzMqr.net]
つまり、使わないほうが良いのですね。
なんとなくですがわかりました。

476 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 22:12:08 ID:SZK6NMcF.net]
Javaから帰ってこなくていいからな
永久にバイバイ

477 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 22:30:44 ID:dqQuCzGx.net]
>>462
今時、例外の問題も把握してないでlongjumpとかthrowとか言ってんのか。。
馬鹿にもほどがあるわ。
負け確定だから泥仕合にしようってのはわかるがそろそろ引っ込めよ。



478 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 05:17:13 ID:AnB6dumh.net]
>>459
while(0)の後ろにセミコロン付けちゃダメ

479 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 07:25:59 ID:XinnYwlJ.net]
>>465
GOTO有害説に流されているという指摘は否定しないんだな?w

480 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 08:47:12 ID:pAPT/+0o.net]
>>459
定義部 { stmt; } のセミコロンも不要かな。
プリプロセッサを通した変換結果を見て気付いた。

って言うか、関数形式マクロの実引数に
空白とかカッコとかを含めることができるのね。

481 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 08:50:21 ID:liyEgHWj.net]
>>468
確かカンマも使えないはずだし、>>459のマクロは使い勝手は悪く制御構造も隠蔽する有害な使い方だろう。

482 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 09:35:24 ID:ecU7KawI.net]
gotoを使わないことが目的になって
余計分かりにくくしてるアホな例

483 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 09:49:43 ID:Hkcle0K4.net]
goto論争はくだらない
一方でラムダ使ったループ脱出は議論の余地がある
これがエレガントに見えるのか
パズルに見えるのか
自分の場合どちらかといえば後者
ラムダ自体は多用するけど

484 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 11:17:56 ID:Sppu2iw7.net]
盲目的にgoto=悪と信じて、かえって読みずらいコード書く奴ってほんとアホだよなあ

485 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 13:51:41 ID:XinnYwlJ.net]
>>470
ほんこれ

486 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 13:54:41 ID:XinnYwlJ.net]
gotoの何が悪いのかわかってないやつをもう少しいたぶってやろうと思ってたけど
途中で可哀想になってきて答え書いてやってるのになあ。。。

487 名前:デフォルトの名無しさん [2020/01/21(火) 18:52:44 ID:xueGtX5x.net]
>>460
do { } while(0)
は自分は見たことがある。
忘れてしまったが、確か、#define マクロの定義部分で使われていて、目的は、
マクロ全体が一つの分の用に実行されて欲しいことであったようだった。
#define マクロ名() do {\
・・・\
・・・\
} while(0)
のような感じだったと思う。

これなしで裸で書くより安全になる場合があった気がする。



488 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 18:57:29 ID:fxsKQzaN.net]
if (...) マクロ();
else ...

489 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 18:57:46 ID:xueGtX5x.net]
>>475
忘れてしまったが、おぼろげながら何か以下の様なことに関連していたような記憶がある。
C/C++では、if 文の直後は {}がなくても書くことが出来てしまう。
それで、
if (条件式)
マクロ関数名();
のように書いた場合、マクロの定義部を単なる {} で書くより安全な場合があったような
気がする。

忘れた。

490 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 19:00:56 ID:xueGtX5x.net]
>>476
あ、その場合だね、多分。
#define aaa() {・・・}
と定義してしまった場合、
if (...) aaa();
else ...
と書くと、
if (...) {};
else ...
と展開されてしまい、else の部分がエラーになってしまう。ところが、
#define aaa() do {・・・} while(0)
と定義していると、
if (...)
do {} while(0);
else ...
と定義されて、正しく動作する。

491 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 19:03:11 ID:xueGtX5x.net]
https://stackoverflow.com/questions/257418/do-while-0-what-is-it-good-for
↑に書いてあった。

492 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 19:11:44 ID:jtyzl32v.net]
それは11年前のネタだからそうなってるけど現代C++ならラムダ式で書くべき内容

493 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 19:19:17 ID:fxsKQzaN.net]
マクロでしか書けない物もあるんだよ

494 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 19:19:18 ID:jXO8TLK9.net]
大昔の工芸品みたいやな

495 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 19:24:51 ID:fxsKQzaN.net]
ていうかなぜラムダ式?
考える順は以下じゃない?

関数
インライン関数
テンプレート関数
マクロ

496 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 19:35:47 ID:jtyzl32v.net]
>>483
そこで回答されている
#define FOO(x) do { foo(x); bar(x); } while (0)

#define FOO(x) [&] { foo(x); bar(x); } ()
と簡潔に書ける
そのQAの内容は今のC++におけるdo-while(0)の有用性を示す内容ではない

497 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 20:01:36.85 ID:fxsKQzaN.net]
ああ、そういうことか

do while に対するメリットがないと
互換性から do while を選ぶことになりそう



498 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 20:17:22 ID:V9u70PsA.net]
ラムダ式はc++11からか
使えない環境は結構あるんだろうな
近付きたくない

499 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 20:20:59 ID:m86EWX9f.net]
>>484
最適化前提にしないと代替とは言えない

500 名前: []
[ここ壊れてます]

501 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 20:21:55 ID:OieZoAm+.net]
そんな用途でマクロなんか使わねーわ。ばかか。

502 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 21:35:08.93 ID:XinnYwlJ.net]
スコープが効かねえ毒だかんな

503 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 22:01:33.56 ID:fxsKQzaN.net]
>>481

504 名前:デフォルトの名無しさん mailto:sage [2020/01/21(火) 22:03:37.86 ID:XinnYwlJ.net]
__LINE__がいるのとかな

505 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 00:05:18 ID:LIwEls05.net]
>>484
JavaScriptだとそうかいても速度差がないかもしれないけど、C++だと、
そう書いた場合は、関数を定義してから、マシン語の call 文でその関数が
呼び出されるので結構なオーバーヘッドとなる。
JavaScriptの場合は、どう書いてもオーバーヘッドがあるからそのくらいの
オーバーヘッドは体感速度に登ってこないのでどっちでも良いだけ。

506 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 00:20:06 ID:2biZgMt+.net]
>>492
ラムダ式はインライン展開されるからオーバーヘッドにはならない

507 名前:デフォルトの名無しさん [2020/01/22(水) 01:14:20 ID:eHIdhO0H.net]
error: no member named 'emplace_back' in 'std::__1::vector<int,
std::__1::allocator<int> >'; did you mean '__emplace_back'?
v.emplace_back(d);
^~~~~~~~~~~~
__emplace_back
/Library/Developer/CommandLineTools/usr/include/c++/v1/vector:696:10: note:
'__emplace_back' declared here
void __emplace_back(const value_type& __x) { push_back(__x); }
^
1 error generated.

push_backは普通に使えるんですけどemplace_backは何故か上記のようなエラーが出てしまいます
一応コンパイラに言われた通りに__emplace_backに変えれば動きはするんですが、普通にアンダーバーなしで
動かすにはどうしたらいいんでしょうか。環境はmacの10.14です。



508 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 01:26:38 ID:2biZgMt+.net]
>>494
OSだけ書かれても環境がわからんけどこれに見える
https://cpprefjp.github.io/implementation.html#clang

509 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 09:21:16 ID:RBeGE/46.net]
>>493
それ保証されてる?
最適化オフでは関数オブジェクトのままじゃないの?
最近のc++はデバッグビルドが使い物にならないことが多くてマジ困る

510 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 09:24:55 ID:dJnLloAw.net]
>>496
最適化するかしないか自分で選べるんだから、言語のせいじゃないと思うんだ。

511 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 09:47:45 ID:s6VTVCIo.net]
最近というか昔からだなデバッグまわりがクソなのは
ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ
デバッグをないがしろにするなと

>>497
端的にテンプレートが原因だから言語のせい
というか誰のせいかどうでもいいから解を提供しろと

512 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 10:28:10 ID:dJnLloAw.net]
>>498
最適化設定を変えることが解になると思って言ったんだけど、そうはいかないことがあるの?

デバッグまわりがクソだと言うなら、相手はまずコンパイラ&デバッガのベンダであって、言語の標準化は
あんまり関係なくね?

513 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 10:34:22 ID:Oj6zQLXh.net]
インライン展開するかどうか含めて
最適化はコンパイラ依存

パフォーマンス測定やチューニングは
実際の環境でやらないと

可能性で言えばマクロが一番インライン展開の可能性が高い
(コンパイラが賢すぎて同一コードを共有するとかない限り)

514 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 10:50:51 ID:kHABv+Er.net]
マクロはソースの字面を読み替えるだけ
機械語の命令シーケンスを開いたサブルーチンにするインライン展開とは全く別な話

515 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 12:06:37.54 ID:OzkwmLpy.net]
>>500
マクロは、C

516 名前:言語の時代から「前処理(preprocess)」として処理され、
コンパイル作業が入る前にその場にトークンとして展開されるだけと
仕様で決まっています。勝手に関数になる可能性はほぼ0です。
[]
[ここ壊れてます]

517 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 12:28:55 ID:S75Q14iC.net]
挙動が仕様通りになるならコンパイラは何やってもいいんだよ(と仕様で決まってる)
マクロだったものに関数呼び出しを仕込むのもコンパイラの自由だ
実際同じ処理の塊があっちこっちに出てきたらまとめて関数(みたいなもの)にするコードサイズ最適化は普通にやる可能性がある



518 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 12:40:53 ID:Oj6zQLXh.net]
>>501
オーバーヘッドを語ってるんだから
どういう手順でバイナリになるかは関係ない
バイナリになった状態が全て

>>502
>>500にそう書いてるけど

519 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 13:12:02.54 ID:kHABv+Er.net]
>>504
マクロ展開は最適化が始まる前の話だつってんだよ、わかんねーやつだな
#define a(b,c) b * 2 + c * 2
a(x, y) //これは
x * 2 + y * 2 //こうしろというだけの指示で
(x + y) * 2 //このような変形は意味していないし
してはならない
a(x, y) * z //こういうとき困るだろうが

520 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 13:18:49.85 ID:kHABv+Er.net]
インライン展開されるかどうかは、そのコード片がマクロの展開結果かどうかには関係ないってことだぞ
こんなこと、いちいち言わなきゃわからんようだから付け足しておく

521 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 13:34:41.13 ID:S75Q14iC.net]
>>505
最適化をいつ始めるかなんてそれこそコンパイラ次第なんだけど

522 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 13:41:29 ID:yb939hMs.net]
つまりマクロはインライン展開されやすいという主張は引っ込めるわけだな

523 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 13:43:39 ID:yb939hMs.net]
都合悪くなると
どうせいつもの手で逃げるだろうけどな
尻尾巻いたやり取りは残るぜ

524 名前:デフォルトの名無しさん [2020/01/22(水) 14:44:17 ID:54HMiZ6v.net]
>>505
#define a(B,C) ((B) * 2 + (C) * 2)

>>498
>ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ

ほんそれ

525 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 14:49:21 ID:kHABv+Er.net]
>>510
それはおまえさんの勝手な思い込みだよ
x * 2 + y * 2 * z
という結果を意図して使うこともできるのは
マクロに特有の機能で今さら変更できなくなっている

526 名前:デフォルトの名無しさん [2020/01/22(水) 14:51:21 ID:54HMiZ6v.net]
意図して出来るのは知ってるが
敢えてやらないんだよ

527 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:11:37.83 ID:s6VTVCIo.net]
>>499
デバッグのために最適化切ると激遅になる問題が散見されるという問題にたいして
最適化設定を変えるという解がナンセンス

そりゃpragma駆使して手で細かく切り替えりゃ可能だろうがそんなことやってられない



528 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:11:48.33 ID:kHABv+Er.net]
オマエガナー(aary

529 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:13:12.36 ID:kHABv+Er.net]
>>512
おまえが510で持ち出したような括弧が自動的に付くような規格改定が行われない理由を考えたことがあるか?

530 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:13:39.10 ID:Oj6zQLXh.net]
>>505
多分比較してる内容が噛み合ってない

マクロを展開した結果と直接記述と
が同じなのは当然
プリプロセッサなわけだから

そうじゃなくて
マクロ、インライン関数、通常の関数の比較の話

当然最適化の期待度は
マクロ(直接記述)>インライン関数>通常の関数

531 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:18:02.26 ID:Oj6zQLXh.net]
>>505
そもそも最適化ですらない話を持ち出してるのか
話の流れと全く関係ないですね

532 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:32:14.07 ID:s6VTVCIo.net]
>>499
ベンダの責任っていうのは一見もっともでそれがまさにc++標準化メンバーのスタンスだ
でも例えばお前はSFINAE関連のデバッグどうやってるよ?
いくつかツールはあるが導入が難しいか頼りないものばかりだ
そんな状況がずっと続いている

このあたりが改善するには言語コアを設計する時点からどんなデバッグ機能が必要か考えるべきってのがおれ

533 名前:フ主張

作業フローを理解しない人が無邪気にこれが入ればさらにソースコード短く書けまっせレベルの議論で機能追加を考えるべきでない
[]
[ここ壊れてます]

534 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:34:50.28 ID:2biZgMt+.net]
機能を使うかどうかはお前の判断でお前の責任
勝手に機能使っておいて八つ当たりすんな

535 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:50:53.24 ID:LkBGzo9o.net]
>ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ
+1

536 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:53:26.36 ID:2biZgMt+.net]
江添みたいなのしかいない日本と違って、普通の国の委員は企業の代表として参加しているのでその指摘は的外れ

537 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:57:43.58 ID:OzkwmLpy.net]
>>503
関数になっているものを inline 展開する処理系は多数ありますが、
プログラマがせっかく展開して書いてあるものをわざわざ関数に戻す処理系
はめったにないのです。
また、そのような最適化は人間には簡単に思えるものですが、機械にやらせようと
するととても大変です。マクロ展開される前のマクロ関数の状態ならまだ
できるのですが、コンパイラの中で最適化層と前処理層がかけ離れた位置に
あるので、もしやりたければ最適化層だけでそれをやることになり処理がとても重くなります。

まず、コンパイル後に出来上がった中間コードのなかから同一のパターンを見出すのが
ものすごく時間が掛かります。それから全く同じではない場合への対処が機会は苦手です。



538 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:57:58.58 ID:kHABv+Er.net]
>>516
最後の2行とそれ以前が論理的に繋がってないぞ

539 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 15:58:35.89 ID:kHABv+Er.net]
>>517
506で牽制しておいたはずなんだが
言わなきゃわからんのではなく、
言ってもわからんやつのようだな

540 名前:はちみつ餃子 mailto:sage [2020/01/22(水) 18:28:00.61 ID:lnnB9FBg.net]
>>516
> 当然最適化の期待度は
> マクロ(直接記述)>インライン関数>通常の関数

現代のコンパイラの最適化機構はかなり複雑で、どのように最適化が効くか予想するのは無理。
素朴な処理系ならなんらかの傾向がある場合もあると思うけど、一般化できるような話ではないよ。
普通の関数はインライン関数より呼び出しのコストは確かに大きいけど、
全体のコードサイズが大きくなるとキャッシュメモリからあふれやすいといった話もあって、
トレードオフになってる要素がある。

それに、主要なコンパイラは inline キーワードで修飾してもしなくてもインライン化が効果的ならインライン化するし、
効果的でないならしないよ。

inline 関数として定義すれば各コンパイル単位の中に必ず定義もあるわけだから、
LTO が有効ではない状況では結果的にインライン化しやすい条件がととのっているとは言えるんだけど、
逆に言えば LTO を有効に出来るならどうでもよくなるわけだし。

いずれにしても、そんな微々たる速度が気になるような場合ってそんなにあるか?
速度が問題になってから実測しろよ。
状況によってどうとでもなるんだから、具体的な状況を示さずにどれが速いとか言ったってかみ合うわけないだろ。

541 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 18:44:11.63 ID:0ayd3B3Q.net]
>>525
一般的な期待度の話
当然例外はある

コンパイル単位が別で
関数を定数パラメーターでコールした場合
なんかが差が大きくなる

レジスタ退避やスタックポインタのアラインメント調整、スタック拡張、AVXの準備関数コール
もそれなりにオーバーヘッドとなる

同じコンパイル単位であれば
今のコンパイラではそれほど差は出ないが
組み込みのチープなコンパイラもまだまだ使われている

542 名前: mailto:sage [2020/01/22(水) 19:06:41.58 ID:RZgzSQWe.net]
>>501
お前さんは LISP のマクロを知らないのか?

543 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 19:17:53.96 ID:2biZgMt+.net]


544 名前:LISPの仕様がC++と何か関係ある? []
[ここ壊れてます]

545 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 20:23:02 ID:OSofFadI.net]
関数とマクロの違いがlispだとわかりやすいから。
わかってないやつをあぶりだすのにはちょうどいい。

546 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 20:38:48 ID:F1N+c+gr.net]
マクロアセンブラのマクロは強力

547 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 21:16:42.45 ID:kHABv+Er.net]
>>527
で?



548 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 22:55:42 ID:PNeen3jP.net]
LISPじゃー
LISPの場合はー

www

549 名前:デフォルトの名無しさん mailto:sage [2020/01/22(水) 23:00:35 ID:Ab6Q02+v.net]
QZが現れると大抵話が脱線するから放置しとこう。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<214KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef