[表示 : 全て 最新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ほどしか増えない

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

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

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

434 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 01:58:07 ID:wNCym70P.net]
スレの流れはvectorの動的な解放手段についてです

435 名前:デフォルトの名無しさん [2020/01/20(月) 05:25:12.27 ID:KSbNzMqr.net]
Javaはgotoを無くした先進設計だからな。

436 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 07:11:09 ID:SZK6NMcF.net]
>>410
ほんこれ
メインフレーム時代から「なぜ0を足すんだろう」なんてあったけど
そういう謎コード書いて俺スゲーってやる厨二病は痛いよな

437 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 07:59:32 ID:hWOi4sNW.net]
つまりgotoと例外安全がどうとか言っていた人はこんなC時代の技法を念頭に置いていたわけか。

if (fail) goto FINAL;

FINAL:
後始末

gotoとRAIIの相性が悪い、混ぜられないという話はまた別なのだろうか。

438 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 08:30:41 ID:ItoFGwWk.net]
>>426が例外安全かどうかとgotoは関係ないんじゃない?

>>273と>>426のコードも関係ない

ただ例外安全て言いたかっただけと思う

439 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 09:55:56 ID:SZK6NMcF.net]
>>273
vector<usigned char> huge;
//do something
huge.clear();

gotoは全く関係ない

440 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 10:09:57 ID:rZl1icD3.net]
>>428
vector自体が確保したメモリが解放される保証がないのでNG
とっくに答えは書かれているのだから今からどやるのやめろ

441 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 10:14:06 ID:SZK6NMcF.net]
保証しないってどこに書いてあったっけ?



442 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 10:15:25 ID:JGG/x92o.net]
>>275
これで解決済みだよなぁ
std::vector<...>{}.swap(v)

443 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 10:15:47 ID:N9WxJN6X.net]
>>428
>>291,292辺りを見てこい

444 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 10:17:29 ID:N9WxJN6X.net]
もちろんclear()の仕様も確認しとけ

445 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 10:18:17 ID:ThUag/92.net]
>>292 で実装依存の最適化について言及がある。
あるサイズを超えるまではヒープではなくスタックを使うことで高速実行を期待する実装はあり得ると思う。
vectorの具体例は知らないが、EASTL::basic_stringはそうやってる。

446 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 10:40:56 ID:SZK6NMcF.net]
>>433
だから、どこに書いてあったのかと聞いているんだが

447 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 11:04:21 ID:wNCym70P.net]
>>431の言う空の一時オブジェクトとswapという常套手段で解決するのに質問者のクズは場当たり的などと難癖をつけ、
さらにじゃあnew/deleteしろよというまっとうな意見にバカを言うななどとほざいた結果がこのくだらねえ流れだよ

448 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 11:09:12 ID:rZl1icD3.net]
>>435
c++の規格書は有料だけど持ってんの?
ぐぐればstack overflowとかいくらでもひっかかるけど調べた?
これは割りと知られた仕様だと思うけどね
実際g++とかでやってみればわかるけどclearしてもcapacity変わんないから

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 名前:フ主張

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






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

前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