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

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

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

411 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 21:34:33 ID:RfLx+x9F.net]
まだやってんのか

>>377
それ

412 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 21:40:42 ID:RfLx+x9F.net]
do {
if(...) break;
} while (0);

よりは

{
if (...) goto label;
}
label:

の方が良い

という

413 名前:モ見に賛成

>>303ではないけど
[]
[ここ壊れてます]

414 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 21:44:50 ID:RfLx+x9F.net]
まあどっちでも大差ないけど

415 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 21:47:25.68 ID:RfLx+x9F.net]
{
{
if (...) goto label;
}
}
label:

これはbreakじゃ無理

416 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 21:57:15 ID:RfLx+x9F.net]
{
switch (...)
{
case ...: goto label;
}
}
label:

これも無理

417 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 22:11:05 ID:ByUy1Erg.net]
while(0)とか意味不明なコードよりgotoでスコープ抜ける方がはるかにシンプルだわな

418 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 22:15:20 ID:RfLx+x9F.net]
一応 do while(0) の使い方も覚えておいた方が良い
他人のコードを見たりマクロで使ったり
する事もあるだろうから

419 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 22:17:28 ID:JMAoH3/H.net]
普段のdo whileもwhile(0)って書くなど弊害が出るのでやめた方がいい



420 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 22:19:27 ID:ByUy1Erg.net]
ループするつもりもないのにループの構文使うのは悪手だと思う

421 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 22:27:26 ID:RfLx+x9F.net]
>>409
日本語で

422 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 22:33:02 ID:fzpRtoDi.net]
そこはまぁ、ループではあるけれども同時にbreakが使えるブロックでもあるわけで、
実際do-whileなんてほとんどがそういう使い方しかされていないわけだし。
ループできる構文でループしないのはbreakできる構文でbreakを使わないのと
同じようなものかと。

423 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 22:36:02 ID:JMAoH3/H.net]
>>411
do whileしてるのになぜか1回しか実行してないのに気付くのに時間がかかる
習慣で書くのでwhile(0)に気づけない

424 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 22:48:25 ID:PgEzQeWd.net]
こんなささいな違いは個人の好みでいいと思う派
do-while使わない派の言い分もわからなくもないが、
ソースを読む場合gotoだってgoto先を確認しないと意図が理解できないだろ
label名を考える必要があるのもちょっとめんどい
なのでこんなのどっちでもいい
ちなみにrust方式もブロックの先頭にラベル付いてるのは若干違和感覚える

425 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 22:50:45 ID:RfLx+x9F.net]
>>413
誰か解説よろしく!

426 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 23:07:09 ID:Wel1D6/w.net]
どっちのやり方でも構わないけど、リソース◯◯を自動解放するためのブロックだとか意図を示すコメントを付けておいてくれればそれでいい。

427 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 23:13:56.14 ID:AinWVopR.net]
↑だからその方法だと例外安全が・・・
C++だとリソース開放は RAII か finally かしか幸せになれない

428 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 23:17:22.36 ID:RfLx+x9F.net]
その方法
ってどの方法?

429 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 23:23:50.28 ID:Wel1D6/w.net]
>>417
誤解させたかもしれないから補足すると、どっちのやり方もと言ったのはただのブロックかdo whileかという話のことで、どちらにせよスコープを抜けて破棄されることを想定していた。
解放ルーチンにとばすことは端から考えてなかったよ。



430 名前:デフォルトの名無しさん mailto:sage [2020/01/19(日) 23:47:54 ID:L2mlhsAt.net]
解放ルーチンにとばすくらいしかgotoの有用な使い方なんてねーだろ。
だからRAII、例外安全の話になってるわけだが
もう意地になって意味もわからずgotoにこだわってる馬鹿がいる。

431 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 00:05:06 ID:ThUag/92.net]
finally相当のデストラクタをラムダ式で渡すクラスのインスタンスを作ればいいじゃない、
で済まされてしまいそうだがやはりfinallyはあったほうがいい。

432 名前:デフォルトの名無しさん mailto:sage [2020/01/20(月) 01:01:38.84 ID:KvAer05C.net]
「解放ルーチンにとばすくらいしかgotoの有用な使い方なんてねーだろ。」
って思えるぐらい、Cではこの技法が多用された
なぜなら真実は逆で
「gotoでとばすぐらいしか開放ルーチンをまとめる方法なんてねーだろ」
だったから多用された
A→Bでなくて、実はB→Aだったって話

なんだけど、あまりにもB→Aが多用されたから
数の暴力で逆のA→Bも成り立つと感覚的に思ってしまう
だが本当にそうだろうか、gotoに開放ルーチンに飛ばす以外の利用法は無いのだろうか
模索してみよう、というのがスレの流れ

スレがその流れになるのは自明で
何故ならC++においては「gotoで開放ルーチン」は例外安全の意味で完全な悪手になったから
初めから勘定に入らないし、考える意味もないし、議論の余地もない
他の利用方法を前提に話すのは当たり前で既定路線

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






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

前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