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


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

C++相談室 part148



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

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

55 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 17:51:10.61 ID:YFAnTUnh.net]
>>50
じゃあそれで

56 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 17:55:08.95 ID:YFAnTUnh.net]
break 9;
を数えたく無いとか言ってたヤツがいたけど
そういう時は素直にgotoを使えば良い

57 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 17:55:47.26 ID:rsRLlL5x.net]
てか継続が欲しい

58 名前:はちみつ餃子 mailto:sage [2020/02/01(土) 18:08:11.40 ID:6nnXKMBq.net]
>>55
C++ ではオブジェクトの寿命の管理と辻褄を合わせなきゃならないんだから full continuation は無理だぞ。

59 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 18:09:32.76 ID:YFAnTUnh.net]
継続とは?

60 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 18:12:05.70 ID:YFAnTUnh.net]
setjmp のことか

61 名前:デフォルトの名無しさん [2020/02/01(土) 18:12:34.25 ID:Bc9LjLbW.net]
ループに名前を付け、その名前で離脱や継続を行う。

ループA {

62 名前:デフォルトの名無しさん [2020/02/01(土) 18:16:20.88 ID:Bc9LjLbW.net]
途中で送信してしまった。面倒だから書き直さないが、
breakやcontinueはキーワードが紛らわしいのでPerlのlastとnextを拝借する。
last ループA; とか next ループA; みたいな感じ。

63 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 18:16:45.14 ID:YFAnTUnh.net]
わざわざ名前を付けるならgotoで良いんでは?



64 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 18:18:49.32 ID:vKrtBnhX.net]
gcc5ぐらいから一気にgcc10にしたらエラー表示とかデフォルトの警告とか色々変わっててわろた

65 名前:デフォルトの名無しさん [2020/02/01(土) 18:19:46.95 ID:Bc9LjLbW.net]
>>61
まあね。だけどgotoはフリーダムすぎて良くないでしょ。

66 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 18:34:11.57 ID:YFAnTUnh.net]
いや全然そう思わない
gotoで何か不都合がある?

67 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 18:52:41.69 ID:pUJoLXPw.net]
>>52
コンパイラ毎の最適化における癖とか、例外の実装についての差異なんかも語ってもいいんだぞ。

68 名前:はちみつ餃子 mailto:sage [2020/02/01(土) 18:56:33.52 ID:6nnXKMBq.net]
>>63
goto は自由すぎるけども、ループを何段階も一気に抜けたいとかいう状況がすでにだいぶん自由だと思うぞ。
そういう状況が生まれたらもう駄目なんだよ。
ごちゃごちゃとした使い分けを考えるよりおとなしく goto した方が「そこが悪い」ってのが目立って良い。

69 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 19:01:47.00 ID:YFAnTUnh.net]
一番使いたいのは2段break
行列や画像など2次元構造では当たり前のように2重ループになる

2重ループを抜けたい状況は設計が悪い
と思う感覚が全く理解できない

70 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 19:01:49.68 ID:TULylXcw.net]
構造化を壊さないことを保証した仕組みで脱出したいってことでしょ

71 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 19:04:12.92 ID:YFAnTUnh.net]
2次元構造の2個のループを抜ける為に
非常に関連のある2個のループを別関数に分ける

この方が設計が悪い
というのがおれの感覚

72 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 19:07:14.52 ID:JWECbGc7.net]
>>67
gotoは悪、多重ループは悪、みたいなどこかで聞いたルールを杓子定規に常に遵守すべき絶対ルールのように考える人が少なからずいるんだろうね。声が大きいだけかもしれないけど。

73 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 19:09:12.42 ID:PjJtYhAX.net]
gotoの利用にコンパイラの補佐があればよかったのに



74 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 19:10:50.63 ID:PjJtYhAX.net]
中カッコ、変数の有効範囲含め
スコープ内に飛び込むジャンプを一切禁止、前方のみと決めれば
なかなか直観的でわかりやすいキーワード
だとおもうのに

75 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 19:19:24.65 ID:YFAnTUnh.net]
一切禁止とか言うから
それが絶対だと初心者が思って思考停止する
この典型がgoto

使った方が良い時は使う
再帰も生ポもグローバル変数も多重継承も多重ループも

76 名前:はちみつ餃子 mailto:sage [2020/02/01(土) 19:25:00.72 ID:6nnXKMBq.net]
>>67
ここでワイが「悪い」って言ってるのは使うなとか別の方法がとれるとかいうほどの強い意味じゃなくてさ、
気を付けなきゃならないポイントとして目立ってもらわなきゃ困るって程度の意味。

だけど、日常的にそこら中でそういうポイントがあるのならやっぱり悪いとは思うけど……。

77 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 19:26:16.45 ID:j/qpVk5O.net]
二重ループの脱出は
[&]{
for(){
 for(){
  return;
 }
}}();
で結論出たはずだが

78 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 19:29:49 ID:YFAnTUnh.net]
これはひどい

79 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 19:44:49 ID:PjJtYhAX.net]
それオーバーヘッドかからんの?

80 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 19:47:58 ID:j/qpVk5O.net]
関数オブジェクトはまともなコンパイラならインライン展開される

81 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 19:48:45 ID:7G0Z2VlM.net]
贅沢言いすぎだね
素のPascalなんてreturnすら無いからね
もはやどうやってプログラムを書いたらいいか分からないレベル

82 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 19:53:54 ID:7G0Z2VlM.net]
Pascalは完璧な構造化言語を目指したから
入口と出口を常に一つずつにするというポリシーがあって
それゆえreturnが無いんだよね
returnがあると出口があちこちに散らばるので
構造化じゃない、汚い、という考え

なお、breakは有るもよう

83 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 19:58:58 ID:+WgC03YT.net]
[&]{
try{
for(){
 for(){
  throw 0;
 }
}catch(...){}
}}();



84 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/01(土) 20:02:08 ID:6nnXKMBq.net]
抽象的なレベルで考えたら break は
「残りの文が if 式で囲まれていると見なして暗黙のフラグを設定する (そのフラグは暗黙にループの終了条件でもある)」
とも考えられるから、構文糖だといえば構造化は壊れていない。

だけどなぁ、プログラムは人が書くものだし、人にとってどう見えるかも大事なんだよな。
そこらへんは見方によってどうとでも理屈を付けられてしまう。

85 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 20:04:46 ID:+WgC03YT.net]
[&]{
try{
for(){
 for(){
  throw 2;
 }
}
}catch(int d)
{printf("%d段階ジャンプしたお¥n",d);}
}();

86 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 20:10:07 ID:tav2AwxI.net]
>>82
break 2 も gotoでループを抜けるのも同じ

87 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 20:24:42 ID:iBA7Xa3w.net]
>>83
それは最悪
throw 3; って書いてもチェックされないし

88 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 20:47:35 ID:BhmlSyWc.net]
>>67
3重ループは? 4重ループは? なんで2だけなの?

89 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 20:52:34 ID:TULylXcw.net]
たまに国語力が心配になるやつがいるよな

90 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 20:53:59 ID:+WgC03YT.net]
[&]{
try{
for(){
 for(){
  throw "リレミト";
 }
}
}catch(const char*s)
{printf("%sの呪文を唱えた¥n",s);}
}();

91 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 20:56:56 ID:BhmlSyWc.net]
>>87
答えられないならレスしないで下さい
ウザいだけです

92 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:07:19.54 ID:vKrtBnhX.net]
for () {
for () {
goto done;
}
}
done:

どう考えてもこちらのほうが綺麗

93 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:09:23.19 ID:BhmlSyWc.net]
>>90
だな
必要になったことを変に偽装する悪癖を治すべき病人多すぎ



94 名前:はちみつ餃子 mailto:sage [2020/02/01(土) 21:14:53.51 ID:6nnXKMBq.net]
ほんまになぁ。
そんな簡単なことをラベル付き break だのなんだのって面倒なだけとしか思えぬ。
もう構造化は破綻してるんだからおとなしく goto しとけよな!

95 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:19:44 ID:dP/tym/A.net]
>>89
日本語が不得意みたいなので英語で説明しますね
Double loop frequently appears to treat a two dimension structure such as matrix or image data,
so "break from double loop"is used by programmers related mathematical or visual product.
>>67 states that is good reason and s not always bad design.

96 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:22:30 ID:BhmlSyWc.net]
>>93
意味わかんね
なんでそんなことするの?
アホだから? それともバカだから?

97 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:25:42.92 ID:dP/tym/A.net]
>>94
It's purely kindness for non-Japanese speaker. Did you not like it?

98 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:26:06.76 ID:tav2AwxI.net]
>>92
構造化的には
breakも途中でreturnもgotoでループを抜けるのも同じだよ

99 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:26:27.45 ID:BhmlSyWc.net]
Пожалуйста, говорите по-японски.

100 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:29:34.25 ID:dP/tym/A.net]
なんだロシア人か
Я не понимаю >>67, потому что я не понимаю японский?

101 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:32:56.91 ID:tav2AwxI.net]


102 名前:はちみつ餃子 mailto:sage [2020/02/01(土) 21:34:56.10 ID:6nnXKMBq.net]
>>96
同じだからそれ以上に新しい文法を持ち込んでもそれほど綺麗にならんって! ということを言いたい。

103 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:36:54 ID:BhmlSyWc.net]
>>98
Mimi ni Kijapani.



104 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:38:38 ID:TULylXcw.net]
>>96
gotoは正しく使えばという但し書きがつくでしょ
そこをなんとかしたいという話だと思ってる
それが論点だとするとgoto使えというのは解にならない

105 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:40:19 ID:BhmlSyWc.net]
>>96
ほんこれ

106 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:42:54 ID:tav2AwxI.net]
>>102
正しく使う前提なのは当たり前
なんでgotoだと正しく使わない前提になるのか不思議

107 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:43:54 ID:BhmlSyWc.net]
>>104
ほんこれ

108 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:48:36 ID:7G0Z2VlM.net]
危ない操作はできないようにしようってのが言語の進化だからな
それ無視して、安全に使うのが前提とか、正しく使うのが前提とか、それ言っちゃね
なんかおかしな方向へ行くよね

109 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:48:59 ID:TULylXcw.net]
>>104
構造化プログラミングの概念は知ってるんだよね?

110 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:50:07 ID:7G0Z2VlM.net]
gotoを正しくしか使えないように改良したのがreturn、break、continue
ってことも忘れずに

111 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:54:44 ID:BhmlSyWc.net]
>>104
構造化プログラミングでは使わない制御構造を
使うべきでない理由が構造化プログラミングって論法に
抜け出せない枠があるとは思わないの?

>>108
continueだけ、それで正解なんだが
他はみんな間違ってるよ

112 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:57:47 ID:7G0Z2VlM.net]
見てください皆さん、ID:BhmlSyWc ← ひどいですよ
まず何言ってるか分からない
このレベルはきついな

113 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:02:32 ID:tav2AwxI.net]
>>106
どの辺からgotoが危ない操作だと思うの?



114 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:06:43 ID:vKrtBnhX.net]
まあ1万行ある関数の中で、5千行目ぐらいにgotoがあって、ラベルが関数の先頭付近にあるとか、それに近いのは見たことあるが、あれはどう考えてもgotoの悪い例だからな
包丁で味噌汁食ってるようなもん

115 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:06:57 ID:BhmlSyWc.net]
>>110
きつくて気の毒だな
不勉強なやつは自業自得なので同情はしない

116 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:08:59 ID:BhmlSyWc.net]
>>112
1万行か・・・これ↓より重症だなw
www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.10.4.html

117 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:11:31 ID:tav2AwxI.net]
不定値や無限ループの危険はgotoに限ったことじゃないし
ループを抜けるgotoには関係ない話

goto特有の危険な場面
何を心配してるんだろう
酸っぱいブドウ?

118 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:16:09.36 ID:TULylXcw.net]
だめだこりゃ

119 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:19:01.58 ID:7G0Z2VlM.net]
gotoはどこへ飛ぶか分からないから読みにくいんだよ
前に飛ぶのか、後ろに飛ぶのか、それすら分からない
飛び先を分かりやすく改良したのがreturn、break、continue
それぞれ飛び先が決まっているから追うのが楽
その英知が分からんっていうならreturn、break、continueを使わずに
全部gotoでやれば?って話

120 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:22:45.11 ID:tav2AwxI.net]
関数なんてもっとどこに飛ぶかわからんぞ

121 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:25:22 ID:tav2AwxI.net]
どこに飛ぶかわかる名前にするってのが普通の発想
意味でも構造でも文章でも好きな名前を付けられる

関数も変数も名前空間も全てそう

122 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:25:32 ID:TULylXcw.net]
gotoは中にも飛べるの知らないんじゃないこの人

123 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:25:55 ID:BhmlSyWc.net]
>>117
飛び先じゃなく飛ぶこと自体の問題なんだがw



124 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:26:20 ID:7G0Z2VlM.net]
つまりはそういう話で、追いやすいように飛び先を制限したいよねーってのが根底に有って
(当然そういうのが念頭にあってreturn,break,continueは生まれたわけで、前例に倣いたい所)
それでブロックに名前を付けるだのbreak 2だのって書き込んでいる人がいるわけで
gotoでいいんじゃね?っていうなら、return,break,continueもgotoでいいんじゃね?
むしろforやwhileもgotoでいいんじゃね?gotoを正しく使えばいいんだろ?ってなる

125 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:26:36 ID:TULylXcw.net]
構造化プログラミング知らずにgotoいきって使うのはさすがにやばい

126 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:28:23 ID:BhmlSyWc.net]
>>122
どうなっていれば「追いやすい」のかを
まず明らかにしようぜ

俺ルールでもいいし
広く認知されているルールでもいいし

127 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:31:09 ID:7G0Z2VlM.net]
巻数はどこに飛ぶか分からないが、必ず元に戻ってくる(のが基本)
行きっぱなしというか、ただのジャンプのgotoやらbreakやらとは違うのだよ
関数のコールは入口と出口が一つになってて非常に構造化されてる好例
こういうところ分からないってのはセンスないよ

128 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:32:56 ID:7G0Z2VlM.net]
巻数→関数

129 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:35:10.84 ID:tav2AwxI.net]
使い所でgotoが使えないのはセンス無い
使い所でgptoを使わないのはコードが見にくい
使い所でgotoを使わないのは危険なコード

goto否定派にレベルを合わせた主張をするとこんな感じ

130 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:42:27.15 ID:TULylXcw.net]
やっぱりこいつダメだな
知性がない

131 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:44:49.19 ID:tav2AwxI.net]
使い所でgotoを使わないのは知性が無い

132 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:45:34.37 ID:7G0Z2VlM.net]
本心では誰もgotoは否定していないんじゃないかな
今は多段breakの機能が無いんだからgotoを使えばいいだろう
しかし、もしgotoを使わないで済む多段breakの新機能があったのなら
それを使ったほうがいいだろうし
じゃーその新機能はどんなものが考えられるか?って遊びだろ?
ブロックに名前付けるだとかbreak nだとかは

133 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:50:41.91 ID:wBNP08tW.net]
多段breakは考えた奴は脳味噌が糞すぐる…
ループの深さを変えたとたんにバグるじゃん?
ループの深さは金輪際変えないとか
ループの深さを変えるとき必ずループ全体を机上確認するとかだったら
gotoでも逝けるじゃん??



134 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:53:08.37 ID:vKrtBnhX.net]
ああ、そうだな
break 2だとfor文が3重になったときにバグるな
個人的には面白いと思ったが

135 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:53:40.31 ID:tav2AwxI.net]
使い所は2次元構造の2重ループとかだよ

136 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:55:40.65 ID:rsRLlL5x.net]
画像処理とかで2重ループ良く書くけど、最近2段階breakしたくなった記憶がないな

実は要らないんじゃね

137 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:56:47 ID:tav2AwxI.net]
じゃあbreakもいらないんじゃない?

138 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:59:11 ID:7G0Z2VlM.net]
まーC++がプリプロセッサを殺すために進化しているのと同様
Cはgotoを殺すために進化したともいえるわけで
たとえば、関数、for、return、などなど、制御構造にかかわるほとんどの物が
gotoを殺すために有るといってもよい
だから、もっとgotoを殺すにはどうすればよいか、考えるのは自然な発想かと

C++でもテンプレートなどで出来ないことはプリプロセッサでしなければならないし
ただ、同じことがテンプレートとかで出来るならそのほうが良いだろうし
もっとプリプロセッサを殺すためにはどういう機能を追加すればよいか考えるのは自然な事だろう

同じ同じ

139 名前:◆QZaw55cn4c mailto:sage [2020/02/01(土) 23:01:32 ID:EspH/Y2K.net]
goto とか break とか continue とか、他の言語(javaとか)でもいろいろ小手先的に弄られているけれども、それに何の意味があるのかいつも不思議におもいますね
C/C++ の goto とかはどう頑張っても関数の中でだけしか跳べないのだから、BASIC の GOTO ほどにはスパゲッティ状態を招けないのではと考えます
無論、その関数が異様にデカければ別ですが、そんなデカい関数を書くほうが問題であって goto が問題なのではないかと

140 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 23:11:38.33 ID:tav2AwxI.net]
ループを抜ける為にだけ使われる変数を使ったループ抜け
世の中にはたくさんこういうコードがある
たくさんのコードを見る機会がある人なら
たくさん見たことがあるはず

gotoネガティブキャンペーンのせいだよ

141 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 23:11:46.92 ID:JWECbGc7.net]
>>136
gotoが使わないで済むように進化してくのは期待している。
ただ現状として、多重ループを抜ける場合みたいにgotoを使うのがシンプルで分かりやすいならば、毛嫌いしたり盲目的に原則振りかざすよりgoto使えばいいだけのことだと思うよ。

142 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 23:32:29 ID:TULylXcw.net]
>>138
お前ほんとに病気だな
多重ループ脱出でgotoが簡潔なのはみなわかってる
でもgotoは自由度が高すぎて構造を壊す可能性があるわけ
だから改善するとしたら何があるかという話をしてるだけであって
別にgoto禁止とかの話はしてない
好きなだけ使ってろよ
あと構造化プログラミングぐらい知っとけ

143 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 23:45:45.20 ID:tav2AwxI.net]
>>140
色々と違う



144 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 23:46:54.20 ID:vKrtBnhX.net]
for () {
break label;
} label;

for () {
for () {
break label1
} label2;
} label1;

こういう風にfor文のお尻にラベルを付けられるようにすれば局所化したgoto風のbreakが使えるのでは

145 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 23:48:30.11 ID:tav2AwxI.net]
for () {
goto label;
} label:;

for () {
for () {
goto label1;
} label2:;
} label1:;

146 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 23:49:00.26 ID:tav2AwxI.net]
今でも出来る

147 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 23:49:30.89 ID:wBNP08tW.net]
Pythonはループにラベルをつける手が使えた
と思った(幻覚でなければ

148 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 23:52:18.24 ID:pUJoLXPw.net]
またgotoの話になってんのかよ。。
だからいっそ禁止にと思ったが、それよりもさらにクソな構文の提案が出てたり。。
想定を超えた馬鹿どもばっかりじゃねーか。

149 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 23:54:48.66 ID:tav2AwxI.net]
無理に会話に入って来なくて良いよ

150 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 23:59:22.03 ID:7G0Z2VlM.net]
ただ、凝りに凝った複雑怪奇なテンプレートより
シンプルに作ったマクロの方が読みやすいって事例も当然あるだろうよ
てか、わりと、最近、残念ながらその傾向が・・・で、C++が嫌われる理由にも・・・
だからgotoを殺すのも上手くやらないとむしろ酷くなる
そこが腕の振るいどころで面白い部分でもあるし、言語作ってる連中もそんなことで頭いっぱい
変なゲーム性が有って、逆にそれがまたダメな部分でもあって
あと、妹大好き

151 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 00:17:33.29 ID:rWwvB4I9.net]
多段breakの使用頻度がそれほど多くないことを加味すれば
break n;方式が妥当だろうね
これだと2重ループを3重ループに書き換えたときにバグる、とか
意味不明なことを言ってる奴もいるが
それは1重ループをbreakで抜けてたのを2重ループに書き換えたらバグった
と言ってるのと同じであって、当たり前の話だし、今でも同じことだ
break n;が一番シンプルで妥当だと思うね

152 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 00:32:21 ID:7b/FZYuN.net]
breakの後にマジックナンバーを書くのが気に入らない
定数には意味のわかる名前を付けたい

153 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 00:33:00 ID:rWwvB4I9.net]
ただし、break n;のnの部分が変数でもOKとかなってたらかなりウザいが
そこはnは定数と定めたいね、でもC++の場合は定数と言っても・・・
複雑にしようと思えばいくらでも複雑にできるわなー
普通に使う分には問題ないかと
明日からbreak n;が入っても、たぶん誰も困らないし、混乱も起きないだろう
割のいい賭けだし、俺はアリだと思うね



154 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 00:33:32 ID:7b/FZYuN.net]
breakとbreak nが同じとか意味不明な主張をなさる御仁がいらっしゃるが
じゃあcontinueがcontinue nになったらどんな地獄が発生するか
考えてみたら良い

155 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 00:48:04.23 ID:rWwvB4I9.net]
別にcontinue n;
全然ありでしょ
これと同等の事を、何か別の方法でやるよりスマート

for(;;){
 bool do_continue = false;
 for(;;){
  if(...){ do_continue = true; break;}
 }
 if( do_continue ){ continue; }
}



for(;;){
 for(;;){
  if(...){ continue 2; }
 }
}

156 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 01:00:22.64 ID:7b/FZYuN.net]
do {
 do {
  ...
  if (cond) {
   continue 2;
  }
 } while (副作用の有る式1);
} while (副作用の有る式2);
とから?

157 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 01:03:23.27 ID:0Gqmr542.net]
break nなんてやるくらいならbreak label で抜けるループを明示的に指定したいな

ループにラベルをつけるとして、先頭では見づらくて邪魔だな

ループの末尾にラベルを付ければ見やすいけど、それだとlabelついたループを抜けると言うよりlabelの指す位置へのジャンプだな

なんだgotoでいいじゃん

個人的には breakto label という記法でループ出口に書いたラベルに飛べるとするのが分かりやすいと思うけど、こんなことに新しい予約語を導入するくらいならgotoで十分だと思う。

158 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 01:06:28.34 ID:7b/FZYuN.net]
break nが良いとか言ってる椰子は
ついでに行番号も復活してほしいと思っているに違いナス

159 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 01:15:40.31 ID:rWwvB4I9.net]
do{
 do{
  if(...) goto NEXT;
 }while(...);
NEXT;
}while(...);

と等価だろう
要はこういうgotoを置き換えるために作られたのが
continueなのだから、そのルールに従うのが普通だろうね

もしくはgoto使わずにフラグでやっても、どのみち内側のループの条件式は実行されないわけで

do{
 bool do_continue = false;
 do{
  if(...){ do_continue = true; break; }
 }while(...);
 if(do_continue) continue;
}while(...);

これ以外の解釈ってのは難しい

160 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 02:23:51 ID:93obPCeA.net]
gotoの話題って今でもこんなに盛り上がるのか

161 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 02:49:52.74 ID:LC7cWz9a.net]
老害が多いから

162 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 03:26:54 ID:EDNK6zQt.net]
そういう機能要望みたいなのここでやる意味ある?
C++Slackでやった方がよくない?

163 名前:デフォルトの名無しさん [2020/02/02(日) 03:45:22 ID:mzCY/+E0.net]
英語は敷居が高いよ。



164 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 05:06:46.10 ID:DTIMfhpJ.net]
         ,,-―--、
        |:::::::::::::;;;ノ 
        |::::::::::( 」 <もう構造化は破綻してるんだからおとなしく goto しとけよな!
        ノノノ ヽ_l  
       ,,-┴―┴- 、    ∩_
     /,|┌-[]─┐| \  (  ノ
      / ヽ| |  バ  | '、/\ / /
     / `./| |  カ  |  |\   /
     \ ヽ| lゝ    |  |  \__/
     \ |  ̄ ̄ ̄   |
      ⊂|______|
       |l_l i l_l |
       |   ┬    |

165 名前:デフォルトの名無しさん [2020/02/02(日) 06:40:45 ID:mzCY/+E0.net]
じゃあswitchも要らないって事じゃないか。

166 名前:◆QZaw55cn4c mailto:sage [2020/02/02(日) 06:51:18 ID:9jRHEnns.net]
>>149
break n なんて間抜けの極みだと思いますね
java にはラベル付き break が存在して、ほとんど goto です https://www.sejuku.net/blog/20100

167 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 07:37:33 ID:SWo7Ruqh ]
[ここ壊れてます]

168 名前:.net mailto: >>136
Cはgoto殺すために進化してねえよ
Cのgotoが関数外に飛べないのはスタック巻戻しのような仕掛けが複雑になりすぎるからで
構造化プログラミングで否定されるからという理由ではない
構造化プログラミングで否定される制御構造を持たないことにするなら
breakやlongjmpは存在できないはずだ
[]
[ここ壊れてます]

169 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 07:44:05 ID:pBPOCWQ5.net]
結論が先にあって理由が後付けだから支離滅裂、一貫性の欠片もない事を書く
もはや宗教

170 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 07:46:45 ID:SWo7Ruqh.net]
ほんと、宗教だね
洗脳されてるやつは強固に思考停止していて
何を言おうが馬の耳に念仏だ

171 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 08:06:14 ID:SWo7Ruqh.net]
>>159
根底がわかってねえやつが多いからだよ
古典的な基本がわかってねえやつは若造と爺のどっちに多いだろうね
頓珍漢なことを書いて袋叩きにされたからって逆恨みする精神性なやつはどっちに多いだろうね

172 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 08:18:25 ID:9aZda2U6.net]
break labelでいいんじゃね
gotoと同じだが、labelがbreak的な位置にない場合コンパイルエラーになれば良い

173 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 08:27:24 ID:DTIMfhpJ.net]
label貼るくらいならgoto使う



174 名前:デフォルトの名無しさん [2020/02/02(日) 09:22:07 ID:mzCY/+E0.net]
gotoは便利なswitchだからね。
便利すぎるわこれ。
これからも積極的に使っていこうと思います。

175 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 09:40:59.69 ID:7b/FZYuN.net]
さすがにgotoでジャンプテーブル化の最適化までやる処理系は
まれだと思う

176 名前:デフォルトの名無しさん [2020/02/02(日) 09:43:27.45 ID:mzCY/+E0.net]
アドレス直接指定なのに、テーブル必要ないんじゃないの。
テーブル必要ない分、switchより有利なんじゃないかと思いました。

177 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 09:51:12.60 ID:7b/FZYuN.net]
(条件分岐無しの素のgotoだけでどうやってswitchの便利な代替品にするつもりなのやら…

178 名前:デフォルトの名無しさん [2020/02/02(日) 09:53:50.90 ID:mzCY/+E0.net]
頑張ってひねり出した!!
けどウンコにしか見えない。
納得できるものを頼む。

179 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 09:55:31.36 ID:0Gqmr542.net]
>>175
お前が何をいってるのか、何を考えてるのか理解できないのに、お前を納得させられる奴なんていないぞw

180 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 10:10:20.38 ID:o79zkFFu.net]
お尻にラベルつけて break ラベル; がいいとか言ってる奴は構造化の意味がわかってなさ過ぎ
ラベルは飛び先じゃなくてループに付けて break ラベル; でそのループから抜けるんだよ
なので break ラベル が使える言語はたいていループの頭にラベルをつけるようになってる
あと break レベル数 とか言ってる老害は早く滅びろ

181 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 10:28:45.43 ID:DTIMfhpJ.net]
名前使うならこんな感じか
void main(){
auto scope1 {
for(;;){
 for(){
  break scope1;
 }
}
}

182 名前:デフォルトの名無しさん [2020/02/02(日) 10:29:18.43 ID:mzCY/+E0.net]
>>176
俺自身何を言っているのかよくわからないのだが。

183 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 10:31:44.19 ID:DTIMfhpJ.net]
もしくは、forの直後
void main(){
for(;;)scope1{
 for(;;){
  break scope1;
 }
}
}



184 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 10:58:10 ID:MNdu0823.net]
void main()の時点で読む気失せた

185 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 11:16:46.30 ID:DTIMfhpJ.net]
んだこんにゃろ

186 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 11:22:39.21 ID:D8WvcGqJ.net]
ループの先頭にラベルを書くくらいなら
gotoの方が分かりやすい

187 名前:デフォルトの名無しさん [2020/02/02(日) 11:25:45 ID:mzCY/+E0.net]
あの、スレとは全然関係ないんだけど。
Boostでデバッグとリリース判別するマクロってありますか?
イテレータを1億回ほど回すのでデバッグだけテストを迂回したいんですが。

188 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 11:30:31.96 ID:9aZda2U6.net]
なぜboost?

189 名前:デフォルトの名無しさん [2020/02/02(日) 11:34:47.86 ID:mzCY/+E0.net]
NDEBUGを知らなかったからです。
おまえらおせーよ。

190 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 11:39:04.55 ID:SWo7Ruqh.net]
NDEBUGってISO/IEC9899やん
おまえさんがboostっていうから
レスポンス鈍かったんだよ

191 名前:デフォルトの名無しさん [2020/02/02(日) 11:48:10 ID:mzCY/+E0.net]
だよね。
そうだと思いました。

192 名前:デフォルトの名無しさん [2020/02/02(日) 11:49:31 ID:mzCY/+E0.net]
今度からはよく考えて質問しようと思います。

193 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 14:38:02 ID:rWwvB4I9.net]
今の一重ループを抜けるときの普通のbreakにはラベルを付けないのに
多重ループを抜けるためのbreakにはラベルが無いと読みにくくなるっていう
発想というか対称性というか整合性というか必然性が全く見えないんだが
今ラベル無しの一重breakで誰も発狂することもなく普通に使えているのに
多重breakになった瞬間にラベルが無きゃダメってなるのはなんか弱い
同じことを二回書いたけども
ラベル無しでも別に普通に読めるでしょ、今まで読めてるんだから
大体ラベル付けるんならgotoと手間自体は変わりないしな



194 名前:デフォルトの名無しさん [2020/02/02(日) 14:40:18 ID:mzCY/+E0.net]
今多発今多動ラ大
読み解けなかった。

195 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 14:41:51 ID:gkoi3ncl.net]
>>190
同意

196 名前:デフォルトの名無しさん [2020/02/02(日) 14:43:14 ID:mzCY/+E0.net]
え、わかるんだ。
すげー。

197 名前:デフォルトの名無しさん [2020/02/02(日) 14:47:27 ID:gXxB23XL.net]
下方向にだけ飛べるgoto相当機能があればgotoは要らなくなるんじゃない?

198 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 14:53:57 ID:7b/FZYuN.net]
>>190は、Cにgoto <label>とbreakがあるのになぜCはbreak nを設けるところまで踏み込まなかったのか、とか
break <n>で即値<n>に行き当たったコード閲覧者が行き先を知るために何をせねばならないかとか、
考えた方が良いので
は…

199 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 14:55:47 ID:0Gqmr542.net]
>>190
break nを勧めている人?
対象が1段なのと複数段とでは大きなギャップがあるでしょ。単純に対称性があると言えるものではないと思う。
ラベルつけるならgotoと手間が変わらないというのは同意。ただ、重要なのは手間が減ることではなく、複数段のループの外に出ることが明示されることだから、gotoと意味が混同されず同じ程度の手間でできる記法があるならそれは嬉しい。

200 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 14:56:57 ID:EDNK6zQt.net]
現実のC++について話せ
ここで新機能の導入について議論しても無駄だ
フォーラムでやれ

201 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 14:57:45 ID:gkoi3ncl.net]
手間が減ることは重要だよ
ラベル名を考える手間をかけて良いならgotoで良い

202 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 15:01:24.88 ID:rWwvB4I9.net]
大体だよ、多重ループはbreakで抜けれないので、仕方なくgoto使うときの
そのgotoを使う都合で必要になった、そのラベルをだよ
じゃーブロックにラベルをつけましょう、ってなんでそーなんだよ
元々のbreakにはラベルなんかねーのに
breakにラベルが無くて混乱したやつ居るか?

ご飯が無いからパンを食べてた状況なのに
すり替わってパンありきになって、パンが無きゃ話にならないとか言い出す始末
別にパン(ラベル)なんかなくても、ご飯があるならご飯食べろよ

ラヘルラベルって、そのラベルがどこ由来か考えてみろよ、gotoだろ?
もう一度言うが、もともとのbreakにはラベルなんかないし、それでみんな普通に過ごせてるし、混乱も起きてない
ただ、gotoで抜けるためには文法上/機能上ラベルが必要だったねってだけで、そこに着目しても仕方がない
本質的には無くても別に困らない

203 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 15:05:16.61 ID:jVWLSRwc.net]
ソースコードチェック目的でプログラム読むとき、gotoが出てきたら
そのgotoの使用方法が問題ないものなのか、いちいちチェックしないといけない。
breakならループ抜けるという意図が明白なので、チェックしなくてよい。



204 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 15:11:47.92 ID:rWwvB4I9.net]
そんなに名前が無いと発狂するんならもうgoto使えば?って思うし
なんなら関数化して正式に名前付ければって思うし
そこまでしたくないってときにbreak nが便利なわけだ
やりたいことは「多重ループから抜けたい」であって
「名前を付けたい」ではない!!

205 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 15:11:53.90 ID:gkoi3ncl.net]
関数コールも問題のないコールかどうかチェックしないといけないから
使わない方が良い

206 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 15:14:22.99 ID:EDNK6zQt.net]
それならもうポインタもグローバル変数もマルチスレッドも大量のチェックが必要だから使ってはいけないってことで

207 名前: mailto:sage [2020/02/02(日) 15:14:36.78 ID:Rn0kkYyt.net]
>>199
私と認識が似ていますね

>>137
>goto とか break とか continue とか、他の言語(javaとか)でもいろいろ小手先的に弄られているけれども、それに何の意味があるのかいつも不思議におもいますね


208 名前:
>>164
java にはラベル付き break が存在して、ほとんど goto です https://www.sejuku.net/blog/20100
[]
[ここ壊れてます]

209 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 15:15:16.61 ID:7b/FZYuN.net]
現行のC/C++にはgoto <label>がある一方、break <n>は無い
もしbreak <n>の追加がgoto <label>の実装より難しかったからやらなかったのだとしたら、
break <n>の飛び先がgoto <label>の飛び先より簡単にワカルから優れているという主張は根拠を失う

break <n>はわかりにくいか、さもなくばgoto <label>と同等なんである

210 名前:デフォルトの名無しさん [2020/02/02(日) 15:16:38.00 ID:mzCY/+E0.net]
constがスレッドセーフなのも困った。

211 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 15:24:46.36 ID:jpTipLln.net]
>>201
現実ありえないのは重々承知したうえで書くけど
100重ループを脱出するとき数を数えたくないだろうなって思うじゃん
ほかにも3重ループとかで2ndと3rdのループから共通の脱出先ラベルにもできるわけじゃん
文法を拡張する前提ならそこまで想定すべきだと思うね

粗野な即値の数字じゃなくて意味ごとに名前をつけられるようにしてきたのが
プログラミング言語の進化の歴史なのでおれは自然だと思うよ

というかそういう観点からラベル付きbreakというのは他の言語にはあるわけで
で今話してるのはもっと書きやすく読みやすくできないかというトピックでしょ
break Nは使えるだろうけど洗練されてない感じ

212 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 15:27:11.67 ID:gkoi3ncl.net]
break [n] はラベル名を考えなくて良い利点がある
使えるなら使いたい

ラベル名を考える必要があるならgotoで良い

ループの先頭で名前を付けるのはgotoより見づらいから使わない

213 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 16:01:27 ID:o79zkFFu.net]
break n とか言ってる奴は何故か>>150をスルーしてて笑うわ



214 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 16:07:52 ID:nz0OxFB3.net]
他の人は「マジックナンバー」だと思わなかったからでは。

215 名前:デフォルトの名無しさん [2020/02/02(日) 16:20:03 ID:gXxB23XL.net]
foobarやhogeを超える人気なダミー文字列を考えたほうがよほど建設的だぞ、君たち。

216 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 16:35:55 ID:SWo7Ruqh.net]
break 5; //C
GOTO 5 : REM BASIC

217 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 16:37:04 ID:gkoi3ncl.net]
マジックナンバーがイヤなら
break break;

218 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 16:50:03 ID:DTIMfhpJ.net]
関数で置き換える
引数がめんどうならラムダで置き換える
returnが多重breakの代わりになる

219 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 16:58:55 ID:SWo7Ruqh.net]
>>214
多重ループを単一関数に書くって前提だね

220 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 17:03:09 ID:7b/FZYuN.net]
>引数がめんどうならラムダで置き換える ←New!
これは場合による
for (i=0; i<INT_MAX; i++) {
 for (j=0; j<INT_MAX; j++) {
  (何がしかの処理)
 }
}

for (i=0; i<INT_MAX; i++) {
 for (j=0; j<INT_MAX; j++) {
  ((何がしかの処理)を行うラムダ式fを定義)
  f();
 }
}
とするのではご利益が無いが、

((何がしかの処理)を行うラムダ式fを定義)
for (i=0; i<INT_MAX; i++) {
 for (j=0; j<INT_MAX; j++) {
  f();
 }
}
とするのではラムダ式定義時点でループ内の変数を参照できないから場合によっては詰む
結局f()は引数がぞろぞろ並ばねばならない

221 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 17:05:11 ID:+9zyTEwm.net]
>>216
>>75

222 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 17:06:58 ID:7b/FZYuN.net]
>>217
左様
それがラムダ式を適用して解決づべき適切な場合である(キリ

223 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 17:15:36 ID:SWo7Ruqh.net]
ジーオーティーオーというスペルでなければ
制御構造はそのままでいいと言うクソ論法



224 名前:デフォルトの名無しさん [2020/02/02(日) 17:52:12 ID:mzCY/+E0.net]
スレとはあまり関係ないんだけど、nodiscard属性を無視するにはどうしたらいいですか?

225 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 17:59:47 ID:MNdu0823.net]
変数で受けといてその変数をガン無視すればいいんじゃないの
未使用変数の警告出るだろうけど

226 名前:デフォルトの名無しさん [2020/02/02(日) 18:00:14 ID:mzCY/+E0.net]
やってみます。
アリガト。

227 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 18:11:02 ID:o79zkFFu.net]
>>210
お前の言う「他の人」はマジックナンバーの意味わかってないってことか?
このスレ見てたらありえなくもないかと思えてきたわw

228 名前:デフォルトの名無しさん [2020/02/02(日) 18:13:54 ID:mzCY/+E0.net]
あと三日くらいしたらお前より出来るようになってるから。

229 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 18:24:38 ID:jpTipLln.net]
>>220
(void)func();

230 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 18:28:22 ID:x1m+isRG.net]
>>208
昔のBASICは、行番号を勝手に付けてくれていたのでgotoでもラベル名を考えなくて済んだのでとても便利だった。

231 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 18:30:04 ID:x1m+isRG.net]
>>226
なお、アセンブラでは行番号がなかったのでラベル名を考える必要があったが、
意味のあるラベル名を考え出すのは大変だったので、分かり易い場所以外は、
多くの人が、lab1: lab2: lab3: のような連番を使う傾向があった。

232 名前:デフォルトの名無しさん [2020/02/02(日) 18:30:14 ID:mzCY/+E0.net]
>>225
メモっときます。
ありがと。

233 名前:◆QZaw55cn4c mailto:sage [2020/02/02(日) 18:31:42 ID:Rn0kkYyt.net]
>>226
>昔のBASICは、行番号を勝手に
auto 文だったかな…



234 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 19:36:27.12 ID:7b/FZYuN.net]
VB6には行番号は無かった

235 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 20:26:55 ID:GV9CDSqK.net]
みんなってc++で何を作ってるの?
ゲーム?

236 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 21:07:54.17 ID:YP+sfqkD.net]
何も作ってないやつがほとんどだろ

237 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 21:15:29.52 ID:GV9CDSqK.net]
すまん俺の聞き方が悪かったのかもしれん
最近プログラミングの勉強始めて、各言語の用途とか調べたんだけど、ここでも一応聞いてみたかったの
何を作ってるって言うより、どんな開発に携わってるかっていうのを聞きたかった

238 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 21:21:43.96 ID:DTIMfhpJ.net]
テキストエディター
3Dモデラー
メーラー

239 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 21:25:09.08 ID:vTjBAXNr.net]
競技プログラミング

240 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 21:39:16 ID:GV9CDSqK.net]
アプリ開発にも使われるのかー
あざした

241 名前:デフォルトの名無しさん [2020/02/02(日) 22:06:04 ID:mzCY/+E0.net]
いまダブルアレイやってる。

242 名前:デフォルトの名無しさん [2020/02/02(日) 22:08:30 ID:mzCY/+E0.net]
検索はstd::setやstd::unorderd_setより速いけど、挿入が一桁遅い。
静的構築が速いというので、それもやってみたけど、2/3くらいにしかならなかった。

243 名前:デフォルトの名無しさん [2020/02/02(日) 22:10:09 ID:mzCY/+E0.net]
検索はstd::setの10倍くらい早いな。



244 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 22:15:25 ID:0Gqmr542.net]
>>239
相談ができたらまた来い

245 名前:デフォルトの名無しさん [2020/02/02(日) 22:54:22 ID:mzCY/+E0.net]
>>240
よろしくお願いします。

246 名前:◆QZaw55cn4c mailto:sage [2020/02/02(日) 23:01:19 ID:Rn0kkYyt.net]
初学者的な質問です、よろしくお願いいたします。
バイナリーファイルを
std::fstream f;
f.open(filename, std::ios::in | std::ios::out | std::ios::binary);
でオープンし、同一ファイルのオープン中に
f.read(), f.seekg() でガンガン読むと同時に
f.write(), f.seekp() でガンガン書き込む
を試しているのですが、seekg(), tellg() と seekp() tellp() は名前は別でもあるにもかかわらず、実はファイルポインタの実体は両者で同一なのでは?
という疑いが発生しました。つまり、seekg()/tellg() と seekp()/tellp() とは独立でない、と推測しています

?この解釈で正しいですか?
?こういうのは、C++ iostream レファレンスのどこを見て洞察するべきなのでしょうか?

実際のお題は相変わらずエラトステネスのふるいです https://ideone.com/6Ww9nq

247 名前: mailto:sage [2020/02/02(日) 23:18:14.73 ID:Rn0kkYyt.net]
>>231,233
私は今のところエラトステネスの篩にご執心、という体たらくです…

248 名前:デフォルトの名無しさん mailto:sage [2020/02/03(月) 00:01:01 ID:8riGTZSm.net]
エラトステネスのふるいで
なんでファイルのリードが必要?

249 名前:◆QZaw55cn4c mailto:sage [2020/02/03(月) 00:22:49 ID:X2PbBOAI.net]
>>244
結構昔から
www.asahi-net.or.jp/~KC2H-MSM/pbsb/pbsbm006.htm
にとても興味を持っていたのです、二つの隣り合った素数の差を「素数のギャップ」と呼ぶことにしたとき、

『素数のギャップが取りうる値の頻度。はじめは2、4が多いが、そのうち、6の方が多くなる。』
『6がチャンピオンの座を降りるのはいつか。』
『少なくとも 10^14 以下では6がトップであり、それ以降、いつ、6以外の数がトップになるかは、知られていない。』

10^14 までの数であっても全部、篩としてメモリに載せられないので、さてどうしたものかと思案中です、最終的には年スパンでずっと計算させ続けるのに耐えられるようにしたい、と

250 名前:デフォルトの名無しさん mailto:sage [2020/02/03(月) 00:38:27 ID:e9E2NTEb.net]
その問題だけなら
2次キャッシュに収まるくらいに分けてふるえば速い
間隔も大して大きくならないので
ヒストグラムはオンメモリで済む

スレッドも簡単に分割出来るので
論理コア数と同じだけスレッドを作って回す

251 名前:◆QZaw55cn4c mailto:sage [2020/02/03(月) 00:44:34 ID:X2PbBOAI.net]
>>246
コメントありがとうございます

>間隔も大して大きくならないのでヒストグラムはオンメモリで済む
確かに 10^10 まででも最大 354 というのには驚きました、案外密に分布しているんですね

>2次キャッシュに収まるくらいに分けてふるえば速い
constexpr unsigned int windowSize_Default = 30 * 5000000; はでかすぎ、ですか

いただいたアイディアは、どれも私には難易度が高いのですが、ぼちぼち書いていきます…

252 名前:デフォルトの名無しさん mailto:sage [2020/02/03(月) 00:44:55 ID:e9E2NTEb.net]
AVXレジスタを使って小さな素数の倍数を消して
ビット命令で大きな素数の倍数を消す
大きな素数の倍数は210ずつ処理する

昔素数の数を数えるプログラムを書いたことがあって
記憶に残ってる範囲ではこんな感じ

253 名前:デフォルトの名無しさん mailto:sage [2020/02/03(月) 00:55:53 ID:jdU9ROmC.net]
>>229
100 WIDTH 80,25:CONSOLE 0,25,0,1:SCREEN 1:CLS 3
110 XXX
120 XXX
130 IF XXX = XXX GOTO 110
のようなもので、最初に入れるときは自分で行番号も手で打つのが基本ではありました。
115 YYY と入れると、110と120の間に行が挿入されると言う仕組みです。
それだと9個以上は挿入できなくなるので RENUM 命令を使うと行番号を自動的に
振り直すことができました。その場合、GOTOやGOSUBの行番号も連動して変わる
仕組みです。



254 名前:◆QZaw55cn4c mailto:sage [2020/02/03(月) 00:55:55 ID:X2PbBOAI.net]
>>248
コメントありがとうございます!

>大きな素数の倍数は210ずつ処理する
私は、2*3*5 = 30 でわりと満足していましたが、2*3*5*7=210 まで拡張されたのですか!?うーむ…

255 名前:◆QZaw55cn4c mailto:sage [2020/02/03(月) 00:57:46 ID:X2PbBOAI.net]
>>249
mon に入って、プログラムタイトルのコメントの行番号を手打ちで全部 0 にする、とか…
どうでもいい話でごめんなさい…

256 名前:デフォルトの名無しさん mailto:sage [2020/02/03(月) 01:52:57 ID:YoBHNt10.net]
素数は、6n ± 1 か。
6n + 1, 6n + 5 だけ

6n + 3 は、3の倍数だから、素数じゃない

257 名前:252 mailto:sage [2020/02/03(月) 01:58:12 ID:YoBHNt10.net]
A = 6n + 1, B = 6n + 5 とすると、

AA の並びなら、差は6
AB なら、4

BA なら、2
BB なら、6

A,B になる確率がランダムとすると、6 になる確率が2倍!

258 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/03(月) 11:14:43 ID:HBzF0G80.net]
>>242
たぶんこの一文。
> A joint file position is maintained for both the input sequence and the output sequence.
N3337 だと 27.9.1.1 の第 3 段落にある。

あくまでも std::basic_filebuf ではそうなってるってだけなので、
ストリームバッファ全般に言えるわけではなくて、
独立した位置情報を持つようなものも作れないわけではない。

FILE の fseek のラッピングとして実装することを想定したんじゃないかなぁ。

259 名前:デフォルトの名無しさん mailto:sage [2020/02/03(月) 12:59:28 ID:jOrmfTQL.net]
>>250
ビット命令が48個続くだけ
それほど大変じゃない

今だともっと

260 名前:良い命令があるかも []
[ここ壊れてます]

261 名前:◆QZaw55cn4c mailto:sage [2020/02/03(月) 20:59:04 ID:X2PbBOAI.net]
>>254
コメントありがとうございます。いまいちよくわかっていない iostream. の全体像を掴めるよう、いただいたヒントも頼りに潜ってみます

>FILE の fseek のラッピングとして実装することを想定したんじゃないかなぁ。

fseek() が 64bit オフセットならいいのですが
あるいは win32api::SetEndOfFile() のような、オフセットを指定して trunc する方法があればいいのですが
>>242 のバイナリファイルは単に uint64_t な素数を突っ込んでいるものですが、ある日末尾が中途半端にちょん切れてしまったのです…

262 名前:デフォルトの名無しさん mailto:sage [2020/02/03(月) 21:17:59 ID:Exvuz9nd.net]
>>256
それファイルに書く必要ある?
仮想メモリ頼りにメモリでやれば?

263 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/03(月) 21:26:54 ID:HBzF0G80.net]
>>256
巨大なファイルにちょくちょくシークしながらアクセスするなら
メモリマップトファイルを使った方が楽やで。



264 名前:はちみつ餃子 mailto:sage [2020/02/03(月) 22:20:22.51 ID:HBzF0G80.net]
>>256
ググってみたら iostream まわりの継承関係を表した図がすぐ見つかったわ。
https://www.ntu.edu.sg/home/ehchua/programming/cpp/cp10_IO.html
だけど継承関係の他にストリームがバッファとロケールを所有しているという関係もあるのが分かり難いかも。
cpprefjp の rdbuf の項目を見たらストリームのバッファを入れ替える例が載ってる。
https://cpprefjp.github.io/reference/ios/basic_ios/rdbuf.html

本当に「入出力」を司っているのはバッファであって、
ストリームはそれに書式化の機能をかぶせている感じ。

265 名前:◆QZaw55cn4c mailto:sage [2020/02/05(水) 22:01:06 ID:uTOW/8lH.net]
>>257
それはダメでした。win7, 16GB、素数の大きさが10^11 程度でスラッシングが発生して win7 では使い物になりません
GIMPS cli のように、普段は意識することなく3年くらいかけて計算するようにしたいです

>>258
着々と容量が増加するファイルに対して mmap は使えるのですか?win32api::CreateFileMapping では mmap を確立した後にファイルサイズを増やしてはいけない制限がありました

266 名前:デフォルトの名無しさん mailto:sage [2020/02/05(水) 22:31:00 ID:zWcxLf4u.net]
最初から最大ファイルサイズにしとくとか

267 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/05(水) 22:32:01 ID:85RuEno5.net]
>>260
そんな制限があるんか。

連続した巨大なメモリを予約しておいて、
適当な大きさに区切ってファイルにマッピングすればええで。
ファイルを複数に分けることになるけど、
見かけ上は巨大なメモリとして扱えるし、
容量が増加する都度に新しいファイルを作って割り当てればええ。

というやり方を思いついたので具体的に出来るんかいなと思って調べてみたら
MapViewOfFileEx の最後の要素でアドレスを指定する機能がある。
VirtualAlloc で予約した範囲は MapViewOfFileEx で使えないので、
どうやって空いているメモリ空間を探せばええんやろと思ったら
VirtualAlloc で予約した直後に VirtualFree をつこうたらええんやて。
https://stackoverflow.com/questions/12121843/mapviewoffileex-valid-lpbaseaddress
なんという泥臭い方法や……。

てなわけで、若干の面倒くさい手順が要るけどそれっぽいことは出来る。
この手順をいい感じに抽象化するクラスを作ったら色々と使えそうやな。
期待してるで!

268 名前:デフォルトの名無しさん mailto:sage [2020/02/05(水) 22:35:23 ID:bIRSo9XQ.net]
普通にAPIで巨大ファイル作れてるけど
CreateFile / WriteFile

269 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/05(水) 22:50:53 ID:85RuEno5.net]
最初からどでかいファイルを作る余裕があるならその方が簡単で

270 名前:はあるわな。
どんくらいデカいのがいるんや?
せいぜい数十ギガとかそんなもんやろ?
ケチらんと行くっちゅうのもアリや。
[]
[ここ壊れてます]

271 名前:デフォルトの名無しさん mailto:sage [2020/02/05(水) 23:33:50.77 ID:bIRSo9XQ.net]
CreateFile
WriteFile
ReadFile
SetFilePointerEx
SetEndOfFile

272 名前:デフォルトの名無しさん [2020/02/06(木) 13:03:55.59 ID:sNihMBVC.net]
こんな感じ?
.... 0101 0000 0100 0101 0001 0100 0101 0110

273 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 16:50:43 ID:zCd4f5nI.net]
STLコンテナ (仮にvとする) のサイズの分だけfor文を回したいってときに
for(int i=0; i<v.size(); i++)
と書くことが多いんだが、v.size()はintじゃないので警告が出る。

警告を一つ残らず潰したいタチだから毎回こういうのはintにキャストしてるんだが、キャストのコストってどんなもんなんだろ。
「大したことないからOK」って立場と「そもそもv.size()が毎回呼ばれてる時点でナンセンスだから改善すべき」って立場と「その警告は無視しなさい」って立場などがあると思うが、皆はどうしてる?
逆順にしたいことなどがよくあるので、範囲for文を使えってのは今回はナシで。

特定の環境、コードでのテストはできるが、一般論として、あるいは皆さんのスタンスとしてはどうですか。



274 名前:デフォルトの名無しさん [2020/02/06(Thu) 17:11:56 ID:v+RXRHu+.net]
コンパイルの警告のためだけだから
実行時コストは0じゃね

275 名前:デフォルトの名無しさん [2020/02/06(Thu) 17:13:00 ID:v+RXRHu+.net]
手でタイプするコストうんぬん言うなら
マクロで #define LEN(s) ((int)s.size())

276 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/06(Thu) 17:18:31 ID:jSrTrJa0.net]
>>267
最も正統派なのはこうかな?
for(decltype(v)::size_type i=0; i<v.size(); i++)
常識的に考えてコンテナの size_type が std::size_t より大きいことはあまりない (大抵は等しい) と思うので、面倒なときは std::size_t を使う。

本当に上限が限られていてその上限が変更されることがあり得ないほどそのプログラムにとって
本質的なものだと判断すれば int でいいやってこともあるといえばあるだろうし、
同じようなパターンが何度も現れるならアダプタを作った上で範囲forというのも考えられる。

状況によるでしょ。

277 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 17:24:46 ID:2fVM4odH.net]
int i = 0; と書かずに size_t i = 0; と書くのはどうだい?
v.size() が本当に size_t を返すか、という問題はあるが。

for (decltype(v.size()) i = 0; i < v.size(); i++)
と書くこともできるね。

i の型が int でないと不味いのかも知れんけど。

278 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 17:39:05 ID:/W9iMVJD.net]
>>267
コスト(性能)最優先か
見やすさ最優先か
タイプ数最優先か
次第

キャストのコストって言うけど
intとv.size()のサイズが違えば
どのみち型変換する

コンテナ使うような場所でこんな微妙なコストを気にしてもしょうがないし
>>270は面倒

(業務外だと)私は警告放置が多い
警告を消したい場合はsize_tにするか
コンパイラの設定を変えるか

業務で集団でのコーディングの場合は
他の部分を見て空気を読む

279 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 17:43:47 ID:/W9iMVJD.net]
>>269は色々な理由で無い

280 名前:デフォルトの名無しさん [2020/02/06(Thu) 17:44:41 ID:v+RXRHu+.net]
for(unsigned int i=0, len=v.size(); i<len; i++)
これもよく見るか

281 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 17:46:58 ID:5ihPHl5F.net]
auto i=0uにしてるな

282 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 17:48:08 ID:VEO7DUBt.net]
>>269
template <typename T> inline auto len(T s) { return s.size(); }

283 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 17:48:51 ID:VEO7DUBt.net]
あ、右辺値参照わすれたw わりーわりー



284 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 17:49:18 ID:/W9iMVJD.net]
警告を消す為だけなら設定を変えるのが良い

285 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 17:50:35 ID:/W9iMVJD.net]
>>276


286 名前:何の解決にもなってない []
[ここ壊れてます]

287 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/06(Thu) 17:54:27 ID:jSrTrJa0.net]
>>279
良くはないがマクロよりはマシ

288 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 18:09:13 ID:3IyMYliq.net]
>>274
その形が一番、速度的には良い。
forの第二式は毎回評価されるが、v.size()の部分をコンパイラが自動的に最適化するのは非常に難しい場合があるから。

289 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 18:11:29 ID:3IyMYliq.net]
v.size()の値が、ループ内で変化しない「ループ定数」であると判断するのは
コンパイラにとってはものすごく難しい場合がある。
ループ定数であると判断された場合にのみ、>>274のような最適化が行われる可能性が出てくるが、判定できなければループするたびに毎回評価されてしまうのでループの実行速度が遅くなってしまう。

290 名前:デフォルトの名無しさん [2020/02/06(Thu) 18:30:55 ID:F7wYIGq0.net]
マクロってそんなに危険なんですか。

291 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 18:33:27 ID:3IyMYliq.net]
>>283
本人だけが開発していて、記憶力が優れていて絶対に使い方を間違いなければ特に問題ないと思うが、使い方を間違うと危険なことがある。
エラーも出ずに変な動作をしてしまうことがある。
でもそれさえ気を付けていれば特に問題ないとも言える。

292 名前:デフォルトの名無しさん [2020/02/06(Thu) 18:37:31 ID:3IyMYliq.net]
>>269
マクロで書く場合、
#define LEN(_s_) ((int)((_s_).size()))
と書いたほうが良い。
特に、s や _s_ を()で囲むのは必須。
sを_s_と書くのは、ミスタイプがあった場合の備え。
例えば、マクロの仮引数にsと書いているのに、マクロの定義部分をtと
書き間違えていて、かつ、マクロを使う場所に t という変数がたまたま使われて
いたとすれば、エラーにならないのに間違った動作をしてしまう。
_s_と書いていれば、_s_という変数は絶対に使われないのでこの心配がない。
そのため、マクロの引数は伝統的に、_s_などのように書くことが推奨されている。

293 名前:デフォルトの名無しさん [2020/02/06(Thu) 18:50:57 ID:v+RXRHu+.net]
バッドノウハウ紹介乙

>>285
>>276



294 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 19:30:05 ID:/W9iMVJD.net]
>>280
適してるかどうかはともかく
>>269は解決にはなってる
>>276は解決になってない

295 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 19:38:40 ID:zCd4f5nI.net]
皆さんありがとうごさいます。
結構難しいですね。

>>274
> for(unsigned int i=0, len=v.size(); i<len; i++)
これは
for(int i=0, len=(int)v.size(); i<len; i++)
としても性能上そう変わらないですよね?
ループ変数はintであってほしいと思うので、これが自分には向いているように思いました。

296 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 19:42:58 ID:bk3hpXlE.net]
>>275に一票

297 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 20:10:32 ID:9e+8kNR/.net]
キャスト一回って機械語4つくらいじゃあないの?
そこまでシビアってのは競技プログラミングか脳手術ロボットでも作ってんの?

298 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 20:24:03 ID:/W9iMVJD.net]
4個もいらん

299 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 20:29:38 ID:/W9iMVJD.net]
糞コンパイラまで考えてパフォーマンスを考えると>>288だけど
そもそもコンテナ経由でアクセスする時点でそんな事は誤差

そのループに非常に時間がかかるなら
ループ全体で最適化しないと

300 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 20:40:31 ID:3IyMYliq.net]
>>290
同じBIT数やBIT数が少なくなる場合の整数型から整数型へのcastは、マシン語では0命令(命令が出力されない)。
高級言語では違う型でもマシン語レベルでは変わらないため。
BIT数が多くなる場合には、x86の場合は、movzx や movsx が使われる。

301 名前:デフォルトの名無しさん [2020/02/06(Thu) 20:41:12 ID:3IyMYliq.net]
>>292
実際には、最適化が上手く行かないことも多いので差が出てくることは多い。

302 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 20:42:39 ID:3IyMYliq.net]
>>293
つまり、符号無しや符号付の区別はマシン語ではないので C/C++言語で
castしても高級言語レベルでの意味が変わるだけでマシン語レベルでは
何の命令も増えることはない。

303 名前:デフォルトの名無しさん mailto:sage [2020/02/06(木) 20:49:08.28 ID:VEO7DUBt.net]
素直にrange-based-for
これが出てきたことの影響のでかさがわかってないやつ多すぎ

禿4にはfor_eachを使う前にもっと適した関数を探せとあるが
本当にそうか自分の頭で考えろ



304 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 20:56:38 ID:/W9iMVJD.net]
コストを気にしてる人に対してトンチンカン

305 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 21:03:18 ID:/W9iMVJD.net]
普通のコンパイラなら
コンパイル単位内の関数は一緒に最適化するので
.size() の中で値を返してるだけなら
ループの外に追い出してくれる
ターゲットがPCなら気にするな

それよりv[i]の方が重い

306 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 21:03:40 ID:VEO7DUBt.net]
何もわかってねえやつ

307 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 21:17:40 ID:X3a4Tx/S.net]
未だindexループよりrange-basedのほうが早い処理系がない件

>>298
v[i]が重いってどんなstlコンテナだよ

308 名前:◆QZaw55cn4c mailto:sage [2020/02/06(Thu) 22:12:04 ID:6P0xXhLK.net]
>>267
>警告を一つ残らず潰したいタチだから
ここまでは同感です

>毎回こういうのはintにキャストしてるんだが、
私なら int i を unsigned int i にしますが

309 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 22:16:59 ID:cE8ku0Th.net]
templete<typename T>auto LEN(const T& v)->signed T{return (signed T)v;}

310 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 22:22:15 ID:j/UITOXa.net]
とりあえず大きい方に合わせとけば間違いないんだからsize_tでいいじゃん
そのvの要素が将来に渡って21億個を超えない保証がどこにある?

311 名前:デフォルトの名無しさん mailto:sage [2020/02/06(木) 22:45:07.03 ID:/W9iMVJD.net]
>>300
整数のキャストに比べればはるかに重い
そのレベルを気にするなら生ポ

312 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 22:53:37 ID:sigCaOr9.net]
x86なら32bit命令使った方がバイナリ小さい

313 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 22:57:14 ID:sigCaOr9.net]
>>304
vectorだと生ポと変わらんでしょ
もちろん最適化前提で



314 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 23:03:20 ID:YUB/hFRs.net]
>>300
range-basedはiterator
c++のiteratorはindexが速くなる連続アドレスのコンテナならpointerと同じコンパイル結果になる

indexアクセスがpointerより遅くないなら、それはコンパイラの最適化のお陰

315 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 23:13:46 ID:/W9iMVJD.net]
>>306
生ポと変わらなきゃ良いんだけど
変わるんだよ
VisualStudioやチープなコンパイラだと

いずれにしろここから先は
具体的な環境とループ回数やループの中身全体で考えないと意味がない
なんせ1クロックレベルのことを気にしてるようなので

実はメモリアクセスが支配的で
他の最適化は全く意味がないとか

316 名前:デフォルトの名無しさん mailto:sage [2020/02/06(木) 23:20:09.64 ID:/W9iMVJD.net]
SIMD命令 / DSP命令 / スレッド分け / GPU
他のループと合わせる / ループを分ける
ループアンロール
依存性の削減 / 式変形
アルゴリズムの改善
キャッシュ化 / テーブル化

いろんな最適化がある

317 名前:デフォルトの名無しさん mailto:sage [2020/02/06(木) 23:45:25.65 ID:f00f0WlE.net]
vectorの[]は定数時間

318 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/07(金) 01:10:19 ID:BIRgOLIs.net]
ところで元々の質問の >>267 は整数の型が合わないのどのくらい気にする?
っていうのを「一般論として」聞いてるので、これに対しての選択肢を派閥系統樹形式にしてみた

├→ きちんと合わせる派
│  ├→ その環境で合ってれば良いよ派 (移植性は気にしない派)
│  ├→ コンパイラの警告は潰す派
│  │  ├→ 理解しなくてもキャストで合わせるので十分派
│  │  └→ 警告される箇所は仕様の詳細を調べる派
│  └→ size_t とか size_type とか使え派 (言語仕様原理主義派)
├→ 問題がなければ気にしない派
│  ├→ 問題に気づかない派 (鈍感派)
│  ├→ 実行コストに敏感派
│  │  ├→ 最適化はあてにする派 (モダン開発環境派)
│  │  └→ 最適化はあてになんないよ派
│  │     ├→ 低レイヤ派
│  │     ├→ 老害派
│  │     ├→ 諦め派
│  │     └→ ベータ開発環境追いかけ派
│  └→ 状況と程度による派 (柔軟派)
└→ えっ、それって駄目だったん? 派
    ├→ 初心者派
    └→ 無知派

319 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 02:51:26 ID:dGY ]
[ここ壊れてます]

320 名前:48don.net mailto: >>278
業務外だと、とは書いてあるけど一応突っ込んでおくと
もしそれがコンパイラの警告レベルを下げるとか小さい型へのキャストの警告を無くすとかなら
それはバッドノウハウだよ、真似しないように
[]
[ここ壊れてます]

321 名前:デフォルトの名無しさん [2020/02/07(金) 03:23:36 ID:yxrGSGnH.net]
じゃあ俺、えっ、それって駄目だったん? 派でお願いします。

322 名前:デフォルトの名無しさん [2020/02/07(金) 03:50:27 ID:yxrGSGnH.net]
テストの品質がすべてを決めるような気がしてきた。

323 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 03:57:04 ID:plErZoHk.net]
>>311
わし、こうみえて「警告される箇所は仕様の詳細を調べる派」や
その上で、問題なければ「状況と程度による派 (柔軟派)」に再度ブランチする派



324 名前:デフォルトの名無しさん [2020/02/07(金) 04:00:36 ID:yxrGSGnH.net]
Boostは警告を無視する派、GoogleはMicrosoftの問題なので修正する予定はない派。
ってことは、警告だしっぱなしで構わないって事では?

325 名前:デフォルトの名無しさん [2020/02/07(金) 04:01:58 ID:yxrGSGnH.net]
目grepが難しいので、警告は消すしかないんだけど。

326 名前:デフォルトの名無しさん [2020/02/07(金) 04:04:17.66 ID:yxrGSGnH.net]
変数の大きさが変わると同じ値のビット表現が変わるのはしんどいので、符号が一番右端にあったほうが良かったんじゃないの。
右端ならビット表現が変わらない。

327 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 05:13:16 ID:zrCiCWWN.net]
型違い面倒だからautoにしても警告出るから何でやおもたらi=0でintだったでござる派

328 名前:デフォルトの名無しさん [2020/02/07(金) 06:00:43 ID:yxrGSGnH.net]
HTMLにしろコンパイラにしろ、Microsoft案のほうが合理的と思うけどな。
規格は政治だよね。

329 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 06:42:07 ID:52vnIbYM.net]
>>302
signed Tはできねえぞ
std::make_signed_t<T>にしないと

330 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 06:57:58 ID:52vnIbYM.net]
> コンパイラの警告は潰す派

キャストつーか、#pragmaを使ったりもするね
もち、規格票で自分が悪いのかコンパイラのお節介かはっきりさせてからだけど

331 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 07:21:23 ID:9DO99WJ1.net]
基本的にはsize_tとかsize_typeとか使え派
面倒でもちゃんとやった方が後のテストや検証は楽なんだよ
まあ無理だったり異様に面倒だったりする場合も現実的にはあるからそこは仕方ないけど

332 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 07:52:22 ID:+bDqT2Wz.net]
i は int にしたいって言ってるんだから

ここの型をsize()に合わせたら
キャストが他に移るだけ

333 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 08:31:14.28 ID:z6HtA7Ca.net]
>>288
いえいえ



334 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 10:49:20 ID:/rNOv2pQ.net]
>>298
vがグローバルなオブジェクトである場合や、ヒープから確保されたオブジェクトの参照型である場合、コンパイラには v.size() がループ定数であるかどうかを判定するのは難しいことが多い。
このスレでもグローバルに確保された構造体型のメンバを参照する場合、最適化され無い事が指摘されていたが、それと同じことが原因。
C/C++ではポインタや参照があるのでグローバル変数やグローバルなオブジェクトのメンバ変数が変化しないことをコンパイラが見極めるのが難しい。

335 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 10:52:27 ID:VWyX2qgb.net]
for(auto i=v.size()+1; 0<len; --i)

for(auto i : my_range(v.size())

336 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 11:01:57 ID:52vnIbYM.net]
reverse_iterator first(v.end()), last(v.begin());
for_each(first, last, [](auto& x) { cout << x; });

337 名前:デフォルトの名無しさん [2020/02/07(金) 11:41:09.54 ID:jtk/IwGo.net]
64bit/32bitまたぎできるソース汎用性を考えれば、負の数が必要ないなら size_tを使うのが最善でしょ。

338 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 12:00:59.89 ID:VWyX2qgb.net]
size_tはunsignedなのがうざい
c言語初心者が決めただろこれ

339 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 12:07:12.14 ID:VWyX2qgb.net]
あ、上にかいたやつ+1は間違いや

340 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 12:12:42.12 ID:52vnIbYM.net]
ポインタ

341 名前:+ size_t == ポインタ
ポインタ - ポインタ == ptrdiff_t
おかしいね
[]
[ここ壊れてます]

342 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 12:33:14.78 ID:8FC0VQS8.net]
>>326
仮に毎回アクセスしたとしてもv[i]の方が重い
毎回アドレスを計算して毎回メモリアクセスするわけで

343 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 12:48:40.15 ID:Nrn3Ov0h.net]
indexにintはlp64環境だと怖すぎる



344 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 12:51:13 ID:cytAyAiU.net]
そんなバカでかいインデックス作る方が怖い

345 名前:デフォルトの名無しさん [2020/02/07(金) 13:01:32 ID:jtk/IwGo.net]
ファイルポインタは4GB越えが当たり前だし。

346 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 13:18:28 ID:8FC0VQS8.net]
ばかでかいループをたくさん作るなら
性能を心配した方が良い

中身にもよるが、ほぼメモリアクセス時間になりかねない
帯域の無駄遣い
ループをまとめるとか細切れにするとか
キャッシュを有効に使う処理にしないと

キャストのコストとか完全に誤差

347 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 13:30:18 ID:QoBXk/kf.net]
メモリポインタも4GB超えは当たり前だしな

348 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 13:33:10 ID:52vnIbYM.net]
8086時代の苦しみを知っている人なら
リニアでないポインタやインデックスが
どんなにウザいものかよく知っている

64bit空間なら64bitを使っとけって悪いこと言わないから

349 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 13:45:59 ID:8FC0VQS8.net]
ループの中身も知らないで良く言うね
int変換必須なら問題点の場所を移動させただけ

350 名前:デフォルトの名無しさん [2020/02/07(金) 13:58:09.08 ID:jtk/IwGo.net]
今日日4GB越えとかWindowsNT4.0サービスパックですか、と。

351 名前:デフォルトの名無しさん [2020/02/07(金) 14:12:43.62 ID:PWhN+bN7.net]
納品したときに
コンパイルで警告出るんですが消してって言われて
それ無視して良い警告ですよって言っても
理解してもらえなかった派

352 名前:デフォルトの名無しさん [2020/02/07(金) 14:19:34.17 ID:PWhN+bN7.net]
あと警告が出ないからと言って
正しく動くと保証されている訳でもなんでもないのに

353 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 14:32:07.46 ID:VWyX2qgb.net]
>>342
それはお前が悪い
そんなんで納品するな



354 名前:デフォルトの名無しさん [2020/02/07(金) 14:34:22.92 ID:jtk/IwGo.net]
客先と同じビルド環境で警告対応しないのは落ち度だね。次の仕事なくなるでしょ。

355 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 14:40:57.67 ID:/rNOv2pQ.net]
>>333
BYTE v[数値];
のような生配列の場合、ループの中のv[i]は、最適化が効いてものすごく効率の良いコードになることが多い。
この場合、vがグローバルに確保されたオブジェクトや参照型であったとしても最適化には余り悪影響はない。
vがstd::vector 型の場合で、かつ、vがグローバル・オブジェクトや、参照型の場合は、コンパイラはv[i]を上手く最適化できないかもしれない。

356 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 14:42:08.26 ID:/rNOv2pQ.net]
>>346
すまん。
後半部分は勘違いかもしれない。

357 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 14:47:50.81 ID:5UxOF8qK.net]
>>346
VCはvectorでも生ポインタに近い最適化はしてくれてるみたいだぞ

358 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 15:03:24 ID:jtk/IwGo.net]
客や同僚から使えないプログラマ認定されていることに気づけず独りよがりな考えに凝り固まる人いるよね・・・
かわいそうではあるけど、かかわりたくないタイプの人。

359 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/07(金) 15:15:12 ID:BIRgOLIs.net]
標準ライブラリのコンテナのイテレータを sizeof で見ればわかるが、ほとんどの場合で void* と同じ大きさ。
要するにポインタ一個分の情報しかないし、実際ポインタが入ってるし、ポインタの操作になってる。
しいて言えば操作がメンバ関数経由になる分のコストはあるといえばあるけど、
それくらいのインライン展開はするのが普通でしょ。
vector の場合だと領域が連続する保証があるのでインライン展開だけでイテレータはポインタと同じになる。

VC のコンテナだとデバッグモードではイテレータが少し大きい (のと範囲チェックとかする) ってなことらしいんだが、
処理系をインストールしてないから試してない。

360 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 15:20:21 ID:E/TdO4KU.net]
>>349


361 名前:まえがきちんとした仕様を提案できないで投げっぱにしてるからそんなことになってんじゃないの? []
[ここ壊れてます]

362 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 17:16:18 ID:52vnIbYM.net]
>>340
64bit空間で64bit以外のインデックスを使うべきループの中身とやらを書かないあんたが悪い
書けないんじゃないのか?

363 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 17:31:01 ID:Nrn3Ov0h.net]
intだとたったの2G要素でオーバーフローして無限ループになるのが怖い



364 名前:デフォルトの名無しさん [2020/02/07(金) 17:31:33 ID:yxrGSGnH.net]
イテレータよりポインタのほうが速いよ。
ホントだよ。
いまベンチとってるから。
偶然だけど。

365 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 17:34:39.39 ID:jtk/IwGo.net]
>>351
「無視して良い警告」とか勝手に判断する困ったPGにきちんと仕様を提案しても無駄でしょ。解雇するわ。

366 名前:デフォルトの名無しさん [2020/02/07(金) 17:37:50.00 ID:PWhN+bN7.net]
unsigned だと
for(unsigned i = s.size(); --i >= 0; ){...}
みたいなので警告出るんだっけ

367 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 17:41:09.31 ID:Nrn3Ov0h.net]
警告で指摘された問題点に対処もせずに、キャストやらで無理やり消す位なら、出たまま放置の方が100倍マシ

368 名前:デフォルトの名無しさん [2020/02/07(金) 17:43:22.94 ID:yxrGSGnH.net]
ヒープ作るとき、マイナスの値は空きノードのリンクリストに使ったりするので、その手の比較は多発する。

369 名前:はちみつ餃子 mailto:sage [2020/02/07(金) 17:43:55.24 ID:BIRgOLIs.net]
うーん、近頃はちょっとした作法レベルのところまで警告として口出しすることがあるからなぁ。
完全に規格に沿って書いてるわ! ってときにはイラッとすることもある。
個別に警告オプションを設定するのも面倒くせぇし、直してしまう方が手っ取り早かったりもするんだけど、
何がなんでも警告をゼロにしろって言われたら警告レベルを低くする対処をしちゃうかも。

370 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 17:52:14.97 ID:VWyX2qgb.net]
仕事ではやってんなら手を抜くなぼけ
pragmaとかでなんとでもなるだろ

371 名前:デフォルトの名無しさん [2020/02/07(金) 17:55:05.15 ID:yxrGSGnH.net]
タモリさんは遊びで手を抜くなって言ってた。

372 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 17:57:41.44 ID:jtk/IwGo.net]
従来cppcheckなどの静的解析ツールが出していた警告をコンパイラも出すようになってくれたのは良い動き。
親切なコンパイラに感謝して警告箇所の修正をやればいい。
修正に工数がかかることが懸念されるなら、依頼主にその旨を伝えればいい。

373 名前:デフォルトの名無しさん mailto:age [2020/02/07(金) 18:05:13.97 ID:kNxPhPNR.net]
>>360
すごい偉そうにしてるけど大丈夫?>>327
;0<len; って···



374 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 18:14:59.44 ID:CaNLgYal.net]
雑魚ほどイキがるのはプログラマも同じ

375 名前:デフォルトの名無しさん [2020/02/07(金) 18:23:59.39 ID:yxrGSGnH.net]
カバレッジ測定のツールって安いの無いのかな。

376 名前:はちみつ餃子 mailto:sage [2020/02/07(金) 18:36:35.61 ID:BIRgOLIs.net]
>>360
俺はプログラミングについては趣味者だから実務のことは知らんのだわ。
すまんな。

しかしな、必要以上の品質にするくらいなら手抜きで安くしろって言う客の方が多いと思うぞ。

必要より下になったらあかんのでそこを制御していい感じの
手抜き具合にするのが難しいわけだが、そこを上手くやるのが
手抜きしないことよりもプロに必要な資質じゃね?

手抜きしないよりも適切に手を抜く、どうやって手抜きするか知っていることが大事だ。
仕事は経済的に割に合う形でしか継続できないんだからさ。

そりゃあいつも十全な仕事が出来る時間的・経済的余裕があるならうれしいが、
現実はそうではないだろ。

377 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 18:40:56.99 ID:jtk/IwGo.net]
>>366
何言ってんだ?
手抜きしたいからこそ、コンパイラの警告に素直に従うんだぞ。

378 名前:はちみつ餃子 mailto:sage [2020/02/07(金) 18:45:33.43 ID:BIRgOLIs.net]
>>367
それもそうだな。

379 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 18:51:12.38 ID:ZYtSuiu/.net]
DirectX関連使ってるとenumよりenum classを優先しますという警告出るんだけど、ライブラリ変えるわけにもいかなく、どう対応するのが正解なんだろ?

380 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 18:58:20.00 ID:HVBpNa40.net]
そもそも警告って規格で定められている訳でもなく、コンパイラが独自の基準で勝手に出してくる物だからね

mutableは悪だってconst付いてない変数全てに警告出すコンパイラとか出てきたらどうするんだろう

381 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 19:03:54.90 ID:jtk/IwGo.net]
>>370
議論のための議論とか、言いがかりのような仮定の話に、いちいち付き合わないことが重要。

382 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 19:04:25.00 ID:/AlUflk/.net]
>>365
とりあえずgprofでいいんじゃね?

383 名前:デフォルトの名無しさん [2020/02/07(金) 19:08:56.34 ID:yxrGSGnH.net]
>>372
見てみます。



384 名前:はちみつ餃子 mailto:sage [2020/02/07(金) 19:25:21.94 ID:BIRgOLIs.net]
>>371
変な作法が追加されることなんて良くあるんだぞ。
今じゃ gcc や clang で -Wall オプションを付けたら
a || b && c
みたいな式にすら警告が出る。
優先順位を間違えやすいとこだから括弧で明示した方が良いんだと!
演算子の優先順位くらい把握しとるわ!

こんなの警告されるようになると想像したことあったか?
他の演算子でも同様の警告を出すようになることくらいはあるかもしれんぞ?
確かに >>370 は極端な例ではあるが、ようわからんところでしょうもない警告が出るようになる
かもしれんという懸念は無い話ではないぞ。

385 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 19:30:53.52 ID:9DO99WJ1.net]
いやそれはカッコ付けろよ

386 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 19:33:08.02 ID:jtk/IwGo.net]
>>374
趣味でしかやってない人の意見なんて無視しろ、というが私の回答です。

387 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 19:39:25.14 ID:1PiYJQ+8.net]
>>374
それは括弧つけろよ

388 名前:はちみつ餃子 mailto:sage [2020/02/07(金) 19:46:55.57 ID:BIRgOLIs.net]
>>375-377
そっかー (´・ω・`)

389 名前:デフォルトの名無しさん [2020/02/07(金) 19:55:08.75 ID:yxrGSGnH.net]
はちみつ先生は何を作ってるんですか?

390 名前:はちみつ餃子 mailto:sage [2020/02/07(金) 20:28:02.80 ID:BIRgOLIs.net]
>>379
ゲームのチートツールとか。
汎用的な便利なツールは色々とあるけど、個別のソフトをいじるには行き届かないこともあるので。
念のため言っとくけど買い切りの RPG かフリーゲームだけ。 ネットゲームはやってないよ。
ちなみにそのツールは公開してない。

その他に作った有用そうなものは公開してるんで、身バレするから言えない。

391 名前:デフォルトの名無しさん [2020/02/07(金) 20:52:16.35 ID:yxrGSGnH.net]
>>380
そうなんですか。
ずいぶん詳しいのに仕事じゃないというから不思議に思ってました。

392 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 20:56:00.11 ID:jtk/IwGo.net]
つまり、はちみつ某は、なんの思い入れもない他人のソースを読まされる身になった経験が少ないわけか。

393 名前:デフォルトの名無しさん [2020/02/07(金) 21:02:52.46 ID:yxrGSGnH.net]
アルゴリズム考えるときは、図を必ず書くと思うんだけど、皆さんは何を使ってますか?
いまは紙と鉛筆使ってるんだけど、探すの大変だから、ソフトに変えたい。



394 名前:はちみつ餃子 mailto:sage [2020/02/07(金) 21:05:36.03 ID:BIRgOLIs.net]
>>382
せやな。
そんなわけで、他人のバイナリを見る機会はあるけどソースはそれほどでもって感じかも。
結果的に読まなきゃならないことはあるけど、所詮は趣味だから嫌になったらいつでも止められるし、急がなくてもいいし。
プレッシャーに晒されながらクソみたいなソースを読むってことはない。

395 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 21:05:49.82 ID:E/TdO4KU.net]
たまに書く方がいい
字を忘れる

396 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 21:09:26 ID:y0pPi+zA.net]
C++なんざ仕事で嫌々書かされるだけの言語だと思ったけど
趣味で使っちゃう子もおるんやな

397 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/07(金) 21:12:24 ID:BIRgOLIs.net]
>>383
曖昧なところから思考を整理するなら紙と鉛筆でいいと思うけど、
それなりに書式の整ったようにするなら PlantUML とか。
GUI で自由にってことなら Dyna

398 名前:mic Draw くらいが手頃かもしれない。 []
[ここ壊れてます]

399 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 21:15:03 ID:jtk/IwGo.net]
完全な趣味目的でC++を触る変態はそうそういないと思う。

400 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 21:16:30 ID:52vnIbYM.net]
>>386
禿1読んで信者になった変態もおるんやで

401 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/07(金) 21:16:36 ID:BIRgOLIs.net]
>>386
ゲームのチートとかするために
既存のプロセスに割り込んだりする処理を書こうと思うと C か C++ くらいしかまともな選択肢なくね?
C で足りるなら C で済ませることもあるけど、もうちょっと高級なことがしたくなったら C++
ってのは妥当な選択肢というか、唯一解でしょ。

まあ近頃は Rust にも興味があるけど……。

402 名前:デフォルトの名無しさん [2020/02/07(金) 21:37:46 ID:yxrGSGnH.net]
>>387
見てみます。

403 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 22:05:07.56 ID:8FC0VQS8.net]
>>375
>>377
男ならカッコつけろ



404 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 22:14:56.42 ID:8FC0VQS8.net]
カッコつけろって人
付ける付けないの基準はコンパイラの警告?

完全に優先順位を覚えてる人から見ると
カッコが多いと見にくいんだよ

a == 0 || b != 0
a * b + 1
*a[i]
*a++

こんなのにカッコつけてたら
えっ?何か意味があるの?って考えてしまう

405 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 22:26:24.78 ID:52vnIbYM.net]
> えっ?何か意味があるの?

いや、「あーまた面倒くさいやつ来やがった」だよ

406 名前:デフォルトの名無しさん [2020/02/07(金) 22:52:28.44 ID:GxNDg+Fe.net]
実務経験1年で月収80万稼げるエンジニアになった理由
https://www.youtube.com/watch?v=DrbbyGsHQic
意識が低いエンジニアこそフリーランスになれ
https://www.youtube.com/watch?v=nSEaAJlgjbQ
フリーランスエンジニアの週3労働ってどんな感じ?
https://www.youtube.com/watch?v=8yjoDCdbzMc
ぼくがスキルのない社畜ならこうやって脱する
https://www.youtube.com/watch?v=aae8xxbUlMM
初めて人を雇ったらもう二度とサラリーマンをやりたくないと思った話
https://www.youtube.com/watch?v=U0OCGRVLFsM
プログラミングは文系でも余裕で出来ます!理由を現役プログラマーが解説
https://www.youtube.com/watch?v=iBOeiSKBIW8
貧乏人こそ社会不適合者
https://www.youtube.com/watch?v=O3BT72BIBJI
元ド貧乏が教える】貧乏を抜け出すための2つの考え方
https://www.youtube.com/watch?v=IRrCgTy3ckc
より良いオファー貰ってるのに転職しないとか何考えてるの?
https://www.youtube.com/watch?v=i0J6uRhlj7o

407 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 22:55:11.74 ID:NUR9HIfz.net]
優先順位を完全に把握しているなら機能的には意味のない括弧だと理解しているんだろうが
そのうえで疑問に思った「意味」って、どんなものを想定しているんだろう。
「優先順位を完全に把握していない人が間違えないように」くらいの意味しか思いつかないが。

408 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 22:59:52.10 ID:8FC0VQS8.net]
(a + b + c) + (d + e)

同じ型の整数5個を足すのにこんなカッコが付いてたらどう思う?

409 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 23:17:13.31 ID:NUR9HIfz.net]
>>393と言ってる趣旨が違ってないか?
実際に>>397みたいなコードを見たことがあるの?

410 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 23:24:04.71 ID:8FC0VQS8.net]
同じ印象だって話

ちなみに、
わざわざ>>397のようなカッコを付ける時はある

411 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 23:24:42.60 ID:jtk/IwGo.net]
協業できない人があれこれC++について論じるのは害でしかない。

412 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 23:31:57.60 ID:Uosz/SQM.net]
まずプログラム言語っての読み書きする人間のためにあるって大前提忘れてるか自覚してないやつ多いな

413 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 23:34:58 ID:NUR9HIfz.net]
>>399
マイナスが混ざっているならわからんでもないが、>>393で言っている優先順位の話とは関係ないように思うが?



414 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 23:36:27 ID:Fqx20dQ+.net]
>>397のようなコードを見てどう思う?

415 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 23:39:04 ID:jtk/IwGo.net]
見やすいかどうかは

416 名前:主観なので、他人や未来の自分が読んで誤解しないようにすることが肝でしょ。
まさか、「数値リテラルの桁区切り文字」にまでかみついたりしないよね?
https://cpprefjp.github.io/lang/cpp14/digit_separators.html
[]
[ここ壊れてます]

417 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 23:41:49 ID:yMJLmx4v.net]
主観で見やすい表記にする
その為にコンパイラの警告を無視したり切ったりする

何も問題無い

418 名前: mailto:sage [2020/02/08(土) 00:06:08.38 ID:Wxs8WSK9.net]
>>374
> >>371
> 変な作法が追加されることなんて良くあるんだぞ。
> 今じゃ gcc や clang で -Wall オプションを付けたら
> a || b && c
> みたいな式にすら警告が出る。
> 優先順位を間違えやすいとこだから括弧で明示した方が良いんだと!
> 演算子の優先順位くらい把握しとるわ!

把握してても間違えやすいからだと思うね
実際にはa,b,cには比較演算子を使った式が入ることが多いだろう
そうするとけっこうな長さになったりする
で全体の構造が見えにくくなる

そりゃ書いてる真っ最中は問題ないさ
しかし後から読んだときにすぐ理解できなかったり、手を加えるときに間違えたりする
warningを出すべきかは議論の余地があると思うけど、
出すべきと考える理由はわかる

419 名前:デフォルトの名無しさん [2020/02/08(土) 00:38:17.76 ID:RKzyJDHj.net]
それはエディタの機能でかっこを表示したら良いのでは。

420 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 00:57:11 ID:GuOhFnKw.net]
主観は重要だろう。
重要でないなら全部アセンブラで書けや。
客観的には最も性能の出る言語だぞ。

421 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 01:23:28 ID:Mdfh1mSi.net]
&,|とか&&,||は*,+の関係と同じだから括弧つける方が冗長で分かりづらくなると思うんだが

422 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 01:29:21 ID:zzucbZgG.net]
一度書いた四則演算の数式を書き換えることはほとんどないけど、bool論理演算は頻繁に書き換えるでしょ。

423 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 01:30:14 ID:zzucbZgG.net]
素人多いね、このスレ。



424 名前:デフォルトの名無しさん [2020/02/08(土) 01:45:08 ID:RKzyJDHj.net]
>>411
プロの意見だとどうなりますか?

425 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 01:52:50 ID:JKzazDKJ.net]
数式を遅延評価するオブジェクトを作れば
演算子のオーバーロードで演算子の優先順位を変えられるも同然

426 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 01:53:57 ID:JKzazDKJ.net]
テクニックの限りを尽くしてbetter C++を実現したら良い

427 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 01:54:26 ID:zzucbZgG.net]
プロなら抽象的な質問には回答しないでしょ。時間泥棒にあう。
「もっと具体的に書いてくれ」と逆質問する義理がないならなおのこと。

428 名前:デフォルトの名無しさん [2020/02/08(土) 02:00:57 ID:RKzyJDHj.net]
自分の職業の板には一切いかないから、ここも職業プログラマはいないと思う。
ここに書き込む意味が無いと思うんだよな。

429 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 02:02:06 ID:uvgcwZ2m.net]
>>395
グロ

430 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 02:06:09 ID:Mdfh1mSi.net]
職業プログラマって?
仕事でソフト作るし、客先に納入したりもするけどプログラマではないな

431 名前:デフォルトの名無しさん [2020/02/08(土) 02:08:10.84 ID:RKzyJDHj.net]
たとえば、外科医が匿名の掲示板で効果的な治療法について話し合ったりしないでしょ。
治療法について話し合ってる人は患者だ。
だから、ここにもプログラマはいないはず。

432 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 02:28:45.19 ID:zzucbZgG.net]
プロの対義語はアマ。素人の対義語は玄人。
今時点のこのスレの回答者が素人同然の低いレベルであることは、否定できない。
例えば一週間後は違うかもしれない。もっともまともな回答者がこのスレに常駐するようになるかもしれない。

433 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 06:55:22.73 ID:ARbKbNEu.net]
>>374
-Wallとは別に「お節介は一切禁止」というオプション欲しいね



434 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 07:15:13.17 ID:N5LmiSOJ.net]
特定の警告だけ無効に出来るのが普通だよ

435 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 07:33:56.27 ID:gtTyaGQ0.net]
警告は全ておせっかい

436 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 07:53:55.28 ID:+X9VZvVK.net]
>>374はわかるけど
>>393, >>397で警告出すコンパイラとか見たこと無い

437 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 08:04:33 ID:gtTyaGQ0.net]
私も見たことは無い
でも他の演算子でも同じこと

1u << n+1

こんなのは良く使う
いちいちカッコを付けた方が分かりにくい

438 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 08:11:34 ID:gtTyaGQ0.net]
カッコを付けろって結局警告が出るから付けろってことで
見やすさとか無視した意見が多い

if ((a==(b + 1))||(a==(b + 2)))

こんな感じに書くヤツがいるんだよ実際

439 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 08:14:44 ID:ARbKbNEu.net]
警告の出方がコンパイラによって違うわけで
特定のコンパイラの警告に対応するということなら
#pragma使うのと同じだね

440 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 08:26:00 ID:GuOhFnKw.net]
>>426
それはつけた方がいいだろ。
見づらいのはスペースの使い方に問題がある。

441 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 08:42:00 ID:gtTyaGQ0.net]
えっ?
まじで言ってる?

if (a == b+1 || a == b+2)

これだと一瞬で理読める
俺が特殊?

442 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 09:05:35 ID:LleYumKd.net]
>>428
演算子の優先順位くらい勉強しておけよ
手間かけさせんな

443 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 09:08:26 ID:LleYumKd.net]
>>408
やはりアホだったかコイツw



444 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 09:10:24 ID:ktYbgjbO.net]
>>366
手抜きがどうこうと最もらしいこと言ってるけど
>>359で言ってるのは「警告に対処するのが面倒くさい」ってことだろ?
仕事で手を抜くべき場所とそうでない場所、みたいな次元の話じゃない

あと警告レベルは最大にしたりすると標準ライブラリにすら警告出るけど、標準より下げるのは良くない
そういうこと平気でやってると必ず後で本格的に面倒くさい原因不明のバグが頻発する

445 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 09:29:30 ID:JKzazDKJ.net]
256倍バグを出しても256倍早く潰したら
問題無くね?

446 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 09:30:03 ID:GuOhFnKw.net]
if( a == (b+1) || a == (b+2) )
これくらい書いてもバチ当たらんだろ。
しょうもないことでドヤってる馬鹿が開発では一番有害。

447 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 09:32:02.56 ID:pUDxcHmc.net]
>>433
256倍もバグ出すような奴と仕事したくない

448 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 09:39:01 ID:JKzazDKJ.net]
>>435
先方も256倍遅い奴と仕事したくないと思うてはるで

449 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 10:08:44 ID:Di3wk8ih.net]
>>433
全部潰せるならね

450 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 10:24:14 ID:YOfaZC8k.net]
じゃあ次は

bool b;
// 略
if (b == true)

の話でもする?w
俺はこれが一番のキチガイ記法だと思ってる

451 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 10:29:50 ID:yr4lhGWD.net]
勢いあまってこれも否定しちゃう

BOOL b;

if (b == TRUE)

452 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 10:33:51 ID:JKzazDKJ.net]
>>439
b==-1が成立することが有るのはウィンドーズのバグ

453 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 10:39:25 ID:yaVA2/v3.net]
if (a = b+1 || a == b+2)
こう書いたとき気づきづらい
手間をかけるのはそれ自体だけでなくいろいろ見る機会になる



454 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 11:00:58 ID:Di3wk8ih.net]
>>438
if(a != true){
return true;
} else {
return false;
}
みたいなコード見たときは流石に絶句したわw

455 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 11:05:13 ID:Di3wk8ih.net]
>>441
それはまた別な話
ところで>>374は
if(a = b){
みたいなコードに対する警告も不要と言うんだろうか?

456 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 11:09:08 ID:LleYumKd.net]
>>441
学習が足りてないだけ
括弧なんて要らん
理解できるレベルまで進化しろ原始人

457 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 11:17:32 ID:yr4lhGWD.net]
>>440
で、 if (b) と書いちゃっても自分のバグじゃなくてWindowsのバグと主張する

458 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 11:39:54.89 ID:pjdiRHlo.net]
>>445
C/C++ では、b が「非0」、つまり「0 以外」だとすべて真(true) と考えるのが伝統。

なお、余計に混乱を招くだけかもしれないが、
数学的には、b == true とは、単なる数として完全一致であることを調べる演算子ではなく、集合的に、b ∈ {非0} であるかどうかを調べる演算子だとみなすことも出来る。
ところが、C/C++ では、== 演算子は単なる数としての一致を調べる演算子で、
かつ、TRUE は通常 1 にマクロ定義されているので、
b == true が、b が完全に 1 に一致しているかどうかを調べる演算子になっている。

なので、if (b) と書く方が正しく、if ( b == TRUE ) と書くのは間違い。

459 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 11:53:39.76 ID:yr4lhGWD.net]
>C/C++ では、b が「非0」、つまり「0 以外」だとすべて真(true) と考えるのが伝統。

名前が紛らわしいがBOOLは真偽二値じゃないんだからそれは関係ない。
TRUEかどうか判定する必要があるなら if (b) は明らかに間違い。

460 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 12:11:53 ID:JKzazDKJ.net]
回避して使うかどうかとは無関係にバグはバグじゃわ;

461 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 12:27:48 ID:yr4lhGWD.net]
>>439はジョークのつもりだったが、実際に勢い余った人が2人も現れるとはw

462 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 12:47:51 ID:YOfaZC8k.net]
>>442
なにその想像を超えたキチガイ

>>449
アンタの親切心が何人かの明日を救ったねw

463 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 12:53:53 ID:JKzazDKJ.net]
プログラミングはアートやからな
狂気もまた創造の源泉、



464 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 12:56:37 ID:zzucbZgG.net]
>>442,450
対話デバッグでaに応じて実行をブレークしたかった人が残したデバッグの痕跡だろうね。
ソースを他人に公開する際にはブレークポイントの情報はなくなるから、他人には意味不明だけど。

465 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 12:58:48 ID:zzucbZgG.net]
>>451
狂気じゃなくて修正の積み重ね。少しづつ修正していると大ポカに気づけない。
だからこそ親切なコンパイラの警告に従う謙虚さが大切になる。

466 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 13:32:28.54 ID:gtTyaGQ0.net]
>>452
そっち?

a != true
じゃなくて?

467 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 14:33:50 ID:pjdiRHlo.net]
BOOL b に対して、正しくはこう :
if ( b )     // 良い
if ( b != 0 )   // 良い
if ( b == TRUE ) // 駄目

468 名前:デフォルトの名無しさん [2020/02/08(土) 14:48:48 ID:v1IBJgnW.net]
>>383
graphviz / python

469 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 14:51:43 ID:P2cF6ghb.net]
graphvizは主要なLinuxの標準リポジトリに入ってるから助かる

470 名前:デフォルトの名無しさん [2020/02/08(土) 14:52:17 ID:v1IBJgnW.net]
>>403
浮動小数点数なら桁落ちとか気にしてんのかなーとか勘繰る

471 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 15:10:32 ID:pjdiRHlo.net]
>>403
整数の場合だと、括弧を付けてある部分に何らかのまとまった意味があるのかも知れない。

数学や物理学では、計算を減らすために式変形していくが、最終的な式は元々の意味が分からなくなってしまうことがある。

その場合には括弧で囲ったくらいで意味が分かり易くなることは少ない。

しかし、そのケースの場合は、括弧で括ると何か意味が分かり易くなると考えた間ロウ製がある。

472 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 15:11:02 ID:pjdiRHlo.net]
>>459
間ロウ製 ---> 可能性

473 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 15:12:02 ID:JKzazDKJ.net]
>>455
>if ( b == TRUE ) // 駄目
-1をTRUE扱いしたくないのであればこれが唯一正しい



474 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 15:45:10 ID:yr4lhGWD.net]
MSDNの書き間違いかもしれないが、Win32 APIの一部にも「成功時はTRUEを返す」という
仕様の関数があるんだよな。

475 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 15:54:04 ID:pjdiRHlo.net]
>>461
そもそも、-1 は TRUE 扱いすると言うのが C/C++ の伝統や文化。
-1 と TRUE を分けて扱うのは、特殊な独自仕様。

>>462
Win32 API の一部どころか、ハンドル値を返す以外のほとんど全ての関数が、
成功すれば TRUE を返す。

476 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 16:07:20 ID:yr4lhGWD.net]
おいおい、#define TRUE 1のTRUEと真(true)の区別がぐちゃぐちゃだぞ。

BOOLを返すWin32 APIの多くは「成功時はFALSE(0)以外の値を返す」という仕様になっている。

477 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 16:16:01 ID:24Q9Tmjg.net]
宗派論争だな

478 名前:デフォルトの名無しさん [2020/02/08(土) 16:19:44 ID:RKzyJDHj.net]
C++にはtrueがあるので積極的に使っていこうと思います。

479 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 16:36:41.39 ID:pjdiRHlo.net]
>>464
なるほど確かに Win32 の BOOL LineTo(HDC hdc, int nXEnd, int nYEnd)の 戻り値は、

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.

のように、成功時には 1 や TRUE ではなく、「非0」を返すと書いてある。

480 名前:デフォルトの名無しさん [2020/02/08(土) 16:45:19 ID:RKzyJDHj.net]
キャッシュかキャッシュでないかで速度が変わる。
これは驚き。

481 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 16:50:34 ID:LleYumKd.net]
バカ==TRUE

482 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 17:21:59 ID:+a4Pmd4C.net]
○ if(b) if(!b)
○ if(b == FALSE) if(b != FALSE)
× if(b == TRUE) if(b != TRUE)

WinAPI使いには常識だと思ってたんだが

483 名前:デフォルトの名無しさん [2020/02/08(土) 17:32:20 ID:RKzyJDHj.net]
そういうのをみんなで共有しましょうって事で、たらこさんが2chを作ったんですよ。



484 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 17:40:43.90 ID:yr4lhGWD.net]
>>470
常識というか思い込み。
大半のFALSE/FALSE以外を返す関数なら上で良いが、>>462のようにTRUEを返すなら当然
TRUEと比較しなきゃ正しくない。

485 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 17:57:14.84 ID:+a4Pmd4C.net]
本当にそんなのあるの?
戻り値BOOLでFALSE(0)とTRUE(1)以外の値をTRUEと違う意味を表現するために意図的に返す奴があるってこと?
具体例どうぞ

486 名前: mailto:sage [2020/02/08(土) 18:25:19.22 ID:JRIqyhqH.net]
>>446
>C/C++ では、b が「非0」、つまり「0 以外」だとすべて真(true) と考えるのが伝統。
>if ( b == TRUE ) と書くのは間違い。

それは b の型が int だったら、そのとおりだけれども、>>438 をみるかぎり bool b なんでしょう?

はっ!これが老害というやつですか…

487 名前:はちみつ餃子 mailto:sage [2020/02/08(土) 18:26:30.54 ID:2SU4KPt5.net]
>>473
GetMessage という基本的な API からして変則的だから……

488 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 18:31:14 ID:yr4lhGWD.net]
>>462に書いたMSDNのは単にドキュメントの間違いという可能性もあるけどね。
それとは別に、TRUE/FALSe以外に-1を返すAPIがあるのは有名だろう。
いずれにしても仕様をちゃんと確認してそれに従った扱いをすべきで、思い込みは禁物ってこと。

489 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/08(土) 18:33:32 ID:2SU4KPt5.net]
>>475
GetMessage の返却値の場合は一応は TRUE の特殊な場合として -1 の状況もある
って感じだから TRUE とは別の場合を意味する第三の状況というわけではないな。

490 名前:デフォルトの名無しさん [2020/02/08(土) 18:34:27 ID:RKzyJDHj.net]
判定マクロないの。

491 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/08(土) 18:44:49 ID:2SU4KPt5.net]
>>466
bool も式にまざるといつのまにか int に暗黙に型変換されちゃったりして、
やっぱりこう、あまりしっかり区別されてる気がしねぇなあと思うことも多いよ。
Windows API で使われている BOOL よりはかなりマシではあるけど。

492 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 18:46:46 ID:JKzazDKJ.net]
GetMessage()が-1を返したときはエラーなんじゃわ;

493 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 18:51:51 ID:+a4Pmd4C.net]
「WM_QUITでない」という条件における真(0以外)の中の特殊な場合(エラー)に-1ってことなのね
理屈はわからんでもないけど変なの
本当はそんなのの戻り値に「BOOL」なんていうtypedefを使うのがそもそもおかしいんだけどWinAPIだから仕方ないな



494 名前:デフォルトの名無しさん [2020/02/08(土) 18:52:06 ID:RKzyJDHj.net]
>>480
行末の;イイね。

495 名前:デフォルトの名無しさん [2020/02/08(土) 18:52:56 ID:RKzyJDHj.net]
30年前のAPIだしね。

496 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/08(土) 18:55:20 ID:2SU4KPt5.net]
今なら適当なフレームワークをかぶせて使うもんだと思う。
素でメッセージの処理とか面倒くさすぎるし。

497 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 19:15:43.34 ID:mZtPBS5R.net]
klocworkがboolメンバ変数にportingがどうのって言ってくるのがうざい

498 名前:デフォルトの名無しさん [2020/02/08(土) 20:18:51.44 ID:RKzyJDHj.net]
>>485
これ何億円するの?

499 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 21:17:13.95 ID:24Q9Tmjg.net]
>>474
やっぱQZってとんでもなくバカだな
>>439からの流れ読めよ。BOOLについて会話されてるぜ

500 名前:デフォルトの名無しさん [2020/02/08(土) 21:25:19.61 ID:RKzyJDHj.net]
正の型の値と負の型の値を比較する場合、ビット幅の大きいほうの型に変換されてから比較される

501 名前:ですかね? []
[ここ壊れてます]

502 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 21:30:32.47 ID:uvgcwZ2m.net]
汎整数拡張でググれ

503 名前:デフォルトの名無しさん [2020/02/08(土) 21:35:32.85 ID:RKzyJDHj.net]
>>489
ググってみたんだけど。
https://kumikomiya.com/implicit-conversion/
これを見ると変換は起きないって事なのかな?



504 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 23:34:23.41 ID:jnRyPLnj.net]
>>472
いや。TRUE は、必ず if 式で真と判定されるので、if (b == TRUE) としなくても
if (b) で絶対十分であることは補償されている。
むしろ、if (b == TRUE) と書くのはバグの原因になるので駄目だと言われている。

505 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 23:51:17.72 ID:jnRyPLnj.net]
なんというか、TRUE は、処理系ごとに変化する値ではなく、C/C++ においては、標準的には必ず 1 に #define されている。
一応分かり易さのために TRUE と書いているだけで、TRUEが2になったりする事は考える必要はない。

ただし、逆に、高速化のために 1 ではなく、非0の値を返してたまたまの値、
例えば、12 とかを返してくる関数が有りえる。
その場合、うっかり間違って if ( b == TRUE ) などと書いてしまっていたら
大変なことになるので、意味的に TRUE を返す場合には、
if ( b ) または、if ( b != 0 ) と書く方が安全だと考えられている。

506 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 23:53:58.53 ID:jnRyPLnj.net]
非常に古い時代に、TRUE を -1 と定義していた処理系もあったかもしれないが、
現在の C/C++ では、1 に定義するのが基本とされている。
b == TRUE という判定の仕方は、C/C++ の言語仕様から考えれば推奨されない。

507 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/09(日) 00:57:27 ID:OoesT11A.net]
>>492-493
言語仕様にある true を避けているのだから、
その環境においては標準と異なる事情があるのだと察するべきじゃないの。
まあそういうことがあったらもっと別の名前を付けるべきだとは思うけど。

C/C++ はその性質上、様々なシステムの仲立ちをする機会があるし、
いろんな事情に左右される。
TRUE を 1 と定義する機会が多いのは確かだろうし、
そのときの習慣が確立されてもいるのもわかってるけど、
それが当たり前かっつーとそうとも言えんのじゃないかな。

508 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 01:17:16 ID:J5M0tDgl.net]
趣味人だとかいってるがハチミツ餃子はたまに良い事いうから困る

509 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 01:23:08 ID:e66sowWB.net]
>>494
TRUE が 1 以外に定義されていても、TRUE の値は、if 文では真と解釈されることだけは保障されているので、if (b) は問題ない。
逆に BOOL b の場合、b が非0であるが、TRUE のマクロ値とは異なった値になっている場合がないとは保障はされない。
なので、if ( b == TRUE ) だと、TRUE ではないが b に真とみなせる値が入っている場合にすり抜けてしまう恐れがあり、重大バグの原因となる。

510 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 01:23:18 ID:bHnzUNQO.net]
>>494
避けるもクソもそもそも昔なかったし

511 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 01:33:30.02 ID:Jw8Rx7z0.net]
あったぞ
MSが実装サボっただけで

512 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 01:58:53.21 ID:bHnzUNQO.net]
当時のc言語には仕様に無くない?

513 名前:はちみつ餃子 mailto:sage [2020/02/09(日) 02:19:40.02 ID:OoesT11A.net]
>>495
ハチミツじゃなくてはちみつな。

>>496
それが真偽値だというのが思い込みで、
実際には様々な可能性が有り得るってことだよ。

普通はこうだからこうみたいな話じゃなくて、
少なくとも言語仕様に無いのはわかってるんだから、
その環境でどうなってるかくらい確認したれやという話。

>>497
私は >>493 からあくまで現代の話だと読み取ったのでそのつもりで返答してるけど、
C/C++ のコードは長期的に使われやすいので現代という範囲の認識に齟齬はあるかもしれん。



514 名前:デフォルトの名無しさん [2020/02/09(日) 02:27:09 ID:cYNa4VVg.net]
過去と未来の狭間にあるってことかな。

515 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 04:25:17 ID:ids8kf+0.net]
WindowsAPIはC++限定じゃなくCを主軸に捉えてるだろ
クラスとか一切無いしマクロだらけだし
そもそもboolが無かったってのはそういうことやろ

516 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 07:14:29 ID:6++kPC7v.net]
>>462
> MSDNの書き間違いかもしれないが、Win32 APIの一部にも「成功時はTRUEを返す」という
> 仕様の関数があるんだよな。
具体的にどれ?

517 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 07:15:18 ID:6++kPC7v.net]
>>502
Cと言うよりPascalだし

518 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 07:19:31.89 ID:PT76WH2y.net]
>>434
自己紹介乙

519 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 07:24:44.99 ID:PT76WH2y.net]
>>493
TRUEが-1というと昔のBASICにそういうのあったね
だがその時代すでにCも存在していた

520 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 08:43:40 ID:J3Qn0niW.net]
>>496
何回ループしてるんだよ。
真(truthy)であることが要求されているなら if (b) だし、TRUEであることが要求されるなら
if (b == TRUE) だ。それを取り違えることがバグだ。

521 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 08:54:48 ID:aEgJYC9i.net]
>>503
これとか、
https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/nf-dbghelp-makesuredirectorypathexists

522 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 08:59:21 ID:aEgJYC9i.net]
まあ失敗時はFALSE、とも書いてあるから、こう書くのが正解!
bRet32 = MakeSureDirectoryPathExists("C:\\tmp");
if (bRet == TRUE) {
 // 成功すた
 ...
} else if (bRet == FALSE) {{
 // 失敗すた
 ...
} else {
 assert(0);
}

523 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:03:53 ID:aEgJYC9i.net]
あと>>461は、>>455の三択で選ぶならif (b == TRUE)だが
正しくは↓こう書くべき
bRet = GetMessage(...);
if (b == -1) {
 // エラー1が発生すた、
 ....
} else if (bRet == FALSE) {
 // エラー2が発生すた、
 ....
} else if (bRet = TRUE) {
 // 成功すた、
 ...
} else {
 assert(0);
}

つまり出題者>>455の知識と想像力の欠如が諸悪の根源



524 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:06:48 ID:aEgJYC9i.net]
訂正orz
 誤: bRet
 正: bRet32

>>509訂正、
 誤: {{
 正: {

>>510訂正
 誤: bRet = TRUE
 正: bRet32 == TRUE

525 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:28:45 ID:PT76WH2y.net]
C89にboolがないことに拒否反応を起こす頭の固い奴に迎合して作られたboolでないBOOL

526 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:35:18 ID:aEgJYC9i.net]
先にWindowsがシステムコールとしての素朴な要請からbool型の実装型を定義して、
その後コンパイラメーカーがbool型の実装を別の方式にし出すよりは
よっぽどマシやったろうが!

個人的にはBOOLは好きだがな
TRUE/FALSEを表すのに4バイトも使うところが
いかにもリッチなOSっぽく、使っていてリッチな気分になれる

527 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:41:35 ID:6++kPC7v.net]
>>508
ありがと
全部は見てないけどDbgHelp関連の奴はその書き方してるみたいね
https://docs.microsoft.com/en-us/windows/win32/debug/dbghelp-functions

528 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:47:29.30 ID:Ej5ffr5G.net]
>>510
> } else if (bRet == FALSE) {
>  // エラー2が発生すた、
>  ....
エラーじゃないぞ
人の知識とか想像力とか言う前に自分の知識を見直せよw

529 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:55:00.47 ID:aEgJYC9i.net]
といっても成功していないのだからエラー扱いで差し支えないなのでは…

530 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 10:28:32 ID:Ej5ffr5G.net]
>>516
なんでそんなに自信満々なんだよw
マジでドキュメント見てこい
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getmessage

531 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 10:45:20 ID:Jw8Rx7z0.net]
>>510
GetMessageのマニュアルをちゃんと読めクソ雑魚
エラーの時は-1、WM_QUITの時はFALSE(0)を返すが、それ以外の時は「nonzeroを返す」としか言ってない
nonzeroというのはたくさんの値の集合であって、その判定をある特定の値と==で行うことはTRUEが1だろうと他の値だろうと完全な間違いだ
つまりお前のその糞プログラムは完全にバグっているし、お前がバカにしてる>>455らが言った通りの間違いをそのま

532 名前:まやらかしてる []
[ここ壊れてます]

533 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 10:54:04 ID:Jw8Rx7z0.net]
クソ雑魚>>510はマニュアルを読まない可能性があるので、マニュアルの使用例貼っておきますね
GetMessageがFALSE(0)返したときの何がエラーだって?笑わせんなカス
TRUE以外ならassertで落としていいなんてどこに書いてある?勝手な妄想すんなゴミ

BOOL bRet;

while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
{
 if (bRet == -1)
 {
  // handle the error and possibly exit
 }
 else
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
}



534 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 11:39:41 ID:aEgJYC9i.net]
>>519
>TRUE以外ならassertで落としていいなんてどこに書いてある?
それはこちらが聞きたい;
何を見てそう思ったのか?

535 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 11:53:18.89 ID:PT76WH2y.net]
>>519
変数いらねーから
for(;;)
switch(GetMessage(&msg, hWnd, 0, 0))
{
default:
TranslateMessage(&msg);
DispatchMessage(&msg);
break;

case 0:
return int(msg.wParam);

case -1:
throw std::system_error(std::error_code(int(GetLastError()), std::system_category()), "GetMessage");
}

536 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 12:02:53.96 ID:Cr/e9GtE.net]
while(GetMessage( &msg, hWnd, 0, 0 ) >0)
{
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}

537 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 12:05:04.77 ID:aEgJYC9i.net]
とオモタがわかった
GetMessage()は WM_QUIT以外を受け取ったとき非0を返す、としか書かれていないから
bRet32 == TRUEでは正しい判定にならないのねん

使ったのがスゲー昔なので忘れていたが、そのときは多分>>519式に書いたから安心してホスイ

538 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 12:06:02.94 ID:aEgJYC9i.net]
>>522
気持ちはワカル

539 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 15:07:49.90 ID:Z95s67CZ.net]
しょうもない事で攻撃的になるやつなんなの
いつも吹いてしまうw

540 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 15:13:04.53 ID:G+Zw2pJ3.net]
(笑)

541 名前:はちみつ餃子 mailto:sage [2020/02/09(日) 15:27:19.45 ID:OoesT11A.net]
>>506
BASIC というか、古の言語にはビット演算と論理演算の区別がないものが結構あった。
全てのビットが立った状態 (-1) を真ということにしておけば
ビット演算用の AND, OR, NOT がそのまま論理演算のそれとして使える。

昔はこれが気の利いた方法だったんだろう。

542 名前:デフォルトの名無しさん [2020/02/09(日) 16:19:35.32 ID:wTv3WydA.net]
#define FALSE 0 ← 正しい
#define TRUE 1 ← 間違い くず! 0点!! 出入り禁止!!!
#define TRUE (!0) ← 正しい
if(b) ← 正しい
if(b != FALSE) ← 正しい
if(b == TRUE) ← 間違い くず! 0点!! 出入り禁止!!!

543 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 17:16:55 ID:J3Qn0niW.net]
>if(b != FALSE) ← 正しい

これこそ糞コード



544 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 17:20:45 ID:GpaXptWq.net]
意味的にboolなら
if (a)
if (!a)
で判断すべきだと思う

545 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 17:24:22 ID:GpaXptWq.net]
if (a == TRUE)
if (a == TRUE == TRUE)
if (a == TRUE == TRUE == TRUE)

546 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 17:32:39 ID:DvSFPggO.net]
とぅっとぅるぅ〜♪

547 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 17:40:32 ID:J3Qn0niW.net]
もともと>>438と>>439を混同すんなという話なんだが、混同してる奴が次から次へと湧いて出てくるw

548 名前:デフォルトの名無しさん [2020/02/09(日) 17:46:22.21 ID:cYNa4VVg.net]
ちゃうねん。

549 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 17:46:32.42 ID:ugWNThcV.net]
>>528
#define TRUE (!0) ← 正しい

C/C++ では、!0 は、必ず1 になることが仕様化されているので、仕様に準拠している
処理系ではこれは必ず、
#define TRUE 1
と書くのと同じになるので、敢えて (!0) と書く意味は無い。

550 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 17:48:20.60 ID:GpaXptWq.net]
boolだろうがBOOLだろうがYESNOだろうが
意味がboolであればboolと同じ扱い

551 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 17:48:58.88 ID:6++kPC7v.net]
>>529
糞コードだが
> if(b == TRUE) ← 間違い くず! 0点!! 出入り禁止!!!
より1億倍マシ

552 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 17:50:49.32 ID:GpaXptWq.net]
>>528
1がイヤなら0もイヤだろう
#define FALSE (0!=0)
としないと

553 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 17:55:11.50 ID:J3Qn0niW.net]
>>



554 名前:537
マシとか言う以前にそもそも動作が違うんだが。
bがTRUEと一致するかどうか判断するのに他にどういう書き方をするというんだろう?
[]
[ここ壊れてます]

555 名前:デフォルトの名無しさん [2020/02/09(日) 17:59:01.69 ID:cYNa4VVg.net]
>>539
!(b != TRUE)。

556 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 18:02:21.32 ID:GpaXptWq.net]
普通はTRUEかFALSEしか入ってないんだよ

それ以外が入ってる可能性があるなら
普通TRUEがどうかの判断だけじゃダメじゃないか?

557 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 18:05:49.02 ID:GpaXptWq.net]
switch (b){
case FALSE:
...
case TRUE:
...
case ???
...
default
...
}

これで

558 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 18:07:19.16 ID:ugWNThcV.net]
>>539
それは難しくいえば数学の集合論の話になる。
{0} と {非0} の二つの集合が有り、
if の条件式では、前者が偽、後者が真と評価される。
TRUEはどんな処理系であれ、必ず後者の集合の要素(元)になっていることだけは
保障されている。
なので、if ( b != 0 ) や、if (b) は正しいが、
if (b == TRUE) は絶対駄目、ということになる。

559 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 18:09:46.56 ID:GpaXptWq.net]
>>543
BOOLなのに
1と2を区別したい事があるんだってさ

560 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 18:10:45.32 ID:ugWNThcV.net]
if ( b == TRUE ) は、この条件式自体の動作は問題ないが、
b が TRUE ではないが、真である何らかの値を持っていたときに破綻してしまう。
BOOL b と書いた場合、本人が書いたプログラムでは b は、必ず
TRUE か FALSE の二値に限って書くことになろうが、往々にして、
APIなどでは、「真」の意味で「非0」の値を返してくること関数が含まれて
しまっている。
だから、勘違いや混乱が起き易い。
そのため、if ( b == TRUE ) というのは、絶対にやめておいたほうが良い書き方
となる。

561 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 18:16:58.01 ID:GpaXptWq.net]
TRUE/FALSE以外を想定するなら
時と場合による

TRUE/FALSEしか想定しないなら
if (b) / if (!b)
と書くべき

562 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 18:19:53.44 ID:TF4jiljH.net]
昔VB6からWinAPI呼ぶときの注意点として本で読んだ気がする
それboolじゃないよね?とは思った

563 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 18:20:59.38 ID:J3Qn0niW.net]
>>545
じゃあ聞いてみよう。
bがTRUEと一致するかどうか判断する必要がある場合はどう書く?



564 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 18:29:21.05 ID:J3Qn0niW.net]
>>546
排中律が成り立たないからFALSEでないことはTRUEを意味しない。
成功した場合にTRUE、失敗した場合にFALSEを返すという関数がある場合、成功したかどうかは
FALSEでないことではなくTRUEと一致するかどうかで判断しなければならない。

565 名前:デフォルトの名無しさん [2020/02/09(日) 18:29:23.53 ID:cYNa4VVg.net]
>>548
!(b != TRUE)。

566 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 18:30:08.13 ID:aEgJYC9i.net]
>>548
架空のケースについてのお答えは差し控える
つか糞コードかどうかはともかく>>509の方はMSDNの記述に準拠したコードという意味では
非の打ち所が無い(何かあってもMSDNのせいにできる

567 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 18:30:08.50 ID:6++kPC7v.net]
>>539
> bがTRUEと一致するかどうか判断する
それ自体がまずい(ことが多い)と指摘されてることにそろそろ気づこうよ…

568 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 18:36:27.78 ID:J3Qn0niW.net]
>>552
>>514見ているのにいまだにそんなこと言っているのはなんでだろう

569 名前:デフォルトの名無しさん [2020/02/09(日) 18:42:52.19 ID:cYNa4VVg.net]
いやちゃうねん。

570 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 18:59:34 ID:aEgJYC9i.net]
intの取り得る値の集合に対し、TRUEの定義が-93でありかつそれ以外は偽と解釈をせよと仕様に書いてあったら
さすがに(b == TRUE)とか(b != TRUE)書くことを現実の選択肢として考慮せざるおえない
もちろんそんな仕様が糞だが、仕様なのだからしようが無い
数学の本質は自由性にある、

571 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:07:50 ID:mORiFTgk.net]
>>549
>>546
日本語読めますか?

572 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:15:36 ID:PT76WH2y.net]
FALSEは定数
TRUEは範囲で観測によって収束する

適性に乏しいやつには厳しいよな

573 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:16:00 ID:mORiFTgk.net]
boolからBOOLになってintになってた



574 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:16:09 ID:MeV8oXxA.net]
集合B={FALSE=0,

575 名前:TRUE=1} の場合 !FALSE=TRUE だが
B'={FALSE=0,TRUE1=1,TRUE2=2,TRUE3=3} の場合
!FALSE={TRUE1,TRUE2,TRUE3} となる
しかし TRUE={TRUE1,TRUE2,TRUE3} と定義すると
B''={FALSE=0,TRUE} となり、同型B≡B'が示されるため、B'をboolとみなすことは可能である
ただし、比較演算子は集合として同値であるのか、集合に含まれるのかを示さなければならない
b⊂B'(≡B) のとき、 b=FALSE は一意だが、b=TRUE は b=1∩b=2∩b=3 を示す
[]
[ここ壊れてます]

576 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:17:37 ID:mORiFTgk.net]
数学関係ないのに数学ネタでひっぱってるヤツがいるな
IDは違うけど同じ人?

数学関係ないから

577 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:18:03 ID:6++kPC7v.net]
>>553
>>514の話なら>> 509だし、そうでないAPIもたくさんあるから
> それ自体がまずい(ことが多い)と指摘
されてるんだが、まじでわかってないのか?
引っ込みつかなくなってるだけだと思ってたが…

578 名前:デフォルトの名無しさん [2020/02/09(日) 19:18:39 ID:cYNa4VVg.net]
ちゃうねんちゃうねん。

579 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:19:01 ID:MeV8oXxA.net]
訂正
b=1∩b=2∩b=3
→b=1∪b=2∪b=3

580 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:22:41 ID:qoRTNAXH.net]
グローバル領域にインスタンスを作って、初期化はmain()の中でしたいとします。
で、初期化に必要な情報はmain()の中で初めて分かるとします。

こういうときってそのクラスのコンストラクタとしては何もしないものを作っておいて、初期化用の関数を別途用意するというのが普通ですか?
インスタンスの宣言だけしておいてコンストラクタは後で呼ぶなんてできないですよね?

581 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:23:38 ID:mORiFTgk.net]
ポインタにしとけ

582 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:29:17 ID:J3Qn0niW.net]
>>561
逆に不思議だわ。
「成功時に0以外の値を返す」と「成功時にTRUEを返す」は違うということがなんで理解できないのか。

583 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:30:00 ID:aEgJYC9i.net]
std::unique_ptr<T>の出番



584 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:30:50 ID:bHnzUNQO.net]
apiの仕様見て適切に処理で終わる話だろこれ

585 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:37:32 ID:54+KBSAm.net]
optionalの出番だろ

586 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:39:43 ID:OliK3lJl.net]
>>568
同意

587 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:45:02 ID:6++kPC7v.net]
>>566
どこから違うことを理解してないと思った?
思い込み激しすぎw

588 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:45:29 ID:6++kPC7v.net]
>>568に一票

589 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:47:47 ID:mORiFTgk.net]
もともとはboolの話だったのに

590 名前:デフォルトの名無しさん [2020/02/09(日) 19:49:14 ID:VD5bohdG.net]
GetGlyphOutline などで文字画像を取り出そうとすると、フォントが持ってない文字は代わりの文字を出力してくる。
(例えば、昔の毛筆フォントでは「?(はしご高)」などはMSゴシックになる。)
これを抑制したいので、そのフォントがグリフデータを持っているかどうか、調べる方法はありますでしょうか?

591 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:50:25 ID:mORiFTgk.net]
C++の相談?

592 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:52:53 ID:J3Qn0niW.net]
>>571
違いを理解しているなら>>566の後者はまさに>>539だということも理解できそうなもんだが。

593 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:54:35 ID:bHnzUNQO.net]
>>574
ここよりwindows apiのスレのがいいんじゃないかな



594 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 20:00:40 ID:6++kPC7v.net]
>>576
もしかして(ことが多い)っていう意味もわかってないのか?

595 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 20:05:04 ID:54+KBSAm.net]
win32は変な仕様多いからAPIの仕様確認しないと罠にはまる

596 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 20:05:21 ID:J3Qn0niW.net]
多い方に合わせろって話でもないだろう。
>>568の通りそれぞれの仕様に合わせて適切に扱えってこと。

597 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 20:05:58 ID:PT76WH2y.net]
>>579
ほんこれ

598 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 20:07:59 ID:54+KBSAm.net]
GetModuleFileNameとか仕様作った奴のセンスを疑う

599 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 20:20:16 ID:6++kPC7v.net]
>>580
誰も多い方に合わせろなんて言ってないのに…
単にそういうケースが多いって言うだけの話であることも説明しないとわからんのかな?w

600 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 20:30:08 ID:J3Qn0niW.net]
なら問題ないケースもあることを理解してるわけだ。だとすると>>552で指摘してたのはなんだろうと。

601 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 20:34:19 ID:6++kPC7v.net]
>>584
えっ?
まだ(ことが多い)ってわざわざ

602 名前:書いてる意味がわからんのか?
まともな奴と会話してる時ならいちいち書かないんだが、ネット掲示板なのでわけわからん奴に絡まれないようにわざわざ書いたのに想定外の低能さんなの?
[]
[ここ壊れてます]

603 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 20:46:39.77 ID:J3Qn0niW.net]
>>585
つまり>>552は、まずい場合もあるしそうでない場合もあるという意味のない指摘なわけだ。
ようやく>>539に戻れたな。

>>537
マシとか言う以前にそもそも動作が違うんだが。
bがTRUEと一致するかどうか判断するのに他にどういう書き方をするというんだろう?



604 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 20:52:41.00 ID:mORiFTgk.net]
bがTRUEと一致する条件の話はしてなくて
boolに対するif文をどう書くかの話だろ

APIの使い方なら他スレでやって

605 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 20:55:58.33 ID:PT76WH2y.net]
余所でやれって、APIと言語仕様のズレの話だろ
正しい理解はどのようなものかという興味は
スレ違いじゃねえぞ

606 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 21:03:28.51 ID:mORiFTgk.net]
APIの正しい理解ならAPIのドキュメントを見れば良いのでは?

もともとのboolの話とは全く関係ないですね

607 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 21:05:18.68 ID:6++kPC7v.net]
>>586
> つまり>>552は、まずい場合もあるしそうでない場合もあるという意味のない指摘なわけだ。
お前には意味ないのかもな…
必死になりすぎw

608 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 21:05:59.85 ID:J3Qn0niW.net]
>>533に書いたが、boolじゃなくてBOOLの話をしているのになぜかboolと混同する人が

609 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 21:06:45.54 ID:mORiFTgk.net]
boolの話題でbool以外を語るのはこんな感じ

内部的に固定小数点なfloatライブラリもあるぞ
内部的にvectorなmapライブラリもあるぞ

610 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 21:07:53.15 ID:mORiFTgk.net]
BOOLも同じ
意味的なBOOLが前提
それ以外は特殊事情

611 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 21:21:02.28 ID:J3Qn0niW.net]
>>590
意味のあるなしは主観だからいいとして、結局これ理解できたかな?

>>537
マシとか言う以前にそもそも動作が違うんだが。
bがTRUEと一致するかどうか判断するのに他にどういう書き方をするというんだろう?

612 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 21:23:11.71 ID:6++kPC7v.net]
>>594
>>552
低能は一度指摘されたことを何度も繰り返すw

613 名前: mailto:sage [2020/02/09(日) 21:32:30.02 ID:Z95s67CZ.net]
boolができるまでは

if (!!b)

こういうイディオムもありましてね



614 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 21:42:44.86 ID:J3Qn0niW.net]
>>576を理解しているなら

>bがTRUEと一致するかどうか判断するのに他にどういう書き方をするというんだろう?

このような判断がが必要な場合があることも理解しているはずだろうが、
結局この質問には答えられない(答えたくない)ようだな。

615 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 22:05:36.89 ID:6++kPC7v.net]
まだやってるのかよw
無能無限ループ乙

616 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 22:07:19.29 ID:EoI3r47q.net]
あいかわらずしょーもない話題だと盛り上がるのな。

617 名前: mailto:sage [2020/02/09(日) 22:16:06.44 ID:Z95s67CZ.net]
goto、マクロ、BOOL
全部C言語の範疇なんだよなw
おじさんがんばりすぎ

618 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 22:18:57.48 ID:aEgJYC9i.net]
つか真理値の型であるbool型および
真理値の型としての名前を与えられたBOOL型の議論が
Win32 APIの仕様という現実に汚染されてぐちゃらけてますな
TRUEに幅が有る、なんていうおかしいことを言い出す香具師まで出る始末、!

619 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 22:23:19.21 ID:J3Qn0niW.net]
本当は昨日で終わっていたはずの話題なんだがな。

620 名前:◆QZaw55cn4c mailto:sage [2020/02/09(日) 22:31:58 ID:mQrdek/f.net]
>>487
え?話の発端は >>438 でしょう?
>>439 は >>438 の bool を BOOL にすげ替えたミスリードでしょう?

>>491
もう一度いいますが、
>if (b == TRUE) と書くのはバグの原因になる
のは b の型が int であれば、確かにそういえますが、b の型が bool ならばなんの問題もなにのでは?
https://ideone.com/aL3agg

前提条件を全然考慮せず、条件反射的に
>if (b == TRUE) と書くのはバグの原因になる
と判断するのは老害的発想と私は断定しますね

621 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 22:33:23 ID:EiJfhZVq.net]
>>602
お前が言うなよww

622 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 22:33:54 ID:aEgJYC9i.net]
一般論として、APIの呼び出しが成功しました、という情報にはそれ以上幅も糞も無い(成功した要因など知っても無駄
から、成功=TRUE、失敗=FALSEとする割付の下では、TRUEこそ単一値として規定されるべきブツに他ならない
よって、一般論としては b == TRUEは言うほど糞ではないはずであった、

623 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 22:37:13 ID:aEgJYC9i.net]
まあエラー要因を複数種類返したい、ということなら
成功判定は b == SUCCEEDEDでSUCCEEDEDでなかったらエラーコードが入っている、という
INTかDWORD返しがストレートやったがな!(成功時非0を返す、とか言われるよりは



624 名前:デフォルトの名無しさん [2020/02/09(日) 22:42:00 ID:VD5bohdG.net]
if( b == TRUE ) って、結局 if( b ) ってことだろ。

625 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 22:45:14 ID:Z95s67CZ.net]
クソワロタ
口調も激変

626 名前:デフォルトの名無しさん [2020/02/10(月) 00:02:35 ID:SkPzv01G.net]
>>555
ヘッダファイルの中で TRUE の値が -93 に #define で定義されていたとしても、C/C++ の仕様だと、0だけが偽で、0以外は真であることだけはANSI Cで決まっているので、それはない。

627 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 00:06:15 ID:hYCIpnsp.net]
つまり、
#define TRUE (-93)
はANSI Cの規格上非合法だからそれはない

628 名前:デフォルトの名無しさん [2020/02/10(月) 00:07:32 ID:SkPzv01G.net]
>>548
その場合で、かつ、b が TRUE に一致するもの以外を除去したいなら
if ( b == TRUE ) と書く以外には無い。
しかし、Win32 API の仕様でも、そのようなことを判定する必要があることはない
ように通常、作られている。
何人かが指摘しているように、FALSE との判定は良いのだ。
TRUE との判定はまずい。

629 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 00:08:23 ID:hYCIpnsp.net]
gotoといいBOOLといい、闇が深いな
裾野が広がれば、底辺は底なしカヨ、

630 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 00:08:59 ID:hYCIpnsp.net]
>>611
>>601

631 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 00:39:11 ID:NGNAXTbr.net]
【IT】不動の人気を誇る「Python」、評価が二分される「Java」「JavaScript」
https://egg.5ch.net/test/read.cgi/bizplus/1581244420/

>JavaScript、Java、Python、「C++」「C」が特に多くの人に習得されたプログラミング言語だった

632 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 01:06:29 ID:2gVSY1CN.net]
C++11規格でJavaやC#の優位性がかなり失われた気がするわ。

633 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 01:07:48.45 ID:Ro8qON5e.net]
c#ならまだしもjavの優位性って?



634 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 01:35:35.28 ID:SkPzv01G.net]
>>614
というか、JSやJavaは、ちゃんと学んだ人も多いだろうが、
Pythonを実際に使ったことのある人はかなり少数派だと思う。

635 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 01:38:59.61 ID:SkPzv01G.net]
>>617
Javaは、GUIも出来たしブラウザ上でも動いたし、他に代わるものがなかったので
それしか選択肢がなかったために実際に使った人は多かったはず。
JSも、HTMLを使おうとした際にそれしか動的言語は無かったから同様。

一方で、Pythonに関しては、似たようなものは他にたくさんあるし、
自分以外の人に使ってもらうにも実行環境のインストールが必要だし、
Javaと違って互換性にも問題あるので使いにくい。

636 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 01:43:33.69 ID:SkPzv01G.net]
>>618
つまり、Pythonの評価が高いのは、前評判だけで実際に使った人が少ないから。

637 名前:デフォルトの名無しさん [2020/02/10(月) 03:53:35.38 ID:rxX2x5Pb.net]
んなわけない。

638 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 04:03:09.14 ID:2gVSY1CN.net]
Pythonはtypoがつらい。

639 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 08:01:35 ID:staO5LAL.net]
ごちゃごちゃいうよりまずはいっぺんオッPythonで
そこそこの規模のプログラム(最低1000行以上)かいてみりゃわかる
はっきりいってクソだよ
あんなもんで巨大なプログラムはとても書けたもんじゃない

640 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 08:53:11.04 ID:GJT/1Bxa.net]
自分で1000行も書かなくても、どこかの誰かが書いてくれたライブラリを呼び出せば
望んだ仕事をやってくれるって部分がPythonの好まれる理由じゃないのん

641 名前:

C++を使う人は、Pythonの流行を裏から支えてる感じで。
[]
[ここ壊れてます]

642 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 10:10:17.80 ID:hDJC6jsQ.net]
pythonで1000行くらいで根をあげてるようじゃ
どんなコード見ても文句言い出すだろ。。仕事にならんわ。

643 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 10:24:50.55 ID:JgTqubiS.net]
インデントをきっちり合わせないといけないので、Cの適当なインデントにうんざりしてる人にはむしろ合うかもしれない
でも関数やブロックが大きくなると、同一階層を探すのがつらくなるので、適切なブロック、関数分けが必須になる
いずれにしても、神経質な人には合ってるのかもしれない



644 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 10:46:13.48 ID:oMyz9pGE.net]
機械学習ならpythonほぼ必須なんだが
いまだにやったことないとか
ロートルなのを白状してるようなもん

645 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 11:15:12.10 ID:yW0oU9fF.net]
変数がどんな型にも化けられる変態言語

646 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 11:25:16.00 ID:8A84p9rG.net]
pythonがいいとは思わないけど、perlがクソすぎるので相対的にマシだから流行ってる
それ以上の理由はないと思う

647 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 11:37:39.28 ID:oMyz9pGE.net]
perlの代替っていつの時代の話だよ
お前完全に取り残されてるぞ

648 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 11:50:23.10 ID:SkPzv01G.net]
Pythonは、スマホで動かすのは難しいらしい。
少なくともスクリプト言語として動かすのは困難。

デスクトップマシンですら、
・互換性の問題がある。Ver 2系と Ver 3系で大幅に異なると聞いた。
・Windowsですらどの処理系が標準か不明。
・GUIがちゃんとまともに使えるかどうか不明。

649 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 11:55:31.13 ID:SkPzv01G.net]
>>630
Pythonのせいではなく、Perlのようなスクリプト言語がそもそも使えないという
スマホの限界だとは思う。
スマホでも使えることは使えても、IDEのような専用環境だけで使えるだけでは
本来のスクリプト言語としては使い物にならない。
このスマホの時代に Perl, Python, Ruby は合わないかも。

650 名前:デフォルトの名無しさん [2020/02/10(月) 11:58:33.88 ID:SkPzv01G.net]
iOS, Android 共通にスクリプト的なことをやりたいなら、もう、スクリプト言語は諦めて、
C++で書いておいて iOSではSwift とリンクし、Androidでは、JNIを使ってJavaから
呼び出すほうがずっと簡単。
なお、AndroidならシェルスクリプトがPythonなんかより遥かに簡単に使える。

651 名前:はちみつ餃子 mailto:sage [2020/02/10(月) 12:13:49.40 ID:gblDkkh1.net]
>>625
- 括弧などに従って自動でインデントが付く
- 手動 (あるいは半自動) でインデントの位置を合わせる

これの二択だったら前者の方が「きっちり」してると思うわ。
まあインデントの付け方にいくつかの選択肢がある点はやりづらい面も
あるかもしれんが、自由度と統一性は両立できないもんだしな。

Python はいじったことないからよう知らんけど、 (インデントで構造を表す系統の文法である) Haskell を書くのはつらかった。
Haskell ではインデントと改行の替わりに波括弧とセミコロンも使えるけど、Python にそういうのないの?

652 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 12:34:04 ID:oMyz9pGE.net]
pythonをswift, javaなんかと比較してる人は
隔離された世界で誰にも使われないアプリを細々と作ってる感じがするわw
学習系を含むデータ解析のツールとして環境が優れてるからpythonが人気なんだよ
c++でテンプレートいじってるよりビッグデータ解析してビジネス提案できる方がはるかに収入高い

653 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/10(月) 12:51:05 ID:gblDkkh1.net]
おっ、煽り入りました〜〜



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

655 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 13:26:43 ID:NGNAXTbr.net]
ビジネス提案おじさん

656 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 14:18:49.02 ID:SkPzv01G.net]
>>633
ブロック開始終了記号とインデントを両方組み合わせたものが一番分かり易くて間違いにくい。
インデントだけでやると、個人的には見間違いそうで神経をすり減らすので辛い。

657 名前:デフォルトの名無しさん [2020/02/10(月) 17:30:56 ID:rxX2x5Pb.net]
研究者が使うのにPythonは良い選択なんじゃないの。
事務作業にVBAが良い選択なのと同様に。

658 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 17:40:26 ID:pqZ9DEAl.net]
今さらですが、そもそもWin32のFALSEって、0であることは保証されてるんですか?

BOOL b = FALSE;
if (b)
{
  ここに来ないことは保証されてるんですか?
}

659 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 17:42:58 ID:SkPzv01G.net]
>>639
まともな C/C++ では、FALSE はどんな処理系でも 0 であることが保障される。

660 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 17:43:39 ID:SkPzv01G.net]
>>639
当然、そこに来ないことも保障される。

661 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 17:52:19 ID:M5G7J8Pl.net]
>>639
規格書のようなレベルで規定されているかどうかは知らないけど、公式ドキュメントの至るところで
FALSEは0である前提で書かれているものが見つかるから、そこを疑う必要はないと思う。

>>640
FALSEはWindows SDKの定義であってC/C++とは直接関係ないんだが。

662 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/10(月) 18:04:03 ID:gblDkkh1.net]
>>640
現実にはそうだってのならわかるが、質問は保証があるかどうかなんだから、根拠を添えろよ。

少なくとも現状の WinDef.h では FALSE は 0 、 TRUE は 1 と定義されているのはわかったし、
常識的に考えればこれが変更されることはないが、
私はマイクロソフトのドキュメントからこれを裏付けるような文言を見つけられなかった。

BOOL が int であることは発見できた。
https://docs.microsoft.com/en-us/windows/win32/winprog/windows-data-types

should be TRUE or FALSE って書いてあるのにこれに反するような API があるのはアレだよな……。

663 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:06:40 ID:AZ4KAaI2.net]
システムハンガリアンもそうだけど明白な違反が堂々と放置されているからなあ



664 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:08:58 ID:SkPzv01G.net]
>>642 >>643
[根拠]
数学的に以下の根拠となる:

1. FALSE は、if ( FALSE ) とすると、偽として処理されることは絶対に保障される。
2. if (x) で x が偽として評価されるのは、ANSI C も、古い C でも必ず 0 という1つの値のみであり、他の値はすべて真と評価される。

1, 2 を両方成り立たせるためには、FALSE は必ず 0 でなければならないことが
証明される。

665 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:10:00 ID:SkPzv01G.net]
数学が大事です。
今の場合、仕様書に書いてなくても、数学的に考えれば絶対であることが証明できます。

666 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:13:48.89 ID:M5G7J8Pl.net]
昨日の奴かw
BOOLとboolは別物だということが結局最後まで理解できなかったんだな。

667 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:19:36.47 ID:1F9oSbm6.net]
windows apiのスレでやってくれよ

668 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:21:23.11 ID:1D/jLqBa.net]
>>645
頭が悪いとか話が通じないってよく言われない?
言われる度に相手の方が間違ってると思ってるだろうけど、話が通じてないのはお前が自分の間違いを認識できてないからだぞw

669 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:22:28.83 ID:SkPzv01G.net]
このスレには、失礼ですが、はちみつさんも含め、数学に弱い人が多いようです。

670 名前:デフォルトの名無しさん [2020/02/10(月) 18:23:02.20 ID:SkPzv01G.net]
>>649
いや、むしろ逆に現実では天才と呼ばれています。

671 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:25:05.67 ID:SkPzv01G.net]
仕様書にすべては書いてなくても、数学で考えれば絶対であることが証明できる事柄があるのです。
今回のもその一例です。

672 名前:はちみつ餃子 mailto:sage [2020/02/10(月) 18:25:15.66 ID:gblDkkh1.net]
ああ、荒らしに来ただけか。
まぜっかえすにしてももうちょっとマシなこと言えよ。

673 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:27:13.76 ID:rZ6GQco7.net]
東大数学科卒だが
>>650は頭が弱いと思う



674 名前:デフォルトの名無しさん [2020/02/10(月) 18:27:37.23 ID:rxX2x5Pb.net]
マクロはほとんど書く

675 名前:必要なくなったよね。 []
[ここ壊れてます]

676 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:27:43.95 ID:SkPzv01G.net]
失礼ですが、はちみつ氏は、C++の仕様には詳しいですが、それ以外は結構間違っています。

677 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:29:09.02 ID:rZ6GQco7.net]
>>656
ここでの君の書き込みだけで判断すると
君が間違ってる可能性が高い

678 名前:デフォルトの名無しさん [2020/02/10(月) 18:29:40.36 ID:SkPzv01G.net]
>>654
でも現実に私は天才と言われています。

679 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:30:41.13 ID:rZ6GQco7.net]
数学の実績は?

680 名前:デフォルトの名無しさん [2020/02/10(月) 18:31:14 ID:SkPzv01G.net]
>>1
私は、東大数学科の人とは意見が一致することが多いです。
よく考えてみてください。
もし分からないようなら、多分、あたなは東大数学科ではないか、レベルが落ちてしまったと思われます。

681 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:33:21 ID:rZ6GQco7.net]
学科は?

682 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:33:32 ID:M5G7J8Pl.net]
まとめるとこう。

1. BOOL型およびTRUE/FALSEは真偽値として用いるために*Windowsで独自に定義*されたものだが
 厳密には真偽値と振る舞いが異なる
2. 具体的には、FALSEでなれければTRUE、TRUEでなければFALSE、という排中律が成り立たない
3. 排中律が成り立たない以上、FALSEとの比較、TRUEとの比較はそれぞれ意味がある

683 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:34:10 ID:SkPzv01G.net]
ここは、学歴も実績も嘘を付けてしまうので参考になりません。
東大数学科と言うのもたぶんデタラメでしょう。



684 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:34:25 ID:rZ6GQco7.net]
なんでWindows前提?

685 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:37:31 ID:rZ6GQco7.net]
排中律君も数学君と同じ人かと思った
違うのかな?

普通の言葉で書こうよ
書けるでしょ

686 名前:はちみつ餃子 mailto:sage [2020/02/10(月) 19:01:26.22 ID:gblDkkh1.net]
>>664
TRUE を持つ内では皆が共通に論じられるほど広く知られたもののひとつだからでしょ。
反例としてはひとつあれば充分。
ちなみに「TRUE と比較するべきではない」に対する反例ね。

true であれ TRUE であれ、それと == で比較するのが罠になりやすいっつーのは
罠になりやすい部分として有名すぎて逆によく知られている常識だが、
絶対不変の定理みたいに言い始めたやつがいたから変なことになってるんだよ。

現実はそんな綺麗なもんじゃねーよっていうのに Windows はうってつけだろ?

687 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 19:02:19.07 ID:VRCQc/iz.net]
BOOLはWindows APIでしか使わないと思ってるから話が通じないんだな

数学君はなぜ話が通じない?
BOOLがTRUE, FALSE, UNKNOWN, ERROR
からなる集合だったら?

688 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 19:04:47.41 ID:4ZzuDNO4.net]
>>664
>>639からの流れで、あくまでWin32APIの中でのFALSEの話をしているからだろう

689 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 19:06:03.16 ID:VRCQc/iz.net]
BOOLは非常に広い環境で使われていて
その多くはTRUE/FALSEの2値を示す型として使われる

こういう普通の環境では
if (b) / if (!b)
で判断するのが最良

そうではない特殊な環境(Windows APIなど)は
個々のAPI別に語らないと意味が無い

690 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 19:06:46.57 ID:VRCQc/iz.net]
Wimdows APIに限定した話ならここですべきではない
他へ

691 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 19:33:07.36 ID:M5G7J8Pl.net]
つまり、Windowsで>>439のように書いていたのをWindowsのBOOLを知らずに否定しちゃう人、
というネタそのものを体現してくれたわけだな。

692 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 19:35:42.65 ID:Ro8qON5e.net]
BOOLについて議論するならどのBOOLか限定しないと
enum BOOL {TRUE,FALSE};
みたいなのかもしれないし

負論理の入出力ポート読み書きする値だとかで順番も重要だったりして

693 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 19:47:34.98 ID:VRCQc/iz.net]
>>671
何が「つまり」だか

Windows APIが色々と特殊なのは知ってるよ
Windows 2.0から組んでるし

特殊事情はあくまで特殊事情



694 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 19:56:01 ID:M5G7J8Pl.net]
そもそも、特殊じゃない「普通の環境」のBOOLって何ぞ?
typedef bool BOOL; とかw

695 名前:デフォルトの名無しさん [2020/02/10(月) 20:01:48 ID:rxX2x5Pb.net]
https://ideone.com/T9gWWT
こうなるので、負の型にキャストするのが良いんですかね?

696 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 20:25:38.47 ID:L7QZkeGE.net]
なんでBOOLの話をしてんだよジジイども

697 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 20:46:16.46 ID:te1zn0Q+.net]
標準にはboolと_Boolしかないんだからそれ以外はどこぞの馬の骨が好き勝手に決めただけの独自定義
そのライブラリのマニュアル熟読しろでこの話は終わり

698 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 21:07:46.28 ID:oMyz9pGE.net]
>>675
そうなんだけど
C言語スレでやれ
じじくさい話ばっかりでうんざりするわ

699 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 21:11:10.36 ID:dan9Jlhp.net]
ナウでヤングな話題よろ

700 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 21:30:33.43 ID:Ui+QSiGG.net]
じゃあboolに戻すけど
if (b == true)
これ書く異常者は一定数おるわな

701 名前: mailto:sage [2020/02/10(月) 21:33:51.78 ID:3bnN/FFY.net]
>>680
私には正常な書き方に思えますよ
その書き方のどこが異常なのでしょうか?

702 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 21:37:09.03 ID:AZ4KAaI2.net]
if (b) で済むのを
if (b == true) と書くのは
if (b == true == true) と書く異常者と同じ
きりねえって話

703 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 21:38:01.11 ID:AZ4KAaI2.net]
括弧ねえと読めねえ「異常者」出てこいw



704 名前:デフォルトの名無しさん [2020/02/10(月) 21:49:47.77 ID:rxX2x5Pb.net]
>>678
ちゃうねん。

705 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 21:51:16.94 ID:oMyz9pGE.net]
>>683
つまんないことでイキんなカス

706 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 21:51:26.11 ID:M5G7J8Pl.net]
bool b;
if (b == true) // コードスメルではあるがバグではない

BOOL b;
if (b == TRUE) // 正しいか正しくないかは状況による

707 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 21:53:08.25 ID:AZ4KAaI2.net]
>>685
C++スレでC++以外の言語という「つまんないこと」でイキってんのおまえだろ

708 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 21:53:54.97 ID:AZ4KAaI2.net]
おまえみたいの「いちびり」って言うんだけど意味わかる?w

709 名前: mailto:sage [2020/02/10(月) 21:55:45.19 ID:3bnN/FFY.net]
>>682
バグにならなければ問題ないのでは?
>if (b == true == true)
とは私も書きませんが、だからといって異常だとは思わない

というか、あなたの「異常」の定義が異常なのでは?

710 名前: mailto:sage [2020/02/10(月) 21:56:36.80 ID:3bnN/FFY.net]
>>688
いちびり、とは、あなた、関西人ですなぁ

711 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:02:36.14 ID:AZ4KAaI2.net]
>>689
正常と異常の境をおまえさんはどこだと思っている?

712 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:02:53.98 ID:VRCQc/iz.net]
>>674
Windowsしか知らないの?
世界が狭い

非常に多くの環境でBOOLを使う

713 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:03:55.09 ID:AZ4KAaI2.net]
>>690
ああ、おまえほんまは関西人ちゃうなw
俺もほんまの関西人ちゃうけどなw



714 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:04:40.63 ID:AZ4KAaI2.net]
>>692
大文字のBOOLを使う「非常に多くの環境」とは?

715 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:06:02.65 ID:VRCQc/iz.net]
>531や>>682が異常とは思えないって
まじかQZ

716 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:07:56.51 ID:M5G7J8Pl.net]
>>692
その定義を出してみなよ。
標準の仕様じゃないんだからその環境ごとの特殊な定義であることは変わらんだろ。

717 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:14:01.58 ID:VRCQc/iz.net]
本当に知らないんだ
まじか

718 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:22:07.37 ID:4ZzuDNO4.net]
>>697
その返しは口喧嘩に負けた小学生みたいだから、ちゃんと相手の質問に答えなよ

719 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:23:41.11 ID:1F9oSbm6.net]
非常に多いなら具体例2、3あげて終わりでしょ

720 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:24:53.62 ID:M5G7J8Pl.net]
もう自分で何を言っているのかわからなくなっているんだろうな。
BOOLやTRUEの定義が環境によって異なる場合があると認めた時点で

if (b == TRUE)

これが正しいと言えるかどうかはその定義次第だということになるのに。

721 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:29:19.34 ID:TAH0RZ5f.net]
俺の狭い経験だと
BOOLはintで、TRUEは1、FALSEは0
しか見たことないけど、他の定義の環境ってあるの

722 名前:ゥな? []
[ここ壊れてます]

723 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:33:34.58 ID:PZnoEIEf.net]
−1というか全ビットonは何かで見た



724 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 22:50:32.94 ID:Qny4UpdU.net]
windef.hのFALSEが-1とかに変更されたら、既存のソースは崩壊だろうな

725 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 23:14:46.53 ID:zaYnGTVS.net]
!FALSE

726 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 23:38:01.28 ID:yW0oU9fF.net]
typedef unsigned BOOL:1;
ならまだ救いがあった
なんでint型にしてんだろうな

727 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 00:40:44 ID:wwgXq7Q5.net]
>>705
それは BitField みたいだけど、構造体メンバ以外で使えるようになったんだっけ?

728 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 01:18:20 ID:wwgXq7Q5.net]
>>703
FALSEは絶対的に0のまま。

729 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 01:20:55 ID:wwgXq7Q5.net]
もしかしたら、Rubyが、0をtrueと解釈してしまうことから変なことを思ってる
人がいるのかもしれないが、C/C++においては、言語仕様的に条件式で偽と
解釈されるのは、古くから、唯一、整数の 0 しかないなかったので、言語仕様が
修正されない限り TRUE が 0 以外の値にマクロ定義されることは絶対に無い。

730 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 02:07:59 ID:iFdutQCH.net]
あれ?
もしかして私・・また同じ日を繰り返してる・・??

731 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 02:12:10 ID:lTJc7ZeR.net]
まだやってんのかお前ら
ゲハ厨みたいなスレだな

732 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 02:43:47.12 ID:wwgXq7Q5.net]
>>708
スマン:
誤:修正されない限り TRUE が 0 以外の値にマクロ定義されることは絶対に無い。
正:修正されない限り FALSE が 0 以外の値にマクロ定義されることは絶対に無い。

733 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 02:58:41.73 ID:f/mZFEPY.net]
>>681
if(b)で十分なのにif(b==true)と書くのはif((a==b)==true)と書くのと同じで冗長なんだよ
これがすぐに理解できないなら論理を簡潔にする能力が欠如してるのでプログラミングの才能はないね



734 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 03:04:36.42 ID:wwgXq7Q5.net]
>>712
しかも、b は、少なくとも見かけ上は int 型ではなく、BOOL 型だし。
それに他の言語の場合、if の条件式に入れられるのは唯一 bool 型の
場合があり、一番 if の条件式に入れ易い型。

735 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 03:08:16.20 ID:wwgXq7Q5.net]
>>713
他の言語の場合、例えば x, y が整数型の場合、
x == y
とした結果の型が bool 型。
そして、if の条件式に入れられるのは bool 型のみだったりする。
だから、もともと b が bool 型なのに、敢えて b == true と判定して
また bool 型に「直して」しまうのはとても奇妙な感じになる。
その文化との兼ね合いから、C/C++ でも、b が BOOL 型の場合は、
if (b) とするのが美しく見える。

736 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 03:33:01.69 ID:AiNLffgv.net]
MISRA-C でも、if( 変数 )で、変数が実質的にブール型の場合は、これでOK

int a = ( 5 < 10 );
printf( "%d", a ); /* 1 */

if( 5 < 10 ) と、if( a ) は同じ意味。
a は、実質的にブール型

737 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 06:36:51 ID:DrkniQZr.net]
bool型が存在しない時代に何故bool型になるのか

738 名前: mailto:sage [2020/02/11(火) 08:01:59.71 ID:Sh/x76Zj.net]
>>695
異常を「コンパイラがコンパイルできない」と定義していますから

739 名前: mailto:sage [2020/02/11(火) 08:02:50.77 ID:Sh/x76Zj.net]
>>712
コンパイルが通るんだったら異常ではないのでは?

740 名前: mailto:sage [2020/02/11(火) 08:03:52.59 ID:Sh/x76Zj.net]
>>712
>論理を簡潔にする能力が欠如してる
簡潔すぎてわかりにくいのも困りますね、プログラミングはまず他人への分かりやすさを優先するべきでは?

741 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 08:29:09.76 ID:lXsf9fbV.net]
簡潔過ぎて分かりにくいって何?

if (b) で分かりにくいなら
変数名が適切でないとかそもそも分かりにくい作りとか
他に問題があるんじゃないの?

742 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 08:33:12.52 ID:lXsf9fbV.net]
もしかして
if (a ==b)
よりも
if ( (a == b) == true )
の方が見やすいとかいっちゃう?

743 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 08:56:04 ID:tUwi24Vl.net]
そりゃ
if (a == 42)
よりも
if (a == 42 == true)




744 名前:フほうが見やすいし
if (a == 42 == true != false)
のほうがさらに見やすいのが異常者
[]
[ここ壊れてます]

745 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 08:58:48 ID:lXsf9fbV.net]
カッコも付けないと見にくいよな

if (((a == 42) == true) != false)

746 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 09:09:46 ID:Kcy+Q8b9.net]
どれだけ冗長に書けるか選手権?

747 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 09:15:23 ID:oAfdlMqH.net]
QZは変なこだわりに固執するやつだから、一般的な感覚とか常識とかについて議論しようとしてもそもそも議論が噛み合わないし、スレを無駄に汚すだけ

748 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 09:21:24 ID:tUwi24Vl.net]
if (true == true == true == b == true)
if (true == b == true == b == true)
int *p = &*&*(int *)&*&*&*&*&*(int *)&a;

749 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 09:34:27 ID:Gt4Evnq6.net]
ようちえんじがかんじをつかわないでってぐずってるのとおなじだね

750 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 10:19:17.04 ID:G5APdl5q.net]
異常とは、普通じゃないことだよ
少数派のこと
if (b == true == true) は明らかに異常
if (b == true) はたまに見るけど、まぁ異常かな

751 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 10:34:12.60 ID:lXsf9fbV.net]
つまりQZは異常

752 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 10:35:43.55 ID:Kcy+Q8b9.net]
boolやBOOLでない変数abcをif(a==b==c)と書きたい事はある。

753 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 10:56:56.94 ID:0rT9FQIK.net]
QZってコイツ片山だっけ?



754 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 11:01:53.65 ID:u3DUqgh+.net]
if(b==true)
はifのなかには比較入れないとダメだと思っているんじゃね

そう言う言語もあるし

755 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 11:09:22.66 ID:IotAbjtu.net]
「rust が c++ を超えた!! 神!!」みたいな記事をよく見ますけど、今後c++がrustから学んでもっと良くなることって期待して良いですよね?
rustに勉強のコストを割くか迷っています

756 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 11:12:06.04 ID:HeZx7HUk.net]
>>731
片山はQZほど馬鹿ではない
まず国籍が違う

757 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 11:29:50.94 ID:Ci+AyeA2.net]
なぜ

if (a == true)

と書くやつがでてくるのか
それは条件式に食わせるためには比較演算子で値から「真偽値」に変える必要があると
思っていてそれがboolと同値と理解していないからだろ
だからそういうやつは

if (a == 42 == true)

とは書かない
この例はむしろboolを理解してるやつからしか出てこない発想
やつらはいったん「真偽値」になればあとは論理演算子でつなげると理解している
ある意味、条件式を作るときのイディオムに馬鹿正直に従っているわけで別に
異常だと騒ぐほどひどくはない

別の見方をすればboolを特別視しないで書いてるわけで、
冗長にはなるが共通のフォーマットで書ききるってことはほかでもあることだ
そう思えばやっぱりひどくはない
実際おれは特別読みにくいとは感じないし、この無駄は最適化で消える
何かの機会にこれ冗長だよねと教えてやるぐらいで十分

758 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 11:37:00.49 ID:kh2SGwFh.net]
ほんといつまでやってんの

759 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 11:38:29.11 ID:KQZ3+5BK.net]
冗長な書き方をする人の真意なんて測りようもないし理由が一つに決められるわけもないだろう。
想像するだけ無駄。

760 名前:はちみつ餃子 mailto:sage [2020/02/11(火) 12:17:11.73 ID:GpQNLMm4.net]
>>715
そう書くべきだしそれが普通ってことはわかってんだって。
自分で書く分にはそう書くよ。
でも、他者が書いたコードを読むときや利用するときは
> 変数が実質的にブール型の場合は
っていう前提を確信できない場合がある。

整数型で真偽値の代用にすることがある C/C++ では
型で判断できないことがあるから罠だよねって話をしてるんだよ。
真っ当なデザインではない場合があるから思い込まずにちゃんと確認しようねってこと。

761 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 15:09:17.27 ID:lXsf9fbV.net]
>>735
同値
意味

762 名前:オらないのね []
[ここ壊れてます]

763 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 15:15:33.26 ID:Gt4Evnq6.net]
> この例はむしろboolを理解してるやつからしか出てこない発想

そりゃそうだ
ifの制御式は比較でなければならないと言い張るやつへの皮肉なわけで



764 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 15:19:47.85 ID:QCVkc9h/.net]
operator =(BOOL value){
if(value==0){
return FALSE;
else if(value==1||value==2||...){
}

765 名前:デフォルトの名無しさん [2020/02/11(火) 15:21:35.11 ID:IKSpGnXe.net]
>>596
あったあった

今はわざわざそれ使う理由忘れた

766 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 15:25:53 ID:Uk2CrnAG.net]
Cだとそれで必ず0か1になるからTRUEと比較しても大丈夫!っていうクソみたいなバッドノウハウ

767 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 15:28:40 ID:QCVkc9h/.net]
operator ==(BOOL value){
 if(this->value == 0){
  if(this->value == value){
   return TRUE;
  }
 }
 else{
  if(value==1||value==2||...){
   return TRUE;
  }
 }
}

768 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 15:38:44 ID:KQZ3+5BK.net]
>>743
そもそもTRUEと比較する必要はないしWindowsから出てきたイディオムでもないと思うが。
どちらかというとtruthyな値からtrueを得るイディオムとして使われているような。
よく見かけるのはJavaScriptとか。

769 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 15:45:19.74 ID:Gt4Evnq6.net]
リターン式から返却値の型を推定させる場合にはautoが必要だ

770 名前:◆QZaw55cn4c mailto:sage [2020/02/11(火) 17:36:36 ID:Sh/x76Zj.net]
>>725
あなたのいう「一般的」というものが、実はそれほど一般的ではなかった、という可能性はありませんかね?
というか、まずあなたのいう「一般的」をあなたの言葉で定義するべきでしょう

あなたに定義できますか?

771 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 18:04:17 ID:G5APdl5q.net]
単語の意味は辞書引けよ
APIの仕様はヘルプ読め、と同様だな
なんで個人が定義するんだよ

772 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/11(火) 18:24:26 ID:GpQNLMm4.net]
get.secret.jp/pt/file/1581413018.png

773 名前:はちみつ餃子 mailto:sage [2020/02/11(火) 18:40:23.65 ID:GpQNLMm4.net]
true と比較したけりゃすればいいじゃないの。
そのプロジェクト内で一貫したポリシーがあるのならそれでいいよ。



774 名前:デフォルトの名無しさん [2020/02/11(火) 18:49:13.60 ID:TuMeiRsT.net]
ちゃうねん。

775 名前:デフォルトの名無しさん [2020/02/11(火) 18:52:49 ID:TuMeiRsT.net]
ストリーム遅いな。

776 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 20:44:57.22 ID:f/mZFEPY.net]
コード規約「if(bool)はif(bool==true)と書かなければならない」
やだよ、そんな規約ww
規約決めるまでに紛糾してプロジェクト始められねぇよw

777 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 20:57:43.57 ID:Z6POtQL5.net]
どっちでもええやん

778 名前:デフォルトの名無しさん [2020/02/11(火) 22:08:40 ID:Pk2ehCPz.net]
explicit operator boolだとラムダとかの戻り値強制したいときそうなっちゃわない?

value() && true か value() || false
static_cast<bool>(value())は好きじゃない

779 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 22:19:09 ID:Uk2CrnAG.net]
素直に戻り値boolに指定しろよ

780 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 22:21:59 ID:ggTX+OPA.net]
意味的にboolの型であればboolにキャスト
そうじゃないなら意味通りにboolに変換

781 名前:◆QZaw55cn4c mailto:sage [2020/02/11(火) 22:23:23 ID:Sh/x76Zj.net]
>>258
mmap を確かめています、なんだかすごく時間がかかってしまいました…
ideone はファイルを作らせてくれないみたいですね… https://ideone.com/zXFtEY

fd と fd に紐付いた mmap をつくっておいて、
?fd 側にデータを追加すれば mmap でも見えるのですが、
?mmap 側からデータを追加しても fd は増量しないようですね

今は cygwin で見てますが、ちゃんと linux をいれて確かめるつもりです…

782 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 22:24:35 ID:ggTX+OPA.net]
オンメモリで出来ることは素直にオンメモリでやれば

783 名前:デフォルトの名無しさん [2020/02/11(火) 23:36:09 ID:TuMeiRsT.net]
くじで決めてはどうか。



784 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 23:39:16 ID:RnNFx+rl.net]
モンテカルロ法やな

785 名前:デフォルトの名無しさん [2020/02/11(火) 23:56:08 ID:TuMeiRsT.net]
I/Oの遅さの陰に隠れてたけど。
ストリームよりSSDのほうが速いよって時代になって困る。

786 名前:デフォルトの名無しさん [2020/02/12(水) 01:53:51 ID:CB9IiDBv.net]
YouTuberは「最強の職業」である理由。
https://www.youtube.com/watch?v=XjV3Nb0-hgA
【事例付き】YouTuberは最強の副業である件について。
https://www.youtube.com/watch?v=wB8hNuNVoIw&t=267s
【初心者向け】YouTubeの始め方・稼ぎ方を徹底解説!
https://www.youtube.com/watch?v=YEw-a8qlADM
「YouTubeなんていつか稼げなくなる」という主張を論破する。
https://www.youtube.com/watch?v=VatNILApW4U
収益化から丸1年!YouTubeでいくら稼いだか公開。
https://www.youtube.com/watch?v=-zQxuQqZ5eA&t=103s
その動画で月商○○万!? YouTubeで稼ぐ裏技的アプローチ。
https://www.youtube.com/watch?v=7I4APU_6i9o&t=433s
【貧者の工夫で戦え】ガラケーだっていい。YouTube始めるのにパソコンはいらない!
https://www.youtube.com/watch?v=jYdWfjjzD7Y
【第一回】SNS、YouTube、ブログで稼ぐ方法を、丁寧に解説します!
https://www.youtube.com/watch?v=erNiLOncDnY

787 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 06:38:05.77 ID:m8mhjAm7.net]
>>763
グロ

788 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 10:03:09.83 ID:DWihvkH4.net]
https://qph.fs.quoracdn.net/main-qimg-2c09000282ddcbb32359dc242831a052

789 名前:デフォルトの名無しさん [2020/02/12(水) 16:01:35.18 ID:a1w2Xqz0.net]
>>743
ああなるほど
if(TRUE == !!b) のことか

if(!!b) は javascript の方だろ

790 名前:はちみつ餃子 mailto:sage [2020/02/12(水) 16:24:33.81 ID:KQxiYwOn.net]
! は見づらいから私は not と書くことにしてる。

791 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 17:16:20.22 ID:DU9qWhLl.net]
一応、alternative tokensに規定はあるが
使う奴の心は #define BEGIN { なんてやるやつと同質だね

792 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 17:20:59.01 ID:DU9qWhLl.net]
Cにも_Boolがなきゃヤダジタしてたやつとか
マジそういう言語へ行ったきり帰ってくるなって感じ

で結局BOOL < 0みたいなオカシイことが起き出す原因を作りやがる

793 名前:はちみつ餃子 mailto:sage [2020/02/12(水) 17:47:16.08 ID:KQxiYwOn.net]
C と C++ で解釈が違うのに結果として動作は同じみたいなのがたまにあってすげーなって思う。



794 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 18:09:20.78 ID:goJJte/u.net]
たとえば?

795 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/12(水) 19:09:04 ID:KQxiYwOn.net]
>>770-771
if 文の条件式を見てて思い出した。
C だと条件式の評価結果を 0 と比較するというルール
C++ だとブールに変換するというルール。

まあ整数をブールに変換する規則は結局のところ 0 と等しいかどうかなんで
ちょっと回りくどくなってるだけなんだけど、
そういう違いがあっても互換性が維持されるというのがどこかで検証されてるんだろうと思うと、
手間かかってんなぁという感想が浮かんだ。

他にも列挙定数の型が C と C++ では違うとか……。
私が把握してるのはそんくらいだけど、
探せばもっとあるんじゃないかな。

796 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 20:25:01 ID:ytylQgpT.net]
>>766
>if(TRUE == !!b) のことか

さすがにこんな意味のない書き方が人の目につくほど蔓延りはしないだろう。おそらく>>743の妄想。

!!b は、bool型(と、しばしばオーバーロード)を備えた言語で非bool型の値bをbool型に変換するテクニックだろ。

797 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 20:38:11 ID:rfok9Tr/.net]
b!=0 で良い

798 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:12:18 ID: ]
[ここ壊れてます]

799 名前:h1wCYtKx.net mailto: そういうゴミみたいな自己満テクニック()が積もり積もって誰も触れないスパゲティモンスターになっちまうんだよ
b!=0でも(bool)bでもいいからやるべきことを直接表現しろ
[]
[ここ壊れてます]

800 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:26:37 ID:rfok9Tr/.net]
(bool)b
はCへの移植の可能性があるならやっちゃダメ

801 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:31:03 ID:DU9qWhLl.net]
>>776
何で?
ISO/IEC 9899:2011 (E)
7.18 Boolean type and values <stdbool.h>
1 The header <stdbool.h> defines four macros.
2 The macro
bool
expands to _Bool.

802 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:34:37.96 ID:rfok9Tr/.net]
typedef char bool;
の可能性があるから

803 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:35:17.48 ID:ytylQgpT.net]
Cに移植する可能性があるならC++の機能を使っちゃダメなのは当たり前だよなぁ
C++スレで言うことではないと思うが



804 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:36:55.01 ID:rfok9Tr/.net]
>>779
問題点はそこじゃない
移植時にコンパイラが問題点を見つけられないのが問題

805 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:38:26.52 ID:rfok9Tr/.net]
コンパイラが問題点を見つけられない例は他に山ほどあるが
だからといってわざわざ増やさなくても良い

806 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:39:05.32 ID:ytylQgpT.net]
いや、問題があるなら移植する人が見つけろよ

807 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:40:47.83 ID:rfok9Tr/.net]
移植は完璧な人がする
なんて妄想は捨てた方が良い

808 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:42:13.60 ID:rfok9Tr/.net]
Cに移植する可能性が無いならどうでも良い
ちなみにキャストで警告が出る環境もある

809 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:42:36.95 ID:ytylQgpT.net]
だからそれは移植する側の問題だろ。勝手にやれよ

810 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 21:52:54.99 ID:DU9qWhLl.net]
>>778
マクロとtypedefが被った場合どうなるか解ってる?

811 名前:デフォルトの名無しさん mailto:sage [2020/02/12(水) 22:12:26.79 ID:ecElmrkB.net]
もちろん

812 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 00:16:13.58 ID:X++L6urQ.net]
>>733
Rustを少し見てみたけど、書き方が全くC/C++とは違っていて、
全く異なる文化圏の言語になれた人が設計した臭がした。
これがC/C++の代替になるとは考えにくい。
はっきり行って、これを使えといわれると辛い。

813 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 00:26:27.60 ID:YbJF2Pjt.net]
テスト機能が標準で用意されてるのはいい



814 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/13(Thu) 00:45:52 ID:XX4mj9DD.net]
個人的には Rust は好感触。
型システムは ML 系言語で実績があるものを基礎にしてることもあって、C++ のグダグダな歴史を背負ったものよりはまとも。
ML 系はやっぱり高級路線の言語だし、インデントでブロックを表す系統なのがしんどいけど、
Rust は上手く低レイヤ用 (としても使えるよう) に着地させてるし、 C 風の外観を踏襲してもいる。

C++ が Rust から取り入れられるものはそんなに多くないと思う。
C++ は良くも悪くも互換性についてかなり強い要求があるので、
Rust 的な、カッチリと保護された仕組みを後付けするのはどう考えても無理。
C++ が Rust を参考にすることは間違いなくあるとは思うが、
全体の思想がまるで違うので限定的な範囲でしか取り入れられない。

もし取り入れらたらそれは C++ の新機能として新しく学ぶので十分でしょ。

Rust を学ぶのは間違いなく有用ではあるけども、
Rust の知見が C++ に取り入れられる可能性がありそうだからという理由ならそんなに意味ない。

815 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 01:02:46 ID:b1nbpqgi.net]
C++の配列は長さの情報を持ってないってことになってるけど
長さを与えなくてもdelete[]できるんだから、メモリのどこかにその情報はあるよね?
なんでその情報をプログラマが利用できないようになってるの?

816 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 01:06:29 ID:qzSQSiwu.net]
rustがかっちり保護してくれるとか低レイヤー向けとか馬鹿ほど信じてるよね。
ありゃ帯に短し襷に長しの典型言語だわ。

817 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 01:44:34.08 ID:X++L6urQ.net]
>>792
実際、Rustは、Cを簡単にするのではなく、Cを難しくしてしまっていて、Cのポインタが理解できない or 難しく感じる人には、Rustの特徴の核心たる所有権、借用などの部分はちんぷんかんぷんだと思う。

818 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 01:48:50.73 ID:X++L6urQ.net]
>>793
Cの問題点を取り除いたと言うより、ほとんど全てのプログラミング言語が暗黙のうちに用いている代入の概念をなるべく使わないようにして変数束縛などの全く異なる独自概念を用いようとしている。
しかし、これは、手続き型言語と関数言語の違いに匹敵するくらいのプログラミングの概念の変更になってしまうため、手続き型言語の中で改良された次世代言語と言うものではなくなってしまっているとも言える。

819 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 05:24:36 ID:AWnkBPoe.net]
変数束縛って右辺値参照でしょ

820 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 06:24:47.58 ID:fMXzK7Sc.net]
RustはC++なら簡単にできることをものすごく回りくどく書かないとコンパイル通らない感じだからとてもつらい

821 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 09:13:38.23 ID:6FSFTWhE.net]
>>790
RustがC++に取って代わることがあるか、というニュアンスの質問でした
今C++でやってる仕事がRustに置き換わる可能性が高いなら今から勉強しとこうか、と

822 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 12:35:22.33 ID:z5cRWLgY.net]
>>797
断言してもいいが、RustはC++に取って代わることは無い。
なぜなら、普通の手続き型言語での枠組みにすら入ってない書き方を強要されるから。
手短に言えば、単にC/C++と書き方が大幅に違っているだけではなく、書き方が他のどんな減の範疇にも属していない。

823 名前:はちみつ餃子 mailto:sage [2020/02/13(木) 13:30:24.18 ID:XX4mj9DD.net]
>>796
C/C++ でのオブジェクトの寿命の管理の難しさってのは
理屈が理解しづらいというよりはわかってても間違うという難しさなんだよね。
そして間違っていてもコンパイラは黙って通すことも多い。
C/C++ を長く使っていればそれを感じることって結構あるでしょ。
そういう部分のプログラムが正しいことはプログラマが保証しなくてはならんわけだ。
でも Rust では言語処理系の側でやってくれる。
C/C++ で面倒な部分を Rust では自動でやってくれる。
まわりくどいのは確かだけど、それで楽できるのも確かなので、
どっちを取るかって話だな。

オブジェクトをどこで後始末するか。
管理の主導権はどのモジュールに持たせるか。
そういうのって C/C++ でも考えてるよね。
C/C++ ではプログラムに書いてないだけで本来はあるはずのものなんだよ。
(C++ だとスマートポインタの導入で少し楽にはなったけど。)
自分が何を考えていたのか、そして何を考えられていなかったのが
明らかになるのはそれはそれで楽しいと思う。
まあ、それは俺が趣味でやってるからかもしれんな。



824 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 13:34:58.25 ID:3lSBa444.net]
おまえの設計がヘタクソなだけだろ

825 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/13(Thu) 13:45:30 ID:XX4mj9DD.net]
>>800
そうだよ。
そんでもって大抵の人間は設計がヘタクソだし、
ヘタなところが検出されるなら検出されないより良い。

826 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 14:01:13 ID:z5cRWLgY.net]
>>799
変数束縛やら所有権や借用の概念が複雑すぎて、そっちの方が C/C++の
メモリ管理よりミスし易い。

827 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/13(Thu) 14:13:53 ID:XX4mj9DD.net]
>>802
間違いなくミスし易いけどミスした箇所が検出できないということはあまりない。

828 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 14:20:14 ID:3lSBa444.net]
設計がヘタクソなヤツが書いたソースのメンテやらされるのは最悪だけど自分で組み上げるならC++以外有り得ない
各々の力量が顕著に表れやすい最高の言語には違いない
バカも容易に炙り出せるしな

829 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 14:20:33 ID:z5cRWLgY.net]
>>803
仮にあなたはちゃんと理解できても、一般のプログラマは変数束縛やら所有権や借用の概念を理解することが難しすぎるので、C/C++を置き換える言語にはならない。
それらの概念は学習コストが高すぎるどころか、一生理解できないプログラマが多いだろう。

830 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/13(Thu) 15:53:13 ID:XX4mj9DD.net]
>>805
誤解のないように補足しておくけど、俺は Rust が C++ を置き換えるという主張はしてないからね。
C++ の重大な欠点を (実行コストをあまり払わない形で) 改善しているのは確かってだけ。
そんでもってそれが必要な場面は間違いなくあるってことも。

831 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 19:21:34 ID:b1nbpqgi.net]
>>791
わかる人いませんか?

832 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 19:29:34 ID:z5cRWLgY.net]
>>807
new TYPE[] のようにしてヒープから配列として確保されたメモリは確かに
要素数の情報を持っている。
しかし、new TYPEのように配列ではない場合は、高速化のために情報を
持ってない処理系もある。そのために 前者では delete[] を、後者では
deleteを使うことになっており、間違った組み合わせを使った場合には
不具合を生じる。

また、ポインタは、ヒープから確保された配列ばかりをポイントしているとは
限らず、例えばスタック上のローカルオート変数や、グローバル変数をポイント
していることもあり、その場合には、要素数の情報は全く持っていない。

さらに、Cの場合、関数の引数に TYPE buf[] のように配列を書いても、
TYPE *buf に自動修正される仕様となっている。
そのため、配列を受け取るのは、必ずポインタということになる。
しかし、ポインタで受け取るということは、そこには、&a のように、
ローカルオート変数も実引数として指定して呼び出すことも出来る。
その場合には要素数が無いので、あなたの望みをかなえる高速な
一般的方法が存在しない。

望みをかなえるためには、言語の拡張が必要となる。

833 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 19:33:05 ID:bRhYdbIA.net]
Rustっていろいろ清々しいよね
関数型言語に必須じゃねえのと思うリスト関係がぽっかり抜けてるのは不満だけど



834 名前:デフォルトの名無しさん [2020/02/13(Thu) 19:57:05 ID:WjLTLikp.net]
>>807
https://ideone.com/DfYRYS

835 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 20:01:17 ID:b1nbpqgi.net]
>>808
ヒープに確保した配列の要素数はやはりメモリ上にあるんですね
手段がないのは文法として一貫性をもたせられないからということでしょうか
なるほど、回答ありがとうございます

836 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 20:08:49 ID:J94ypinO.net]
delete [] pと同じように
sizeof [] pを用意すりゃいいのにね
pがnew []されてなかったら誤動作するって挙動ならdeleteと同じだろうに

837 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 20:15:32 ID:iivZofrB.net]
言いたいことは分かるが構文がきもい

838 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 20:17:34 ID:Y6SS1xK+.net]
欲しいなら作れば?
それができるのがc++じゃん

839 名前: mailto:sage [2020/02/13(木) 20:36:41.73 ID:ImKshd8q.net]
>>791
>C++の配列は長さの情報を持ってないってことになってるけど
>長さを与えなくてもdelete[]できるんだから、メモリのどこかにその情報はあるよね?

new したときは、その領域サイズが実行時にユーザーのみえないところに保存される、というだけなのでは?
C/C++ の配列は長さ情報を(自分でそう書かないかぎり)持たないとおもいますよ

840 名前:デフォルトの名無しさん [2020/02/13(木) 20:38:39.62 ID:WjLTLikp.net]
ちゃうねん。

841 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 20:50:05.52 ID:qzSQSiwu.net]
設計がダメな場合コンパイラにいくら指摘されようと根本的には治らんのだが、
(たいていそういう馬鹿はコンパイラ通すためにmut,RefCell,unsafeを使いまくる)
そういうのを少しもわかってないバカがrust推しなんだよなぁ。
構造体を1から作り直さなきゃならんかったり根本的に間違ってる。

842 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 21:00:18 ID:sl9OX6cI.net]
>>808
new TYPE[]するとき内部的にサイズ情報を持つ保証ってあったっけ?
例えば自前でoperator new []を実装するとき、予め2^nバイトのブロックを所定の数用意しておいて、要求サイズに応じて必要十分な大きさのブロックを返すなら、割り当て時に要求されたバイト数または要素数の情報を保持しないという実装も可能かと思う。

843 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 21:18:32.64 ID:9NIgZq2/.net]
>>811
いえいえ



844 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 21:37:18.24 ID:Y6SS1xK+.net]
>>818
デストラクタ呼ぶ必要ある

845 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 21:39:24.09 ID:J94ypinO.net]
デストラクタ呼ぶ必要ない型だと、size情報持ってないと言うことなんだろうね

846 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 21:40:36.17 ID:sl9OX6cI.net]
>>820
デストラクタの実装も、返ってきたアドレスの値でどのサイズの領域か(割り当て要求されたサイズではなく、自分で区切ったブロックのサイズ)が分かるようにしておけば大丈夫でないかな?

847 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 21:41:24.98 ID:sl9OX6cI.net]
>>822
すまん、勘違いでした。全部忘れてください

848 名前:デフォルトの名無しさん [2020/02/13(木) 22:02:22.87 ID:WjLTLikp.net]
はい忘れました。

849 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 22:06:16.93 ID:Bk3UL691.net]
アドレスだけじゃなくて長さも受け渡しするインターフェースにしましょうとしか。

850 名前:デフォルトの名無しさん [2020/02/13(木) 22:36:33.13 ID:WjLTLikp.net]
シリアル化の王道ってありますか?

851 名前:デフォルトの名無しさん mailto:sage [2020/02/13(木) 22:45:19.55 ID:iq5JxXln.net]
オブジェクトならCORBA、データ構造だけでいいならASN.1とか。

852 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 22:54:55 ID:tx2lxPGZ.net]
>>822
TYPEがデストラクタを持つclassの場合に、ptr = new TYPE[n] で確保されたメモリ
を delete[] ptr とすると、 正確に n 回デストラクタを呼び出す必要がある。
new が n * sizeof(TYPE) より大きめのブロックを確保した場合でも、
delete[] ptr 時に正確な n の値を割り出す方法が必要となる。
なので、n の値は ptr の値さえあれば知ることが出来ることが必要条件となる。
つまり、少なくともデストラクタを持つ TYPE の場合に TYPE の配列をヒープから
確保した場合には、配列の要素数を必ず配列の先頭のポインタの値から「知る」事が出来る。

853 名前:デフォルトの名無しさん [2020/02/13(Thu) 23:01:33 ID:WjLTLikp.net]
>>827
もうちょっと簡単なのないですかね。
型情報要らないんで。



854 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 23:09:58 ID:iq5JxXln.net]
型情報が無けりゃデシリアライズしても使いようがあるまい。

855 名前:デフォルトの名無しさん [2020/02/13(Thu) 23:12:32 ID:WjLTLikp.net]
それがあるんですよ兄さん。

856 名前:デフォルトの名無しさん mailto:sage [2020/02/13(Thu) 23:12:57 ID:ktN45haN.net]
双方向mapって何使うのがいいですか?boostのbimap?
それともこのくらいは自作してる人のほうが多いですか?

857 名前:デフォルトの名無しさん [2020/02/14(金) 00:05:24 ID:CPLKNT1n.net]
双方向Mapって何に使えるんですか?

858 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 01:54:24 ID:0WgbwkuV.net]
型情報ないならそもそもデシリアライズできないし
型情報なしで成り立つ、つまり型情報を事前に知っている前提なら
バイナリでそのまま送ればいいだろ

859 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 02:05:36 ID:raWqkpxU.net]
型がわかっててもコンテナはそのままではバイナリで送れない

860 名前:デフォルトの名無しさん [2020/02/14(金) 02:11:15 ID:CPLKNT1n.net]
>>834
そのやり方教えて。
あめさんあげるから。

861 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 07:52:45.40 ID:RsXMnrpQ.net]
ちゃんとやるならPODに詰め替えてからchar配列へreinterpret_cast

862 名前:はちみつ餃子 mailto:sage [2020/02/14(金) 09:19:01.22 ID:nLeEzkye.net]
>>826
シリアル化ってのにどういう要件を置くかだな。
同じ環境でデシリアライズ出来ればよいのであれば >>837 で十分だろうし、
データ形式が決まってて (あるいはデータ形式の側を中心に策定したくて)
それのシリアライズとデシリアライズを (それぞれ別の環境で (ときには言語も違うかも)) やりたいということなら
protobuf などのツールを使うのはよい案だと思う。

863 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 13:35:07 ID:vZZ7SPTm.net]
boostにあるじゃないですか
googleのなんか使うんじゃありません



864 名前:デフォルトの名無しさん [2020/02/14(金) 13:41:23 ID:a5iC3cHy.net]
>>791
>>807
実装

865 名前:ヒ存だと思うけど hoge[-1] あたりに格納されてた []
[ここ壊れてます]

866 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 13:49:57 ID:rQdJoGM9.net]
>>840
VC++の場合、ptr = new TYPE[n] で確保された場合は、確かに
ptr[0] == n
になっていた気がする。
「確かに」というのは言葉のあやで、厳密には覚えてないが、
VC++の new で使われる組み込み関数のライブラリのソースコードを見ると分かる。

867 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 13:50:28 ID:rQdJoGM9.net]
>>841
すまん、
ptr[-1] == n
の間違い。

868 名前:デフォルトの名無しさん [2020/02/14(金) 14:03:39 ID:a5iC3cHy.net]
>>807
>>841
OSやコンパイラで違うんでしょ
https://ideone.com/DuTmC5

869 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 15:26:11.39 ID:rQdJoGM9.net]
>>842
あ、すまん、正しくは、大体、
 ((DWORD *)ptr)[-1] == n
だ。
ptr[-1] だと、sizeof(TYPE)分、アドレスが戻ってしまうし、
結果の型も DWORD とかではなく、TYPE 型になってしまう。

870 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 15:28:19.59 ID:rQdJoGM9.net]
>>843
言っておくが、new char[n] とかでは、駄目な可能性は有るよ。
話は、「TYPEがデストラクタを持つとき」のnew TYPE[n]に限定。

871 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 17:17:51.62 ID:jFoBh/u0.net]
一時オブジェクトの寿命について、ご教示ください。
例えば、以下のようなコードがあった時、

void foo(const char* c); // 外部ライブラリの関数につき変更不可とする
void main()
{
const std::string s = "aaa";
foo((s + "bbb").c_str());
}

一時オブジェクトstring(s + "bbb")の破棄が行われるのは、
関数foo()を呼ぶ前でしょうか、呼んだ後でしょうか。
調べた範囲では、「完全式の終わり」という話が出てきたのですが、
どこまでが完全式なのか判断できませんでした。

872 名前:はちみつ餃子 mailto:sage [2020/02/14(金) 17:22:07.67 ID:nLeEzkye.net]
>>846
この場合はその行の終わり。
セミコロンのところだと思っていい。

873 名前:はちみつ餃子 mailto:sage [2020/02/14(金) 17:34:07.49 ID:nLeEzkye.net]
すごくどうでもいい話なんだけど、
JIS では完結式という用語を使ってるのに完全式って言葉の方がよく使われているよね……。



874 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/14(金) 17:59:01 ID:nLeEzkye.net]
>>846-847
式の一部であるような式が部分式で、
そうでないような式が完結式って言う。

875 名前:デフォルトの名無しさん [2020/02/14(金) 19:29:16.13 ID:CPLKNT1n.net]
>>837-838
ありがとん。

876 名前:846 mailto:sage [2020/02/14(金) 19:44:55.13 ID:jFoBh/u0.net]
>>847-849
ご回答ありがとうございます。
大変勉強になりました。

877 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 20:52:54 ID:x/oqiD9H.net]
おいCぺろぺろ

878 名前:デフォルトの名無しさん mailto:sage [2020/02/14(金) 20:58:59 ID:V/oEZCXU.net]
>>851
いえいえ

879 名前:デフォルトの名無しさん [2020/02/15(土) 10:34:21 ID:BMoFghq4.net]
newって意外と速いんだな。
アクセスは不利かもしれないけど。

880 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 12:11:39.70 ID:DzNKB5Jj.net]
>>854
速いよ。
高速なゲームでも普通に使える。

881 名前:デフォルトの名無しさん [2020/02/15(土) 12:12:59.04 ID:BMoFghq4.net]
でもスタックは常にキャッシュに乗ってるから、そこらへんでどう変わるのかな。

882 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 13:19:54 ID:J1bovO5o.net]
キャッシュに乗るくらいの量だったらそもそもクリティカルな重さにはならんだろ。
newで問題になるのは10万とかそのくらいのオーダーをがっつりfor文で呼ぶとかそれくらいのことする場合。

883 名前:デフォルトの名無しさん [2020/02/15(土) 13:21:27 ID:BMoFghq4.net]
スタックは常にキャッシュに乗ってる。



884 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 13:23:13 ID:lTU5fwx1.net]
>>857
風邪が騙りかけます

885 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 14:11:39.55 ID:DzNKB5Jj.net]
>>857
VC++の場合、コンストラクタが無い場合、new が必要とする時間は 170クロック。
3.0GHz の CPUの場合、1.7 * 10^7 回(1,700万回)くらい new してやっと一秒
位。
だから、問題になるのは、1万回ループではなく、100〜1000万回くらいのループ。

886 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 14:15:19.79 ID:DzNKB5Jj.net]
もちろん、スタック変数で済むならスタック変数の方がい

887 名前:い。
ただ、スタックは容量に限りがあるので全部スタックという訳にもいかない。
ヒープにも限りはあるにはあるが、それは OSやマシンの限界。
[]
[ここ壊れてます]

888 名前:デフォルトの名無しさん [2020/02/15(土) 14:25:57.86 ID:BMoFghq4.net]
そこでgotoなんですよ。

889 名前:デフォルトの名無しさん [2020/02/15(土) 14:43:25.87 ID:BMoFghq4.net]
コレクションがソートの有無でだいぶ変わる。
trie_base_benchmark__sorted_words_1
trie assign.
409ms
size : 466551
words : 466551

trie insert.
762ms
size : 466551
words : 466551

std::set insert.
69ms

std::unordered_set insert.
149ms

(assigned) trie find.
24ms

(inserted) trie find.
25ms

std::set find.
194ms

std::unordered_set find.
63ms

890 名前:デフォルトの名無しさん [2020/02/15(土) 14:44:57.19 ID:BMoFghq4.net]
trie_base_benchmark__random_words_1

trie assign.
2034ms
size : 466551
words : 466551

trie insert.
2026ms
size : 466551
words : 466551

std::set insert.
490ms

std::unordered_set insert.
146ms

(assigned) trie find.
158ms

(inserted) trie find.
169ms

std::set find.
477ms

std::unordered_set find.
62ms

891 名前:デフォルトの名無しさん [2020/02/15(土) 14:46:37.02 ID:BMoFghq4.net]
挿入速度が変わるのは仕方ないとしても、検索速度が変わるのは、キャッシュじゃないかと思うんだけど。

892 名前:デフォルトの名無しさん [2020/02/15(土) 14:49:41.43 ID:BMoFghq4.net]
std::sort: 306ms, (466551count).
先にソートしてから挿入したほうが速度的にお得っぽい。

893 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 16:03:09.29 ID:0hgUDlXi.net]
>>854
速いといっても
単純な演算と比べれば劇遅



894 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 16:18:40.81 ID:qSK05WKV.net]
>>867
とにかく、足し算/引き算が1クロック程度、new が170クロック程度だからね。
使い方を間違えなければ劇遅とはいえまい。

895 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 16:32:01.46 ID:4O8uAQVX.net]
auto hentai = SM(std::move(羞恥心));

896 名前:デフォルトの名無しさん [2020/02/15(土) 17:12:18.08 ID:BMoFghq4.net]
newより+のほうが速いってことか。

897 名前:デフォルトの名無しさん [2020/02/15(土) 17:25:57.34 ID:BMoFghq4.net]
+と-ならどっちが速いんだろう。

898 名前:はちみつ餃子 mailto:sage [2020/02/15(土) 17:49:06.00 ID:cwLPNCdO.net]
>>871
回路はほぼ共有してるんじゃないの?
2の補数を使うのもそれが理由なんだろうし。
少なくとも Pentium 時代まではクロックは同じだったはず。

近頃の事情は知らんけど
GCC あたりで強い最適化をかけてみても引き算か足し算を特に避ける様子もないので、
まあだいたい同じなんでしょ。

899 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 18:01:50.38 ID:zARYy4pH.net]
>>870
C++の場合、+ひとつだけでも裏でどんなコードが動くか油断ならない。

900 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 18:13:26.25 ID:2RWOAy2H.net]
>>871
+ と - で速度が違うCPUは見たことがない

- は順番が関係あるので
処理によっては遅い事がある

b = 1 + b
b = 1 - b

901 名前:はちみつ餃子 mailto:sage [2020/02/15(土) 18:14:19.52 ID:cwLPNCdO.net]
整数だけの話じゃなくてってことか。
ある程度の常識的判断が出来る場合もあるけど、
基本的には実装次第だわな。

902 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 18:19:46.61 ID:2RWOAy2H.net]
組み込み型じゃなけりゃそりゃね
+ でミサイル発射とか

903 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 19:02:33.35 ID:qSK05WKV.net]
>>870
new より + の方が 170 倍速いと言うことだ。



904 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 19:04:43.75 ID:cVttwiPD.net]
>>874
一度bをnegateしてから足す処理系があるかもな

905 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 19:30:46 ID:qSK05WKV.net]
>>874
確かに引き算には順序があるので、足し算より最適化に不利になることがある。

906 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 19:48:11.00 ID:x3vECiAE.net]
if(bReaZyuu){

907 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 00:34:55 ID:pXV6w9YM.net]
if (false != bReaZyuu) {

908 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 00:35:58 ID:pXV6w9YM.net]
newが常に数百クロックで済むと思ったら
間違いかもしれん…

909 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 01:50:35.50 ID:1DEBeg9G.net]
経験的にはnewが遅いと思ったことは無い。
なお、コンストラクタの処理時間以外はnewはmallocと同じ速度。
ゲームメーカーでも必要な場合に malloc を使うことは問題

910 名前:ネいとされている。 []
[ここ壊れてます]

911 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 02:03:13.40 ID:MPWqg8uW.net]
new からしてmallocを呼んでる実装が多い気がする。

912 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 02:34:52 ID:yR2k1LO6.net]
そりゃnew用とmalloc用でヒープ別けたら無駄だし

913 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/16(日) 02:36:27 ID:VK9AAsv4.net]
ヒープからの割り付けをする機会を減らすことで実行速度を上げる工夫はよく聞く話ではあるよな。
ただ、そこまでギリギリのチューニングが必要ってことがあまりないだけで。



914 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 07:37:50.08 ID:Rlzwkt+8.net]
newは最悪値が読めないからなぁ
組込とかシビアなゲームでは使い辛い

915 名前:デフォルトの名無しさん [2020/02/16(日) 08:25:44.50 ID:Yy7z+EdH.net]
具体的な数字が出てるとイメージが湧く。

916 名前:デフォルトの名無しさん [2020/02/16(日) 08:45:53 ID:Yy7z+EdH.net]
170クロックならあんまり気にする必要ないな。

917 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 10:26:07.87 ID:w0IbR+6u.net]
組み込みでc++がそもそもおかしい

918 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 11:00:34.43 ID:1DEBeg9G.net]
>>887
よっぽどでない限り、AAAゲームでも使われてるよ。

919 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 11:01:02.59 ID:B02+i8yM.net]
最近では小規模組み込みでもC++を使う事はあります

new / deleteやヒープを無効にしたり
newのみでdelete出来ないようにしたり
なんてこともあります

920 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 11:03:58.49 ID:+vprjU7s.net]
>>890
視野狭すぎ

921 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 11:12:03 ID:w0IbR+6u.net]
また馬鹿が無駄に一般化してできるワイ言ってんのか。。相変わらずだな。

922 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 11:20:41 ID:+vprjU7s.net]
日本語でおk

923 名前:デフォルトの名無しさん [2020/02/16(日) 11:23:16 ID:Yy7z+EdH.net]
ストリームってなんで遅いんだろね。



924 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 11:39:47 ID:Rlzwkt+8.net]
>>891
そりゃそういう例もあるわな
だから何?w

925 名前:デフォルトの名無しさん [2020/02/16(日) 11:42:38 ID:Yy7z+EdH.net]
スレで、do{}while()はダメっぽいこと書いてあったけど、なんでダメなの?

926 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 12:30:30 ID:q7JzY0gs.net]
>>887
でもお前は組み込みにもゲーム開発にも携わってないじゃん

927 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 12:42:15 ID:Rlzwkt+8.net]
>>899
ごめんねー、俺はプリンタ屋さんなのw
ゲームは知り合いの話ね

928 名前:デフォルトの名無しさん [2020/02/16(日) 12:54:36 ID:Yy7z+EdH.net]
プリンタ屋さんってどんな仕事ですか?

929 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 12:58:53 ID:Rlzwkt+8.net]
>>901
俺は制御周り、上位インターフェースからのデータを描画ルーチンにに渡したり、下位インターフェースにデータ渡したり、パネルとかの制御をやってる
描画部分はまた別の人がやってる

930 名前:デフォルトの名無しさん [2020/02/16(日) 12:59:56.11 ID:Yy7z+EdH.net]
なんか難しそうですね。

931 名前:デフォルトの名無しさん [2020/02/16(日) 13:01:18.53 ID:Yy7z+EdH.net]
プリンタってプロセッサはどんな感じのを使うんですか?
newってあるんですか?

932 名前:デフォルトの名無しさん [2020/02/16(日) 13:02:40.97 ID:Yy7z+EdH.net]
プリンタのヘッドについてる穴の数は決まっているんだから、あまりヒープが必要無さそうな気もする。

933 名前:デフォルトの名無しさん [2020/02/16(日) 13:03:59.79 ID:Yy7z+EdH.net]
std::vectorの上にヒープを作っても速度的に大丈夫なことは確認した。



934 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 13:07:31.29 ID:Rlzwkt+8.net]
昔はSHシリーズとかR2000とか
今はARMもそれなりに使ってる
制御だとnewは基本使わない
あと俺がやってるのは業務用のLBP

935 名前:デフォルトの名無しさん [2020/02/16(日) 13:08:47.09 ID:Yy7z+EdH.net]
ってことはキャノンですか。

936 名前:デフォルトの名無しさん [2020/02/16(日) 13:10:53.15 ID:Yy7z+EdH.net]
メモ問題は結局ホワイトボード買ってきた。
ホワイトボードをワンノートに撮影するという昔っぽいことに。

937 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 13:11:07.93 ID:Rlzwkt+8.net]
流石に社名までは出せんわw

938 名前:デフォルトの名無しさん [2020/02/16(日) 13:12:13.52 ID:Yy7z+EdH.net]
ワンノートのアンドロイド版はカメラにホワイトボードのモードがあるんだけど、テカリ消してくれないし、ホワイトバランスも調整してくれない。

939 名前:はちみつ餃子 mailto:sage [2020/02/16(日) 13:12:31.37 ID:VK9AAsv4.net]
PostScript くらいならプリンタの側で処理することもあるし、
世間で想像されているよりは高級なことをやっているんじゃないかなぁという気もする。

940 名前:デフォルトの名無しさん [2020/02/16(日) 13:16:21 ID:Yy7z+EdH.net]
ってことは、別の人がnew使いまくり

941 名前:なのでは。 []
[ここ壊れてます]

942 名前:デフォルトの名無しさん [2020/02/16(日) 13:17:17 ID:Yy7z+EdH.net]
テカテカしないホワイトボードないのかな。

943 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/16(日) 13:20:18 ID:VK9AAsv4.net]
>>914
https://www.google.com/search?q=%E3%83%9B%E3%83%AF%E3%82%A4%E3%83%88%E3%83%9C%E3%83%BC%E3%83%89+%E3%83%9E%E3%83%83%E3%83%88%E3%82%BF%E3%82%A4%E3%83%97



944 名前:デフォルトの名無しさん [2020/02/16(日) 13:20:51 ID:Yy7z+EdH.net]
ありがとん。

945 名前:デフォルトの名無しさん [2020/02/16(日) 13:27:19 ID:Yy7z+EdH.net]
モーター動かしたりするのはnew使ったらダメなんだろな。

946 名前:デフォルトの名無しさん [2020/02/16(日) 13:52:37.96 ID:Yy7z+EdH.net]
リアルタイムOSはヒープあるんだろか。

947 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 14:03:56.47 ID:1DEBeg9G.net]
>>900
ゲームに関しては、かなりちゃんとした現場で昔から malloc は使われていたし、全社的に使っても問題ないとされていた。

948 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 14:33:04.16 ID:Rlzwkt+8.net]
>>919
で?
使われてる例も使われない例もあるよ
タイミングにシビアなゲームだと使い辛いと言うだけ

949 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 14:34:24.22 ID:Rlzwkt+8.net]
>>918
最大実行時間が読める専用のヒープを持ってたりするよ

950 名前:デフォルトの名無しさん [2020/02/16(日) 14:44:07.47 ID:Yy7z+EdH.net]
あるんだ。

951 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 14:49:10.64 ID:B02+i8yM.net]
>>918
ヒープを使うかどうか選べるものが多い

952 名前:デフォルトの名無しさん [2020/02/16(日) 14:53:55.58 ID:Yy7z+EdH.net]
選べるってことは、用途によって使い分けが必要って事なんだろな。

953 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 14:59:29.04 ID:D2RmZx9z.net]
ループ内で可変長のvector使っているようなのは、外に出してループ始めにclearする方がいい
ループごとにvector出力しなきゃいけない場合も、moveしないでcopyした方がいい



954 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:03:54.38 ID:k775l7KG.net]
>>920
意見されたら喧嘩売りたくなる病気なの?

955 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:10:11 ID:D2RmZx9z.net]
mallocは使い方が余程ひどく無ければ、性能上問題になることはない
問題になっている場合もプロファイラでその部分だけ対策すればどうにでもなる
断片化やmalloc自体の管理領域容量が気になるほどの環境では使わない方がいいが

956 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:11:53 ID:+ZTPu1gL.net]
>>926
それお前じゃね?

957 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:13:28.86 ID:+ZTPu1gL.net]
>>927
リアルタイム系の仕事したことないならそう言う考え方でもいいと思うよ

958 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:17:30.49 ID:D2RmZx9z.net]
そもそもリアルタイム系の処理で、実処理部分でmallocするってのは普通しないよね

初期化時に必要なバッファはあらかじめ確保しておくものでしょ
そこはmallocだろうが静的確保だろうが変わらないし

959 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:23:06.64 ID:8bxeBykO.net]
>>929はループの中で毎回malloc freeしてるからそりゃ性能が気になるよね

960 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:24:31.11 ID:1DEBeg9G.net]
>>925
std::vector<TYPE> は、リンクリストではなく、「可変長配列」なので、std::list<TYPE> に比べて、TYPE のコンストラクタがデコボコした頻度で
多めに呼び出されてしまう傾向がある。TYPEのコンストラクタの中で何かをnew していると、new が呼び出される回数をグラフにした場合、
デコボコになるため、速度的に滑らかさがなくなってしまう可能性が考えられる。
それは、newの速度がデコボコなのではなく、std::vector が持つ悪い性質の一つ。
速度的に「滑らか」にしたいならば、std::list の方が適している。
そもそも、C言語がポインタを用意したのは、リンクリストを使いたかったからで、Cはデータ集合用のデータ構造として動的リストではなくリンクリストを用いるのが伝統。
Cの高速性とはリンクリストによるものと言っても過言ではない。
newも、mallocもコンストラクタも、リンクリストと最も相性が良い傾向がある。
cppreferenceなどでも、std::vectorが出てくることが多いが、Cの新かを発揮するにはstd::listの方が良い。

961 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:25:54.32 ID:1DEBeg9G.net]
>>932
誤:Cはデータ集合用のデータ構造として動的リストではなくリンクリストを用いるのが伝統。
正:Cはデータ集合用のデータ構造として動的配列ではなくリンクリストを用いるのが伝統。

962 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:27:49.69 ID:D2RmZx9z.net]
いやいや、速度がシビアならreserveしとけと
cとの親和性考えなきゃdequeも良いが、cのAPI呼び出し考慮すると結局vectorをうまく使うのが一番良い

963 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:28:20.99 ID:1DEBeg9G.net]
>>929
std::vector<TYPE>を使っていて、TYPEのコンストラクタの中でnewするのはリアルタイム処理には向きません。
その場合、std::list<TYPE>に変えれば劇的に速度が安定するはずです。



964 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:30:12.10 ID:1DEBeg9G.net]
>>934
CのAPI呼び出しで集合を渡す場合、通常、集合の要素はコンストラクタを持ちません。
その場合は、std::vectorは適すでしょう。
ところが、要素がコンストラクタを持つ場合は、std::listが適します。

965 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:32:54 ID:D2RmZx9z.net]
vectorで再配置する際にmoveされない前提なのね

966 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:33:13 ID:1DEBeg9G.net]
>>936
補足すれば、APIは、リング0のシステムランドで実装されていることが多いため、
リンクリストの様な複雑な構造が用いられることが少ないのです。
しかし、それはAPIに限った話で、Cは誕生したときから、要素数が変化する
集合には、動的配列よりもリンクリストを用いるのが伝統でした。
伝統と言うよりも、リンクリストこそがCの核心・本質といっても過言では有りません。

967 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:35:27 ID:1DEBeg9G.net]
>>937
C言語とはリンクリストのことです。
動的配列は、Cの文化ではありません。

968 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:36:04 ID:MPWqg8uW.net]
アドレスで直にアクセスできる言語の強みはリンクリストで活きるからごもっとも

969 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:40:23 ID:+ZTPu1gL.net]
>>930
そう言う事
平均的には間に合っても確保や解放にかかる時間が読めなくなる
100万回に1回でもダメならダメっていう世界だしね

>>931とかはそう言うことがわかってないので頓珍漢なレスになってるw

970 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:40:27 ID:pXV6w9YM.net]
>>934
reserveしただけだとOSによっては実メモリ確保しなさそう…
で初回アクセスでおもむろにページが用意されれる
ヨカン

971 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:42:34 ID:D2RmZx9z.net]
それだとmalloc使うこと自体不味いだろ
確率でmmapしちゃうのだから

972 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:44:00.56 ID:pXV6w9YM.net]
別に
>>925の前半でおk

973 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 15:46:21.91 ID:D2RmZx9z.net]
もちろん初期化時以外でね



974 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 16:01:46.00 ID:1DEBeg9G.net]
>>937
moveを使いたい場合、要素の TYPE クラスに move 用の記述が必要となるため、手間がかかります。

975 名前:デフォルトの名無しさん [2020/02/16(日) 16:01:54.10 ID:Yy7z+EdH.net]
is_pod_vで事前条件を確認してるけど、PODはなくなるんだってね。

976 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 16:02:29.34 ID:Rlzwkt+8.net]
>>935
まあお前がそう思うならそうなんだろうな
お前ん中ではな…

977 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 16:07:00.64 ID:D2RmZx9z.net]
listで美味しいのはsplice使いたい時くらいだろ
multi threadのログ統合したい時とかに、lockに必要な時間を最小化出来る

978 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 16:26:27.54 ID:c8Po0Swg.net]
>>947
POD = trivialかつstandard_layout
だから後者を使うようにすればいい

979 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 17:05:35.53 ID:+vprjU7s.net]
子スレッドを休眠状態で作る方法ない?
起動直後にcondition_variable::waitとかじゃなく
初期状態として

980 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 17:13:29.37 ID:YrNuZAe7.net]
何のために?それによる

981 名前:デフォルトの名無しさん [2020/02/16(日) 18:53:05 ID:Yy7z+EdH.net]
>>950
ありがとん。

982 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 21:26:26 ID:D0JJuQrX.net]
>>953
いえいえ

983 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 23:16:48.80 ID:B02+i8yM.net]
>>924
まあそりゃね

使えるようにしてもPCやスマホのように自由には使えないぞ
こまめに確保解放なんてことはしない
基本最初に確保して終わり
解放はしない
だから確保しか出来ないヒープも選べる



984 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 23:20:30.34 ID:B02+i8yM.net]
>>927
それはPCやスマホなどリッチな環境の場合

>>931
一見軽そうで重い関数があったりするから
同じ人が同じ時に作ってたらそんな処理にはしないだろうけど

985 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 00:08:48 ID:U44ZlMgK.net]
白物家電のマイコンやら、pfcのマイコンやらもやったが、そんなのはそもそもmalloc使うような環境じゃなかったしなぁ
RAMもkB単位で少ないし、自由に関数呼べるほどスタックも無いし
割り込み部分はアセンブリで書いてた

986 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 00:14:53 ID:/jKzm6f9.net]
今は冷蔵庫や電子レンジもAI積んでネットワークに繋がるIoT時代だけど
それでも組み込みって未だにそんな感じなの?

987 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 00:16:48 ID:U44ZlMgK.net]
まあそれは特に東南アジア向けだったし
日本よりさらにチープだったのかも

988 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 00:19:59 ID:uafn9Eqq.net]
>>958
そんなのごく一部

989 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 00:20:59 ID:uafn9Eqq.net]
いまだにチープな8bit CPUもたくさん使われている

990 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 00:23:25 ID:U44ZlMgK.net]
cortex-m0とか載ってたらもう小躍りしちゃうくらいのリッチさだよね

991 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 00:34:16.83 ID:H8nvOahp.net]
リッチなCPUを使うって事は
それだけ求められる事が大きいわけで

992 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 07:41:59.44 ID:xyBTOgD8.net]
でもCPU節約するために人件費かけて結局商品高いじゃん

993 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 09:22:40.01 ID:usLteeFN.net]
趣味じゃないんだから
当然トータルで考えるよ

開発工数、単価、機能性能、信頼性、供給、大人の事情、...



994 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 10:36:24 ID:sgjaAMaL.net]
ゲーム業界の人だけど
new使っても問題ないってのはおれの常識とは異なる

まず問題が広すぎる
言いたいことはデフォルトのグローバルヒープを無邪気に使っていいか
ということだと仮定すると
AAAクラスでそんな杜撰なことしてるところはないと思う

組み込みもそうだがリアルタイム性が必要とされるところでは、メモリ予算というものがある
グラフィック、オーディオ、ネットワークなどのモジュールごとにメモリいくらと決められる
モジュールの責任者はその中でやりくりする
ここで大事なのはメモリの最大使用量を保証しなければならないってこと

必要ならローカルのヒープは作ったりするが、この時点で担当者が気ままにnewってのは認められない
基本的にすべてコントロールされる
現実的に最大量が正確に見積もれないものもあるがそれでも最大量は決める

995 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 10:57:08.38 ID:sgjaAMaL.net]
といってもグローバルヒープを使わないわけじゃない
オープンソースのもので無邪気にmallocするものは多数あるが、それほど荒ぶらなければそのまま使う
(リアルタイム性が不要なら仮想メモリに任せる)

あとmalloc遅くないという論調の人がいるけどそれはベストケースの話でしょう
ヒープメモリが不足したり一度に巨大なメモリを確保する場合はシステムコールになるからずっと遅くなる
ワーストが見積もれないものはリアルタイムで使いづらい

まぁ昨今は仮想マシン上で動くゲームが多数あるわけで気にしなくていいレベルという意見はある
ただesports系で一瞬カつくとか商品性に関わるわけで
また後から直すのも地獄なので
最初から計画的に作るべきだろう

996 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 11:06:49.04 ID:tDJaHp5K.net]
ここC++スレだよね、つかぬことだけど
記憶管理はいつでも如何様にもカスタマイズできるようにtypename Allocatorになってるわけじゃん
なんでいきなり組み込みには向かないとかキリッてんの?

997 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 12:20:34.06 ID:ipOy1V1j.net]
>>968
typename Allocatorとかすげぇ初心者っぽい
キリってるのはお前だ

998 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 12:22:54.84 ID:tDJaHp5K.net]
>>969
kwsk

999 名前:デフォルトの名無しさん mailto: []
[ここ壊れてます]

1000 名前:sage mailto:2020/02/17(月) 12:39:53 ID:sgjaAMaL.net [ >>968
標準ライブラリでもallocatorが指定できないものもあるんだよ
もはや今のc++で標準ライブラリを全面的に使いつつ、ヒープを個別に差し替えるのはかなり非現実的だ
allocatorを差し替えられてもnewするタイミングや量はリバースエンジニアリングしないとわからない
それが問題になることもある ]
[ここ壊れてます]

1001 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 12:48:18 ID:2c+OKT/4.net]
てか、静的確保したメモリブロック使うアロケータ書いてそれで標準コンテナ使うのが基本じゃね
まあeastlでも良いが

1002 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 12:51:50 ID:tDJaHp5K.net]
>>971

> 標準ライブラリでもallocatorが指定できないもの
例えば?

newだってoperator newですぐカスタマイズできるし
placementで環境依存の細かい設定もできる

ライブラリはISO/IEC14882に固執する必要はなく
サードパーティでも内製でもより都合のよいほうを使えばいい
というだけの話

1003 名前:969 mailto:sage [2020/02/17(月) 12:56:55 ID:nfQInp9b.net]
カスタマイズの話なら真っ先にnewの話をすべきなんだが順番おかしくね?
ていうか今時はallocatorより先にpolymorphic resourceだと思うが

というかそもそもmallocの速度の話からであって、いきなりallocatorの話したり
C++全体を否定されたかのように過剰反応するとか・・



1004 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 13:12:34.13 ID:y136Nw0W.net]
仕様通りに書けばいい感じにうごいてくれて、責任は俺にはないとか
思い込んでんじゃってるキッズなんだろう。
デバッグするなんてことはもちろん頭にない。

1005 名前:865 mailto:sage [2020/02/17(月) 13:34:28 ID:FC0zZXW0.net]
>>890からの流れでは直後からnewが出てきてたろ
C++が組み込みに向かないという主張の
理由がmallocじゃおかしいだろ
それしか使えんわけでもなし

1006 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 13:44:11 ID:nfQInp9b.net]
>>968に突っ込むと>>890に同意したことになるのか

1007 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 14:00:21 ID:sgjaAMaL.net]
>>973
> > 標準ライブラリでもallocatorが指定できないもの
> 例えば?

でしょ?
お前さんは人並み以上にc++知ってると思うけどこの事実知らない
どこで使われてるか知らなきゃ置き換えができないよね

答えはあえて教えない
標準ライブラリのヘッダーをnewでgrepすればallocatorを通さないものが見つかるさ
自分で確認してこりゃ置き換え無理だわと悟って欲しいw
もし見つからないなら後で書くよ

ちなみにグローバルにnewを置き換えるぐらいならmallocのバイナリを差し替えた方が早いし確実

1008 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/02/17(月) 14:31:40 ID:qpTD/rYC.net]
おっ。
野党みたいなことを言い始めたぞ。

1009 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 14:37:47 ID:nfQInp9b.net]
>>979
横からだが、具体的に誰のどこを指してそう思ったのかよろしく

1010 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 14:59:36 ID:QYRwM+i2.net]
>>966
もちろん、むやみやたらと使って全く問題ないわけではない。
が、本当に必要な箇所で使う程度なら(多くの場合)余り問題ないという程度。
大体ゲームの場合のnewやmallocは、敵や弾やイフェクト、3Dオブジェクトなど
を1つずつ収めるために使うことが多いが、ゲームの1シーン内に登場する個数が
newやmallocが問題ない程度に元々なっている事がわりと多いと言うだけ。
3Dの雑草の葉っぱ一枚単位で new したりすると問題になってくるかもしれない。

1011 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 15:51:15.09 ID:sgjaAMaL.net]
>>981
なんとも感覚的な話だね
だいたい動けばOK!って感じ?
おれは仕事でそういうもの作りはしない

1012 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 16:08:54 ID:HCTe1ZqE.net]
コンシューマかPCかでも違うだろうし
(自分はさほど詳しくないが、基本コンシューマは標準ヒープ使わないはず)
ジャンルによっても違うんじゃね
PCのMMORPGなんかだとシーン中のメモリ確保は必須だろうし
あと草は普通同じメッシュやテクスチャ使うだろうし、揺れを入れるにしても一つ一つにデータ持たせるなんてアホなことしないだろ

1013 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 16:15:08 ID:tDJaHp5K.net]
>>978
「後で」かw
もう1000間近だし期限切らないでおけば時効だろってか?



1014 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 16:32:36.59 ID:y136Nw0W.net]
いやそれくらい調べろって話だろ。。馬鹿が。

1015 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 16:44:43.28 ID:tDJaHp5K.net]
>>985
sgjaAMaLが、自分の話に傾聴してきた人の質問に答えなかった
つまり自分の考えを伝える努力を中止したということでしかない

何人も自らの意見を他人に伝えるには
その意見を説明するしかなく
説明をやめることは沈黙に等しい

1016 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 16:55:56.23 ID:9WiS2n1W.net]
黙って調べてくれば?
調べて無いと結論づけられればまた偉そうに出来るだろw

1017 名前:デフォルトの名無しさん [2020/02/17(月) 17:15:39.87 ID:9Dh9neDd.net]
ちゃうねん。
僕が組み込みいうたのはArduinoのことな。
RAM2KBやし。

1018 名前:デフォルトの名無しさん [2020/02/17(月) 17:31:33 ID:9Dh9neDd.net]
Arduino面白いよ。

1019 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 18:25:59 ID:sgjaAMaL.net]
>>984
条件は明示してるんだからおれが書くかはお前に委ねられている
1000が迫っているぞw

1020 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 18:30:32 ID:T3Z0MUY2.net]
この手の人最後まで答えないか
答えても的外れなのしか見たことないわ

1021 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 18:32:18 ID:wtNXL+i7.net]
だね
消えて良いよ

1022 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 19:27:27 ID:XybgTXf7.net]
>>978
std::arrayとか言わないよね

1023 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 19:33:45 ID:nfQInp9b.net]
arrayのどこに動的メモリ確保が出てくるんだよ
アホか



1024 名前:デフォルトの名無しさん [2020/02/17(月) 19:46:45 ID:9Dh9neDd.net]
なぞなぞですか。

1025 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 23:00:17 ID:HZSaiYXA.net]
漏れはnewのときたまの遅さの可能性に警鐘を鳴らしたからセフセフ、

1026 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 23:06:03 ID:HZSaiYXA.net]
やっぱnew/deleteのレイテンシーを設計に乗せるには非ページプールメモリにアロケートするべきですよねー

1027 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 23:19:17 ID:sgjaAMaL.net]
なんかスレ止めてたら悪いから書いておくよ
ひとつは17からallocatorがdeprecatedになったstd::functionね
これは結構知られてるばずだ
定期的にこれ濫用する人が現れるんだけど中身理解してから使うか判断しろと職場では言っている代物

もうひとつあげるなら、
処理系によってかなり違うかもだけどstd::threadも中でこっそり内部クラスをnewしてるはず
ただスレッド間で引数を引き渡すためのものでサイズは小さいしスレッド作るコストの方が遥かにでかいから問題にはなりにくい

他にもあるけどとりあえずこんなもんで

1028 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 23:46:06.60 ID:HZSaiYXA.net]
std::functionを使わないと1 bitもプログラムが書けなくなった漏れガイル、
クロージャをいちいちクラス定義から手で書く日々に戻るのはいやじゃー

1029 名前:デフォルトの名無しさん mailto:sage [2020/02/17(月) 23:54:13.03 ID:HCTe1ZqE.net]
1000なら>>986, >>991-992が土下座

1030 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 17日 3時間 0分 7秒

1031 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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