C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part146
https://mevius.5ch.net/test/read.cgi/tech/1573094136/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
↑え?だってお前、普通ダイナミックリンクするだろ?
"ダイナミックリンク"す・れ・ば、ファイルサイズ**増えないです**
探検
C++相談室 part147
■ このスレッドは過去ログ倉庫に格納されています
2019/12/18(水) 17:56:53.03ID:uFDqtnkl
413デフォルトの名無しさん
2020/01/19(日) 22:36:02.43ID:JMAoH3/H414デフォルトの名無しさん
2020/01/19(日) 22:48:25.05ID:PgEzQeWd こんなささいな違いは個人の好みでいいと思う派
do-while使わない派の言い分もわからなくもないが、
ソースを読む場合gotoだってgoto先を確認しないと意図が理解できないだろ
label名を考える必要があるのもちょっとめんどい
なのでこんなのどっちでもいい
ちなみにrust方式もブロックの先頭にラベル付いてるのは若干違和感覚える
do-while使わない派の言い分もわからなくもないが、
ソースを読む場合gotoだってgoto先を確認しないと意図が理解できないだろ
label名を考える必要があるのもちょっとめんどい
なのでこんなのどっちでもいい
ちなみにrust方式もブロックの先頭にラベル付いてるのは若干違和感覚える
415デフォルトの名無しさん
2020/01/19(日) 22:50:45.02ID:RfLx+x9F >>413
誰か解説よろしく!
誰か解説よろしく!
416デフォルトの名無しさん
2020/01/19(日) 23:07:09.81ID:Wel1D6/w どっちのやり方でも構わないけど、リソース◯◯を自動解放するためのブロックだとか意図を示すコメントを付けておいてくれればそれでいい。
417デフォルトの名無しさん
2020/01/19(日) 23:13:56.14ID:AinWVopR ↑だからその方法だと例外安全が・・・
C++だとリソース開放は RAII か finally かしか幸せになれない
C++だとリソース開放は RAII か finally かしか幸せになれない
418デフォルトの名無しさん
2020/01/19(日) 23:17:22.36ID:RfLx+x9F その方法
ってどの方法?
ってどの方法?
419デフォルトの名無しさん
2020/01/19(日) 23:23:50.28ID:Wel1D6/w >>417
誤解させたかもしれないから補足すると、どっちのやり方もと言ったのはただのブロックかdo whileかという話のことで、どちらにせよスコープを抜けて破棄されることを想定していた。
解放ルーチンにとばすことは端から考えてなかったよ。
誤解させたかもしれないから補足すると、どっちのやり方もと言ったのはただのブロックかdo whileかという話のことで、どちらにせよスコープを抜けて破棄されることを想定していた。
解放ルーチンにとばすことは端から考えてなかったよ。
420デフォルトの名無しさん
2020/01/19(日) 23:47:54.15ID:L2mlhsAt 解放ルーチンにとばすくらいしかgotoの有用な使い方なんてねーだろ。
だからRAII、例外安全の話になってるわけだが
もう意地になって意味もわからずgotoにこだわってる馬鹿がいる。
だからRAII、例外安全の話になってるわけだが
もう意地になって意味もわからずgotoにこだわってる馬鹿がいる。
421デフォルトの名無しさん
2020/01/20(月) 00:05:06.10ID:ThUag/92 finally相当のデストラクタをラムダ式で渡すクラスのインスタンスを作ればいいじゃない、
で済まされてしまいそうだがやはりfinallyはあったほうがいい。
で済まされてしまいそうだがやはりfinallyはあったほうがいい。
422デフォルトの名無しさん
2020/01/20(月) 01:01:38.84ID:KvAer05C 「解放ルーチンにとばすくらいしかgotoの有用な使い方なんてねーだろ。」
って思えるぐらい、Cではこの技法が多用された
なぜなら真実は逆で
「gotoでとばすぐらいしか開放ルーチンをまとめる方法なんてねーだろ」
だったから多用された
A→Bでなくて、実はB→Aだったって話
なんだけど、あまりにもB→Aが多用されたから
数の暴力で逆のA→Bも成り立つと感覚的に思ってしまう
だが本当にそうだろうか、gotoに開放ルーチンに飛ばす以外の利用法は無いのだろうか
模索してみよう、というのがスレの流れ
スレがその流れになるのは自明で
何故ならC++においては「gotoで開放ルーチン」は例外安全の意味で完全な悪手になったから
初めから勘定に入らないし、考える意味もないし、議論の余地もない
他の利用方法を前提に話すのは当たり前で既定路線
って思えるぐらい、Cではこの技法が多用された
なぜなら真実は逆で
「gotoでとばすぐらいしか開放ルーチンをまとめる方法なんてねーだろ」
だったから多用された
A→Bでなくて、実はB→Aだったって話
なんだけど、あまりにもB→Aが多用されたから
数の暴力で逆のA→Bも成り立つと感覚的に思ってしまう
だが本当にそうだろうか、gotoに開放ルーチンに飛ばす以外の利用法は無いのだろうか
模索してみよう、というのがスレの流れ
スレがその流れになるのは自明で
何故ならC++においては「gotoで開放ルーチン」は例外安全の意味で完全な悪手になったから
初めから勘定に入らないし、考える意味もないし、議論の余地もない
他の利用方法を前提に話すのは当たり前で既定路線
423デフォルトの名無しさん
2020/01/20(月) 01:58:07.70ID:wNCym70P スレの流れはvectorの動的な解放手段についてです
424デフォルトの名無しさん
2020/01/20(月) 05:25:12.27ID:KSbNzMqr Javaはgotoを無くした先進設計だからな。
425デフォルトの名無しさん
2020/01/20(月) 07:11:09.70ID:SZK6NMcF426デフォルトの名無しさん
2020/01/20(月) 07:59:32.82ID:hWOi4sNW つまりgotoと例外安全がどうとか言っていた人はこんなC時代の技法を念頭に置いていたわけか。
if (fail) goto FINAL;
FINAL:
後始末
gotoとRAIIの相性が悪い、混ぜられないという話はまた別なのだろうか。
if (fail) goto FINAL;
FINAL:
後始末
gotoとRAIIの相性が悪い、混ぜられないという話はまた別なのだろうか。
427デフォルトの名無しさん
2020/01/20(月) 08:30:41.35ID:ItoFGwWk428デフォルトの名無しさん
2020/01/20(月) 09:55:56.39ID:SZK6NMcF429デフォルトの名無しさん
2020/01/20(月) 10:09:57.52ID:rZl1icD3430デフォルトの名無しさん
2020/01/20(月) 10:14:06.16ID:SZK6NMcF 保証しないってどこに書いてあったっけ?
431デフォルトの名無しさん
2020/01/20(月) 10:15:25.68ID:JGG/x92o432デフォルトの名無しさん
2020/01/20(月) 10:15:47.05ID:N9WxJN6X433デフォルトの名無しさん
2020/01/20(月) 10:17:29.98ID:N9WxJN6X もちろんclear()の仕様も確認しとけ
434デフォルトの名無しさん
2020/01/20(月) 10:18:17.03ID:ThUag/92 >>292 で実装依存の最適化について言及がある。
あるサイズを超えるまではヒープではなくスタックを使うことで高速実行を期待する実装はあり得ると思う。
vectorの具体例は知らないが、EASTL::basic_stringはそうやってる。
あるサイズを超えるまではヒープではなくスタックを使うことで高速実行を期待する実装はあり得ると思う。
vectorの具体例は知らないが、EASTL::basic_stringはそうやってる。
435デフォルトの名無しさん
2020/01/20(月) 10:40:56.82ID:SZK6NMcF >>433
だから、どこに書いてあったのかと聞いているんだが
だから、どこに書いてあったのかと聞いているんだが
436デフォルトの名無しさん
2020/01/20(月) 11:04:21.50ID:wNCym70P >>431の言う空の一時オブジェクトとswapという常套手段で解決するのに質問者のクズは場当たり的などと難癖をつけ、
さらにじゃあnew/deleteしろよというまっとうな意見にバカを言うななどとほざいた結果がこのくだらねえ流れだよ
さらにじゃあnew/deleteしろよというまっとうな意見にバカを言うななどとほざいた結果がこのくだらねえ流れだよ
437デフォルトの名無しさん
2020/01/20(月) 11:09:12.37ID:rZl1icD3 >>435
c++の規格書は有料だけど持ってんの?
ぐぐればstack overflowとかいくらでもひっかかるけど調べた?
これは割りと知られた仕様だと思うけどね
実際g++とかでやってみればわかるけどclearしてもcapacity変わんないから
c++の規格書は有料だけど持ってんの?
ぐぐればstack overflowとかいくらでもひっかかるけど調べた?
これは割りと知られた仕様だと思うけどね
実際g++とかでやってみればわかるけどclearしてもcapacity変わんないから
438デフォルトの名無しさん
2020/01/20(月) 11:14:14.45ID:wNCym70P 少なくともVC2019はclearでデストラクタが呼ばれてる
439デフォルトの名無しさん
2020/01/20(月) 11:20:47.48ID:N9WxJN6X >>438
それはvectorに格納した要素ごとのデストラクタの話であって、それらを格納するためにvector自身が確保した領域が解放されるわけではないだろ
それはvectorに格納した要素ごとのデストラクタの話であって、それらを格納するためにvector自身が確保した領域が解放されるわけではないだろ
440デフォルトの名無しさん
2020/01/20(月) 11:29:18.51ID:SZK6NMcF441デフォルトの名無しさん
2020/01/20(月) 11:53:45.15ID:JGG/x92o むしろclearで解放せず、capacityが減らないことを保証してほしいよね
capacity減らす手段は用意されているのだから
capacity減らす手段は用意されているのだから
442デフォルトの名無しさん
2020/01/20(月) 12:32:03.74ID:xWGHAxxP 結局何を保証して欲しがってるのかさっぱりわからんが
言語仕様はvectorの何やらはもちろん、deleteだってfreeだって、OSにメモリ領域を確実にお返しになる事なんか保証してない事は覚えておこうな
言語仕様はvectorの何やらはもちろん、deleteだってfreeだって、OSにメモリ領域を確実にお返しになる事なんか保証してない事は覚えておこうな
443デフォルトの名無しさん
2020/01/20(月) 12:33:54.17ID:RAANiraF444デフォルトの名無しさん
2020/01/20(月) 12:52:13.55ID:JGG/x92o >>443
いや空とswapすれば減るじゃん
いや空とswapすれば減るじゃん
445デフォルトの名無しさん
2020/01/20(月) 13:22:01.92ID:hv8WW6TF >>444
空とswapは場当たり的に見えて却下と質問者様がおっしゃったからこの論争になったんだぞ
空とswapは場当たり的に見えて却下と質問者様がおっしゃったからこの論争になったんだぞ
446デフォルトの名無しさん
2020/01/20(月) 13:22:46.08ID:SZK6NMcF447デフォルトの名無しさん
2020/01/20(月) 14:27:22.95ID:0GX6odYx 概出鴨試練蛾
do{...}while(0); と
{...} の違いって決定的なのは何かって
break; を入れられるかどうかだと思うんだけど
ループじゃないものに do{...}while(0); を使うのは可笑しいって派の人らは
後者に break; 入れられるようにしておけば良かっただけなんだよな
do{...}while(0); と
{...} の違いって決定的なのは何かって
break; を入れられるかどうかだと思うんだけど
ループじゃないものに do{...}while(0); を使うのは可笑しいって派の人らは
後者に break; 入れられるようにしておけば良かっただけなんだよな
448デフォルトの名無しさん
2020/01/20(月) 14:50:16.98ID:hv8WW6TF ループする気もないのにループ構文を使うのは誤解の元
同様のことは他にもいくつも手段はあるのにループを使う必要がない
モダンな書き方だと[&](){...}();
同様のことは他にもいくつも手段はあるのにループを使う必要がない
モダンな書き方だと[&](){...}();
449デフォルトの名無しさん
2020/01/20(月) 15:02:12.80ID:KVDidwnp 違うだろ
while使わないよ派はgotoで充分だろ
ブロックを抜けるbreakが欲しいのは現状while使うよ派だろ
while使わないよ派はgotoで充分だろ
ブロックを抜けるbreakが欲しいのは現状while使うよ派だろ
450デフォルトの名無しさん
2020/01/20(月) 15:15:43.28ID:0GX6odYx once{};
みたいな構文で良いんじゃね
マクロとか書けば
みたいな構文で良いんじゃね
マクロとか書けば
451デフォルトの名無しさん
2020/01/20(月) 15:21:36.51ID:hv8WW6TF マクロ()
ベターCとか03で脳みそ止まってんだろうなw
ベターCとか03で脳みそ止まってんだろうなw
452デフォルトの名無しさん
2020/01/20(月) 15:26:55.87ID:0GX6odYx C++スレだからlambdaでも許されるけどCだと使えないやん?
453デフォルトの名無しさん
2020/01/20(月) 15:29:38.41ID:hv8WW6TF ほぉ、じゃあお前はCで使える文法のみでC++を書いてんだな
ボケてんのか?
ボケてんのか?
454デフォルトの名無しさん
2020/01/20(月) 17:52:26.33ID:SZK6NMcF455デフォルトの名無しさん
2020/01/20(月) 20:28:01.32ID:KSbNzMqr 結局、gotoは使わないほうが良いのですか?
456デフォルトの名無しさん
2020/01/20(月) 20:51:28.03ID:SZK6NMcF { から } までを1命令と読めるようにするのにgotoは無用と言っているに過ぎない
そのようにまとめようとしていないときやgotoを使っても1命令と読める場合にまで
GOTO有害説に囚われ強弁するのは何も分かってないやつのすることということだ
そのようにまとめようとしていないときやgotoを使っても1命令と読める場合にまで
GOTO有害説に囚われ強弁するのは何も分かってないやつのすることということだ
457デフォルトの名無しさん
2020/01/20(月) 20:56:48.81ID:rZl1icD3 つまんないことに拘りすぎ
どっちでもええがな
どっちでもええがな
458デフォルトの名無しさん
2020/01/20(月) 21:36:31.23ID:hWOi4sNW >>448
今だとdo-whileでループする方が誤解の元になりそうな。
今だとdo-whileでループする方が誤解の元になりそうな。
459デフォルトの名無しさん
2020/01/20(月) 21:38:12.73ID:jzGRQ/VP #define BLOCK(stmt) do { stmt; } while(0);
BLOCK(
if (error) break;
);
BLOCK(
if (error) break;
);
460デフォルトの名無しさん
2020/01/20(月) 21:53:50.81ID:IuISEeYy do{}while(0)とか初めて見たけど
ダサすぎてそりゃ思いつかねーわwww
ダサすぎてそりゃ思いつかねーわwww
461デフォルトの名無しさん
2020/01/20(月) 21:55:40.09ID:dqQuCzGx 結局goto有害説に流されないオレカッケーが言いたいだけだろ?
それでもgotoが有効な場面なんかないけどな。禁止にしても問題なんかない。
それでもgotoが有効な場面なんかないけどな。禁止にしても問題なんかない。
462デフォルトの名無しさん
2020/01/20(月) 22:00:17.76ID:SZK6NMcF GOTO有害説に流されるのがオレカッケーと思っているようだな
アホwバカwww
禁止にしたら問題あるからlongjmpやthrowができてきたんだよ
アホwバカwww
禁止にしたら問題あるからlongjmpやthrowができてきたんだよ
463デフォルトの名無しさん
2020/01/20(月) 22:11:05.96ID:KSbNzMqr つまり、使わないほうが良いのですね。
なんとなくですがわかりました。
なんとなくですがわかりました。
464デフォルトの名無しさん
2020/01/20(月) 22:12:08.37ID:SZK6NMcF Javaから帰ってこなくていいからな
永久にバイバイ
永久にバイバイ
465デフォルトの名無しさん
2020/01/20(月) 22:30:44.49ID:dqQuCzGx466デフォルトの名無しさん
2020/01/21(火) 05:17:13.41ID:AnB6dumh >>459
while(0)の後ろにセミコロン付けちゃダメ
while(0)の後ろにセミコロン付けちゃダメ
467デフォルトの名無しさん
2020/01/21(火) 07:25:59.02ID:XinnYwlJ >>465
GOTO有害説に流されているという指摘は否定しないんだな?w
GOTO有害説に流されているという指摘は否定しないんだな?w
468デフォルトの名無しさん
2020/01/21(火) 08:47:12.47ID:pAPT/+0o469デフォルトの名無しさん
2020/01/21(火) 08:50:21.16ID:liyEgHWj470デフォルトの名無しさん
2020/01/21(火) 09:35:24.55ID:ecU7KawI gotoを使わないことが目的になって
余計分かりにくくしてるアホな例
余計分かりにくくしてるアホな例
471デフォルトの名無しさん
2020/01/21(火) 09:49:43.57ID:Hkcle0K4 goto論争はくだらない
一方でラムダ使ったループ脱出は議論の余地がある
これがエレガントに見えるのか
パズルに見えるのか
自分の場合どちらかといえば後者
ラムダ自体は多用するけど
一方でラムダ使ったループ脱出は議論の余地がある
これがエレガントに見えるのか
パズルに見えるのか
自分の場合どちらかといえば後者
ラムダ自体は多用するけど
472デフォルトの名無しさん
2020/01/21(火) 11:17:56.24ID:Sppu2iw7 盲目的にgoto=悪と信じて、かえって読みずらいコード書く奴ってほんとアホだよなあ
473デフォルトの名無しさん
2020/01/21(火) 13:51:41.32ID:XinnYwlJ >>470
ほんこれ
ほんこれ
474デフォルトの名無しさん
2020/01/21(火) 13:54:41.96ID:XinnYwlJ gotoの何が悪いのかわかってないやつをもう少しいたぶってやろうと思ってたけど
途中で可哀想になってきて答え書いてやってるのになあ。。。
途中で可哀想になってきて答え書いてやってるのになあ。。。
475デフォルトの名無しさん
2020/01/21(火) 18:52:44.87ID:xueGtX5x >>460
do { } while(0)
は自分は見たことがある。
忘れてしまったが、確か、#define マクロの定義部分で使われていて、目的は、
マクロ全体が一つの分の用に実行されて欲しいことであったようだった。
#define マクロ名() do {\
・・・\
・・・\
} while(0)
のような感じだったと思う。
これなしで裸で書くより安全になる場合があった気がする。
do { } while(0)
は自分は見たことがある。
忘れてしまったが、確か、#define マクロの定義部分で使われていて、目的は、
マクロ全体が一つの分の用に実行されて欲しいことであったようだった。
#define マクロ名() do {\
・・・\
・・・\
} while(0)
のような感じだったと思う。
これなしで裸で書くより安全になる場合があった気がする。
476デフォルトの名無しさん
2020/01/21(火) 18:57:29.70ID:fxsKQzaN if (...) マクロ();
else ...
else ...
477デフォルトの名無しさん
2020/01/21(火) 18:57:46.39ID:xueGtX5x >>475
忘れてしまったが、おぼろげながら何か以下の様なことに関連していたような記憶がある。
C/C++では、if 文の直後は {}がなくても書くことが出来てしまう。
それで、
if (条件式)
マクロ関数名();
のように書いた場合、マクロの定義部を単なる {} で書くより安全な場合があったような
気がする。
忘れた。
忘れてしまったが、おぼろげながら何か以下の様なことに関連していたような記憶がある。
C/C++では、if 文の直後は {}がなくても書くことが出来てしまう。
それで、
if (条件式)
マクロ関数名();
のように書いた場合、マクロの定義部を単なる {} で書くより安全な場合があったような
気がする。
忘れた。
478デフォルトの名無しさん
2020/01/21(火) 19:00:56.98ID:xueGtX5x >>476
あ、その場合だね、多分。
#define aaa() {・・・}
と定義してしまった場合、
if (...) aaa();
else ...
と書くと、
if (...) {};
else ...
と展開されてしまい、else の部分がエラーになってしまう。ところが、
#define aaa() do {・・・} while(0)
と定義していると、
if (...)
do {} while(0);
else ...
と定義されて、正しく動作する。
あ、その場合だね、多分。
#define aaa() {・・・}
と定義してしまった場合、
if (...) aaa();
else ...
と書くと、
if (...) {};
else ...
と展開されてしまい、else の部分がエラーになってしまう。ところが、
#define aaa() do {・・・} while(0)
と定義していると、
if (...)
do {} while(0);
else ...
と定義されて、正しく動作する。
479デフォルトの名無しさん
2020/01/21(火) 19:03:11.04ID:xueGtX5x480デフォルトの名無しさん
2020/01/21(火) 19:11:44.38ID:jtyzl32v それは11年前のネタだからそうなってるけど現代C++ならラムダ式で書くべき内容
481デフォルトの名無しさん
2020/01/21(火) 19:19:17.16ID:fxsKQzaN マクロでしか書けない物もあるんだよ
482デフォルトの名無しさん
2020/01/21(火) 19:19:18.43ID:jXO8TLK9 大昔の工芸品みたいやな
483デフォルトの名無しさん
2020/01/21(火) 19:24:51.40ID:fxsKQzaN ていうかなぜラムダ式?
考える順は以下じゃない?
関数
インライン関数
テンプレート関数
マクロ
考える順は以下じゃない?
関数
インライン関数
テンプレート関数
マクロ
484デフォルトの名無しさん
2020/01/21(火) 19:35:47.16ID:jtyzl32v >>483
そこで回答されている
#define FOO(x) do { foo(x); bar(x); } while (0)
は
#define FOO(x) [&] { foo(x); bar(x); } ()
と簡潔に書ける
そのQAの内容は今のC++におけるdo-while(0)の有用性を示す内容ではない
そこで回答されている
#define FOO(x) do { foo(x); bar(x); } while (0)
は
#define FOO(x) [&] { foo(x); bar(x); } ()
と簡潔に書ける
そのQAの内容は今のC++におけるdo-while(0)の有用性を示す内容ではない
485デフォルトの名無しさん
2020/01/21(火) 20:01:36.85ID:fxsKQzaN ああ、そういうことか
do while に対するメリットがないと
互換性から do while を選ぶことになりそう
do while に対するメリットがないと
互換性から do while を選ぶことになりそう
486デフォルトの名無しさん
2020/01/21(火) 20:17:22.53ID:V9u70PsA ラムダ式はc++11からか
使えない環境は結構あるんだろうな
近付きたくない
使えない環境は結構あるんだろうな
近付きたくない
487デフォルトの名無しさん
2020/01/21(火) 20:20:59.68ID:m86EWX9f >>484
最適化前提にしないと代替とは言えないね
最適化前提にしないと代替とは言えないね
488デフォルトの名無しさん
2020/01/21(火) 20:21:55.39ID:OieZoAm+ そんな用途でマクロなんか使わねーわ。ばかか。
489デフォルトの名無しさん
2020/01/21(火) 21:35:08.93ID:XinnYwlJ スコープが効かねえ毒だかんな
490デフォルトの名無しさん
2020/01/21(火) 22:01:33.56ID:fxsKQzaN491デフォルトの名無しさん
2020/01/21(火) 22:03:37.86ID:XinnYwlJ __LINE__がいるのとかな
492デフォルトの名無しさん
2020/01/22(水) 00:05:18.86ID:LIwEls05 >>484
JavaScriptだとそうかいても速度差がないかもしれないけど、C++だと、
そう書いた場合は、関数を定義してから、マシン語の call 文でその関数が
呼び出されるので結構なオーバーヘッドとなる。
JavaScriptの場合は、どう書いてもオーバーヘッドがあるからそのくらいの
オーバーヘッドは体感速度に登ってこないのでどっちでも良いだけ。
JavaScriptだとそうかいても速度差がないかもしれないけど、C++だと、
そう書いた場合は、関数を定義してから、マシン語の call 文でその関数が
呼び出されるので結構なオーバーヘッドとなる。
JavaScriptの場合は、どう書いてもオーバーヘッドがあるからそのくらいの
オーバーヘッドは体感速度に登ってこないのでどっちでも良いだけ。
493デフォルトの名無しさん
2020/01/22(水) 00:20:06.55ID:2biZgMt+ >>492
ラムダ式はインライン展開されるからオーバーヘッドにはならない
ラムダ式はインライン展開されるからオーバーヘッドにはならない
494デフォルトの名無しさん
2020/01/22(水) 01:14:20.96ID:eHIdhO0H 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です。
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です。
495デフォルトの名無しさん
2020/01/22(水) 01:26:38.05ID:2biZgMt+496デフォルトの名無しさん
2020/01/22(水) 09:21:16.15ID:RBeGE/46497デフォルトの名無しさん
2020/01/22(水) 09:24:55.75ID:dJnLloAw >>496
最適化するかしないか自分で選べるんだから、言語のせいじゃないと思うんだ。
最適化するかしないか自分で選べるんだから、言語のせいじゃないと思うんだ。
498デフォルトの名無しさん
2020/01/22(水) 09:47:45.11ID:s6VTVCIo 最近というか昔からだなデバッグまわりがクソなのは
ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ
デバッグをないがしろにするなと
>>497
端的にテンプレートが原因だから言語のせい
というか誰のせいかどうでもいいから解を提供しろと
ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ
デバッグをないがしろにするなと
>>497
端的にテンプレートが原因だから言語のせい
というか誰のせいかどうでもいいから解を提供しろと
499デフォルトの名無しさん
2020/01/22(水) 10:28:10.49ID:dJnLloAw >>498
最適化設定を変えることが解になると思って言ったんだけど、そうはいかないことがあるの?
デバッグまわりがクソだと言うなら、相手はまずコンパイラ&デバッガのベンダであって、言語の標準化は
あんまり関係なくね?
最適化設定を変えることが解になると思って言ったんだけど、そうはいかないことがあるの?
デバッグまわりがクソだと言うなら、相手はまずコンパイラ&デバッガのベンダであって、言語の標準化は
あんまり関係なくね?
500デフォルトの名無しさん
2020/01/22(水) 10:34:22.38ID:Oj6zQLXh インライン展開するかどうか含めて
最適化はコンパイラ依存
パフォーマンス測定やチューニングは
実際の環境でやらないと
可能性で言えばマクロが一番インライン展開の可能性が高い
(コンパイラが賢すぎて同一コードを共有するとかない限り)
最適化はコンパイラ依存
パフォーマンス測定やチューニングは
実際の環境でやらないと
可能性で言えばマクロが一番インライン展開の可能性が高い
(コンパイラが賢すぎて同一コードを共有するとかない限り)
501デフォルトの名無しさん
2020/01/22(水) 10:50:51.03ID:kHABv+Er マクロはソースの字面を読み替えるだけ
機械語の命令シーケンスを開いたサブルーチンにするインライン展開とは全く別な話
機械語の命令シーケンスを開いたサブルーチンにするインライン展開とは全く別な話
502デフォルトの名無しさん
2020/01/22(水) 12:06:37.54ID:OzkwmLpy >>500
マクロは、C言語の時代から「前処理(preprocess)」として処理され、
コンパイル作業が入る前にその場にトークンとして展開されるだけと
仕様で決まっています。勝手に関数になる可能性はほぼ0です。
マクロは、C言語の時代から「前処理(preprocess)」として処理され、
コンパイル作業が入る前にその場にトークンとして展開されるだけと
仕様で決まっています。勝手に関数になる可能性はほぼ0です。
503デフォルトの名無しさん
2020/01/22(水) 12:28:55.61ID:S75Q14iC 挙動が仕様通りになるならコンパイラは何やってもいいんだよ(と仕様で決まってる)
マクロだったものに関数呼び出しを仕込むのもコンパイラの自由だ
実際同じ処理の塊があっちこっちに出てきたらまとめて関数(みたいなもの)にするコードサイズ最適化は普通にやる可能性がある
マクロだったものに関数呼び出しを仕込むのもコンパイラの自由だ
実際同じ処理の塊があっちこっちに出てきたらまとめて関数(みたいなもの)にするコードサイズ最適化は普通にやる可能性がある
504デフォルトの名無しさん
2020/01/22(水) 12:40:53.73ID:Oj6zQLXh505デフォルトの名無しさん
2020/01/22(水) 13:12:02.54ID:kHABv+Er >>504
マクロ展開は最適化が始まる前の話だつってんだよ、わかんねーやつだな
#define a(b,c) b * 2 + c * 2
a(x, y) //これは
x * 2 + y * 2 //こうしろというだけの指示で
(x + y) * 2 //このような変形は意味していないし
してはならない
a(x, y) * z //こういうとき困るだろうが
マクロ展開は最適化が始まる前の話だつってんだよ、わかんねーやつだな
#define a(b,c) b * 2 + c * 2
a(x, y) //これは
x * 2 + y * 2 //こうしろというだけの指示で
(x + y) * 2 //このような変形は意味していないし
してはならない
a(x, y) * z //こういうとき困るだろうが
506デフォルトの名無しさん
2020/01/22(水) 13:18:49.85ID:kHABv+Er インライン展開されるかどうかは、そのコード片がマクロの展開結果かどうかには関係ないってことだぞ
こんなこと、いちいち言わなきゃわからんようだから付け足しておく
こんなこと、いちいち言わなきゃわからんようだから付け足しておく
507デフォルトの名無しさん
2020/01/22(水) 13:34:41.13ID:S75Q14iC >>505
最適化をいつ始めるかなんてそれこそコンパイラ次第なんだけど
最適化をいつ始めるかなんてそれこそコンパイラ次第なんだけど
508デフォルトの名無しさん
2020/01/22(水) 13:41:29.12ID:yb939hMs つまりマクロはインライン展開されやすいという主張は引っ込めるわけだな
509デフォルトの名無しさん
2020/01/22(水) 13:43:39.56ID:yb939hMs 都合悪くなると
どうせいつもの手で逃げるだろうけどな
尻尾巻いたやり取りは残るぜ
どうせいつもの手で逃げるだろうけどな
尻尾巻いたやり取りは残るぜ
510デフォルトの名無しさん
2020/01/22(水) 14:44:17.11ID:54HMiZ6v511デフォルトの名無しさん
2020/01/22(水) 14:49:21.64ID:kHABv+Er512デフォルトの名無しさん
2020/01/22(水) 14:51:21.39ID:54HMiZ6v 意図して出来るのは知ってるが
敢えてやらないんだよ
敢えてやらないんだよ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 【大分】佐賀関で大規模火災、170棟以上が延焼中 70代男性1人と連絡取れず [ぐれ★]
- 【サッカー】日本代表MF 中村敬斗 ボリビア戦のスーパーゴールに「惚れるわ」「痺れる程のゴールこれでご飯何杯いけるのよ」 [阿弥陀ヶ峰★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 「クマはなるべく山に返す努力を」「クマと戦争は間違っている」動物保護活動家の主張 棲み分けと学習放獣でクマ被害なくなるのか?★7 [ぐれ★]
- アンケート調査で「高市発言は問題なし」 93.5%wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 【悲報】大分市佐賀関の火事、20軒→170軒に延焼🔥 [481941988]
- 自閉症が「んなっしょい」と連呼するお🏡
- 日本人の海外旅行したきのマナーよくなったのはいつから
- へそグリグリ
- 結婚しないやつは異性は嫌いなの?
