20/01/20 15:15:43 0GX6odYx.net
once{};
みたいな構文で良いんじゃね
マクロとか書けば
463:デフォルトの名無しさん
20/01/20 15:21:36 hv8WW6TF.net
マクロ()
ベターCとか03で脳みそ止まってんだろうなw
464:デフォルトの名無しさん
20/01/20 15:26:55.87 0GX6odYx.net
C++スレだからlambdaでも許されるけどCだと使えないやん?
465:デフォルトの名無しさん
20/01/20 15:29:38.41 hv8WW6TF.net
ほぉ、じゃあお前はCで使える文法のみでC++を書いてんだな
ボケてんのか?
466:デフォルトの名無しさん
20/01/20 17:52:26.33 SZK6NMcF.net
>>447
GOTO文有害説で言われる無条件分岐のスペルがbreakであろうとgotoであろうと同じことだ
同じ意味合いのことを書くために、ループでないものをループという嘘をつくことに俺は反対だ
467:デフォルトの名無しさん
20/01/20 20:28:01.32 KSbNzMqr.net
結局、gotoは使わないほうが良いのですか?
468:デフォルトの名無しさん
20/01/20 20:51:28.03 SZK6NMcF.net
{ から } までを1命令と読めるようにするのにgotoは無用と言っているに過ぎない
そのようにまとめようとしていないときやgotoを使っても1命令と読める場合にまで
GOTO有害説に囚われ強弁するのは何も分かってないやつのすることということだ
469:デフォルトの名無しさん
20/01/20 20:56:48.81 rZl1icD3.net
つまんないことに拘りすぎ
どっちでもええがな
470:デフォルトの名無しさん
20/01/20 21:36:31 hWOi4sNW.net
>>448
今だとdo-whileでループする方が誤解の元になりそうな。
471:デフォルトの名無しさん
20/01/20 21:38:12 jzGRQ/VP.net
#define BLOCK(stmt) do { stmt; } while(0);
BLOCK(
if (error) break;
);
472:デフォルトの名無しさん
20/01/20 21:53:50 IuISEeYy.net
do{}while(0)とか初めて見たけど
ダサすぎてそりゃ思いつかねーわwww
473:デフォルトの名無しさん
20/01/20 21:55:40 dqQuCzGx.net
結局goto有害説に流されないオレカッケーが言いたいだけだろ?
それでもgotoが有効な場面なんかないけどな。禁止にしても問題なんかない。
474:デフォルトの名無しさん
20/01/20 22:00:17.76 SZK6NMcF.net
GOTO有害説に流されるのがオレカッケーと思っているようだな
アホwバカwww
禁止にしたら問題あるからlongjmpやthrowができてきたんだよ
475:デフォルトの名無しさん
20/01/20 22:11:05 KSbNzMqr.net
つまり、使わないほうが良いのですね。
なんとなくですがわかりました。
476:デフォルトの名無しさん
20/01/20 22:12:08 SZK6NMcF.net
Javaから帰ってこなくていいからな
永久にバイバイ
477:デフォルトの名無しさん
20/01/20 22:30:44 dqQuCzGx.net
>>462
今時、例外の問題も把握してないでlongjumpとかthrowとか言ってんのか。。
馬鹿にもほどがあるわ。
負け確定だから泥仕合にしようってのはわかるがそろそろ引っ込めよ。
478:デフォルトの名無しさん
20/01/21 05:17:13 AnB6dumh.net
>>459
while(0)の後ろにセミコロン付けちゃダメ
479:デフォルトの名無しさん
20/01/21 07:25:59 XinnYwlJ.net
>>465
GOTO有害説に流されているという指摘は否定しないんだな?w
480:デフォルトの名無しさん
20/01/21 08:47:12 pAPT/+0o.net
>>459
定義部 { stmt; } のセミコロンも不要かな。
プリプロセッサを通した変換結果を見て気付いた。
って言うか、関数形式マクロの実引数に
空白とかカッコとかを含めることができるのね。
481:デフォルトの名無しさん
20/01/21 08:50:21 liyEgHWj.net
>>468
確かカンマも使えないはずだし、>>459のマクロは使い勝手は悪く制御構造も隠蔽する有害な使い方だろう。
482:デフォルトの名無しさん
20/01/21 09:35:24 ecU7KawI.net
gotoを使わないことが目的になって
余計分かりにくくしてるアホな例
483:デフォルトの名無しさん
20/01/21 09:49:43 Hkcle0K4.net
goto論争はくだらない
一方でラムダ使ったループ脱出は議論の余地がある
これがエレガントに見えるのか
パズルに見えるのか
自分の場合どちらかといえば後者
ラムダ自体は多用するけど
484:デフォルトの名無しさん
20/01/21 11:17:56 Sppu2iw7.net
盲目的にgoto=悪と信じて、かえって読みずらいコード書く奴ってほんとアホだよなあ
485:デフォルトの名無しさん
20/01/21 13:51:41 XinnYwlJ.net
>>470
ほんこれ
486:デフォルトの名無しさん
20/01/21 13:54:41 XinnYwlJ.net
gotoの何が悪いのかわかってないやつをもう少しいたぶってやろうと思ってたけど
途中で可哀想になってきて答え書いてやってるのになあ。。。
487:デフォルトの名無しさん
20/01/21 18:52:44 xueGtX5x.net
>>460
do { } while(0)
は自分は見たことがある。
忘れてしまったが、確か、#define マクロの定義部分で使われていて、目的は、
マクロ全体が一つの分の用に実行されて欲しいことであったようだった。
#define マクロ名() do {\
・・・\
・・・\
} while(0)
のような感じだったと思う。
これなしで裸で書くより安全になる場合があった気がする。
488:デフォルトの名無しさん
20/01/21 18:57:29 fxsKQzaN.net
if (...) マクロ();
else ...
489:デフォルトの名無しさん
20/01/21 18:57:46 xueGtX5x.net
>>475
忘れてしまったが、おぼろげながら何か以下の様なことに関連していたような記憶がある。
C/C++では、if 文の直後は {}がなくても書くことが出来てしまう。
それで、
if (条件式)
マクロ関数名();
のように書いた場合、マクロの定義部を単なる {} で書くより安全な場合があったような
気がする。
忘れた。
490:デフォルトの名無しさん
20/01/21 19:00:56 xueGtX5x.net
>>476
あ、その場合だね、多分。
#define aaa() {・・・}
と定義してしまった場合、
if (...) aaa();
else ...
と書くと、
if (...) {};
else ...
と展開されてしまい、else の部分がエラーになってしまう。ところが、
#define aaa() do {・・・} while(0)
と定義していると、
if (...)
do {} while(0);
else ...
と定義されて、正しく動作する。
491:デフォルトの名無しさん
20/01/21 19:03:11 xueGtX5x.net
URLリンク(stackoverflow.com)
↑に書いてあった。
492:デフォルトの名無しさん
20/01/21 19:11:44 jtyzl32v.net
それは11年前のネタだからそうなってるけど現代C++ならラムダ式で書くべき内容
493:デフォルトの名無しさん
20/01/21 19:19:17 fxsKQzaN.net
マクロでしか書けない物もあるんだよ
494:デフォルトの名無しさん
20/01/21 19:19:18 jXO8TLK9.net
大昔の工芸品みたいやな
495:デフォルトの名無しさん
20/01/21 19:24:51 fxsKQzaN.net
ていうかなぜラムダ式?
考える順は以下じゃない?
関数
インライン関数
テンプレート関数
マクロ
496:デフォルトの名無しさん
20/01/21 19:35:47 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:デフォルトの名無しさん
20/01/21 20:01:36.85 fxsKQzaN.net
ああ、そういうことか
do while に対するメリットがないと
互換性から do while を選ぶことになりそう
498:デフォルトの名無しさん
20/01/21 20:17:22 V9u70PsA.net
ラムダ式はc++11からか
使えない環境は結構あるんだろうな
近付きたくない
499:デフォルトの名無しさん
20/01/21 20:20:59 m86EWX9f.net
>>484
最適化前提にしないと代替とは言えない�
500:ヒ
501:デフォルトの名無しさん
20/01/21 20:21:55 OieZoAm+.net
そんな用途でマクロなんか使わねーわ。ばかか。
502:デフォルトの名無しさん
20/01/21 21:35:08.93 XinnYwlJ.net
スコープが効かねえ毒だかんな
503:デフォルトの名無しさん
20/01/21 22:01:33.56 fxsKQzaN.net
>>481
504:デフォルトの名無しさん
20/01/21 22:03:37.86 XinnYwlJ.net
__LINE__がいるのとかな
505:デフォルトの名無しさん
20/01/22 00:05:18 LIwEls05.net
>>484
JavaScriptだとそうかいても速度差がないかもしれないけど、C++だと、
そう書いた場合は、関数を定義してから、マシン語の call 文でその関数が
呼び出されるので結構なオーバーヘッドとなる。
JavaScriptの場合は、どう書いてもオーバーヘッドがあるからそのくらいの
オーバーヘッドは体感速度に登ってこないのでどっちでも良いだけ。
506:デフォルトの名無しさん
20/01/22 00:20:06 2biZgMt+.net
>>492
ラムダ式はインライン展開されるからオーバーヘッドにはならない
507:デフォルトの名無しさん
20/01/22 01:14:20 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:デフォルトの名無しさん
20/01/22 01:26:38 2biZgMt+.net
>>494
OSだけ書かれても環境がわからんけどこれに見える
URLリンク(cpprefjp.github.io)
509:デフォルトの名無しさん
20/01/22 09:21:16 RBeGE/46.net
>>493
それ保証されてる?
最適化オフでは関数オブジェクトのままじゃないの?
最近のc++はデバッグビルドが使い物にならないことが多くてマジ困る
510:デフォルトの名無しさん
20/01/22 09:24:55 dJnLloAw.net
>>496
最適化するかしないか自分で選べるんだから、言語のせいじゃないと思うんだ。
511:デフォルトの名無しさん
20/01/22 09:47:45 s6VTVCIo.net
最近というか昔からだなデバッグまわりがクソなのは
ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ
デバッグをないがしろにするなと
>>497
端的にテンプレートが原因だから言語のせい
というか誰のせいかどうでもいいから解を提供しろと
512:デフォルトの名無しさん
20/01/22 10:28:10 dJnLloAw.net
>>498
最適化設定を変えることが解になると思って言ったんだけど、そうはいかないことがあるの?
デバッグまわりがクソだと言うなら、相手はまずコンパイラ&デバッガのベンダであって、言語の標準化は
あんまり関係なくね?
513:デフォルトの名無しさん
20/01/22 10:34:22 Oj6zQLXh.net
インライン展開するかどうか含めて
最適化はコンパイラ依存
パフォーマンス測定やチューニングは
実際の環境でやらないと
可能性で言えばマクロが一番インライン展開の可能性が高い
(コンパイラが賢すぎて同一コードを共有するとかない限り)
514:デフォルトの名無しさん
20/01/22 10:50:51 kHABv+Er.net
マクロはソースの字面を読み替えるだけ
機械語の命令シーケンスを開いたサブルーチンにするインライン展開とは全く別な話
515:デフォルトの名無しさん
20/01/22 12:06:37.54 OzkwmLpy.net
>>500
マクロは、C
516:言語の時代から「前処理(preprocess)」として処理され、 コンパイル作業が入る前にその場にトークンとして展開されるだけと 仕様で決まっています。勝手に関数になる可能性はほぼ0です。
517:デフォルトの名無しさん
20/01/22 12:28:55 S75Q14iC.net
挙動が仕様通りになるならコンパイラは何やってもいいんだよ(と仕様で決まってる)
マクロだったものに関数呼び出しを仕込むのもコンパイラの自由だ
実際同じ処理の塊があっちこっちに出てきたらまとめて関数(みたいなもの)にするコードサイズ最適化は普通にやる可能性がある
518:デフォルトの名無しさん
20/01/22 12:40:53 Oj6zQLXh.net
>>501
オーバーヘッドを語ってるんだから
どういう手順でバイナリになるかは関係ない
バイナリになった状態が全て
>>502
>>500にそう書いてるけど
519:デフォルトの名無しさん
20/01/22 13:12:02.54 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:デフォルトの名無しさん
20/01/22 13:18:49.85 kHABv+Er.net
インライン展開されるかどうかは、そのコード片がマクロの展開結果かどうかには関係ないってことだぞ
こんなこと、いちいち言わなきゃわからんようだから付け足しておく
521:デフォルトの名無しさん
20/01/22 13:34:41.13 S75Q14iC.net
>>505
最適化をいつ始めるかなんてそれこそコンパイラ次第なんだけど
522:デフォルトの名無しさん
20/01/22 13:41:29 yb939hMs.net
つまりマクロはインライン展開されやすいという主張は引っ込めるわけだな
523:デフォルトの名無しさん
20/01/22 13:43:39 yb939hMs.net
都合悪くなると
どうせいつもの手で逃げるだろうけどな
尻尾巻いたやり取りは残るぜ
524:デフォルトの名無しさん
20/01/22 14:44:17 54HMiZ6v.net
>>505
#define a(B,C) ((B) * 2 + (C) * 2)
>>498
>ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ
ほんそれ
525:デフォルトの名無しさん
20/01/22 14:49:21 kHABv+Er.net
>>510
それはおまえさんの勝手な思い込みだよ
x * 2 + y * 2 * z
という結果を意図して使うこともできるのは
マクロに特有の機能で今さら変更できなくなっている
526:デフォルトの名無しさん
20/01/22 14:51:21 54HMiZ6v.net
意図して出来るのは知ってるが
敢えてやらないんだよ
527:デフォルトの名無しさん
20/01/22 15:11:37.83 s6VTVCIo.net
>>499
デバッグのために最適化切ると激遅になる問題が散見されるという問題にたいして
最適化設定を変えるという解がナンセンス
そりゃpragma駆使して手で細かく切り替えりゃ可能だろうがそんなことやってられない
528:デフォルトの名無しさん
20/01/22 15:11:48.33 kHABv+Er.net
オマエガナー(aary
529:デフォルトの名無しさん
20/01/22 15:13:12.36 kHABv+Er.net
>>512
おまえが510で持ち出したような括弧が自動的に付くような規格改定が行われない理由を考えたことがあるか?
530:デフォルトの名無しさん
20/01/22 15:13:39.10 Oj6zQLXh.net
>>505
多分比較してる内容が噛み合ってない
マクロを展開した結果と直接記述と
が同じなのは当然
プリプロセッサなわけだから
そうじゃなくて
マクロ、インライン関数、通常の関数の比較の話
当然最適化の期待度は
マクロ(直接記述)>インライン関数>通常の関数
531:デフォルトの名無しさん
20/01/22 15:18:02.26 Oj6zQLXh.net
>>505
そもそも最適化ですらない話を持ち出してるのか
話の流れと全く関係ないですね
532:デフォルトの名無しさん
20/01/22 15:32:14.07 s6VTVCIo.net
>>499
ベンダの責任っていうのは一見もっともでそれがまさにc++標準化メンバーのスタンスだ
でも例えばお前はSFINAE関連のデバッグどうやってるよ?
いくつかツールはあるが導入が難しいか頼りないものばかりだ
そんな状況がずっと続いている
このあたりが改善するには言語コアを設計する時点からどんなデバッグ機能が必要か考えるべきってのがおれ�
533:フ主張 作業フローを理解しない人が無邪気にこれが入ればさらにソースコード短く書けまっせレベルの議論で機能追加を考えるべきでない
534:デフォルトの名無しさん
20/01/22 15:34:50.28 2biZgMt+.net
機能を使うかどうかはお前の判断でお前の責任
勝手に機能使っておいて八つ当たりすんな
535:デフォルトの名無しさん
20/01/22 15:50:53.24 LkBGzo9o.net
>ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ
+1
536:デフォルトの名無しさん
20/01/22 15:53:26.36 2biZgMt+.net
江添みたいなのしかいない日本と違って、普通の国の委員は企業の代表として参加しているのでその指摘は的外れ
537:デフォルトの名無しさん
20/01/22 15:57:43.58 OzkwmLpy.net
>>503
関数になっているものを inline 展開する処理系は多数ありますが、
プログラマがせっかく展開して書いてあるものをわざわざ関数に戻す処理系
はめったにないのです。
また、そのような最適化は人間には簡単に思えるものですが、機械にやらせようと
するととても大変です。マクロ展開される前のマクロ関数の状態ならまだ
できるのですが、コンパイラの中で最適化層と前処理層がかけ離れた位置に
あるので、もしやりたければ最適化層だけでそれをやることになり処理がとても重くなります。
まず、コンパイル後に出来上がった中間コードのなかから同一のパターンを見出すのが
ものすごく時間が掛かります。それから全く同じではない場合への対処が機会は苦手です。
538:デフォルトの名無しさん
20/01/22 15:57:58.58 kHABv+Er.net
>>516
最後の2行とそれ以前が論理的に繋がってないぞ
539:デフォルトの名無しさん
20/01/22 15:58:35.89 kHABv+Er.net
>>517
506で牽制しておいたはずなんだが
言わなきゃわからんのではなく、
言ってもわからんやつのようだな
540:はちみつ餃子
20/01/22 18:28:00.61 lnnB9FBg.net
>>516
> 当然最適化の期待度は
> マクロ(直接記述)>インライン関数>通常の関数
現代のコンパイラの最適化機構はかなり複雑で、どのように最適化が効くか予想するのは無理。
素朴な処理系ならなんらかの傾向がある場合もあると思うけど、一般化できるような話ではないよ。
普通の関数はインライン関数より呼び出しのコストは確かに大きいけど、
全体のコードサイズが大きくなるとキャッシュメモリからあふれやすいといった話もあって、
トレードオフになってる要素がある。
それに、主要なコンパイラは inline キーワードで修飾してもしなくてもインライン化が効果的ならインライン化するし、
効果的でないならしないよ。
inline 関数として定義すれば各コンパイル単位の中に必ず定義もあるわけだから、
LTO が有効ではない状況では結果的にインライン化しやすい条件がととのっているとは言えるんだけど、
逆に言えば LTO を有効に出来るならどうでもよくなるわけだし。
いずれにしても、そんな微々たる速度が気になるような場合ってそんなにあるか?
速度が問題になってから実測しろよ。
状況によってどうとでもなるんだから、具体的な状況を示さずにどれが速いとか言ったってかみ合うわけないだろ。
541:デフォルトの名無しさん
20/01/22 18:44:11.63 0ayd3B3Q.net
>>525
一般的な期待度の話
当然例外はある
コンパイル単位が別で
関数を定数パラメーターでコールした場合
なんかが差が大きくなる
レジスタ退避やスタックポインタのアラインメント調整、スタック拡張、AVXの準備関数コール
もそれなりにオーバーヘッドとなる
同じコンパイル単位であれば
今のコンパイラではそれほど差は出ないが
組み込みのチープなコンパイラもまだまだ使われている
542:
20/01/22 19:06:41.58 RZgzSQWe.net
>>501
お前さんは LISP のマクロを知らないのか?
543:デフォルトの名無しさん
20/01/22 19:17:53.96 2biZgMt+.net
544:LISPの仕様がC++と何か関係ある?
545:デフォルトの名無しさん
20/01/22 20:23:02 OSofFadI.net
関数とマクロの違いがlispだとわかりやすいから。
わかってないやつをあぶりだすのにはちょうどいい。
546:デフォルトの名無しさん
20/01/22 20:38:48 F1N+c+gr.net
マクロアセンブラのマクロは強力
547:デフォルトの名無しさん
20/01/22 21:16:42.45 kHABv+Er.net
>>527
で?
548:デフォルトの名無しさん
20/01/22 22:55:42 PNeen3jP.net
LISPじゃー
LISPの場合はー
www
549:デフォルトの名無しさん
20/01/22 23:00:35 Ab6Q02+v.net
QZが現れると大抵話が脱線するから放置しとこう。
550:デフォルトの名無しさん
20/01/23 02:42:18 96Ez/jHv.net
>>518
よくわかんないので、SFINAEなりConceptなりconstexprなりをデバッグに配慮して設計していたら
どう問題を改善できていたと思うのか、教えて。
551:デフォルトの名無しさん
20/01/23 05:39:34 ZM0XhcNb.net
(CMakeスレがないっぽいので)
target_link_libraries(a.exe PRIVATE ${MPI_CXX_LIBRARIES})
↑${MPI_CXX_LIBRARIES}が定義されていなくても合法で、その場合何ともリンクしないということを期待してもOK?
それとも
if(MPI_FOUND) target_link_libraries(...) endif()
とすべき?
公式を見てもよく分からない
552:デフォルトの名無しさん
20/01/23 07:08:06 Y+bt1zIi.net
>>535
こちらでどうぞ
スレリンク(tech板)
553:デフォルトの名無しさん
20/01/23 09:24:40 cHzm9I9L.net
>>534
デバッグに配慮してたらそんな糞機能入れないだろうね。
554:デフォルトの名無しさん
20/01/23 10:15:54 77XEoAHk.net
今日もgotoを使ってしまった・・・
555:デフォルトの名無しさん
20/01/23 10:22:15.42 KV664nBl.net
>>534
まず現在の問題の構造を考えて欲しい
c++はtemplateを使ってメタプログラミングを行うのはご存知の通り
でtemplateはチューリング完全だ
それだけの複雑さを持っている
それに対して一般人がやるデバッグはコンパイルが通って期待通り動くかエラーメッセージを見るかぐらいだろ?
これは原始的なprintfデバッグを行っているのと同じレベル
なのでまずストレートに考えると
メタプログラミングの結果が取得できること
コンパイラにデバッガ接続可能にしてメタプログラミングの実行がトレースできること
が必要
これがベストなのかはさておき、メタでないプログラミングでは当たり前なんだから
SFINAEをどうするかみたいな話の前にまずこういうところを整備すべきだった
ハードウェア依存じゃないのだから標準モデルを定めるのは可能だ
556:デフォルトの名無しさん
20/01/23 10:45:58 77XEoAHk.net
gotoを受け入れるとクリーンでわかりやすい実装が開ける。
・・・かもしれない。
557:デフォルトの名無しさん
20/01/23 10:47:36 96Ez/jHv.net
>>539
> メタプログラミングの結果が取得できること
> コンパイラにデバッガ接続可能にしてメタプログラミングの実行がトレースできること
> が必要
あったらいいなとは思うけど、必要(=可能になるまで機能を使わせるべきではない)とは思わないなぁ。
実行時プログラムについて言語規格側でデバッグのための特別な「標準モデル」が定められたりいてないけど、
現状でわりと使えるデバッガができてるし、コンパイラはあるけどデバッガは無いという環境や時代はあったし。
メタプログラミングだからといって機能追加に先立って特別な定めが要るという理屈はよくわからない。
558:デフォルトの名無しさん
20/01/23 11:24:46 Y+bt1zIi.net
>>540
470, 472も言っているが
gotoを使わないこと自体が目的化してはいけない
そういうアホがbreakは平気で使ったりする
559:デフォルトの名無しさん
20/01/23 11:27:54 y5HKK+ir.net
constexpr関数内でgoto使えないのだから、gotoを避けることを目的とせざるを得ない場面はある。
560:デフォルトの名無しさん
20/01/23 11:28:08 77XEoAHk.net
breakとgotoを同一視するのも問題なのでは。
561:デフォルトの名無しさん
20/01/23 11:28:57 Y+bt1zIi.net
>>544
同一視ってGOTO有害説の中では完全に同じだよ
562:デフォルトの名無しさん
20/01/23 11:31:15 y5HKK+ir.net
goto有害説ではbreakとgotoは違うもの扱いしているよ
breakで出来ないことがgotoで出来ること自体を問題視しているのだから
563:デフォルトの名無しさん
20/01/23 11:31:46 77XEoAHk.net
誰かそんな説を唱えたのでしょうか。
564:デフォルトの名無しさん
20/01/23 11:32:55 77XEoAHk.net
責任者出て来ーーい!!!
565:デフォルトの名無しさん
20/01/23 11:33:01 Y+bt1zIi.net
>>546
ほう、どう違う扱いをしているんだ?
566:デフォルトの名無しさん
20/01/23 11:34:43 y5HKK+ir.net
gotoは使わないけどbreakは使うってのがgoto有害説じゃないの?
完全に別の扱いしているってことだろ
567:デフォルトの名無しさん
20/01/23 11:35:44.43 77XEoAHk.net
ぐ、ぐ、ぐぅの音も出ない。
568:デフォルトの名無しさん
20/01/23 11:42:15.74 Y+bt1zIi.net
>>550
全然違う
まだ答えは書いてやらんぞ
569:デフォルトの名無しさん
20/01/23 12:29:41 nmx8CMX3.net
>>546 も >>539 も同じタイプの馬鹿
選択の幅は広い方がいい
機能の存在を否定するのではなく、単にお前が使わなければいいだけ
570:デフォルトの名無しさん
20/01/23 13:56:33 VWfJLmDE.net
>>533
+1
ほんそれ
571:はちみつ餃子 ◆8X2XSCHEME
20/01/23 14:47:05 QRqIx1i6.net
break でも goto でもそれを使わなかったときにもっと複雑になるのなら使っていいよ。
クソみてぇなフラグを立ててループから抜けるよりは break の方がマシだろ?
使わなくても十分に良いなら使わない方がいいに決まってるけど、要るときに使わないのは馬鹿げた話。
現実にはクソな道具が役に立つクソな状況があるんだよ。
572:デフォルトの名無しさん
20/01/23 15:47:36 tCbubFOj.net
do{...}while(0);
とかにしたくないとき
while(1){
...;
...;
break;
}
もたまに意図的に使う
573:デフォルトの名無しさん
20/01/23 16:22:12 77XEoAHk.net
なにこれ悪行自慢。
574:デフォルトの名無しさん
20/01/23 16:34:07 Y+bt1zIi.net
>>556
breakしなかった場合の動作が違うじゃねえかよ
575:デフォルトの名無しさん
20/01/23 16:47:49 nmx8CMX3.net
>>556
switch(1){
default:
}
576:デフォルトの名無しさん
20/01/23 16:49:27 77XEoAHk.net
通報しました。
577:デフォルトの名無しさん
20/01/23 17:36:57 y5HKK+ir.net
forやwhileもgotoのシンタックスシュガーだから使うなみたいな
578:デフォルトの名無しさん
20/01/23 17:43:18 y5HKK+ir.net
gotoって自由すぎて対応するlabelの場所によって意味が変わるから、自由に飛びたいとき以外に使うと分かりづらくなる。
breakやcontinueなら一連の処理の一部を飛ばすって意図がそれだけでわかるのだから、do{}while(0)だとgoto使うのと何を分かりやすくするかでトレードオフになる
579:デフォルトの名無しさん
20/01/23 17:47:15.54 Y+bt1zIi.net
do{} から以後が、それまでの話と繋がってねえぞ
それから break と continue のGOTO有害説における違いもわかってねえな
580:デフォルトの名無しさん
20/01/23 17:51:51 y5HKK+ir.net
do while(0)+breakを使う->loopだと誤解する可能性がある
gotoを使う->labelの飛び先見ないと意図がわからない
ってどちらの分かりづらさを大きな問題とするかで、どちらが良いかの好みが別れる
これがトレードオフ
581:デフォルトの名無しさん
20/01/23 17:53:42 y5HKK+ir.net
まあdo while(0)と組み合わせるならcontinueの方が良い気もする
やっぱりretryしようと思ったときのために
582:デフォルトの名無しさん
20/01/23 18:00:56 AdSJ3UeH.net
>>562
C++自体自由過ぎるから使わない方が良いぞ
583:デフォルトの名無しさん
20/01/23 18:04:36 y5HKK+ir.net
自由だから使い所はその自由度が必要なときってだけなのだが。
forのかわりにgotoでループさせる奴は正気じゃない
584:デフォルトの名無しさん
20/01/23 18:12:02.33 AdSJ3UeH.net
関数もどこに飛ぶかわからないから
使いどころは必要な時だけだな
ポインタも同じ
585:デフォルトの名無しさん
20/01/23 18:52:22.63 77XEoAHk.net
関数はgotoと同じ。
586:デフォルトの名無しさん
20/01/23 19:01:50.07 77XEoAHk.net
>>566
やはりこれからはRustですか。
587:デフォルトの名無しさん
20/01/23 19:09:24.45 nmx8CMX3.net
>>570
そうだよ
さようなら
588:デフォルトの名無しさん
20/01/23 19:19:26.28 5iKgMbK4.net
>>588
後者のbreakはifが付いてないので絶対breakするというなら一緒だが
しかし途中のどこかでcontinueが掛かれていると動作が変わる
589:デフォルトの名無しさん
20/01/23 19:21:21.59 5iKgMbK4.net
なぜか変なところへ安価が・・・
>>558
後者のbreakはifが付いてないので絶対breakするというなら一緒だが
しかし途中のどこかでcontinueが掛かれていると動作が変わる
590:デフォルトの名無しさん
20/01/23 19:22:06.67 77XEoAHk.net
goto駆使してcoroutineというパターンは。
591:デフォルトの名無しさん
20/01/23 19:22:49.44 nmx8CMX3.net
ループする気がないのにcontinueが入る可能性があるのか?
やっぱループ構文をループ以外の目的で使う奴はアホだわ
592:デフォルトの名無しさん
20/01/23 19:23:30.77 5iKgMbK4.net
>>564
どうでもいいが
do{}while(0);+continue;でもっと難読化するかも知れない
593:デフォルトの名無しさん
20/01/23 19:27:33.29 77XEoAHk.net
>>552が答えを書かないのだが。
もしかして答えなんて持っていないのでは。
594:デフォルトの名無しさん
20/01/23 19:32:56.95 rYLpH2kU.net
function();
何をするかわからないから関数は使うべきじゃない
pointer;
何を指し示すかわからないからポインタは使うべきじゃない
595:デフォルトの名無しさん
20/01/23 19:36:22.66 5iKgMbK4.net
>>565 に聴いてくれ
596:デフォルトの名無しさん
20/01/23 20:36:00 Y+bt1zIi.net
>>577
あとで、しまったと思ったんだが
もう答えを書いてしまっていた
今んとこ、まだ伏せておきたいので
どこなのかは書かないから
自分で探せ
597:デフォルトの名無しさん
20/01/23 22:32:03.65 bkVRGJlU.net
>>553
とかいいつつ古い仕様の範囲で実用してる人をバカにして
マウント取って憂さ晴らしするんですねわかります
598:デフォルトの名無しさん
20/01/23 22:33:01.52 glYn/cGw.net
つまりCPUはgotoの嵐だからクソと
599:デフォルトの名無しさん
20/01/23 22:54:05.78 nX/KPrtD.net
>>564
どうせdo-whileなんて本来のループとして使うことはまずないんだから、あとは
ローカルルールとしてwhile(0)以外禁止とかにすれば十分かと。
600:デフォルトの名無しさん
20/01/23 23:13:19.41 HgduJel4.net
gotoは高級の中にいきなり低級なことぶちこむから違和感あるんだろ
場当たり的で美しくないね
601:デフォルトの名無しさん
20/01/23 23:28:17.91 2vcw1hg/.net
まえにSQLパーサを書いたときはgotoがすごく便利だった。
文法をそのままソースに反映できる感じ。
goto嫌いな人たちはどうやって書くのか見てみたい。
602:デフォルトの名無しさん
20/01/23 23:35:42.82 M8BvdbFC.net
そういえば、まだ構造化されてない昔のBASICは、構造化された今のBASICより人気があったのではないかと思うけど、行番号と goto 文の組み合わせはラベル名を考えなくて済むので便利であった。
そして、BASIC言語は分かり易くて易しい言語と言われていたのだから、goto文自体はそんなに理解や扱いが難しいものではない。
ただし、フローチャートを書いてから組まないと分かりにくいことがあったかも知れない。
逆に、今フローチャートを書く必要がある場面は少なくなったのはgoto分を使わずに書けるようになったからかも知れない。
603:デフォルトの名無しさん
20/01/23 23:41:23.96 cHzm9I9L.net
ここまで無理やりな擁護してまで使うほどの機能じゃねーだろバカか。
604:デフォルトの名無しさん
20/01/23 23:43:47.47 LWLbtpQ/.net
gotoとかマクロとか話題に加齢臭漂ってるぞ
もうちょっと食いつく話題選べよ
605:デフォルトの名無しさん
20/01/24 00:03:07.60 M35o3kEk.net
>>585
普通にテーブル駆動では。
606:デフォルトの名無しさん
20/01/24 01:08:48.99 nZbbrzXe.net
ma
607:in関数が呼び出される前にグローバル変数が初期化されますが、 これの初期化順を変更することは可能なのでしょうか?
608:デフォルトの名無しさん
20/01/24 01:09:21.02 /4mdgZLq.net
A、B、Cと言う順序で実行されるべき処理が
A、B、Cと言う順序で実行されれば良いのであって
それが上からA、B、Cの順で書いてあろうが
B, A, Cと書いてあるのをgotoでA、B、Cの実行順にしようが
スレッド1、2、3が同期をとりあってそれぞれA、B、Cの順で実行しようが
相違なるコールバック1、2、3がこの順で呼ばれるように仕組まれた上でそれぞれA、B、Cを実行しようが
B、Cの実行がラムダ式で書かれていてその定義がAより上にあってAの実行後に呼び出されようが
ぜんぜん問題ではない
609:デフォルトの名無しさん
20/01/24 01:10:48.48 /4mdgZLq.net
一方gotoなど使わなくとももっと酷い糞はいくらでも作れるのだから
gotoが駄目だと言い張る奴は精神が弱って
いるな!
610:デフォルトの名無しさん
20/01/24 01:12:30.02 f1L6KzBl.net
いや普通にA,B,Cの順で書けよ。
611:デフォルトの名無しさん
20/01/24 01:15:32.35 eYFKJ4zI.net
>>590
同じ翻訳単位にあれば上から
異なる翻訳単位のグローバル変数の初期化順序は未定義
612:デフォルトの名無しさん
20/01/24 06:17:01 z1Jr3gge.net
>>590
やり方としては >>594 のとおり。
「同じ翻訳単位」とは要するに1個のソースファイルってことね。
でも一般的には「グローバル変数の初期化順序に依存すべきではない」
はずだけど、初期化順序を制御したい事情に興味があるわ。
もっと一般的には「グローバル変数を使うべきでない」だけど、それは別のお話。
613:デフォルトの名無しさん
20/01/24 06:24:04 3pA3r7pN.net
初期化順序を制御したい事情なんていくらでもあるだろ
そういう事情があるにも関わらず
明示的な初期化処理で初期化しないのが問題なのであって
614:デフォルトの名無しさん
20/01/24 07:10:40 O5UIpEDM.net
>>585
SQLってBNFで書けるから普通にswitchで書けると思うけど
615:デフォルトの名無しさん
20/01/24 07:19:43 3pA3r7pN.net
書ける書けないと
適する適さない
は別
616:585
20/01/24 07:49:27 1D9sTu/S.net
>>589
ツール使ってテーブルを生成させるならありだと思う。
そうでないなら、文法拡張のためにテーブルに手を入れるとか考えるだけでも嫌にならない?
あと、メンテナ交代のためにつくるドキュメントとかも。
>>598
それな
617:デフォルトの名無しさん
20/01/24 10:04:25 M35o3kEk.net
コンパイル時生成では普通。
618:デフォルトの名無しさん
20/01/24 12:24:16 O5UIpEDM.net
>>598
いや、わざわざgotoなんて使う必要ないって話な
C言語の時はエラー処理でgoto使う機会もあったけどC++なら例外で対処できるし
パーサーとか書いたことないとわからんかも知れんが
619:デフォルトの名無しさん
20/01/24 12:25:13 O5UIpEDM.net
>>599
ツール使うならコードまで生成させるだろ
620:デフォルトの名無しさん
20/01/24 12:33:56 pOzkcTtY.net
breakやらgotoやら、普通に関数作ってreturnすらば済む話なのになんでここまで盛り上がるかねぇ
621:デフォルトの名無しさん
20/01/24 12:38:12 nymKNYgW.net
>>601
わざわざgotoってのが意味不明
使用リソースや所要時間は非常に少ない
ただのジャンプ命令だから
少なくとも
わざわざ関数に分けるとか
わざわざ変数を使うとか
に比べればはるかに軽い
breakに比べれば
記述量が多いので
「わざわざ」という表現を使うことはあるだろう
622:デフォルトの名無しさん
20/01/24 12:42:44 pOzkcTtY.net
>>604
そんなエラーをgoto文で書いてる様なc++ソース読むのやだわw
623:デフォルトの名無しさん
20/01/24 12:47:41 nymKNYgW.net
無能自慢か
624:デフォルトの名無しさん
20/01/24 12:48:34 j8mERSyw.net
throwと同様の構文でgotoと同じコード生成する機能があれば良いのに
625:デフォルトの名無しさん
20/01/24 13:03:30 O5UIpEDM.net
>>604
タイプ量が少ないソースがいいソースとか思ってそうw
いつの時代の人なんだよ
626:デフォルトの名無しさん
20/01/24 13:43:32.45 Jh2W8wsF.net
わざわざ例外使わんでもgotoで十分なときも普通にある
gotoだから絶対ダメとか思ってそう
頭かたすぎ
627:デフォルトの名無しさん
20/01/24 13:59:14 M35o3kEk.net
法律で禁止するべきだな。
628:デフォルトの名無しさん
20/01/24 14:45:38 xfkHfIRp.net
>>603
ループの途中での return か?
629:デフォルトの名無しさん
20/01/24 16:31:56.03 NCsnJFfw.net
>>609
逆にわざわざgoto使う例外って何よ?
そんな個別情報も渡せない上にわざわざラベル名前まで考えて、goto文使う方がめんどくさいだろ
あーあれか、throwよりgotoの方が打つ文字少ないから楽とかかw
630:デフォルトの名無しさん
20/01/24 16:34:37.54 xfkHfIRp.net
throw って、入れる catch を RTTI を使って探すという
結構なコストのかかることをするが goto や longjmp にはそれがない
631:デフォルトの名無しさん
20/01/24 16:36:03.61 M35o3kEk.net
情報処理の教育を受けていると、大抵のものはステートマシンに見えるので、goto使いたくなるのかもしれない。
教育の有無で思考過程が違うので、使い道が理解できない人は使うことを禁じたほうが良い。
セキュリティにもかかわるので公安委員会直轄でgoto免許試験場を創設するべき。
632:デフォルトの名無しさん
20/01/24 16:58:54 Jh2W8wsF.net
>>612
情弱かよw
「c++ goto 例外」でググれば検索結果の最初のほうだけでもこんなに出てくる
URLリンク(tomeapp.jp)
URLリンク(www.thinkridge.com)
URLリンク(marycore.jp)
URLリンク(qiita.com)
URLリンク(www.nurs.or.jp)
633:デフォルトの名無しさん
20/01/24 17:00:51 M35o3kEk.net
>>615
一番上のリンクだけ見ましたが、これはミスリードじゃないだろか。
634:デフォルトの名無しさん
20/01/24 17:06:28 M35o3kEk.net
>>616
二番目のリンクも見ましたが、これはgoto代わりに例外を使うべきではないというお話ですよね。
例外の代わりにgoto使えという話ではないと思うんですよ。
「あれ?ifの代わりに例外使えるんじゃね?」とはならない。
同様に「あれ?gotoの代わりに例外使えるんじゃね?」ともなりません。
635:デフォルトの名無しさん
20/01/24 17:08:06 M35o3kEk.net
どれもしょぼいな。
本物のgoto使いはラベルを100個使うんですよ。
636:デフォルトの名無しさん
20/01/24 17:08:25 xfkHfIRp.net
C++歴20年でこれか。。。例外が悲しいほどわかってない
637:デフォルトの名無しさん
20/01/24 17:08:51 M35o3kEk.net
あーお前らなっちゃいねえ。
gotoの使い方わかっちゃいねえ。
638:デフォルトの名無しさん
20/01/24 17:10:14 M35o3kEk.net
gotoも例外も恐れなく使えと私は言いたい。
ただし、資格は必要でしょう。
639:デフォルトの名無しさん
20/01/24 17:11:56 KQhZ94n9.net
以下は 良い goto 文の使い方だと聞いたことがある。
・二重以上のブロックを抜けるために goto 文を使うこと。
・エラー処理。 <--- こう言われていたのは throw がなかった時代からだが、
今でも throw, catch を使うより効率が良いので使っても良い
と思われる。
640:デフォルトの名無しさん
20/01/24 17:14:59 M35o3kEk.net
>>622
はいはい、そういう人には、状態遷移図を書く癖をつけることをお勧めしていますよ。
641:デフォルトの名無しさん
20/01/24 17:31:23.24 pLepfJlB.net
ラムダ万能説
>>615 の1つ目の2など途中で打ち切りたいときはラムダさえあればgotoも例外もいらないことがわかる
if( [?]{
...
if(//エラー発生時){
return false;
}
...
return true;
}()
&&
...
&& [?]{
...
if(//エラー発生時){
return false;
}
...
return true;
}() ){
//正常終了
}
else{
//異常終了
}
642:デフォルトの名無しさん
20/01/24 17:33:42.84 pLepfJlB.net
[?]は[&]だ
なんか間違えた
643:デフォルトの名無しさん
20/01/24 17:42:43 NCsnJFfw.net
>>613
だから例外処理にまで速度にこだわる意味は何だよ
if文と勘違いしてんじゃね
そんな特殊な状況を一般化するんじゃねぇよ
644:デフォルトの名無しさん
20/01/24 17:54:06 M35o3kEk.net
ifより例外のほうが速いよ。
645:デフォルトの名無しさん
20/01/24 17:58:29 xfkHfIRp.net
if goto
if throw
となるわけでifと例外を比べるのはおかしい
>>626
「こだわる」とか「特殊」とかバイアス満載で話にならんな
646:デフォルトの名無しさん
20/01/24 18:07:28.38 xfkHfIRp.net
そもそも有名どころのコンパイラがだいたい例外禁止オプション持ってるのがどういう意味か考えてみろよ
647:デフォルトの名無しさん
20/01/24 18:18:37.93 TKM+8NJM.net
goto使わないで2重ループを抜けるのってどうするの?
648:デフォルトの名無しさん
20/01/24 18:20:42.85 j8mERSyw.net
>>628
throwが速いのは呼び出した関数がthrowする場合と戻り値で成否を返す場合の呼び出し元コード側の話だろ
余分な条件分岐命令が出力されない
代わりに例外発生時にスタック解析して例外処理用コード探すから物凄い時間がかかるが
649:デフォルトの名無しさん
20/01/24 18:24:28.47 D9pKpEah.net
goto 賛成派の意見
「例外使え」←「ネストが増えるから嫌」
「break使え」←「深い所から出るのに無駄なフラグ増やしたくない」
650:デフォルトの名無しさん
20/01/24 18:31:46 xfkHfIRp.net
ちげーよ
「例外使え」←言われなくても使ってるよ、gotoを禁止する理由になってねえ
651:デフォルトの名無しさん
20/01/24 18:33:01 3pA3r7pN.net
goto禁止派はgotoの使い方を知らないだけ
知ってたら禁止しない
652:デフォルトの名無しさん
20/01/24 18:34:35 Ua1W7Zv2.net
gotoと例外のどちらかを禁止するなら例外を禁止したい
653:デフォルトの名無しさん
20/01/24 18:37:16 3pA3r7pN.net
Windowsの64bit環境って例外めちゃくちゃ遅いんだよね
例外が発生しない時はオーバーヘッド無いんだけど
32bitだと関数コールの度にオーバーヘッドが発生する
だから例外処理OFF機能がある
654:デフォルトの名無しさん
20/01/24 18:37:19 xfkHfIRp.net
確かに現状のC++例外はちょっと好かんところがある
いっそnested_exceptionとdynamic_castだけに統一したらどうだと思ったりする
655:デフォルトの名無しさん
20/01/24 18:51:37 M35o3kEk.net
おまえら全員間違ってる。
gotoは免許制にするべきで、一律に禁止するものでも許可するものでもない。
試験に合格した者だけ使うべき。
656:デフォルトの名無しさん
20/01/24 18:53:22 M35o3kEk.net
switchより例外のほうが速いよ。
657:デフォルトの名無しさん
20/01/24 19:29:40 3pA3r7pN.net
例外はめちゃくちゃ遅い
658:デフォルトの名無しさん
20/01/24 19:31:01 M35o3kEk.net
それは機密だと言っただろうが。
659:デフォルトの名無しさん
20/01/24 20:19:58.69 M35o3kEk.net
「もういいよ。オレがインデックス張ってやるから、まあ見てから言えよ。な?」
660:デフォルトの名無しさん
20/01/24 20:28:57 f1L6KzBl.net
まだしょうもないこと言い続けてんのかよ。
こういう糞議論を排除するってだけでもgotoを禁止する価値はあるな。
661:デフォルトの名無しさん
20/01/24 20:31:46 M35o3kEk.net
goto使いたいものが100万人いれば、更新費用1万円として100億になる。
gotoで事故を起こした場合、行政処分がある。
取り締まるためにgoto警察も必要。
662:デフォルトの名無しさん
20/01/24 20:32:37 xfkHfIRp.net
gotoじゃなくおまえらを排除すれば
問題の本質がわからんやつによる不毛な喧嘩≠議論はなくなる
化学調味料の永久ループと寸分違わねえ
663:デフォルトの名無しさん
20/01/24 20:33:06 Ua1W7Zv2.net
例外免許とテンプレート免許と多重継承免許も必要
664:デフォルトの名無しさん
20/01/24 20:51:07 K3PUU+GG.net
なんでプログラマってこんな糞みたいな話題で延々と盛り上がるんだろうね
って、実は知ってるくせにってか
665:デフォルトの名無しさん
20/01/24 21:08:30 O5UIpEDM.net
>>614
ステートマシンでgotoって次のステートに直接飛ぶとか言ってるのか?
666:デフォルトの名無しさん
20/01/24 21:10:07 xfkHfIRp.net
FSMとデータパスか、懐かしい。。。
667:デフォルトの名無しさん
20/01/24 22:22:30.15 SKKziN9N.net
ダイクストラの時代にとっくに決着した話をまだダラダラやってんのか
668:デフォルトの名無しさん
20/01/25 00:30:42.18 sCkCqRFa.net
煽り9割マジ1割
ここはそうゆうインターネットです
669:デフォルトの名無しさん
20/01/25 10:54:40 cxLY0DeL.net
大型goto免許必須なので。
670:デフォルトの名無しさん
20/01/25 12:01:20.82 Fgzm1LAC.net
大型二種持ってるから大丈夫
671:デフォルトの名無しさん
20/01/25 12:02:23.88 Fgzm1LAC.net
クラスもポインタも免許制にしよう
672:デフォルトの名無しさん
20/01/25 12:04:00.88 HbHTz3pb.net
絶対禁止と思っているやつは全員不合格
つーより事前審査で門前払い
673:デフォルトの名無しさん
20/01/25 12:08:19.96 Fgzm1LAC.net
絶対禁止と本気で思ってるヤツはいないだろ
gotoが無ければ2重ループも抜けられない
674:デフォルトの名無しさん
20/01/25 12:11:48.46 gDStPvND.net
gotoおじさん達いい加減にこの話終わりにしてくれない?
久しぶりに自分が参加できる話題だからってはりきりすぎでしょ
675:デフォルトの名無しさん
20/01/25 12:1
676:2:11.62 ID:xcQv9a+F.net
677:デフォルトの名無しさん
20/01/25 12:28:41 bvJDNhpJ.net
>>657
今は他に話題ないし
話題がないと数日レス止まるようなスレじゃけえ
678:デフォルトの名無しさん
20/01/25 12:30:46 Fgzm1LAC.net
じゃ次は生ポについて
679:デフォルトの名無しさん
20/01/25 12:38:02 cxLY0DeL.net
哲学的問題だから、森村進の意見も聞くべき。
680:デフォルトの名無しさん
20/01/25 13:18:54 oEqdrxlM.net
>>659
話題
URLリンク(www4.nhk.or.jp)
681:デフォルトの名無しさん
20/01/25 13:54:31 cxLY0DeL.net
宣伝乙。
NHKが来たぞーにげろー。
682:デフォルトの名無しさん
20/01/25 13:55:49 FepESkjd.net
江添亮の本でstd::cout<<""にs付けろって書いてたんだけどsつけたらエラーになる
683:デフォルトの名無しさん
20/01/25 13:59:45 HbHTz3pb.net
>>657
久しぶりに笑う健康法ができてありがたかったんだよ
おーい芸人さんたち、アンコール! アンコール!
684:デフォルトの名無しさん
20/01/25 14:01:45 HjVTkheD.net
>>664
#include <string>
using namespace std::literals::string_literals;
685:デフォルトの名無しさん
20/01/25 14:25:20.83 cxLY0DeL.net
とまあこのように、江添先生の本は、すべて理解してる人にしか理解できません。
686:デフォルトの名無しさん
20/01/25 14:32:55.37 HbHTz3pb.net
幼稚園児が大学の図書館へ行っても読める本ないのと同じだな
無理しないで「ぐりとぐら」くらいから始めとけ
687:デフォルトの名無しさん
20/01/25 14:53:05.04 cxLY0DeL.net
はい、江添釣れたー。
688:デフォルトの名無しさん
20/01/25 14:56:16.54 HbHTz3pb.net
残念、俺は江添じゃない
興味のツボは奴と似てるとこあるけどね
689:デフォルトの名無しさん
20/01/25 15:45:58 136JVXqR.net
>>666
そんなこと書いてなかった
690:はちみつ餃子
20/01/25 15:52:56.31 NV/40SqZ.net
普通の文字列リテラルが char 型の配列であるというのは (初心者には) 分かり難いので、
いっそ一貫して std::string 型で扱うというのは悪くない方針だと思う。
だけどユーザー定義リテラルという枠組みもそれはそれでだいぶんアレな仕様なんで、どちらにしてもクソだよな。
691:デフォルトの名無しさん
20/01/25 16:06:56 bbXnDJeu.net
こんばんは、後藤です。
ところで ""s だけでは片手落ちな気がする
ちゃんと u""s みたいに文字コード指定しなかったら
string_literalsを使う意味ないような気がするんだけど
わしだけか
692:デフォルトの名無しさん
20/01/25 16:09:53 lY+ErK7r.net
>>656
関数で切り出してreturnしろカスが。
693:デフォルトの名無しさん
20/01/25 16:11:03 gDStPvND.net
uがなかった時代でもなんとかなってたんだから意味なくはないだろ
694:デフォルトの名無しさん
20/01/25 16:30:12.05 HjVTkheD.net
江添本は初心者向けと謳っていながらこのくらいわからん奴は帰れみたいな意思を感じる
695:デフォルトの名無しさん
20/01/25 16:50:56.75 lY+ErK7r.net
初心者に内容を理解してほしいんじゃなくて俺すげーってことだけ理解しろってスタンスだからな。
むしろ理解されると大したことやってないのがバレると思ってるくらいだろ。
696:デフォルトの名無しさん
20/01/25 16:53:23.32 XvrYCXmQ.net
C++はしたことがないが数学博士号のやつと高校卒業を一緒くたにするのが問題だろう
それぞれの学力で開始すべき章を設定するべきだ
できないとしたら著者の無能なので落胆することはない
697:デフォルトの名無しさん
20/01/25 16:58:57.12 cxLY0DeL.net
初心者がC++に入り込まないよう防御壁として江添先生が存在するのではないか。
698:デフォルトの名無しさん
20/01/25 17:03:37.43 cxLY0DeL.net
C++の道を行きたいなら、俺を倒
699:してから行け。 ってことでは。
700:デフォルトの名無しさん
20/01/25 17:15:21.67 lY+ErK7r.net
張り合ったら明らかにプログラム書けなくなるだろ。。誤誘導すぎるわ。
701:デフォルトの名無しさん
20/01/25 17:27:59.47 cxLY0DeL.net
C++の前に立ちはだかる屈強な門番。
俺を倒せるものでなければ入門を認めぬ。
702:はちみつ餃子
20/01/25 18:19:41.41 NV/40SqZ.net
グダグダな C++ をグダグダじゃなく説明するのは無理だろ。
どの本を見たって少なからずグダグダか物足りないかどっちか。
703:デフォルトの名無しさん
20/01/25 18:23:50.63 qDxhJtbw.net
まぁ、実際の現場だと、c++なんてちょっと便利なC言語としてしか使われてないよ
未だにcharポインタやmalloc乱立してるし参照型すら使われてない。
クラスなんて関数まとめるnamespace代わりだし
704:はちみつ餃子
20/01/25 18:25:32.23 NV/40SqZ.net
ひと昔前にstaticおじさんの話がバズったことあるけど、
たぶん現実にはけっこういるんだろうな。
705:デフォルトの名無しさん
20/01/25 18:26:39.08 mY899MyV.net
>>684
そんな現場もあるんだなw
706:デフォルトの名無しさん
20/01/25 18:32:00.68 4TCxFoUN.net
ちゅうか、C++ 使うなら charポインタは必須だ。
使いたくないなら 別の言語を使ったほうがいい。
707:デフォルトの名無しさん
20/01/25 18:43:08.64 HjVTkheD.net
Cのライブラリを使わない限り文字情報はすべてstringで済む
モダンC++の仕様はそういう範囲内での使用も許容している
708:デフォルトの名無しさん
20/01/25 18:45:55.89 mY899MyV.net
c++ではchar*は文字列とは関係ない場面でよく使う
709:デフォルトの名無しさん
20/01/25 18:51:29.47 t8q8NVJB.net
>>684
>クラスなんて関数まとめるnamespace代わりだし
さすがにそれはダメだと思うが・・
そういう現場確かにあるが
>>688
とか言いながらstringは途中からnull終端を保証したりして、
結局Cの資産を無視できなかったという
710:デフォルトの名無しさん
20/01/25 18:53:42.93 mY899MyV.net
もともとc_strはnull終端されてた
それに合法的にnull文字を含むことが出来る時点でnull終端ではない
711:デフォルトの名無しさん
20/01/25 20:51:03 r+ZvoXtB.net
>>684
いくらなんでもレベル低すぎるぞ
712:◆QZaw55cn4c
20/01/25 20:55:09 0oKBD7Vk.net
>>684
私のことですね…
new をグローバルオーバーロードしたら、その中では malloc() するしかないですからね…
713:デフォルトの名無しさん
20/01/25 21:03:28 gDStPvND.net
>>693
> >>684
> 私のことですね…
> new をグローバルオーバーロードしたら、その中では malloc() するしかないですからね…
するしかない?
mallocはどうやって実装されてると思う?
714:デフォルトの名無しさん
20/01/25 21:16:51 HbHTz3pb.net
>>693
おまえさ、何のために new をグローバルオーバーロードしてるの?
malloc でいいんなら、そんな必要ねえだろ
おまえアホか
715:デフォルトの名無しさん
20/01/25 21:25:16 gDStPvND.net
まぁデバッグの手法としてなくはない
ただその手のものは既存のものが腐るほどあるからそれ使った方がいい
716:◆QZaw55cn4c
20/01/25 22:50:36 0oKBD7Vk.net
>>694
>するしかない?
ええ、するしかないと思いますよ
>>695
>何のために new をグローバルオーバーロードしてるの?
無論 delete と対になっているかどうかをチェックするためですよ、こういうのは自分では出来ていると思っていても時々お漏らししてしまいますからね
まあ、C++11 以降は手抜きして make_shared することを覚えてしまってずいぶんと時間が経ちましたが、それでも生ポを使うときは new/delete をオーバーロードしますね
スレリンク(tech板:51番) line.143~150
717:◆QZaw55cn4c
20/01/25 22:53:24 0oKBD7Vk.net
>>696
昔の borland c++ にはまさしくそのための、なんていうんだったんでしたっけ、そういうコンパイルスイッチがあって便利に使っていましたが、
今評価版を入手すると、それは clang ベースに変更されて、その機能がなくなってしまったんですよね…
718:◆QZaw55cn4c
20/01/25 23:01:38 0oKBD7Vk.net
>>698
思い出した、bcc32 CodeGuard でしたっけ
719:デフォルトの名無しさん
20/01/25 23:17:
720:56 ID:gDStPvND.net
721:はちみつ餃子 ◆8X2XSCHEME
20/01/25 23:24:58 NV/40SqZ.net
>>697
アプリケーションの層ではアロケータを書く機会はまずないから
やったことないのは別にいいけど、
さすがに new の本質はメモリの割り当てだってのはわかってて欲しいわ。
722:
20/01/25 23:28:27.92 0oKBD7Vk.net
>>700
>それなりにプログラマ経験あるんだと思ってたけどmallocの中身知らないとはね
専ら win32api でやっているので、::HeapAlloc(::GetProcessHeap(), ...) とか ::HeapFree(::GetProcessHeap(), ...) だとは考えていましたし、数年前はそう置き換えていたこともありました。
>unmapしてるところにアクセスしたらその時点で例外で止まるから原因特定が容易
これは初耳です。よろしければ、もう少しキーワードだけでいいので羅列していただけませんか
723:
20/01/25 23:33:20.09 0oKBD7Vk.net
>>701
それはおそらく大丈夫だと思います
724:デフォルトの名無しさん
20/01/25 23:36:38.54 nqs2x9Ls.net
関数で切り出すのは入出力がはっきりするというメリットはあるが
ループの内と外の依存性が高い場合に内を無理矢理関数分けすると
シグネチャに入力引数と出力引数(参照渡し)がぞろぞろ並ぶことになって
それはそれでお勧めしない
(関数の意味も不明確になりがちやし…
725:デフォルトの名無しさん
20/01/25 23:52:12 gDStPvND.net
>>702
そうだよwindowsならそのあたりだよ
あとVirtualAllocね
> >unmapしてるところにアクセスしたらその時点で例外で止まるから原因特定が容易
> これは初耳です。よろしければ、もう少しキーワードだけでいいので羅列していただけませんか
new/deleteのたびにページ単位で確保・解放するんだよ
それこそVirtualAllocで
だから重いよ
そうするとdangling pointerでヒープ壊される問題があった場合、
壊しにいったら即セグフォルで止まるからデバッガつなげれば犯人特定できる
726:デフォルトの名無しさん
20/01/26 00:43:59.41 F5s0MU2W.net
>>686
そんな職場は大変だぞ
構造体だからって、triviallycopyableを満たさないクラスをわざわざvoidポインタに格納して、memcpyしたり
クラスをわざわざmallocしてコンストラクタ、デストラクタ飛ばしたり
const属性をキャストでわざわざ消して値変えられたり
727:デフォルトの名無しさん
20/01/26 01:31:21 6ZE6/BGT.net
ベターCなどとほざく連中がいかに馬鹿で愚かで有害かがよくわかる
728:はちみつ餃子 ◆8X2XSCHEME
20/01/26 01:32:21 zFvDGbzt.net
まあそんなやつは C もまともに使えてなかったりするんだけどな。
729:デフォルトの名無しさん
20/01/26 01:44:39.85 hLglXOws.net
中途半端にc++を持ち込んで現場を荒らすやつもいるからね
>>706 の状況はそういうところで見たことある
別にc++が書けるのがえらいわけじゃない
質の良いプロダクトをきっちり仕上げられる奴がえらい
まわりがc++わからないメンバーならcで書くか、
c++が必要というなら十分にチームでトレーニング行ってからだ
730:はちみつ餃子
20/01/26 01:48:04.74 zFvDGbzt.net
C から段階的に学んでいける (業務を止めずに) って D&E には書いてあるけど、
今の C++ じゃもう無理だと思うわ。
731:はちみつ餃子
20/01/26 01:48:23.93 zFvDGbzt.net
C++ は C++ としてそこそこの訓練はいるよな。
732:デフォルトの名無しさん
20/01/26 02:05:13.00 Y1EGWiT/.net
はちみつ餃子がでてくる
733:と、どうもこんな時間に腹が減ってきていかん
734:はちみつ餃子
20/01/26 02:10:39.45 zFvDGbzt.net
食えばいいじゃん。
735:デフォルトの名無しさん
20/01/26 05:01:35 3a27Zr8u.net
>>674
gotoの使い方を知らないと大変だね
736:デフォルトの名無しさん
20/01/26 07:41:47 Yuet6lAk.net
>>683
禿4を少しは見習っていただきたい。
737:デフォルトの名無しさん
20/01/26 10:01:19.30 aNHbuwn9.net
>>706
それは問題。
でも、STLべったりのC++は Cとの書き方の乖離が激しすぎて、もはやCの冠を被ってほしくない。
738:デフォルトの名無しさん
20/01/26 10:06:55.53 BKKks8j/.net
>>714
関数切り出しできないと大変だね。(特に周りの人たちが。)
739:デフォルトの名無しさん
20/01/26 10:47:19 VrR0aqw1.net
>>716
CはCらしく、C++はC++らしく使えばよろしい
CをPascalっぽく使うやつとかすげー迷惑なのと同じ
740:デフォルトの名無しさん
20/01/26 10:53:32 1VU+FMua.net
>>716
えっ?
C#
741:デフォルトの名無しさん
20/01/26 10:56:24 ZSyO84gV.net
テンプレートメタプログラミングはC++らしいとも思うけど全然別の言語になっている気がしないでもない
742:◆QZaw55cn4c
20/01/26 11:09:29 rQ+CcOdx.net
>>705
情報ありがとうございます
::VirtualAlloc() 系は書いてあることが難しい上に、ばっちゃの遺言「::HeapAlloc() を使え」もあって敬遠していましたが、ここで教えてもらったのもなにかの縁だからデバッグ用に試行してみようと思います
win32api の criticalsection と signal でやっていた(何かがまずくてstarvationに悩まされていました)のも
C++11 になって pthread が大幅に規格に取り込まれた以上、
C++11 の上からの mutex・cond 派に切り替えようか、とか、C++11 になってスタイル変更を考え中です
743:デフォルトの名無しさん
20/01/26 11:32:39 loc7kxiY.net
>>701
マウント失敗乙
744:デフォルトの名無しさん
20/01/26 11:33:18 3yHBwxN6.net
>>717
ループを抜ける為に関数を分けるようなアホと一緒に組むと大変だ
745:デフォルトの名無しさん
20/01/26 11:41:25 VrR0aqw1.net
確かに大変だね
if breakしてる複合文を関数にするときにreturnとか言い出すやつは
longjmpだろうがって
746:デフォルトの名無しさん
20/01/26 12:03:53.99 aNHbuwn9.net
>>720
実際、別言語だと思う。
C++はtemplateや演算子のオーバーライドを使えば、ほぼ別言語をみなせるようなものを上に載せられる設計になっているので。
STLを使いまくるプログラミングの書き方だと、もはやCとは何の関連性もなくなってしまっている。
747:デフォルトの名無しさん
20/01/26 12:09:22.76 BKKks8j/.net
>>723
ループ抜け出すぐらいでそんな苦労するようなコードになってるなら
関数で抜け出すのが当然だろカスが。
いくら脳みそ足らなくてもgoto擁護のために無理筋言ってるってことにそろそろ気づけ。
748:デフォルトの名無しさん
20/01/26 12:12:08.41 bvl7bZIP.net
どんな苦労?
749:デフォルトの名無しさん
20/01/26 12:13:10.43 Yuet6lAk.net
ネストするなら別のプログラムに切り分けましょう。
シェルから呼び出せばいいのです。
750:デフォルトの名無しさん
20/01/26 12:18:30.55 Scuijf7t.net
>>725
もともとCってマクロで何でもやりたい放題の言語だぞ
URLリンク(www.pro.or.jp)
751:デフォルトの名無しさん
20/01/26 12:39:03.45 aRFw4TjA.net
>>727
「gotoダメ!絶対!教」の戒律を破ることじゃないかな。きっと身を裂かれるほどの苦しみな
752:んだろうw
753:デフォルトの名無しさん
20/01/26 12:50:28.18 PjjUDKm0.net
いったん収まったと思ったら
また goto の話開始してて草
アスペ特融の拘りと言われても仕方がないな
754:デフォルトの名無しさん
20/01/26 13:01:54.18 Yuet6lAk.net
goto以外の話題を提供できないお前が悪い。
755:デフォルトの名無しさん
20/01/26 14:36:31.44 VrR0aqw1.net
gotoの話で叩きのめされたやつが話題を変えたいのはわかったよ(ニヤニヤ
756:デフォルトの名無しさん
20/01/26 17:07:41 aNHbuwn9.net
>>729
たしかにCもマクロを使えば結構何でも出来る。
だが、マクロを多用すると分かりにくくなるとも言われていたし、使い方によっては、ソースコードが全く別言語のようになってしまうことも知られていた。
それと同様の現象がSTLにおいては起きる事態になってしまっている。
757:デフォルトの名無しさん
20/01/26 17:09:16 jQnb27FW.net
もっとマクロをリッチにしてほしい
758:デフォルトの名無しさん
20/01/26 17:19:16 VrR0aqw1.net
>>734
なってねえよ
おまえさんにはSTLがIOCCCに見えるのか
慣れの問題と言いたいがおまえさんは極端すぎ
一種の病気だ
759:デフォルトの名無しさん
20/01/26 17:21:00 aNHbuwn9.net
>>736
STLの作者は、自分では分かり易くしようとしているようでいて実際には逆に分かりにくくしてしまっている。
760:デフォルトの名無しさん
20/01/26 17:22:57 Yuet6lAk.net
STLは神がかってるけどな。
あの時代によく設計できたな。
761:デフォルトの名無しさん
20/01/26 17:23:15 aRFw4TjA.net
>>735
自分で好きなようにプリプロセッサを実装すればいいんじゃね?
762:デフォルトの名無しさん
20/01/26 17:25:09 aRFw4TjA.net
>>737
その分かりにくいの主語は、世間一般ではなくお前個人なんだろ。
763:デフォルトの名無しさん
20/01/26 17:33:33.23 jQnb27FW.net
>>739
互換性
764:デフォルトの名無しさん
20/01/26 17:42:50.97 VrR0aqw1.net
>>738
だよな
Cではmemsetやqsortにvoid*というリスキーなことをせざるを得なかったのを
関数テンプレートで型情報をきちんと面倒見るようにできたし
リニアサーチがない等のCライブラリの不備も解消した
そこに気付かないやつはプログラマとしての資質を問われる
765:デフォルトの名無しさん
20/01/26 17:50:07.66 loc7kxiY.net
>>738, >>742
あのな、STLは設計構想から含めると十年から数十年かかってんだよ
それだけよく考え抜かれたものが優れてないわけがない
これ何回も書いたんだけどな
「最新仕様追ってる俺スゲー」したいだけの奴の希望的観測はもうこりごりだわ
766:デフォルトの名無しさん
20/01/26 17:53:28.80 loc7kxiY.net
最新仕様とか書いたらSTLが最新?とか言われそうなんで先に言っとくけど
マクロ(プリプロセス時メタプログラミング)を貶してテンプレートは持て囃すのはダブスタってことなんで誤解なきよう
767:デフォルトの名無しさん
20/01/26 17:53:53.15 Yuet6lAk.net
ただ俺としては右辺値参照の発見にノーベル賞を授与するべきだと思うんだよな。
これ人類史上でも大きな発見じゃないかと思うんだよな。
768:デフォルトの名無しさん
20/01/26 17:58:05.42 hLglXOws.net
おれは真逆の感想
仕様が汚すぎる
769:デフォルトの名無しさん
20/01/26 17:58:55 hLglXOws.net
右辺値参照というよりmove全般のことね
770:デフォルトの名無しさん
20/01/26 18:01:03 VrR0aqw1.net
>>743
742だが、おまえさんは俺が何がわかっていないと言いたいんだ?
どっかの馬の骨が何回書いたかなんて興味ねえが
当たり前のことをドヤられる意味がわからんぞ
771:デフォルトの名無しさん
20/01/26 18:05:34 Yuet6lAk.net
STLにノーベル文学賞なんてオサレだと思わないか。
772:デフォルトの名無しさん
20/01/26 18:05:38 VrR0aqw1.net
>>746
同感
そもそも左辺値参照にconstをつけたら右辺値を指せるなんて
珍妙なルールが招いた禍根を何とかする苦肉の策が右辺値参照だかんな
今ふり返って見るとconstなしの左辺値参照でもテンポラリを束縛できて
それを禁止したい場合のキーワードがあればよかったんだと思う
773:はちみつ餃子 ◆8X2XSCHEME
20/01/26 18:23:11 zFvDGbzt.net
>>745
互換性を失わない形で性能
774:にも寄与するのはすごい思い付きだと私も思った。 スマートポインタが充実する方向で良くなると思っていたので、 まさか参照を区別する形でコピーを避けるとは思いもよらなかった。 だけどなぁ……。 結局は後付けなんだよね。 互換性を捨てられないという制約の中ではこれ以上ない発明ではあっても、色々と不満はあるよ。 ムーブ自体は言語のコアに組み込まれた機能ではないから ムーブ後の抜け殻をうっかりいじってもコンパイラは黙って通しちゃうし。 ムーブできるようにしようとすると実質としてはポインタの入れ替えになるから、 各クラス向けにカスタマイズしたスマートポインタを書いてるみたいなもんだ。 本来ならそんなのコンパイラの最適化で頑張ってなんとかすべきことだろ。 言語処理系の敗北の証にすら見える。 いや、良いとは思ってるんだよ。 間違いなく rvalue 参照は素晴らしい発明で、 C++ をより良くした。 でもまあいいことばかりでもないよねっていうちょっとした愚痴。
775:デフォルトの名無しさん
20/01/26 18:23:51 XnsWA8uh.net
STL使って混乱する状況てどんな時だ?
776:デフォルトの名無しさん
20/01/26 18:26:11 jQnb27FW.net
構造体/クラスを戻り値にするっていう発想が無かった時代からのつぎはぎ拡張だから
777:デフォルトの名無しさん
20/01/26 18:51:03 PjjUDKm0.net
そもそも構造体を=でコピー出来るのが始まりだからな
配列は=でコピーできないのにな
その辺一貫性なかった>C言語
778:はちみつ餃子 ◆8X2XSCHEME
20/01/26 19:06:02 zFvDGbzt.net
>>754
配列は (その先頭要素を指す) ポインタに型変換されるルールを入れてしまったので
それと辻褄の合う形には出来なかったんだと思う。
779:デフォルトの名無しさん
20/01/26 19:07:43.07 PjjUDKm0.net
もしCが
構造体を参照するとポインタ相当になります
引数で渡すときも&つけなくても勝手にポインタになります
コピーするときはmemcpyしてください
って仕様だったらC++はどうなってたんだろうな
色々まずいことになるのは確か
780:デフォルトの名無しさん
20/01/26 19:09:16.84 PjjUDKm0.net
↑ただ、モダンな言語はむしろそういう仕様なんだよな
その代わりGCがあるが
しかし、それはそれで不便なのであった
781:デフォルトの名無しさん
20/01/26 19:23:48 VrR0aqw1.net
>>744
おまえさんは
#define STR char* //と、
typedef char* STR; //の違いが
わかってなさそうに見えてしまうが
違うよな?
コンパイラでないものによる字面の読み替えと
コンパイラによる意味の読み替えを
区別するのはダブスタか?
782:デフォルトの名無しさん
20/01/26 19:38:43 loc7kxiY.net
>>758
そういうのじゃなくて、>>734に対して>>736書いたよな?
慣れ、ってのはわからんでもないがSTLの成功にはっちゃけて何でもテンプレートでどうにかする
今の風潮は俺もどうかと思うので。
もちろんマクロでメタプログラミングするよりは遥かに楽だけど、方向性としては同じようなもんだろ
783:デフォルトの名無しさん
20/01/26 19:41:08 loc7kxiY.net
というかVCだとプリプロセスだけ済ませたソース見れるから、
時にテンプレートよりデバッグ楽かもしれない
784:デフォルトの名無しさん
20/01/26 19:59:37 VrR0aqw1.net
>>759
質問に答えてないな
字面の読み替えは評判悪く
意味の読み替えが広く受け入れられているのは
ダブスタか?
785:はちみつ餃子 ◆8X2XSCHEME
20/01/26 20:00:29 zFvDGbzt.net
マクロを殺すためにどんだけ苦労してきたと思ってんだよ。
786:デフォルトの名無しさん
20/01/26 20:01:26 hLglXOws.net
またマクロの話かよ
ほんとロートルばっかだなここ
787:デフォルトの名無しさん
20/01/26 20:04:02 VrR0aqw1.net
>>762
ほんこれ
788:デフォルトの名無しさん
20/01/26 20:07:19 loc7kxiY.net
>>761
それをダブスタとは思わないし言ってもないんだが
>>762
だったら尚のこと歴史に学べよ
789:デフォルトの名無しさん
20/01/26 20:10:54 VrR0aqw1.net
>>765
744で言っているが?
790:デフォルトの名無しさん
20/01/26 20:15:22 loc7kxiY.net
>>766
アンカーぐらいちゃんと付けろよボケ
>そこに気付かないやつはプログラマとしての資質を問われる
これは>>734に対する発言だよな?
俺じゃなくてお前が相手の発言を矮小化してバカにしてると気付け
791:デフォルトの名無しさん
20/01/26 20:21:38 VrR0aqw1.net
>>767
734と俺の問題は
おまえさんと俺の問題とは別だ
話を逸らすな
744の発言をおまえさんは貫くのか撤回するのか
立場を明らかにせよ
792:デフォルトの名無しさん
20/01/26 20:22:20 loc7kxiY.net
どんだけ都合のいい脳味噌してんだこいつ
793:デフォルトの名無しさん
20/01/26 20:33:02 VrR0aqw1.net
どんな脳味噌と見て貰っても結構だ
744のダブスタ発言をおまえさんは貫くのか撤回するのか
立場を明らかにせよ
794:デフォルトの名無しさん
20/01/26 20:36:39 Yuet6lAk.net
マクロとテンプレートが同じとかワロ。
795:デフォルトの名無しさん
20/01/26 20:37:56.09 6ZE6/BGT.net
Cと違うことを理由にC++を否定する奴たまにいるけど何なん?
なんでCを使わないんだ?
796:デフォルトの名無しさん
20/01/26 20:40:10.44 loc7kxiY.net
お前の都合のいい解釈(プリプロセス時ではなく型の文脈の問題までマクロでどうにかしていたのをtypedefやテンプレートに置き換える)を
そもそもダブスタとは言ってないんで貫くと取ってもらっていいが
それより>>759-760に対する回答はまだなの?
797:デフォルトの名無しさん
20/01/26 20:43:00.84 loc7kxiY.net
>>771
メタプログラミングとして見るとやってることは一緒なんだが
言語としての出来不出来は別として(個人的には>>735に同意
798:デフォルトの名無しさん
20/01/26 20:46:23.65 yXTxN+fl.net
C言語にこそ、UnifideCallSyntax必要だと思うのだけど、入らないかねー。
関数オーバーロードと一緒に入ったらクラスなんかいらねっ。
799:デフォルトの名無しさん
20/01/26 20:47:29.34 hLglXOws.net
c++の専門家の皆さんに質問ですが
using F = int(int)
のように 戻りの型(引数の型) の形式で関数型を書けるようになったのってどのc++からなの?
あとこれを書ける場所ってusingとtemplate以外にある?
800:デフォルトの名無しさん
20/01/26 20:50:40.79 VrR0aqw1.net
>>773
> プリプロセス時ではなく型の文脈の問題までマクロでどうにかしていた
プリプロセス以外でマクロでどうにかするって意味がわからない
よって「ダブスタとは言ってない」の意味も俺には(おそらく、ここの誰にも)通じてない
744のダブスタ発言をおまえさんは貫くのか撤回するのか
立場を明らかにせよ
801:デフォルトの名無しさん
20/01/26 20:58:53.64 loc7kxiY.net
相手に嫌な思いをさせたいだけの議論は辞めろ気持ち悪い
プリプロセス時の問題に遭遇したことが無いのならお前の方が資質に欠けるし経験も足りてない
>>734の言うことも俺の言う事もそら理解出来んだろう
話にならんよ
802:デフォルトの名無しさん
20/01/26 21:03:26.54 BKKks8j/.net
c++11以降において「マクロをリッチにする」ってことの代替が
テンプレート、constexpr をリッチにするって方向だろう。
正しい方向だとは思わんが、方向性なり答えはうちだしてはいる。
803:デフォルトの名無しさん
20/01/26 21:11:06.46 loc7kxiY.net
それはそれとしてプリプロセス時プログラミングもやりやすくして欲しいってだけのことだよ
(現実的に叶うとは思ってないが)
804:デフォルトの名無しさん
20/01/26 21:11:40.73 Yuet6lAk.net
ワロリン。
805:デフォルトの名無しさん
20/01/26 21:18:05.50 6ZE6/BGT.net
Qtみたいに独自のプリプロセッサ作ればいいのでは
806:デフォルトの名無しさん
20/01/26 21:19:49.89 hLglXOws.net
c++の専門家の皆さま教えて下さい
auto a = +[](int b) { return b;};
このaの型は何ですか?
困っているので秒速でお願いします
807:デフォルトの名無しさん
20/01/26 21:36:53.40 VrR0aqw1.net
>>778
間違いを認めることができない未熟者には
嫌な思いからも学ぶべき教訓があるんだよ
やめてくれえ、気持ち悪いいい、それで?
命令口調では許してやらんぞ
808:デフォルトの名無しさん
20/01/26 21:37:51.54 VrR0aqw1.net
私事ですまんが
明日早いんでそろそろ失礼する
809:デフォルトの名無しさん
20/01/26 21:39:54.66 loc7kxiY.net
ワロタ
810:デフォルトの名無しさん
20/01/26 21:46:54.67 VrR0aqw1.net
よかったなw
811:デフォルトの名無しさん
20/01/26 21:54:18.57 loc7kxiY.net
まともな反論できんのならはよ寝ろ
812:蟻人間 ◆T6xkBnTXz7B0
20/01/26 21:59:37 TOQ25Lx5.net
>>783 int型。
---
君たちひまそうだね。暇だったら、こっちのソースでも見てくれないか?
URLリンク(github.com)
C++/Win32で書いてるんだけど�
813:B ここからドロップした画像ファイルを表示可能にする予定。 画像読み込みにGDI+を使う予定。
814:デフォルトの名無しさん
20/01/26 22:27:38 hLglXOws.net
静かになったなw
>>789
関数ポインタ
URLリンク(wandbox.org)
815:デフォルトの名無しさん
20/01/26 22:46:48.37 Pq6RurGB.net
ラムダに+をつけると関数ポインタになるなんてcppreferenceにもないけど常識なの?
816:デフォルトの名無しさん
20/01/26 22:55:11.25 hLglXOws.net
そうなんだよね
この仕様がどこで決められてるものかがよくわからない
ぐぐったら
URLリンク(stackoverflow.com)
というのが見つかってなんか built-in overload らしいんだけど
結局のところ関数オブジェクトに対する仕様がどこに書かれているのかよくわからない
でもわりとよく使ってる
817:はちみつ餃子
20/01/26 23:01:50.07 zFvDGbzt.net
>>791
・ キャプチャしている変数がないクロージャは関数ポインタに変換可能であり、関数ポインタが必要なところでは暗黙に型変換される
・ クロージャに単項 + を適用することはできない (ので関数ポインタに型変換してから解釈される)
という合わせ技によって関数ポインタになる。
(キャプチャしてる変数があるときは変換できないよ)
818:デフォルトの名無しさん
20/01/26 23:05:52.70 Pq6RurGB.net
関数オブジェクトには関数ポインタへの暗黙の変換が存在して
operator+(T*)がそれ自身を返すからということね
819:デフォルトの名無しさん
20/01/26 23:09:35.82 hLglXOws.net
まじで?
たまたまできるってことなのか
なんか今後使うのためらうわw
820:はちみつ餃子
20/01/26 23:11:17.20 zFvDGbzt.net
>>795
専用の、クロージャをポインタに変換する機能というわけではないという意味ではたまたまだけど、
ちゃんと保証された動作なのでためらわなくていいと思うなぁ。
821:デフォルトの名無しさん
20/01/26 23:14:39.96 hLglXOws.net
>>796
もし今後関数オブジェクトに他の暗黙変換が追加されたらって考えると気が引ける
まぁ使うんだけどさ
822:デフォルトの名無しさん
20/01/27 00:17:47 uhXUQTHO.net
普通に型宣言すればいいだけだよねこれ。
823:デフォルトの名無しさん
20/01/27 00:18:13 8wq+eSeZ.net
>>776
実験してないので間違ってるかもしれないが、
(型名)ptr で関数ポインタへキャストする場合、
( int(*)(int) )ptr
と書いても良いが、
( int(int) )ptr
と書いても良かったかも知れない。というのは、
typedef int (*FUNC)(int);
と書いても良いし、
typedef int FUNC(int);
と書いてもよかったり、関数型のポインタ pFunc に対して、
(*pFunc)(123);
と書いても良いし、
pFunc(123);
と書いても良い、とか。
824:デフォルトの名無しさん
20/01/27 00:19:00 jlvCAhZE.net
>>776
C89 から関数型の表記としては解釈されるかと。
コンパイルが通る文脈は C++ まで無かったかもしれんけど。
C++ でも今のところ using とテンプレート引数以外では使えなさそう。
825:デフォルトの名無しさん
20/01/27 00:25:21 8wq+eSeZ.net
>>799
一部、コンパイラが故意にエラーにする可能性は有るが、
int(*ptr)(int);
は、関数へのポインタ型の変数ptrの宣言。
int(*)(int)
は「関数へのポインタ型」そのもの。
int func(int);
は、関数のプロトタイプ宣言だが、内部処理的には関数型の変数 func を定義しているような
解釈がされた後、関数型の場合の特別な処理として変数ではなくプロトタイプ宣言に特別
処理がされる。そして、
int(int)
は「関数型」そのもの、という解釈になる。
よく見るとこれらに対抗関係が有ることが分かる。
なお、最後のint(int)はコンパイラの内部処理的には関数型そのものだという解釈になるが、
コンパイラがその場合に特別にエラーを出す処理系と出さない処理系があるかもしれない。
826:デフォルトの名無しさん
20/01/27 00:26:31 8wq+eSeZ.net
>>801
対抗関係 ---> 対応関係
827:デフォルトの名無しさん
20/01/27 00:34:47 8wq+eSeZ.net
>>801
何が言いたかったというと、戻り値(引数型) を解釈する新しい仕様が追加された
というより、数学の数式のようにみたときに一貫した規則に従っていることが
わかるということ。言葉で言えば、
「定義文に置いて、名前を除去すると型名になる」
という規則。
int func(int);
という定義文に置いて、名前であるのは func。だから、funcを除去した、
int(int)
は、funcの型名になる。名前funcの型は、「関数型」だから、これは関数型
という型名そのものとなる。
int a;
の場合、名前であるのは a で、aの型は、int型。だから、この定義文から
名前を除去した int は、int型ということになる。
int (*pFunc)(int);
の場合も、pFuncという変数の定義文であるが、この定義文における名前とは
pFuncであるので、pFuncを除去したところの
int (*)(int);
は、pFuncの型であるところの、「関数へのポインタ型」となる。
つまり、同じ法則にしたがっている。
828:はちみつ餃子 ◆8X2XSCHEME
20/01/27 00:36:25 e3ktUGSY.net
関数型が暗黙に関数ポインタ型に型変換されるルールで引っ掛かってるってことかな?
関数型そのものは C++ が出現した最初から存在すると思うよ。 C にもあるもの。
こういう特殊な変換ルールを強制するために std::decay がある。
829:800
20/01/27 01:15:58.29 jlvCAhZE.net
>>776
typeid で使ってもコンパイル通った。
830:デフォルトの名無しさん
20/01/27 02:13:11 DIOsR0tc.net
RustってどれくらいC++に取って代わるんろうか
互換性以外でC++使う意味ない、みたいな時代はくる?
831:デフォルトの名無しさん
20/01/27 02:15:18 an2yFfMH.net
Rustの話はRustスレでやれ
布教すんな
832:デフォルトの名無しさん
20/01/27 06:56:19 EVyt1Wcb.net
>>783
スマートオブジェ
833:デフォルトの名無しさん
20/01/27 09:23:59 7jNlWdbx.net
C++のライブラリはC++からしか使えないから最高なんです
何故ならヘッダという古臭い仕組みを採用しているからww
なおCOMは
834:デフォルトの名無しさん
20/01/27 09:33:48.52 PH8qw3WE.net
>>798
そりゃauto使いたいからじゃない
その理屈ならそもそもlambda使わずに普通の関数書けばいいってなる
835:デフォルトの名無しさん
20/01/27 10:29:36 nw3WJhJD.net
>>783
[](int b) { return b;}; だけなら明らかにラムダ式の関数ポインタだけど
それをオーバーロードか何かの+で虚無と足し算してんの?
*[](int b) { return b;};
これは掛け算でもするの?
836:デフォルトの名無しさん
20/01/27 10:44:46 EVyt1Wcb.net
関数ポインタではない
スマートオブジェクトへのポインタだ
ただの関数ポインタならファンクタとして機能しない
837:デフォルトの名無しさん
20/01/27 10:54:24 j8/I9hQ5.net
>>811
単項演算子の+だろ
838:デフォルトの名無しさん
20/01/27 11:22:15 PH8qw3WE.net
>>811
はちさんが答え書いてるよ
>>793
839:デフォルトの名無しさん
20/01/27 15:33:55 LGsyX1lU.net
ラムダはデリゲートじゃねー。一個しか保持できんわな。
と遅レス。
840:デフォルトの名無しさん
20/01/27 15:47:35 uUAjQCPR.net
ステートレスラムダって用語が出てこないんだね
stateless lambda
841:デフォルトの名無しさん
20/01/27 15:57:13 uUAjQCPR.net
>>804
template <typename F>
void test(F&&) { cout << 1; }
void test(int(*)()) { cout << 2; }
int func() { return 0; }
int main()
{
test(func); //2
test([]{ return 0; }); //1
}
ステートレスラムダを関数ポインタに渡すのはconversionで
関数を関数ポインタに渡すときのlvalue translationとは違う
842:デフォルトの名無しさん
20/01/27 16:03:26 uUAjQCPR.net
lvalue transformationだ、これは失礼
843:はちみつ餃子 ◆8X2XSCHEME
20/01/27 16:10:02 e3ktUGSY.net
>>817
おっ。 そうなんや。
844:デフォルトの名無しさん
20/01/27 16:16:57.88 uUAjQCPR.net
g++だと、これ通るw
auto closure = []{ return 0; };
using funcp = int(*)();
test(closure.operator funcp());
845:デフォルトの名無しさん
20/01/27 16:29:40 Xjs2F3Iq.net
[]の後()不要だっけ?
846:デフォルトの名無しさん
20/01/27 16:30:47 an2yFfMH.net
引数がないなら省略可能
847:はちみつ餃子 ◆8X2XSCHEME
20/01/27 17:56:21 e3ktUGSY.net
>>814
ワイはどちらかというとはちみつより餃子の方にアイデンティティがあるので…・…
848:デフォルトの名無しさん
20/01/27 18:43:12 Be1ain3H.net
>>822
勉強になりました。
849:デフォルトの名無しさん
20/01/27 19:32:41 EVyt1Wcb.net
>>81
850:2 ×スマートオブジェクトへのポインタだ ○スマートオブジェクトだ
851:デフォルトの名無しさん
20/01/28 09:26:07 ClFSc0Tc.net
しょうもないシンタックスシュガーの話が好きな奴多いね。
852:デフォルトの名無しさん
20/01/28 10:18:33.58 iJMYk+LH.net
gotoおじさんまた登場だよ
853:デフォルトの名無しさん
20/01/28 10:25:01.77 ciqR13vi.net
>>827
踊るポンポコリンの「インチキおじさん登場」を思い出した。あんまり間違ってないだろう。
854:デフォルトの名無しさん
20/01/28 10:44:40 wcDzWZFN.net
ボコられるの好きなんか? 変態めw
855:デフォルトの名無しさん
20/01/28 10:49:48 ivYV6JvB.net
物事は適切に伝えろ
それが出来ないなら口を開けるなカスども
856:デフォルトの名無しさん
20/01/28 10:52:11 ivYV6JvB.net
ラムダが関数ポインタとかほざいてるカスが居てびっくりしたわ
857:デフォルトの名無しさん
20/01/28 11:05:50.35 AXFiEKC0.net
>>831
インライン展開されるから?
858:デフォルトの名無しさん
20/01/28 11:12:08.47 tLdUC4IA.net
>>831
>>783 のこと?
859:デフォルトの名無しさん
20/01/28 11:23:05 ijxMtirO.net
個人的にはテンプレートなのに糞のSTLよりも
マクロωのQtの方がうまくやれてる実用的だと思う
860:デフォルトの名無しさん
20/01/28 11:24:46 ijxMtirO.net
>>758
typedefに夢観すぎ
861:はちみつ餃子 ◆8X2XSCHEME
20/01/28 11:30:08 jIEBko3c.net
まあ個人的な感想は個人的な感想だからなぁ。
俺は Qt に対してなんやこのクソはとしか思わんが、
広く使われている現実がある以上は実用性は高いんだろう。 たぶん。
862:デフォルトの名無しさん
20/01/28 11:38:43 9AkNqXrr.net
Qtのmocは何か嫌だ
863:デフォルトの名無しさん
20/01/28 11:45:43 wcDzWZFN.net
>>835
ああ、usingを使うべきだったな
typedefなんてダセーもんもういらねえって
頭ではわかってるんだが長年の癖でぽろっと出ちまう
864:デフォルトの名無しさん
20/01/28 12:03:55 AXFiEKC0.net
マクロを名前空間に閉じ込められるようになれば、マクロの害悪の何割かは減らせるはず。
865:デフォルトの名無しさん
20/01/28 15:45:53 wcDzWZFN.net
ということは名前空間をプリプロセッサが処理せにゃあかんな
translation phaseを根本的にぶっ壊さないと無理だと思うが
866:デフォルトの名無しさん
20/01/28 16:34:43 ogCuVxV7.net
typedefが駄目で、usingが好まれる理由を教えてください。
867:デフォルトの名無しさん
20/01/28 16:38:19 AXFiEKC0.net
否定的な視点から散々な言われ方をされがちなC/C++のマクロだけど、
Java/C#/Python/Pwel/Rubyに似たテキスト変換がないことに物足りなさを感じることが多いのも事実。
868:はちみつ餃子 ◆8X2XSCHEME
20/01/28 16:39:59 jIEBko3c.net
>>841
私が思いつくのは
・ using は名前を導入するという一巻した意味規則がわかりやすいから
・ using はテンプレートに出来るから
・ typedef だと複雑な型定義をするときに肝心の新しい名前が中の方にあって見づらい
869:デフォルトの名無しさん
20/01/28 16:44:17 AXFiEKC0.net
typo。PwelじゃなくてPerl。Perlはめっきり影が薄くなった。
PerlはGit for Windowsにバンドルされているので世の中の大部分のプログラマーがすぐに使える環境にあるのだが、
Git本体はPerl依存を減らす方向に進んでいるらしい。
870:はちみつ餃子 ◆8X2XSCHEME
20/01/28 16:44:19 jIEBko3c.net
>>842
Cプリプロセッサを Java やら Python やらにつこうてもええんやで。
そういえば cpp を使うことを (習慣的に) 想定してる言語って C/C++ を除けばHaskell (GHC) くらい?
汎用プリプロセッサとして使うなら M4 あたりの方が賢いしなぁ……。
871:デフォルトの名無しさん
20/01/28 17:01:24 wcDzWZFN.net
>>841
たとえばこういう場合
#define STR char*
STR a, b; //これ、どうなる?
もしこうなっていたら
using STR = char*;
STR a, b; //これはどうだ?
おまえさんの好みに合うのはどっちだ?
そこに答えがある