◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

C++相談室 part148 YouTube動画>17本 ->画像>2枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1580471646/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

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

前スレ
C++相談室 part147
http://2chb.net/r/tech/1576659413/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://2chb.net/r/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
2デフォルトの名無しさん
2020/01/31(金) 21:08:18.93ID:88e+X9K2
>>2
2get乙。
3デフォルトの名無しさん
2020/01/31(金) 21:13:28.27ID:70BTs5bI
前スレの>1000は有能
4デフォルトの名無しさん
2020/01/31(金) 21:28:55.62ID:88e+X9K2
>>1
1get乙。
5デフォルトの名無しさん
2020/01/31(金) 21:32:42.96ID:aVH6lH01
gotoの話でもするか? それともマクロ? ハード絡みのところなんか俺的にはオモロイが
6デフォルトの名無しさん
2020/01/31(金) 21:35:23.06ID:yrj+fbAX
前スレ999だけと循環してないよ
仮想アドレス使ったら必ずページフォルトするわけじゃない
MMUの仕組みわかってる?
7デフォルトの名無しさん
2020/01/31(金) 21:47:35.65ID:aVH6lH01
こらこら、前スレ999は俺だぞ
なりすましすんなカス
8デフォルトの名無しさん
2020/01/31(金) 21:48:10.26ID:88e+X9K2
https://ja.cppreference.com/w/cpp/io/ios_base/sync_with_stdio
これ使うとだいぶ早くなるらしいですよ。
9デフォルトの名無しさん
2020/01/31(金) 21:48:37.69ID:88e+X9K2
じゃあ俺も前スレ999です。
10デフォルトの名無しさん
2020/01/31(金) 21:59:36.62ID:yrj+fbAX
>>7
999へのレスって意味ね
文脈で理解してほしいところだが
で循環論法でないことわかった?
11デフォルトの名無しさん
2020/01/31(金) 22:13:11.58ID:HzrC4w9c
環境を限定しないならこれ以上続けても無駄
全ての環境を知ってるヤツでない限り
12デフォルトの名無しさん
2020/01/31(金) 22:16:13.72ID:88e+X9K2
すべての環境を知っている。
13デフォルトの名無しさん
2020/01/31(金) 22:50:18.80ID:aVH6lH01
>>10
全然わかんねえ! 何言ってんの?
14デフォルトの名無しさん
2020/01/31(金) 22:56:57.70ID:88e+X9K2
>>13
俺はわかった。
15デフォルトの名無しさん
2020/01/31(金) 22:58:17.72ID:yrj+fbAX
>>13
どこが循環してるか言ってみなよ
16蟻人間 ◆T6xkBnTXz7B0
2020/01/31(金) 23:38:50.35ID:r/XM8LG1
struct AutoDeleteFile {
const WCHAR *m_file;
AutoDeleteFile(const WCHAR *file) : m_file(file) { }
~AutoDeleteFile()
{ DeleteFileW(m_file); }
};
17デフォルトの名無しさん
2020/01/31(金) 23:42:29.75ID:wt6xD5wE
それではおじいちゃんのaddress談義
続きをどうぞ
18デフォルトの名無しさん
2020/01/31(金) 23:56:13.21ID:v4E0eL1J
ともかく最初に思ってることがあって
要は荒らしてやろうと
今回は結構うまくいった方かな
この前は
「std::deque には begin() end() clear() があるのに
 std::queue と std::stack にそれらが無いのは何故?
 有ったほうが便利なのでは?」
って質問で大分いい感じにスレを流した
そら、有ったほうが便利に違いないし、無いことに合理的な理由など無いわけだから荒れる
そういう、荒れそうなネタ考えるのに毎回結構頭使う
ただ、ちょっと前の goto のやつ、あれはダメ
初心者がワーワー騒いでるだけで、ほとんどのベテラン連中は静観してたと思う
俺の狙いはそれじゃない
あと、妹大好きです
19デフォルトの名無しさん
2020/01/31(金) 23:56:45.81ID:v4E0eL1J
まぁ、もうすぐID変わるからね
20デフォルトの名無しさん
2020/02/01(土) 00:02:42.91ID:9soosqUN
ネタばらし興醒めだな
C++erそうゆうとこだぞ
21デフォルトの名無しさん
2020/02/01(土) 00:03:19.42ID:K9hiSYW1
なんだと!
22蟻人間 ◆T6xkBnTXz7B0
2020/02/01(土) 00:05:22.38ID:l1s2tvQy
何か難しそうなC++コード、ここに貼ってくれよ。
23デフォルトの名無しさん
2020/02/01(土) 00:37:10.49ID:pUJoLXPw
はいはい狙った通りになった宣言ねw
24デフォルトの名無しさん
2020/02/01(土) 00:41:09.21ID:P+PaZ5tD
全然荒れずにコテンパンにのされてたじゃん
25デフォルトの名無しさん
2020/02/01(土) 00:44:51.53ID:K9hiSYW1
でも、もともと主張がおかしかったから、釣りだったのはホントじゃないの。
26デフォルトの名無しさん
2020/02/01(土) 00:49:11.46ID:pUJoLXPw
釣りっていうかただの構ってちゃんな。何か深い考えがあるというわけでもないし。
27デフォルトの名無しさん
2020/02/01(土) 00:49:56.15ID:K9hiSYW1
釣りじゃなかったら相当痛い人だし。
釣りならちょっと痛い人で済むよ。
28デフォルトの名無しさん
2020/02/01(土) 00:52:13.74ID:K9hiSYW1
ところで僕は自分の職業の板ってまったく見ないんだけど。
ここは職業プログラマが多いの?
29デフォルトの名無しさん
2020/02/01(土) 00:53:02.37ID:K9hiSYW1
なんで見ないかというと得るものが全くないから。
30デフォルトの名無しさん
2020/02/01(土) 01:09:30.45ID:50MDw/OE
goto ふとん;
31デフォルトの名無しさん
2020/02/01(土) 02:05:11.46ID:efnE+DyP
わしも見ない
あそこは仕事のグチを書きこむとこやん
こっちは言語仕様のグチを書きこむとこや
32デフォルトの名無しさん
2020/02/01(土) 02:37:59.97ID:tav2AwxI
break break;
bresk break break;
break continue;

こんな書き方ができたら嬉しい?
33デフォルトの名無しさん
2020/02/01(土) 09:17:35.95ID:9lmFlpKY
export importよりひどいw
34デフォルトの名無しさん
2020/02/01(土) 10:06:12.21ID:+WgC03YT
途中friskみたいのも混じってるしな
35 【末吉】
2020/02/01(土) 10:09:42.57ID:fiLTG5Nb
break 3;
36デフォルトの名無しさん
2020/02/01(土) 10:19:22.01ID:Bc9LjLbW
ネアンデルタール人はホモサピエンスの基底クラスであったか。

ネアンデルタール人のDNA、アフリカの現生人類からも検出 新研究
https://www.cnn.co.jp/fringe/35148770.html
2020.01.31 Fri posted at 13:15 JST
37デフォルトの名無しさん
2020/02/01(土) 11:58:10.08ID:YFAnTUnh
多重ループを抜ける方法

ループに名前は名前を考えるのがイヤ
break [数字] は数えるのがイヤ
関数を分けてreturn はもっとイヤ
変数を使ってbreakで抜けるのは論外
でもgotoはなんとなくイヤ

全ての要望に答えたのが >>32
38デフォルトの名無しさん
2020/02/01(土) 12:17:12.69ID:pUJoLXPw
バカの要望を聞いてさらにロクでもない方向に行ってしまうっていう
わかりやすい例を提供してくれてありがとう。
39デフォルトの名無しさん
2020/02/01(土) 12:30:47.94ID:+WgC03YT
多重ループにする設計が悪い
40デフォルトの名無しさん
2020/02/01(土) 12:31:58.09ID:YFAnTUnh
ん?
皮肉のつもりで書いたんだけど
真面目な書き込みととらえられるとは思わなかった
41デフォルトの名無しさん
2020/02/01(土) 12:34:39.38ID:YFAnTUnh
主に>>39みたいなアホに対する皮肉
42デフォルトの名無しさん
2020/02/01(土) 12:40:18.47ID:+WgC03YT
は?オメェだろアホ
43デフォルトの名無しさん
2020/02/01(土) 12:41:53.34ID:pUJoLXPw
あえて説明してるところで恥ずかしいことになってる奴w
44デフォルトの名無しさん
2020/02/01(土) 13:00:03.90ID:TULylXcw
>>37
おれはおもしろいアイデアと思う
他に考えるとしたら
やはり名前があった方が変更に強いと思うのでその線でいくと
大抵ループにはイテレータやカウンタが紐づいてるから
それを使って
for (auto& x : なんとか) {
 for (auto& y : なんとか) {
  .break x;
 }
}
とかどうだろ?
for以外で使えないしforでも宣言空だとだめだけど
頻繁に使うわけじゃないだろうから妥協できるかなと
45デフォルトの名無しさん
2020/02/01(土) 13:02:13.36ID:YFAnTUnh
BASIC
46デフォルトの名無しさん
2020/02/01(土) 13:03:32.19ID:+WgC03YT
なにそのセンスの欠片もない気持ち悪いコード
47デフォルトの名無しさん
2020/02/01(土) 13:19:23.65ID:fiLTG5Nb
while(){} や do{}while(); で使えないので却下
48デフォルトの名無しさん
2020/02/01(土) 15:04:44.31ID:7G0Z2VlM
for(int x = 0; i < ... )
{
 int y = 0;
LOOP:
 a[x][y]...
 ++y;
 if(...){ break; /*多重ループ脱出*/ }
 goto LOOP;
}
49デフォルトの名無しさん
2020/02/01(土) 16:42:25.84ID:hd+by06W
>>37
何個の break を書くのか、と break の後に書く数字は? で
結局のところ同じように数えなきゃならないでしょ。
50デフォルトの名無しさん
2020/02/01(土) 17:21:08.52ID:9BMLg08w
>>32はcontinueを混ぜられるのが面白いけど、やるならこうだな。
break n;
continue n;
51デフォルトの名無しさん
2020/02/01(土) 17:34:30.73ID:pUJoLXPw
こういうしょーもないシンタックスの話って馬鹿でもしやすいのが盛り上がる理由なんだろうな。
52デフォルトの名無しさん
2020/02/01(土) 17:48:52.85ID:YFAnTUnh
特定の言語のスレ
シンタックスを語らずに何を語る?
53デフォルトの名無しさん
2020/02/01(土) 17:51:10.61ID:YFAnTUnh
>>50
じゃあそれで
54デフォルトの名無しさん
2020/02/01(土) 17:55:08.95ID:YFAnTUnh
break 9;
を数えたく無いとか言ってたヤツがいたけど
そういう時は素直にgotoを使えば良い
55デフォルトの名無しさん
2020/02/01(土) 17:55:47.26ID:rsRLlL5x
てか継続が欲しい
56はちみつ餃子 ◆8X2XSCHEME
2020/02/01(土) 18:08:11.40ID:6nnXKMBq
>>55
C++ ではオブジェクトの寿命の管理と辻褄を合わせなきゃならないんだから full continuation は無理だぞ。
57デフォルトの名無しさん
2020/02/01(土) 18:09:32.76ID:YFAnTUnh
継続とは?
58デフォルトの名無しさん
2020/02/01(土) 18:12:05.70ID:YFAnTUnh
setjmp のことか
59デフォルトの名無しさん
2020/02/01(土) 18:12:34.25ID:Bc9LjLbW
ループに名前を付け、その名前で離脱や継続を行う。

ループA {
60デフォルトの名無しさん
2020/02/01(土) 18:16:20.88ID:Bc9LjLbW
途中で送信してしまった。面倒だから書き直さないが、
breakやcontinueはキーワードが紛らわしいのでPerlのlastとnextを拝借する。
last ループA; とか next ループA; みたいな感じ。
61デフォルトの名無しさん
2020/02/01(土) 18:16:45.14ID:YFAnTUnh
わざわざ名前を付けるならgotoで良いんでは?
62デフォルトの名無しさん
2020/02/01(土) 18:18:49.32ID:vKrtBnhX
gcc5ぐらいから一気にgcc10にしたらエラー表示とかデフォルトの警告とか色々変わっててわろた
63デフォルトの名無しさん
2020/02/01(土) 18:19:46.95ID:Bc9LjLbW
>>61
まあね。だけどgotoはフリーダムすぎて良くないでしょ。
64デフォルトの名無しさん
2020/02/01(土) 18:34:11.57ID:YFAnTUnh
いや全然そう思わない
gotoで何か不都合がある?
65デフォルトの名無しさん
2020/02/01(土) 18:52:41.69ID:pUJoLXPw
>>52
コンパイラ毎の最適化における癖とか、例外の実装についての差異なんかも語ってもいいんだぞ。
66はちみつ餃子 ◆8X2XSCHEME
2020/02/01(土) 18:56:33.52ID:6nnXKMBq
>>63
goto は自由すぎるけども、ループを何段階も一気に抜けたいとかいう状況がすでにだいぶん自由だと思うぞ。
そういう状況が生まれたらもう駄目なんだよ。
ごちゃごちゃとした使い分けを考えるよりおとなしく goto した方が「そこが悪い」ってのが目立って良い。
67デフォルトの名無しさん
2020/02/01(土) 19:01:47.00ID:YFAnTUnh
一番使いたいのは2段break
行列や画像など2次元構造では当たり前のように2重ループになる

2重ループを抜けたい状況は設計が悪い
と思う感覚が全く理解できない
68デフォルトの名無しさん
2020/02/01(土) 19:01:49.68ID:TULylXcw
構造化を壊さないことを保証した仕組みで脱出したいってことでしょ
69デフォルトの名無しさん
2020/02/01(土) 19:04:12.92ID:YFAnTUnh
2次元構造の2個のループを抜ける為に
非常に関連のある2個のループを別関数に分ける

この方が設計が悪い
というのがおれの感覚
70デフォルトの名無しさん
2020/02/01(土) 19:07:14.52ID:JWECbGc7
>>67
gotoは悪、多重ループは悪、みたいなどこかで聞いたルールを杓子定規に常に遵守すべき絶対ルールのように考える人が少なからずいるんだろうね。声が大きいだけかもしれないけど。
71デフォルトの名無しさん
2020/02/01(土) 19:09:12.42ID:PjJtYhAX
gotoの利用にコンパイラの補佐があればよかったのに
72デフォルトの名無しさん
2020/02/01(土) 19:10:50.63ID:PjJtYhAX
中カッコ、変数の有効範囲含め
スコープ内に飛び込むジャンプを一切禁止、前方のみと決めれば
なかなか直観的でわかりやすいキーワード
だとおもうのに
73デフォルトの名無しさん
2020/02/01(土) 19:19:24.65ID:YFAnTUnh
一切禁止とか言うから
それが絶対だと初心者が思って思考停止する
この典型がgoto

使った方が良い時は使う
再帰も生ポもグローバル変数も多重継承も多重ループも
74はちみつ餃子 ◆8X2XSCHEME
2020/02/01(土) 19:25:00.72ID:6nnXKMBq
>>67
ここでワイが「悪い」って言ってるのは使うなとか別の方法がとれるとかいうほどの強い意味じゃなくてさ、
気を付けなきゃならないポイントとして目立ってもらわなきゃ困るって程度の意味。

だけど、日常的にそこら中でそういうポイントがあるのならやっぱり悪いとは思うけど……。
75デフォルトの名無しさん
2020/02/01(土) 19:26:16.45ID:j/qpVk5O
二重ループの脱出は
[&]{
for(){
 for(){
  return;
 }
}}();
で結論出たはずだが
76デフォルトの名無しさん
2020/02/01(土) 19:29:49.61ID:YFAnTUnh
これはひどい
77デフォルトの名無しさん
2020/02/01(土) 19:44:49.47ID:PjJtYhAX
それオーバーヘッドかからんの?
78デフォルトの名無しさん
2020/02/01(土) 19:47:58.86ID:j/qpVk5O
関数オブジェクトはまともなコンパイラならインライン展開される
79デフォルトの名無しさん
2020/02/01(土) 19:48:45.53ID:7G0Z2VlM
贅沢言いすぎだね
素のPascalなんてreturnすら無いからね
もはやどうやってプログラムを書いたらいいか分からないレベル
80デフォルトの名無しさん
2020/02/01(土) 19:53:54.21ID:7G0Z2VlM
Pascalは完璧な構造化言語を目指したから
入口と出口を常に一つずつにするというポリシーがあって
それゆえreturnが無いんだよね
returnがあると出口があちこちに散らばるので
構造化じゃない、汚い、という考え

なお、breakは有るもよう
81デフォルトの名無しさん
2020/02/01(土) 19:58:58.33ID:+WgC03YT
[&]{
try{
for(){
 for(){
  throw 0;
 }
}catch(...){}
}}();
82はちみつ餃子 ◆8X2XSCHEME
2020/02/01(土) 20:02:08.79ID:6nnXKMBq
抽象的なレベルで考えたら break は
「残りの文が if 式で囲まれていると見なして暗黙のフラグを設定する (そのフラグは暗黙にループの終了条件でもある)」
とも考えられるから、構文糖だといえば構造化は壊れていない。

だけどなぁ、プログラムは人が書くものだし、人にとってどう見えるかも大事なんだよな。
そこらへんは見方によってどうとでも理屈を付けられてしまう。
83デフォルトの名無しさん
2020/02/01(土) 20:04:46.46ID:+WgC03YT
[&]{
try{
for(){
 for(){
  throw 2;
 }
}
}catch(int d)
{printf("%d段階ジャンプしたお¥n",d);}
}();
84デフォルトの名無しさん
2020/02/01(土) 20:10:07.66ID:tav2AwxI
>>82
break 2 も gotoでループを抜けるのも同じ
85デフォルトの名無しさん
2020/02/01(土) 20:24:42.41ID:iBA7Xa3w
>>83
それは最悪
throw 3; って書いてもチェックされないし
86デフォルトの名無しさん
2020/02/01(土) 20:47:35.89ID:BhmlSyWc
>>67
3重ループは? 4重ループは? なんで2だけなの?
87デフォルトの名無しさん
2020/02/01(土) 20:52:34.51ID:TULylXcw
たまに国語力が心配になるやつがいるよな
88デフォルトの名無しさん
2020/02/01(土) 20:53:59.21ID:+WgC03YT
[&]{
try{
for(){
 for(){
  throw "リレミト";
 }
}
}catch(const char*s)
{printf("%sの呪文を唱えた¥n",s);}
}();
89デフォルトの名無しさん
2020/02/01(土) 20:56:56.11ID:BhmlSyWc
>>87
答えられないならレスしないで下さい
ウザいだけです
90デフォルトの名無しさん
2020/02/01(土) 21:07:19.54ID:vKrtBnhX
for () {
for () {
goto done;
}
}
done:

どう考えてもこちらのほうが綺麗
91デフォルトの名無しさん
2020/02/01(土) 21:09:23.19ID:BhmlSyWc
>>90
だな
必要になったことを変に偽装する悪癖を治すべき病人多すぎ
92はちみつ餃子 ◆8X2XSCHEME
2020/02/01(土) 21:14:53.51ID:6nnXKMBq
ほんまになぁ。
そんな簡単なことをラベル付き break だのなんだのって面倒なだけとしか思えぬ。
もう構造化は破綻してるんだからおとなしく goto しとけよな!
93デフォルトの名無しさん
2020/02/01(土) 21:19:44.00ID:dP/tym/A
>>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.
94デフォルトの名無しさん
2020/02/01(土) 21:22:30.66ID:BhmlSyWc
>>93
意味わかんね
なんでそんなことするの?
アホだから? それともバカだから?
95デフォルトの名無しさん
2020/02/01(土) 21:25:42.92ID:dP/tym/A
>>94
It's purely kindness for non-Japanese speaker. Did you not like it?
96デフォルトの名無しさん
2020/02/01(土) 21:26:06.76ID:tav2AwxI
>>92
構造化的には
breakも途中でreturnもgotoでループを抜けるのも同じだよ
97デフォルトの名無しさん
2020/02/01(土) 21:26:27.45ID:BhmlSyWc
Пожалуйста, говорите по-японски.
98デフォルトの名無しさん
2020/02/01(土) 21:29:34.25ID:dP/tym/A
なんだロシア人か
Я не понимаю >>67, потому что я не понимаю японский?
99デフォルトの名無しさん
2020/02/01(土) 21:32:56.91ID:tav2AwxI
100はちみつ餃子 ◆8X2XSCHEME
2020/02/01(土) 21:34:56.10ID:6nnXKMBq
>>96
同じだからそれ以上に新しい文法を持ち込んでもそれほど綺麗にならんって! ということを言いたい。
101デフォルトの名無しさん
2020/02/01(土) 21:36:54.68ID:BhmlSyWc
>>98
Mimi ni Kijapani.
102デフォルトの名無しさん
2020/02/01(土) 21:38:38.94ID:TULylXcw
>>96
gotoは正しく使えばという但し書きがつくでしょ
そこをなんとかしたいという話だと思ってる
それが論点だとするとgoto使えというのは解にならない
103デフォルトの名無しさん
2020/02/01(土) 21:40:19.97ID:BhmlSyWc
>>96
ほんこれ
104デフォルトの名無しさん
2020/02/01(土) 21:42:54.84ID:tav2AwxI
>>102
正しく使う前提なのは当たり前
なんでgotoだと正しく使わない前提になるのか不思議
105デフォルトの名無しさん
2020/02/01(土) 21:43:54.40ID:BhmlSyWc
>>104
ほんこれ
106デフォルトの名無しさん
2020/02/01(土) 21:48:36.93ID:7G0Z2VlM
危ない操作はできないようにしようってのが言語の進化だからな
それ無視して、安全に使うのが前提とか、正しく使うのが前提とか、それ言っちゃね
なんかおかしな方向へ行くよね
107デフォルトの名無しさん
2020/02/01(土) 21:48:59.21ID:TULylXcw
>>104
構造化プログラミングの概念は知ってるんだよね?
108デフォルトの名無しさん
2020/02/01(土) 21:50:07.81ID:7G0Z2VlM
gotoを正しくしか使えないように改良したのがreturn、break、continue
ってことも忘れずに
109デフォルトの名無しさん
2020/02/01(土) 21:54:44.41ID:BhmlSyWc
>>104
構造化プログラミングでは使わない制御構造を
使うべきでない理由が構造化プログラミングって論法に
抜け出せない枠があるとは思わないの?

>>108
continueだけ、それで正解なんだが
他はみんな間違ってるよ
110デフォルトの名無しさん
2020/02/01(土) 21:57:47.27ID:7G0Z2VlM
見てください皆さん、ID:BhmlSyWc ← ひどいですよ
まず何言ってるか分からない
このレベルはきついな
111デフォルトの名無しさん
2020/02/01(土) 22:02:32.59ID:tav2AwxI
>>106
どの辺からgotoが危ない操作だと思うの?
112デフォルトの名無しさん
2020/02/01(土) 22:06:43.33ID:vKrtBnhX
まあ1万行ある関数の中で、5千行目ぐらいにgotoがあって、ラベルが関数の先頭付近にあるとか、それに近いのは見たことあるが、あれはどう考えてもgotoの悪い例だからな
包丁で味噌汁食ってるようなもん
113デフォルトの名無しさん
2020/02/01(土) 22:06:57.37ID:BhmlSyWc
>>110
きつくて気の毒だな
不勉強なやつは自業自得なので同情はしない
114デフォルトの名無しさん
2020/02/01(土) 22:08:59.52ID:BhmlSyWc
>>112
1万行か・・・これ↓より重症だなw
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.10.4.html
115デフォルトの名無しさん
2020/02/01(土) 22:11:31.06ID:tav2AwxI
不定値や無限ループの危険はgotoに限ったことじゃないし
ループを抜けるgotoには関係ない話

goto特有の危険な場面
何を心配してるんだろう
酸っぱいブドウ?
116デフォルトの名無しさん
2020/02/01(土) 22:16:09.36ID:TULylXcw
だめだこりゃ
117デフォルトの名無しさん
2020/02/01(土) 22:19:01.58ID:7G0Z2VlM
gotoはどこへ飛ぶか分からないから読みにくいんだよ
前に飛ぶのか、後ろに飛ぶのか、それすら分からない
飛び先を分かりやすく改良したのがreturn、break、continue
それぞれ飛び先が決まっているから追うのが楽
その英知が分からんっていうならreturn、break、continueを使わずに
全部gotoでやれば?って話
118デフォルトの名無しさん
2020/02/01(土) 22:22:45.11ID:tav2AwxI
関数なんてもっとどこに飛ぶかわからんぞ
119デフォルトの名無しさん
2020/02/01(土) 22:25:22.98ID:tav2AwxI
どこに飛ぶかわかる名前にするってのが普通の発想
意味でも構造でも文章でも好きな名前を付けられる

関数も変数も名前空間も全てそう
120デフォルトの名無しさん
2020/02/01(土) 22:25:32.73ID:TULylXcw
gotoは中にも飛べるの知らないんじゃないこの人
121デフォルトの名無しさん
2020/02/01(土) 22:25:55.92ID:BhmlSyWc
>>117
飛び先じゃなく飛ぶこと自体の問題なんだがw
122デフォルトの名無しさん
2020/02/01(土) 22:26:20.90ID:7G0Z2VlM
つまりはそういう話で、追いやすいように飛び先を制限したいよねーってのが根底に有って
(当然そういうのが念頭にあってreturn,break,continueは生まれたわけで、前例に倣いたい所)
それでブロックに名前を付けるだのbreak 2だのって書き込んでいる人がいるわけで
gotoでいいんじゃね?っていうなら、return,break,continueもgotoでいいんじゃね?
むしろforやwhileもgotoでいいんじゃね?gotoを正しく使えばいいんだろ?ってなる
123デフォルトの名無しさん
2020/02/01(土) 22:26:36.74ID:TULylXcw
構造化プログラミング知らずにgotoいきって使うのはさすがにやばい
124デフォルトの名無しさん
2020/02/01(土) 22:28:23.87ID:BhmlSyWc
>>122
どうなっていれば「追いやすい」のかを
まず明らかにしようぜ

俺ルールでもいいし
広く認知されているルールでもいいし
125デフォルトの名無しさん
2020/02/01(土) 22:31:09.71ID:7G0Z2VlM
巻数はどこに飛ぶか分からないが、必ず元に戻ってくる(のが基本)
行きっぱなしというか、ただのジャンプのgotoやらbreakやらとは違うのだよ
関数のコールは入口と出口が一つになってて非常に構造化されてる好例
こういうところ分からないってのはセンスないよ
126デフォルトの名無しさん
2020/02/01(土) 22:32:56.84ID:7G0Z2VlM
巻数→関数
127デフォルトの名無しさん
2020/02/01(土) 22:35:10.84ID:tav2AwxI
使い所でgotoが使えないのはセンス無い
使い所でgptoを使わないのはコードが見にくい
使い所でgotoを使わないのは危険なコード

goto否定派にレベルを合わせた主張をするとこんな感じ
128デフォルトの名無しさん
2020/02/01(土) 22:42:27.15ID:TULylXcw
やっぱりこいつダメだな
知性がない
129デフォルトの名無しさん
2020/02/01(土) 22:44:49.19ID:tav2AwxI
使い所でgotoを使わないのは知性が無い
130デフォルトの名無しさん
2020/02/01(土) 22:45:34.37ID:7G0Z2VlM
本心では誰もgotoは否定していないんじゃないかな
今は多段breakの機能が無いんだからgotoを使えばいいだろう
しかし、もしgotoを使わないで済む多段breakの新機能があったのなら
それを使ったほうがいいだろうし
じゃーその新機能はどんなものが考えられるか?って遊びだろ?
ブロックに名前付けるだとかbreak nだとかは
131デフォルトの名無しさん
2020/02/01(土) 22:50:41.91ID:wBNP08tW
多段breakは考えた奴は脳味噌が糞すぐる…
ループの深さを変えたとたんにバグるじゃん?
ループの深さは金輪際変えないとか
ループの深さを変えるとき必ずループ全体を机上確認するとかだったら
gotoでも逝けるじゃん??
132デフォルトの名無しさん
2020/02/01(土) 22:53:08.37ID:vKrtBnhX
ああ、そうだな
break 2だとfor文が3重になったときにバグるな
個人的には面白いと思ったが
133デフォルトの名無しさん
2020/02/01(土) 22:53:40.31ID:tav2AwxI
使い所は2次元構造の2重ループとかだよ
134デフォルトの名無しさん
2020/02/01(土) 22:55:40.65ID:rsRLlL5x
画像処理とかで2重ループ良く書くけど、最近2段階breakしたくなった記憶がないな

実は要らないんじゃね
135デフォルトの名無しさん
2020/02/01(土) 22:56:47.94ID:tav2AwxI
じゃあbreakもいらないんじゃない?
136デフォルトの名無しさん
2020/02/01(土) 22:59:11.96ID:7G0Z2VlM
まーC++がプリプロセッサを殺すために進化しているのと同様
Cはgotoを殺すために進化したともいえるわけで
たとえば、関数、for、return、などなど、制御構造にかかわるほとんどの物が
gotoを殺すために有るといってもよい
だから、もっとgotoを殺すにはどうすればよいか、考えるのは自然な発想かと

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

同じ同じ
137◆QZaw55cn4c
2020/02/01(土) 23:01:32.69ID:EspH/Y2K
goto とか break とか continue とか、他の言語(javaとか)でもいろいろ小手先的に弄られているけれども、それに何の意味があるのかいつも不思議におもいますね
C/C++ の goto とかはどう頑張っても関数の中でだけしか跳べないのだから、BASIC の GOTO ほどにはスパゲッティ状態を招けないのではと考えます
無論、その関数が異様にデカければ別ですが、そんなデカい関数を書くほうが問題であって goto が問題なのではないかと
138デフォルトの名無しさん
2020/02/01(土) 23:11:38.33ID:tav2AwxI
ループを抜ける為にだけ使われる変数を使ったループ抜け
世の中にはたくさんこういうコードがある
たくさんのコードを見る機会がある人なら
たくさん見たことがあるはず

gotoネガティブキャンペーンのせいだよ
139デフォルトの名無しさん
2020/02/01(土) 23:11:46.92ID:JWECbGc7
>>136
gotoが使わないで済むように進化してくのは期待している。
ただ現状として、多重ループを抜ける場合みたいにgotoを使うのがシンプルで分かりやすいならば、毛嫌いしたり盲目的に原則振りかざすよりgoto使えばいいだけのことだと思うよ。
140デフォルトの名無しさん
2020/02/01(土) 23:32:29.85ID:TULylXcw
>>138
お前ほんとに病気だな
多重ループ脱出でgotoが簡潔なのはみなわかってる
でもgotoは自由度が高すぎて構造を壊す可能性があるわけ
だから改善するとしたら何があるかという話をしてるだけであって
別にgoto禁止とかの話はしてない
好きなだけ使ってろよ
あと構造化プログラミングぐらい知っとけ
141デフォルトの名無しさん
2020/02/01(土) 23:45:45.20ID:tav2AwxI
>>140
色々と違う
142デフォルトの名無しさん
2020/02/01(土) 23:46:54.20ID:vKrtBnhX
for () {
break label;
} label;

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

こういう風にfor文のお尻にラベルを付けられるようにすれば局所化したgoto風のbreakが使えるのでは
143デフォルトの名無しさん
2020/02/01(土) 23:48:30.11ID:tav2AwxI
for () {
goto label;
} label:;

for () {
for () {
goto label1;
} label2:;
} label1:;
144デフォルトの名無しさん
2020/02/01(土) 23:49:00.26ID:tav2AwxI
今でも出来る
145デフォルトの名無しさん
2020/02/01(土) 23:49:30.89ID:wBNP08tW
Pythonはループにラベルをつける手が使えた
と思った(幻覚でなければ
146デフォルトの名無しさん
2020/02/01(土) 23:52:18.24ID:pUJoLXPw
またgotoの話になってんのかよ。。
だからいっそ禁止にと思ったが、それよりもさらにクソな構文の提案が出てたり。。
想定を超えた馬鹿どもばっかりじゃねーか。
147デフォルトの名無しさん
2020/02/01(土) 23:54:48.66ID:tav2AwxI
無理に会話に入って来なくて良いよ
148デフォルトの名無しさん
2020/02/01(土) 23:59:22.03ID:7G0Z2VlM
ただ、凝りに凝った複雑怪奇なテンプレートより
シンプルに作ったマクロの方が読みやすいって事例も当然あるだろうよ
てか、わりと、最近、残念ながらその傾向が・・・で、C++が嫌われる理由にも・・・
だからgotoを殺すのも上手くやらないとむしろ酷くなる
そこが腕の振るいどころで面白い部分でもあるし、言語作ってる連中もそんなことで頭いっぱい
変なゲーム性が有って、逆にそれがまたダメな部分でもあって
あと、妹大好き
149デフォルトの名無しさん
2020/02/02(日) 00:17:33.29ID:rWwvB4I9
多段breakの使用頻度がそれほど多くないことを加味すれば
break n;方式が妥当だろうね
これだと2重ループを3重ループに書き換えたときにバグる、とか
意味不明なことを言ってる奴もいるが
それは1重ループをbreakで抜けてたのを2重ループに書き換えたらバグった
と言ってるのと同じであって、当たり前の話だし、今でも同じことだ
break n;が一番シンプルで妥当だと思うね
150デフォルトの名無しさん
2020/02/02(日) 00:32:21.06ID:7b/FZYuN
breakの後にマジックナンバーを書くのが気に入らない
定数には意味のわかる名前を付けたい
151デフォルトの名無しさん
2020/02/02(日) 00:33:00.49ID:rWwvB4I9
ただし、break n;のnの部分が変数でもOKとかなってたらかなりウザいが
そこはnは定数と定めたいね、でもC++の場合は定数と言っても・・・
複雑にしようと思えばいくらでも複雑にできるわなー
普通に使う分には問題ないかと
明日からbreak n;が入っても、たぶん誰も困らないし、混乱も起きないだろう
割のいい賭けだし、俺はアリだと思うね
152デフォルトの名無しさん
2020/02/02(日) 00:33:32.69ID:7b/FZYuN
breakとbreak nが同じとか意味不明な主張をなさる御仁がいらっしゃるが
じゃあcontinueがcontinue nになったらどんな地獄が発生するか
考えてみたら良い
153デフォルトの名無しさん
2020/02/02(日) 00:48:04.23ID:rWwvB4I9
別にcontinue n;
全然ありでしょ
これと同等の事を、何か別の方法でやるよりスマート

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



for(;;){
 for(;;){
  if(...){ continue 2; }
 }
}
154デフォルトの名無しさん
2020/02/02(日) 01:00:22.64ID:7b/FZYuN
do {
 do {
  ...
  if (cond) {
   continue 2;
  }
 } while (副作用の有る式1);
} while (副作用の有る式2);
とから?
155デフォルトの名無しさん
2020/02/02(日) 01:03:23.27ID:0Gqmr542
break nなんてやるくらいならbreak label で抜けるループを明示的に指定したいな

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

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

なんだgotoでいいじゃん

個人的には breakto label という記法でループ出口に書いたラベルに飛べるとするのが分かりやすいと思うけど、こんなことに新しい予約語を導入するくらいならgotoで十分だと思う。
156デフォルトの名無しさん
2020/02/02(日) 01:06:28.34ID:7b/FZYuN
break nが良いとか言ってる椰子は
ついでに行番号も復活してほしいと思っているに違いナス
157デフォルトの名無しさん
2020/02/02(日) 01:15:40.31ID:rWwvB4I9
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(...);

これ以外の解釈ってのは難しい
158デフォルトの名無しさん
2020/02/02(日) 02:23:51.88ID:93obPCeA
gotoの話題って今でもこんなに盛り上がるのか
159デフォルトの名無しさん
2020/02/02(日) 02:49:52.74ID:LC7cWz9a
老害が多いから
160デフォルトの名無しさん
2020/02/02(日) 03:26:54.49ID:EDNK6zQt
そういう機能要望みたいなのここでやる意味ある?
C++Slackでやった方がよくない?
161デフォルトの名無しさん
2020/02/02(日) 03:45:22.96ID:mzCY/+E0
英語は敷居が高いよ。
162デフォルトの名無しさん
2020/02/02(日) 05:06:46.10ID:DTIMfhpJ
         ,,-―--、
        |:::::::::::::;;;ノ 
        |::::::::::( 」 <もう構造化は破綻してるんだからおとなしく goto しとけよな!
        ノノノ ヽ_l  
       ,,-┴―┴- 、    ∩_
     /,|┌-[]─┐| \  (  ノ
      / ヽ| |  バ  | '、/\ / /
     / `./| |  カ  |  |\   /
     \ ヽ| lゝ    |  |  \__/
     \ |  ̄ ̄ ̄   |
      ⊂|______|
       |l_l i l_l |
       |   ┬    |
163デフォルトの名無しさん
2020/02/02(日) 06:40:45.35ID:mzCY/+E0
じゃあswitchも要らないって事じゃないか。
164◆QZaw55cn4c
2020/02/02(日) 06:51:18.30ID:9jRHEnns
>>149
break n なんて間抜けの極みだと思いますね
java にはラベル付き break が存在して、ほとんど goto です https://www.sejuku.net/blog/20100
165デフォルトの名無しさん
2020/02/02(日) 07:37:33.82ID:SWo7Ruqh
>>136
Cはgoto殺すために進化してねえよ
Cのgotoが関数外に飛べないのはスタック巻戻しのような仕掛けが複雑になりすぎるからで
構造化プログラミングで否定されるからという理由ではない
構造化プログラミングで否定される制御構造を持たないことにするなら
breakやlongjmpは存在できないはずだ
166デフォルトの名無しさん
2020/02/02(日) 07:44:05.46ID:pBPOCWQ5
結論が先にあって理由が後付けだから支離滅裂、一貫性の欠片もない事を書く
もはや宗教
167デフォルトの名無しさん
2020/02/02(日) 07:46:45.45ID:SWo7Ruqh
ほんと、宗教だね
洗脳されてるやつは強固に思考停止していて
何を言おうが馬の耳に念仏だ
168デフォルトの名無しさん
2020/02/02(日) 08:06:14.41ID:SWo7Ruqh
>>159
根底がわかってねえやつが多いからだよ
古典的な基本がわかってねえやつは若造と爺のどっちに多いだろうね
頓珍漢なことを書いて袋叩きにされたからって逆恨みする精神性なやつはどっちに多いだろうね
169デフォルトの名無しさん
2020/02/02(日) 08:18:25.64ID:9aZda2U6
break labelでいいんじゃね
gotoと同じだが、labelがbreak的な位置にない場合コンパイルエラーになれば良い
170デフォルトの名無しさん
2020/02/02(日) 08:27:24.30ID:DTIMfhpJ
label貼るくらいならgoto使う
171デフォルトの名無しさん
2020/02/02(日) 09:22:07.84ID:mzCY/+E0
gotoは便利なswitchだからね。
便利すぎるわこれ。
これからも積極的に使っていこうと思います。
172デフォルトの名無しさん
2020/02/02(日) 09:40:59.69ID:7b/FZYuN
さすがにgotoでジャンプテーブル化の最適化までやる処理系は
まれだと思う
173デフォルトの名無しさん
2020/02/02(日) 09:43:27.45ID:mzCY/+E0
アドレス直接指定なのに、テーブル必要ないんじゃないの。
テーブル必要ない分、switchより有利なんじゃないかと思いました。
174デフォルトの名無しさん
2020/02/02(日) 09:51:12.60ID:7b/FZYuN
(条件分岐無しの素のgotoだけでどうやってswitchの便利な代替品にするつもりなのやら…
175デフォルトの名無しさん
2020/02/02(日) 09:53:50.90ID:mzCY/+E0
頑張ってひねり出した!!
けどウンコにしか見えない。
納得できるものを頼む。
176デフォルトの名無しさん
2020/02/02(日) 09:55:31.36ID:0Gqmr542
>>175
お前が何をいってるのか、何を考えてるのか理解できないのに、お前を納得させられる奴なんていないぞw
177デフォルトの名無しさん
2020/02/02(日) 10:10:20.38ID:o79zkFFu
お尻にラベルつけて break ラベル; がいいとか言ってる奴は構造化の意味がわかってなさ過ぎ
ラベルは飛び先じゃなくてループに付けて break ラベル; でそのループから抜けるんだよ
なので break ラベル が使える言語はたいていループの頭にラベルをつけるようになってる
あと break レベル数 とか言ってる老害は早く滅びろ
178デフォルトの名無しさん
2020/02/02(日) 10:28:45.43ID:DTIMfhpJ
名前使うならこんな感じか
void main(){
auto scope1 {
for(;;){
 for(){
  break scope1;
 }
}
}
179デフォルトの名無しさん
2020/02/02(日) 10:29:18.43ID:mzCY/+E0
>>176
俺自身何を言っているのかよくわからないのだが。
180デフォルトの名無しさん
2020/02/02(日) 10:31:44.19ID:DTIMfhpJ
もしくは、forの直後
void main(){
for(;;)scope1{
 for(;;){
  break scope1;
 }
}
}
181デフォルトの名無しさん
2020/02/02(日) 10:58:10.77ID:MNdu0823
void main()の時点で読む気失せた
182デフォルトの名無しさん
2020/02/02(日) 11:16:46.30ID:DTIMfhpJ
んだこんにゃろ
183デフォルトの名無しさん
2020/02/02(日) 11:22:39.21ID:D8WvcGqJ
ループの先頭にラベルを書くくらいなら
gotoの方が分かりやすい
184デフォルトの名無しさん
2020/02/02(日) 11:25:45.57ID:mzCY/+E0
あの、スレとは全然関係ないんだけど。
Boostでデバッグとリリース判別するマクロってありますか?
イテレータを1億回ほど回すのでデバッグだけテストを迂回したいんですが。
185デフォルトの名無しさん
2020/02/02(日) 11:30:31.96ID:9aZda2U6
なぜboost?
186デフォルトの名無しさん
2020/02/02(日) 11:34:47.86ID:mzCY/+E0
NDEBUGを知らなかったからです。
おまえらおせーよ。
187デフォルトの名無しさん
2020/02/02(日) 11:39:04.55ID:SWo7Ruqh
NDEBUGってISO/IEC9899やん
おまえさんがboostっていうから
レスポンス鈍かったんだよ
188デフォルトの名無しさん
2020/02/02(日) 11:48:10.68ID:mzCY/+E0
だよね。
そうだと思いました。
189デフォルトの名無しさん
2020/02/02(日) 11:49:31.89ID:mzCY/+E0
今度からはよく考えて質問しようと思います。
190デフォルトの名無しさん
2020/02/02(日) 14:38:02.14ID:rWwvB4I9
今の一重ループを抜けるときの普通のbreakにはラベルを付けないのに
多重ループを抜けるためのbreakにはラベルが無いと読みにくくなるっていう
発想というか対称性というか整合性というか必然性が全く見えないんだが
今ラベル無しの一重breakで誰も発狂することもなく普通に使えているのに
多重breakになった瞬間にラベルが無きゃダメってなるのはなんか弱い
同じことを二回書いたけども
ラベル無しでも別に普通に読めるでしょ、今まで読めてるんだから
大体ラベル付けるんならgotoと手間自体は変わりないしな
191デフォルトの名無しさん
2020/02/02(日) 14:40:18.63ID:mzCY/+E0
今多発今多動ラ大
読み解けなかった。
192デフォルトの名無しさん
2020/02/02(日) 14:41:51.46ID:gkoi3ncl
>>190
同意
193デフォルトの名無しさん
2020/02/02(日) 14:43:14.46ID:mzCY/+E0
え、わかるんだ。
すげー。
194デフォルトの名無しさん
2020/02/02(日) 14:47:27.35ID:gXxB23XL
下方向にだけ飛べるgoto相当機能があればgotoは要らなくなるんじゃない?
195デフォルトの名無しさん
2020/02/02(日) 14:53:57.04ID:7b/FZYuN
>>190は、Cにgoto <label>とbreakがあるのになぜCはbreak nを設けるところまで踏み込まなかったのか、とか
break <n>で即値<n>に行き当たったコード閲覧者が行き先を知るために何をせねばならないかとか、
考えた方が良いので
は…
196デフォルトの名無しさん
2020/02/02(日) 14:55:47.03ID:0Gqmr542
>>190
break nを勧めている人?
対象が1段なのと複数段とでは大きなギャップがあるでしょ。単純に対称性があると言えるものではないと思う。
ラベルつけるならgotoと手間が変わらないというのは同意。ただ、重要なのは手間が減ることではなく、複数段のループの外に出ることが明示されることだから、gotoと意味が混同されず同じ程度の手間でできる記法があるならそれは嬉しい。
197デフォルトの名無しさん
2020/02/02(日) 14:56:57.31ID:EDNK6zQt
現実のC++について話せ
ここで新機能の導入について議論しても無駄だ
フォーラムでやれ
198デフォルトの名無しさん
2020/02/02(日) 14:57:45.57ID:gkoi3ncl
手間が減ることは重要だよ
ラベル名を考える手間をかけて良いならgotoで良い
199デフォルトの名無しさん
2020/02/02(日) 15:01:24.88ID:rWwvB4I9
大体だよ、多重ループはbreakで抜けれないので、仕方なくgoto使うときの
そのgotoを使う都合で必要になった、そのラベルをだよ
じゃーブロックにラベルをつけましょう、ってなんでそーなんだよ
元々のbreakにはラベルなんかねーのに
breakにラベルが無くて混乱したやつ居るか?

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

ラヘルラベルって、そのラベルがどこ由来か考えてみろよ、gotoだろ?
もう一度言うが、もともとのbreakにはラベルなんかないし、それでみんな普通に過ごせてるし、混乱も起きてない
ただ、gotoで抜けるためには文法上/機能上ラベルが必要だったねってだけで、そこに着目しても仕方がない
本質的には無くても別に困らない
200デフォルトの名無しさん
2020/02/02(日) 15:05:16.61ID:jVWLSRwc
ソースコードチェック目的でプログラム読むとき、gotoが出てきたら
そのgotoの使用方法が問題ないものなのか、いちいちチェックしないといけない。
breakならループ抜けるという意図が明白なので、チェックしなくてよい。
201デフォルトの名無しさん
2020/02/02(日) 15:11:47.92ID:rWwvB4I9
そんなに名前が無いと発狂するんならもうgoto使えば?って思うし
なんなら関数化して正式に名前付ければって思うし
そこまでしたくないってときにbreak nが便利なわけだ
やりたいことは「多重ループから抜けたい」であって
「名前を付けたい」ではない!!
202デフォルトの名無しさん
2020/02/02(日) 15:11:53.90ID:gkoi3ncl
関数コールも問題のないコールかどうかチェックしないといけないから
使わない方が良い
203デフォルトの名無しさん
2020/02/02(日) 15:14:22.99ID:EDNK6zQt
それならもうポインタもグローバル変数もマルチスレッドも大量のチェックが必要だから使ってはいけないってことで
204◆QZaw55cn4c
2020/02/02(日) 15:14:36.78ID:Rn0kkYyt
>>199
私と認識が似ていますね

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

>>164
java にはラベル付き break が存在して、ほとんど goto です https://www.sejuku.net/blog/20100
205デフォルトの名無しさん
2020/02/02(日) 15:15:16.61ID:7b/FZYuN
現行のC/C++にはgoto <label>がある一方、break <n>は無い
もしbreak <n>の追加がgoto <label>の実装より難しかったからやらなかったのだとしたら、
break <n>の飛び先がgoto <label>の飛び先より簡単にワカルから優れているという主張は根拠を失う

break <n>はわかりにくいか、さもなくばgoto <label>と同等なんである
206デフォルトの名無しさん
2020/02/02(日) 15:16:38.00ID:mzCY/+E0
constがスレッドセーフなのも困った。
207デフォルトの名無しさん
2020/02/02(日) 15:24:46.36ID:jpTipLln
>>201
現実ありえないのは重々承知したうえで書くけど
100重ループを脱出するとき数を数えたくないだろうなって思うじゃん
ほかにも3重ループとかで2ndと3rdのループから共通の脱出先ラベルにもできるわけじゃん
文法を拡張する前提ならそこまで想定すべきだと思うね

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

というかそういう観点からラベル付きbreakというのは他の言語にはあるわけで
で今話してるのはもっと書きやすく読みやすくできないかというトピックでしょ
break Nは使えるだろうけど洗練されてない感じ
208デフォルトの名無しさん
2020/02/02(日) 15:27:11.67ID:gkoi3ncl
break [n] はラベル名を考えなくて良い利点がある
使えるなら使いたい

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

ループの先頭で名前を付けるのはgotoより見づらいから使わない
209デフォルトの名無しさん
2020/02/02(日) 16:01:27.30ID:o79zkFFu
break n とか言ってる奴は何故か>>150をスルーしてて笑うわ
210デフォルトの名無しさん
2020/02/02(日) 16:07:52.43ID:nz0OxFB3
他の人は「マジックナンバー」だと思わなかったからでは。
211デフォルトの名無しさん
2020/02/02(日) 16:20:03.66ID:gXxB23XL
foobarやhogeを超える人気なダミー文字列を考えたほうがよほど建設的だぞ、君たち。
212デフォルトの名無しさん
2020/02/02(日) 16:35:55.51ID:SWo7Ruqh
break 5; //C
GOTO 5 : REM BASIC
213デフォルトの名無しさん
2020/02/02(日) 16:37:04.55ID:gkoi3ncl
マジックナンバーがイヤなら
break break;
214デフォルトの名無しさん
2020/02/02(日) 16:50:03.80ID:DTIMfhpJ
関数で置き換える
引数がめんどうならラムダで置き換える
returnが多重breakの代わりになる
215デフォルトの名無しさん
2020/02/02(日) 16:58:55.02ID:SWo7Ruqh
>>214
多重ループを単一関数に書くって前提だね
216デフォルトの名無しさん
2020/02/02(日) 17:03:09.93ID:7b/FZYuN
>引数がめんどうならラムダで置き換える ←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()は引数がぞろぞろ並ばねばならない
217デフォルトの名無しさん
2020/02/02(日) 17:05:11.10ID:+9zyTEwm
>>216
>>75
218デフォルトの名無しさん
2020/02/02(日) 17:06:58.49ID:7b/FZYuN
>>217
左様
それがラムダ式を適用して解決づべき適切な場合である(キリ
219デフォルトの名無しさん
2020/02/02(日) 17:15:36.03ID:SWo7Ruqh
ジーオーティーオーというスペルでなければ
制御構造はそのままでいいと言うクソ論法
220デフォルトの名無しさん
2020/02/02(日) 17:52:12.55ID:mzCY/+E0
スレとはあまり関係ないんだけど、nodiscard属性を無視するにはどうしたらいいですか?
221デフォルトの名無しさん
2020/02/02(日) 17:59:47.60ID:MNdu0823
変数で受けといてその変数をガン無視すればいいんじゃないの
未使用変数の警告出るだろうけど
222デフォルトの名無しさん
2020/02/02(日) 18:00:14.37ID:mzCY/+E0
やってみます。
アリガト。
223デフォルトの名無しさん
2020/02/02(日) 18:11:02.03ID:o79zkFFu
>>210
お前の言う「他の人」はマジックナンバーの意味わかってないってことか?
このスレ見てたらありえなくもないかと思えてきたわw
224デフォルトの名無しさん
2020/02/02(日) 18:13:54.31ID:mzCY/+E0
あと三日くらいしたらお前より出来るようになってるから。
225デフォルトの名無しさん
2020/02/02(日) 18:24:38.31ID:jpTipLln
>>220
(void)func();
226デフォルトの名無しさん
2020/02/02(日) 18:28:22.08ID:x1m+isRG
>>208
昔のBASICは、行番号を勝手に付けてくれていたのでgotoでもラベル名を考えなくて済んだのでとても便利だった。
227デフォルトの名無しさん
2020/02/02(日) 18:30:04.52ID:x1m+isRG
>>226
なお、アセンブラでは行番号がなかったのでラベル名を考える必要があったが、
意味のあるラベル名を考え出すのは大変だったので、分かり易い場所以外は、
多くの人が、lab1: lab2: lab3: のような連番を使う傾向があった。
228デフォルトの名無しさん
2020/02/02(日) 18:30:14.15ID:mzCY/+E0
>>225
メモっときます。
ありがと。
229◆QZaw55cn4c
2020/02/02(日) 18:31:42.37ID:Rn0kkYyt
>>226
>昔のBASICは、行番号を勝手に
auto 文だったかな…
230デフォルトの名無しさん
2020/02/02(日) 19:36:27.12ID:7b/FZYuN
VB6には行番号は無かった
231デフォルトの名無しさん
2020/02/02(日) 20:26:55.80ID:GV9CDSqK
みんなってc++で何を作ってるの?
ゲーム?
232デフォルトの名無しさん
2020/02/02(日) 21:07:54.17ID:YP+sfqkD
何も作ってないやつがほとんどだろ
233デフォルトの名無しさん
2020/02/02(日) 21:15:29.52ID:GV9CDSqK
すまん俺の聞き方が悪かったのかもしれん
最近プログラミングの勉強始めて、各言語の用途とか調べたんだけど、ここでも一応聞いてみたかったの
何を作ってるって言うより、どんな開発に携わってるかっていうのを聞きたかった
234デフォルトの名無しさん
2020/02/02(日) 21:21:43.96ID:DTIMfhpJ
テキストエディター
3Dモデラー
メーラー
235デフォルトの名無しさん
2020/02/02(日) 21:25:09.08ID:vTjBAXNr
競技プログラミング
236デフォルトの名無しさん
2020/02/02(日) 21:39:16.36ID:GV9CDSqK
アプリ開発にも使われるのかー
あざした
237デフォルトの名無しさん
2020/02/02(日) 22:06:04.81ID:mzCY/+E0
いまダブルアレイやってる。
238デフォルトの名無しさん
2020/02/02(日) 22:08:30.12ID:mzCY/+E0
検索はstd::setやstd::unorderd_setより速いけど、挿入が一桁遅い。
静的構築が速いというので、それもやってみたけど、2/3くらいにしかならなかった。
239デフォルトの名無しさん
2020/02/02(日) 22:10:09.36ID:mzCY/+E0
検索はstd::setの10倍くらい早いな。
240デフォルトの名無しさん
2020/02/02(日) 22:15:25.20ID:0Gqmr542
>>239
相談ができたらまた来い
241デフォルトの名無しさん
2020/02/02(日) 22:54:22.23ID:mzCY/+E0
>>240
よろしくお願いします。
242◆QZaw55cn4c
2020/02/02(日) 23:01:19.98ID:Rn0kkYyt
初学者的な質問です、よろしくお願いいたします。
バイナリーファイルを
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
243◆QZaw55cn4c
2020/02/02(日) 23:18:14.73ID:Rn0kkYyt
>>231,233
私は今のところエラトステネスの篩にご執心、という体たらくです…
244デフォルトの名無しさん
2020/02/03(月) 00:01:01.18ID:8riGTZSm
エラトステネスのふるいで
なんでファイルのリードが必要?
245◆QZaw55cn4c
2020/02/03(月) 00:22:49.42ID:X2PbBOAI
>>244
結構昔から
http://www.asahi-net.or.jp/~KC2H-MSM/pbsb/pbsbm006.htm
にとても興味を持っていたのです、二つの隣り合った素数の差を「素数のギャップ」と呼ぶことにしたとき、

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

10^14 までの数であっても全部、篩としてメモリに載せられないので、さてどうしたものかと思案中です、最終的には年スパンでずっと計算させ続けるのに耐えられるようにしたい、と
246デフォルトの名無しさん
2020/02/03(月) 00:38:27.28ID:e9E2NTEb
その問題だけなら
2次キャッシュに収まるくらいに分けてふるえば速い
間隔も大して大きくならないので
ヒストグラムはオンメモリで済む

スレッドも簡単に分割出来るので
論理コア数と同じだけスレッドを作って回す
247◆QZaw55cn4c
2020/02/03(月) 00:44:34.76ID:X2PbBOAI
>>246
コメントありがとうございます

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

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

いただいたアイディアは、どれも私には難易度が高いのですが、ぼちぼち書いていきます…
248デフォルトの名無しさん
2020/02/03(月) 00:44:55.23ID:e9E2NTEb
AVXレジスタを使って小さな素数の倍数を消して
ビット命令で大きな素数の倍数を消す
大きな素数の倍数は210ずつ処理する

昔素数の数を数えるプログラムを書いたことがあって
記憶に残ってる範囲ではこんな感じ
249デフォルトの名無しさん
2020/02/03(月) 00:55:53.66ID:jdU9ROmC
>>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の行番号も連動して変わる
仕組みです。
250◆QZaw55cn4c
2020/02/03(月) 00:55:55.99ID:X2PbBOAI
>>248
コメントありがとうございます!

>大きな素数の倍数は210ずつ処理する
私は、2*3*5 = 30 でわりと満足していましたが、2*3*5*7=210 まで拡張されたのですか!?うーむ…
251◆QZaw55cn4c
2020/02/03(月) 00:57:46.55ID:X2PbBOAI
>>249
mon に入って、プログラムタイトルのコメントの行番号を手打ちで全部 0 にする、とか…
どうでもいい話でごめんなさい…
252デフォルトの名無しさん
2020/02/03(月) 01:52:57.35ID:YoBHNt10
素数は、6n ± 1 か。
6n + 1, 6n + 5 だけ

6n + 3 は、3の倍数だから、素数じゃない
253252
2020/02/03(月) 01:58:12.48ID:YoBHNt10
A = 6n + 1, B = 6n + 5 とすると、

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

BA なら、2
BB なら、6

A,B になる確率がランダムとすると、6 になる確率が2倍!
254はちみつ餃子 ◆8X2XSCHEME
2020/02/03(月) 11:14:43.40ID:HBzF0G80
>>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 のラッピングとして実装することを想定したんじゃないかなぁ。
255デフォルトの名無しさん
2020/02/03(月) 12:59:28.21ID:jOrmfTQL
>>250
ビット命令が48個続くだけ
それほど大変じゃない

今だともっと良い命令があるかも
256◆QZaw55cn4c
2020/02/03(月) 20:59:04.78ID:X2PbBOAI
>>254
コメントありがとうございます。いまいちよくわかっていない iostream. の全体像を掴めるよう、いただいたヒントも頼りに潜ってみます

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

fseek() が 64bit オフセットならいいのですが
あるいは win32api::SetEndOfFile() のような、オフセットを指定して trunc する方法があればいいのですが
>>242 のバイナリファイルは単に uint64_t な素数を突っ込んでいるものですが、ある日末尾が中途半端にちょん切れてしまったのです…
257デフォルトの名無しさん
2020/02/03(月) 21:17:59.99ID:Exvuz9nd
>>256
それファイルに書く必要ある?
仮想メモリ頼りにメモリでやれば?
258はちみつ餃子 ◆8X2XSCHEME
2020/02/03(月) 21:26:54.32ID:HBzF0G80
>>256
巨大なファイルにちょくちょくシークしながらアクセスするなら
メモリマップトファイルを使った方が楽やで。
259はちみつ餃子 ◆8X2XSCHEME
2020/02/03(月) 22:20:22.51ID:HBzF0G80
>>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

本当に「入出力」を司っているのはバッファであって、
ストリームはそれに書式化の機能をかぶせている感じ。
260◆QZaw55cn4c
2020/02/05(水) 22:01:06.74ID:uTOW/8lH
>>257
それはダメでした。win7, 16GB、素数の大きさが10^11 程度でスラッシングが発生して win7 では使い物になりません
GIMPS cli のように、普段は意識することなく3年くらいかけて計算するようにしたいです

>>258
着々と容量が増加するファイルに対して mmap は使えるのですか?win32api::CreateFileMapping では mmap を確立した後にファイルサイズを増やしてはいけない制限がありました
261デフォルトの名無しさん
2020/02/05(水) 22:31:00.17ID:zWcxLf4u
最初から最大ファイルサイズにしとくとか
262はちみつ餃子 ◆8X2XSCHEME
2020/02/05(水) 22:32:01.15ID:85RuEno5
>>260
そんな制限があるんか。

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

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

てなわけで、若干の面倒くさい手順が要るけどそれっぽいことは出来る。
この手順をいい感じに抽象化するクラスを作ったら色々と使えそうやな。
期待してるで!
263デフォルトの名無しさん
2020/02/05(水) 22:35:23.33ID:bIRSo9XQ
普通にAPIで巨大ファイル作れてるけど
CreateFile / WriteFile
264はちみつ餃子 ◆8X2XSCHEME
2020/02/05(水) 22:50:53.65ID:85RuEno5
最初からどでかいファイルを作る余裕があるならその方が簡単ではあるわな。
どんくらいデカいのがいるんや?
せいぜい数十ギガとかそんなもんやろ?
ケチらんと行くっちゅうのもアリや。
265デフォルトの名無しさん
2020/02/05(水) 23:33:50.77ID:bIRSo9XQ
CreateFile
WriteFile
ReadFile
SetFilePointerEx
SetEndOfFile
266デフォルトの名無しさん
2020/02/06(木) 13:03:55.59ID:sNihMBVC
こんな感じ?
.... 0101 0000 0100 0101 0001 0100 0101 0110
267デフォルトの名無しさん
2020/02/06(木) 16:50:43.13ID:zCd4f5nI
STLコンテナ (仮にvとする) のサイズの分だけfor文を回したいってときに
for(int i=0; i<v.size(); i++)
と書くことが多いんだが、v.size()はintじゃないので警告が出る。

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

特定の環境、コードでのテストはできるが、一般論として、あるいは皆さんのスタンスとしてはどうですか。
268デフォルトの名無しさん
2020/02/06(木) 17:11:56.16ID:v+RXRHu+
コンパイルの警告のためだけだから
実行時コストは0じゃね
269デフォルトの名無しさん
2020/02/06(木) 17:13:00.89ID:v+RXRHu+
手でタイプするコストうんぬん言うなら
マクロで #define LEN(s) ((int)s.size())
270はちみつ餃子 ◆8X2XSCHEME
2020/02/06(木) 17:18:31.70ID:jSrTrJa0
>>267
最も正統派なのはこうかな?
for(decltype(v)::size_type i=0; i<v.size(); i++)
常識的に考えてコンテナの size_type が std::size_t より大きいことはあまりない (大抵は等しい) と思うので、面倒なときは std::size_t を使う。

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

状況によるでしょ。
271デフォルトの名無しさん
2020/02/06(木) 17:24:46.97ID:2fVM4odH
int i = 0; と書かずに size_t i = 0; と書くのはどうだい?
v.size() が本当に size_t を返すか、という問題はあるが。

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

i の型が int でないと不味いのかも知れんけど。
272デフォルトの名無しさん
2020/02/06(木) 17:39:05.78ID:/W9iMVJD
>>267
コスト(性能)最優先か
見やすさ最優先か
タイプ数最優先か
次第

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

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

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

業務で集団でのコーディングの場合は
他の部分を見て空気を読む
273デフォルトの名無しさん
2020/02/06(木) 17:43:47.39ID:/W9iMVJD
>>269は色々な理由で無い
274デフォルトの名無しさん
2020/02/06(木) 17:44:41.65ID:v+RXRHu+
for(unsigned int i=0, len=v.size(); i<len; i++)
これもよく見るか
275デフォルトの名無しさん
2020/02/06(木) 17:46:58.02ID:5ihPHl5F
auto i=0uにしてるな
276デフォルトの名無しさん
2020/02/06(木) 17:48:08.30ID:VEO7DUBt
>>269
template <typename T> inline auto len(T s) { return s.size(); }
277デフォルトの名無しさん
2020/02/06(木) 17:48:51.04ID:VEO7DUBt
あ、右辺値参照わすれたw わりーわりー
278デフォルトの名無しさん
2020/02/06(木) 17:49:18.67ID:/W9iMVJD
警告を消す為だけなら設定を変えるのが良い
279デフォルトの名無しさん
2020/02/06(木) 17:50:35.38ID:/W9iMVJD
>>276
何の解決にもなってない
280はちみつ餃子 ◆8X2XSCHEME
2020/02/06(木) 17:54:27.57ID:jSrTrJa0
>>279
良くはないがマクロよりはマシ
281デフォルトの名無しさん
2020/02/06(木) 18:09:13.09ID:3IyMYliq
>>274
その形が一番、速度的には良い。
forの第二式は毎回評価されるが、v.size()の部分をコンパイラが自動的に最適化するのは非常に難しい場合があるから。
282デフォルトの名無しさん
2020/02/06(木) 18:11:29.18ID:3IyMYliq
v.size()の値が、ループ内で変化しない「ループ定数」であると判断するのは
コンパイラにとってはものすごく難しい場合がある。
ループ定数であると判断された場合にのみ、>>274のような最適化が行われる可能性が出てくるが、判定できなければループするたびに毎回評価されてしまうのでループの実行速度が遅くなってしまう。
283デフォルトの名無しさん
2020/02/06(木) 18:30:55.84ID:F7wYIGq0
マクロってそんなに危険なんですか。
284デフォルトの名無しさん
2020/02/06(木) 18:33:27.11ID:3IyMYliq
>>283
本人だけが開発していて、記憶力が優れていて絶対に使い方を間違いなければ特に問題ないと思うが、使い方を間違うと危険なことがある。
エラーも出ずに変な動作をしてしまうことがある。
でもそれさえ気を付けていれば特に問題ないとも言える。
285デフォルトの名無しさん
2020/02/06(木) 18:37:31.86ID:3IyMYliq
>>269
マクロで書く場合、
#define LEN(_s_) ((int)((_s_).size()))
と書いたほうが良い。
特に、s や _s_ を()で囲むのは必須。
sを_s_と書くのは、ミスタイプがあった場合の備え。
例えば、マクロの仮引数にsと書いているのに、マクロの定義部分をtと
書き間違えていて、かつ、マクロを使う場所に t という変数がたまたま使われて
いたとすれば、エラーにならないのに間違った動作をしてしまう。
_s_と書いていれば、_s_という変数は絶対に使われないのでこの心配がない。
そのため、マクロの引数は伝統的に、_s_などのように書くことが推奨されている。
286デフォルトの名無しさん
2020/02/06(木) 18:50:57.77ID:v+RXRHu+
バッドノウハウ紹介乙

>>285
>>276
287デフォルトの名無しさん
2020/02/06(木) 19:30:05.95ID:/W9iMVJD
>>280
適してるかどうかはともかく
>>269は解決にはなってる
>>276は解決になってない
288デフォルトの名無しさん
2020/02/06(木) 19:38:40.11ID:zCd4f5nI
皆さんありがとうごさいます。
結構難しいですね。

>>274
> for(unsigned int i=0, len=v.size(); i<len; i++)
これは
for(int i=0, len=(int)v.size(); i<len; i++)
としても性能上そう変わらないですよね?
ループ変数はintであってほしいと思うので、これが自分には向いているように思いました。
289デフォルトの名無しさん
2020/02/06(木) 19:42:58.30ID:bk3hpXlE
>>275に一票
290デフォルトの名無しさん
2020/02/06(木) 20:10:32.24ID:9e+8kNR/
キャスト一回って機械語4つくらいじゃあないの?
そこまでシビアってのは競技プログラミングか脳手術ロボットでも作ってんの?
291デフォルトの名無しさん
2020/02/06(木) 20:24:03.42ID:/W9iMVJD
4個もいらん
292デフォルトの名無しさん
2020/02/06(木) 20:29:38.17ID:/W9iMVJD
糞コンパイラまで考えてパフォーマンスを考えると>>288だけど
そもそもコンテナ経由でアクセスする時点でそんな事は誤差

そのループに非常に時間がかかるなら
ループ全体で最適化しないと
293デフォルトの名無しさん
2020/02/06(木) 20:40:31.72ID:3IyMYliq
>>290
同じBIT数やBIT数が少なくなる場合の整数型から整数型へのcastは、マシン語では0命令(命令が出力されない)。
高級言語では違う型でもマシン語レベルでは変わらないため。
BIT数が多くなる場合には、x86の場合は、movzx や movsx が使われる。
294デフォルトの名無しさん
2020/02/06(木) 20:41:12.62ID:3IyMYliq
>>292
実際には、最適化が上手く行かないことも多いので差が出てくることは多い。
295デフォルトの名無しさん
2020/02/06(木) 20:42:39.58ID:3IyMYliq
>>293
つまり、符号無しや符号付の区別はマシン語ではないので C/C++言語で
castしても高級言語レベルでの意味が変わるだけでマシン語レベルでは
何の命令も増えることはない。
296デフォルトの名無しさん
2020/02/06(木) 20:49:08.28ID:VEO7DUBt
素直にrange-based-for
これが出てきたことの影響のでかさがわかってないやつ多すぎ

禿4にはfor_eachを使う前にもっと適した関数を探せとあるが
本当にそうか自分の頭で考えろ
297デフォルトの名無しさん
2020/02/06(木) 20:56:38.87ID:/W9iMVJD
コストを気にしてる人に対してトンチンカン
298デフォルトの名無しさん
2020/02/06(木) 21:03:18.93ID:/W9iMVJD
普通のコンパイラなら
コンパイル単位内の関数は一緒に最適化するので
.size() の中で値を返してるだけなら
ループの外に追い出してくれる
ターゲットがPCなら気にするな

それよりv[i]の方が重い
299デフォルトの名無しさん
2020/02/06(木) 21:03:40.80ID:VEO7DUBt
何もわかってねえやつ
300デフォルトの名無しさん
2020/02/06(木) 21:17:40.42ID:X3a4Tx/S
未だindexループよりrange-basedのほうが早い処理系がない件

>>298
v[i]が重いってどんなstlコンテナだよ
301◆QZaw55cn4c
2020/02/06(木) 22:12:04.60ID:6P0xXhLK
>>267
>警告を一つ残らず潰したいタチだから
ここまでは同感です

>毎回こういうのはintにキャストしてるんだが、
私なら int i を unsigned int i にしますが
302デフォルトの名無しさん
2020/02/06(木) 22:16:59.41ID:cE8ku0Th
templete<typename T>auto LEN(const T& v)->signed T{return (signed T)v;}
303デフォルトの名無しさん
2020/02/06(木) 22:22:15.30ID:j/UITOXa
とりあえず大きい方に合わせとけば間違いないんだからsize_tでいいじゃん
そのvの要素が将来に渡って21億個を超えない保証がどこにある?
304デフォルトの名無しさん
2020/02/06(木) 22:45:07.03ID:/W9iMVJD
>>300
整数のキャストに比べればはるかに重い
そのレベルを気にするなら生ポ
305デフォルトの名無しさん
2020/02/06(木) 22:53:37.31ID:sigCaOr9
x86なら32bit命令使った方がバイナリ小さい
306デフォルトの名無しさん
2020/02/06(木) 22:57:14.86ID:sigCaOr9
>>304
vectorだと生ポと変わらんでしょ
もちろん最適化前提で
307デフォルトの名無しさん
2020/02/06(木) 23:03:20.12ID:YUB/hFRs
>>300
range-basedはiterator
c++のiteratorはindexが速くなる連続アドレスのコンテナならpointerと同じコンパイル結果になる

indexアクセスがpointerより遅くないなら、それはコンパイラの最適化のお陰
308デフォルトの名無しさん
2020/02/06(木) 23:13:46.15ID:/W9iMVJD
>>306
生ポと変わらなきゃ良いんだけど
変わるんだよ
VisualStudioやチープなコンパイラだと

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

実はメモリアクセスが支配的で
他の最適化は全く意味がないとか
309デフォルトの名無しさん
2020/02/06(木) 23:20:09.64ID:/W9iMVJD
SIMD命令 / DSP命令 / スレッド分け / GPU
他のループと合わせる / ループを分ける
ループアンロール
依存性の削減 / 式変形
アルゴリズムの改善
キャッシュ化 / テーブル化

いろんな最適化がある
310デフォルトの名無しさん
2020/02/06(木) 23:45:25.65ID:f00f0WlE
vectorの[]は定数時間
311はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 01:10:19.15ID:BIRgOLIs
ところで元々の質問の >>267 は整数の型が合わないのどのくらい気にする?
っていうのを「一般論として」聞いてるので、これに対しての選択肢を派閥系統樹形式にしてみた

├→ きちんと合わせる派
│  ├→ その環境で合ってれば良いよ派 (移植性は気にしない派)
│  ├→ コンパイラの警告は潰す派
│  │  ├→ 理解しなくてもキャストで合わせるので十分派
│  │  └→ 警告される箇所は仕様の詳細を調べる派
│  └→ size_t とか size_type とか使え派 (言語仕様原理主義派)
├→ 問題がなければ気にしない派
│  ├→ 問題に気づかない派 (鈍感派)
│  ├→ 実行コストに敏感派
│  │  ├→ 最適化はあてにする派 (モダン開発環境派)
│  │  └→ 最適化はあてになんないよ派
│  │     ├→ 低レイヤ派
│  │     ├→ 老害派
│  │     ├→ 諦め派
│  │     └→ ベータ開発環境追いかけ派
│  └→ 状況と程度による派 (柔軟派)
└→ えっ、それって駄目だったん? 派
    ├→ 初心者派
    └→ 無知派
312デフォルトの名無しさん
2020/02/07(金) 02:51:26.03ID:dGY48don
>>278
業務外だと、とは書いてあるけど一応突っ込んでおくと
もしそれがコンパイラの警告レベルを下げるとか小さい型へのキャストの警告を無くすとかなら
それはバッドノウハウだよ、真似しないように
313デフォルトの名無しさん
2020/02/07(金) 03:23:36.63ID:yxrGSGnH
じゃあ俺、えっ、それって駄目だったん? 派でお願いします。
314デフォルトの名無しさん
2020/02/07(金) 03:50:27.48ID:yxrGSGnH
テストの品質がすべてを決めるような気がしてきた。
315デフォルトの名無しさん
2020/02/07(金) 03:57:04.21ID:plErZoHk
>>311
わし、こうみえて「警告される箇所は仕様の詳細を調べる派」や
その上で、問題なければ「状況と程度による派 (柔軟派)」に再度ブランチする派
316デフォルトの名無しさん
2020/02/07(金) 04:00:36.65ID:yxrGSGnH
Boostは警告を無視する派、GoogleはMicrosoftの問題なので修正する予定はない派。
ってことは、警告だしっぱなしで構わないって事では?
317デフォルトの名無しさん
2020/02/07(金) 04:01:58.31ID:yxrGSGnH
目grepが難しいので、警告は消すしかないんだけど。
318デフォルトの名無しさん
2020/02/07(金) 04:04:17.66ID:yxrGSGnH
変数の大きさが変わると同じ値のビット表現が変わるのはしんどいので、符号が一番右端にあったほうが良かったんじゃないの。
右端ならビット表現が変わらない。
319デフォルトの名無しさん
2020/02/07(金) 05:13:16.79ID:zrCiCWWN
型違い面倒だからautoにしても警告出るから何でやおもたらi=0でintだったでござる派
320
HTMLにしろコンパイラにしろ、Microsoft案のほうが合理的と思うけどな。
規格は政治だよね。
321デフォルトの名無しさん
2020/02/07(金) 06:42:07.56ID:52vnIbYM
>>302
signed Tはできねえぞ
std::make_signed_t<T>にしないと
322デフォルトの名無しさん
2020/02/07(金) 06:57:58.73ID:52vnIbYM
> コンパイラの警告は潰す派

キャストつーか、#pragmaを使ったりもするね
もち、規格票で自分が悪いのかコンパイラのお節介かはっきりさせてからだけど
323デフォルトの名無しさん
2020/02/07(金) 07:21:23.65ID:9DO99WJ1
基本的にはsize_tとかsize_typeとか使え派
面倒でもちゃんとやった方が後のテストや検証は楽なんだよ
まあ無理だったり異様に面倒だったりする場合も現実的にはあるからそこは仕方ないけど
324デフォルトの名無しさん
2020/02/07(金) 07:52:22.31ID:+bDqT2Wz
i は int にしたいって言ってるんだから

ここの型をsize()に合わせたら
キャストが他に移るだけ
325デフォルトの名無しさん
2020/02/07(金) 08:31:14.28ID:z6HtA7Ca
>>288
いえいえ
326デフォルトの名無しさん
2020/02/07(金) 10:49:20.82ID:/rNOv2pQ
>>298
vがグローバルなオブジェクトである場合や、ヒープから確保されたオブジェクトの参照型である場合、コンパイラには v.size() がループ定数であるかどうかを判定するのは難しいことが多い。
このスレでもグローバルに確保された構造体型のメンバを参照する場合、最適化され無い事が指摘されていたが、それと同じことが原因。
C/C++ではポインタや参照があるのでグローバル変数やグローバルなオブジェクトのメンバ変数が変化しないことをコンパイラが見極めるのが難しい。
327デフォルトの名無しさん
2020/02/07(金) 10:52:27.65ID:VWyX2qgb
for(auto i=v.size()+1; 0<len; --i)

for(auto i : my_range(v.size())
328デフォルトの名無しさん
2020/02/07(金) 11:01:57.61ID:52vnIbYM
reverse_iterator first(v.end()), last(v.begin());
for_each(first, last, [](auto& x) { cout << x; });
329デフォルトの名無しさん
2020/02/07(金) 11:41:09.54ID:jtk/IwGo
64bit/32bitまたぎできるソース汎用性を考えれば、負の数が必要ないなら size_tを使うのが最善でしょ。
330デフォルトの名無しさん
2020/02/07(金) 12:00:59.89ID:VWyX2qgb
size_tはunsignedなのがうざい
c言語初心者が決めただろこれ
331デフォルトの名無しさん
2020/02/07(金) 12:07:12.14ID:VWyX2qgb
あ、上にかいたやつ+1は間違いや
332デフォルトの名無しさん
2020/02/07(金) 12:12:42.12ID:52vnIbYM
ポインタ + size_t == ポインタ
ポインタ - ポインタ == ptrdiff_t
おかしいね
333デフォルトの名無しさん
2020/02/07(金) 12:33:14.78ID:8FC0VQS8
>>326
仮に毎回アクセスしたとしてもv[i]の方が重い
毎回アドレスを計算して毎回メモリアクセスするわけで
334デフォルトの名無しさん
2020/02/07(金) 12:48:40.15ID:Nrn3Ov0h
indexにintはlp64環境だと怖すぎる
335デフォルトの名無しさん
2020/02/07(金) 12:51:13.27ID:cytAyAiU
そんなバカでかいインデックス作る方が怖い
336デフォルトの名無しさん
2020/02/07(金) 13:01:32.69ID:jtk/IwGo
ファイルポインタは4GB越えが当たり前だし。
337デフォルトの名無しさん
2020/02/07(金) 13:18:28.90ID:8FC0VQS8
ばかでかいループをたくさん作るなら
性能を心配した方が良い

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

キャストのコストとか完全に誤差
338デフォルトの名無しさん
2020/02/07(金) 13:30:18.43ID:QoBXk/kf
メモリポインタも4GB超えは当たり前だしな
339デフォルトの名無しさん
2020/02/07(金) 13:33:10.28ID:52vnIbYM
8086時代の苦しみを知っている人なら
リニアでないポインタやインデックスが
どんなにウザいものかよく知っている

64bit空間なら64bitを使っとけって悪いこと言わないから
340デフォルトの名無しさん
2020/02/07(金) 13:45:59.17ID:8FC0VQS8
ループの中身も知らないで良く言うね
int変換必須なら問題点の場所を移動させただけ
341デフォルトの名無しさん
2020/02/07(金) 13:58:09.08ID:jtk/IwGo
今日日4GB越えとかWindowsNT4.0サービスパックですか、と。
342デフォルトの名無しさん
2020/02/07(金) 14:12:43.62ID:PWhN+bN7
納品したときに
コンパイルで警告出るんですが消してって言われて
それ無視して良い警告ですよって言っても
理解してもらえなかった派
343デフォルトの名無しさん
2020/02/07(金) 14:19:34.17ID:PWhN+bN7
あと警告が出ないからと言って
正しく動くと保証されている訳でもなんでもないのに
344デフォルトの名無しさん
2020/02/07(金) 14:32:07.46ID:VWyX2qgb
>>342
それはお前が悪い
そんなんで納品するな
345デフォルトの名無しさん
2020/02/07(金) 14:34:22.92ID:jtk/IwGo
客先と同じビルド環境で警告対応しないのは落ち度だね。次の仕事なくなるでしょ。
346デフォルトの名無しさん
2020/02/07(金) 14:40:57.67ID:/rNOv2pQ
>>333
BYTE v[数値];
のような生配列の場合、ループの中のv[i]は、最適化が効いてものすごく効率の良いコードになることが多い。
この場合、vがグローバルに確保されたオブジェクトや参照型であったとしても最適化には余り悪影響はない。
vがstd::vector 型の場合で、かつ、vがグローバル・オブジェクトや、参照型の場合は、コンパイラはv[i]を上手く最適化できないかもしれない。
347デフォルトの名無しさん
2020/02/07(金) 14:42:08.26ID:/rNOv2pQ
>>346
すまん。
後半部分は勘違いかもしれない。
348デフォルトの名無しさん
2020/02/07(金) 14:47:50.81ID:5UxOF8qK
>>346
VCはvectorでも生ポインタに近い最適化はしてくれてるみたいだぞ
349デフォルトの名無しさん
2020/02/07(金) 15:03:24.58ID:jtk/IwGo
客や同僚から使えないプログラマ認定されていることに気づけず独りよがりな考えに凝り固まる人いるよね・・・
かわいそうではあるけど、かかわりたくないタイプの人。
350はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 15:15:12.08ID:BIRgOLIs
標準ライブラリのコンテナのイテレータを sizeof で見ればわかるが、ほとんどの場合で void* と同じ大きさ。
要するにポインタ一個分の情報しかないし、実際ポインタが入ってるし、ポインタの操作になってる。
しいて言えば操作がメンバ関数経由になる分のコストはあるといえばあるけど、
それくらいのインライン展開はするのが普通でしょ。
vector の場合だと領域が連続する保証があるのでインライン展開だけでイテレータはポインタと同じになる。

VC のコンテナだとデバッグモードではイテレータが少し大きい (のと範囲チェックとかする) ってなことらしいんだが、
処理系をインストールしてないから試してない。
351デフォルトの名無しさん
2020/02/07(金) 15:20:21.87ID:E/TdO4KU
>>349
おまえがきちんとした仕様を提案できないで投げっぱにしてるからそんなことになってんじゃないの?
352デフォルトの名無しさん
2020/02/07(金) 17:16:18.19ID:52vnIbYM
>>340
64bit空間で64bit以外のインデックスを使うべきループの中身とやらを書かないあんたが悪い
書けないんじゃないのか?
353デフォルトの名無しさん
2020/02/07(金) 17:31:01.39ID:Nrn3Ov0h
intだとたったの2G要素でオーバーフローして無限ループになるのが怖い
354デフォルトの名無しさん
2020/02/07(金) 17:31:33.35ID:yxrGSGnH
イテレータよりポインタのほうが速いよ。
ホントだよ。
いまベンチとってるから。
偶然だけど。
355デフォルトの名無しさん
2020/02/07(金) 17:34:39.39ID:jtk/IwGo
>>351
「無視して良い警告」とか勝手に判断する困ったPGにきちんと仕様を提案しても無駄でしょ。解雇するわ。
356デフォルトの名無しさん
2020/02/07(金) 17:37:50.00ID:PWhN+bN7
unsigned だと
for(unsigned i = s.size(); --i >= 0; ){...}
みたいなので警告出るんだっけ
357デフォルトの名無しさん
2020/02/07(金) 17:41:09.31ID:Nrn3Ov0h
警告で指摘された問題点に対処もせずに、キャストやらで無理やり消す位なら、出たまま放置の方が100倍マシ
358デフォルトの名無しさん
2020/02/07(金) 17:43:22.94ID:yxrGSGnH
ヒープ作るとき、マイナスの値は空きノードのリンクリストに使ったりするので、その手の比較は多発する。
359はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 17:43:55.24ID:BIRgOLIs
うーん、近頃はちょっとした作法レベルのところまで警告として口出しすることがあるからなぁ。
完全に規格に沿って書いてるわ! ってときにはイラッとすることもある。
個別に警告オプションを設定するのも面倒くせぇし、直してしまう方が手っ取り早かったりもするんだけど、
何がなんでも警告をゼロにしろって言われたら警告レベルを低くする対処をしちゃうかも。
360デフォルトの名無しさん
2020/02/07(金) 17:52:14.97ID:VWyX2qgb
仕事ではやってんなら手を抜くなぼけ
pragmaとかでなんとでもなるだろ
361デフォルトの名無しさん
2020/02/07(金) 17:55:05.15ID:yxrGSGnH
タモリさんは遊びで手を抜くなって言ってた。
362デフォルトの名無しさん
2020/02/07(金) 17:57:41.44ID:jtk/IwGo
従来cppcheckなどの静的解析ツールが出していた警告をコンパイラも出すようになってくれたのは良い動き。
親切なコンパイラに感謝して警告箇所の修正をやればいい。
修正に工数がかかることが懸念されるなら、依頼主にその旨を伝えればいい。
363デフォルトの名無しさん
2020/02/07(金) 18:05:13.97ID:kNxPhPNR
>>360
すごい偉そうにしてるけど大丈夫?>>327
;0<len; って···
364デフォルトの名無しさん
2020/02/07(金) 18:14:59.44ID:CaNLgYal
雑魚ほどイキがるのはプログラマも同じ
365デフォルトの名無しさん
2020/02/07(金) 18:23:59.39ID:yxrGSGnH
カバレッジ測定のツールって安いの無いのかな。
366はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 18:36:35.61ID:BIRgOLIs
>>360
俺はプログラミングについては趣味者だから実務のことは知らんのだわ。
すまんな。

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

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

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

そりゃあいつも十全な仕事が出来る時間的・経済的余裕があるならうれしいが、
現実はそうではないだろ。
367デフォルトの名無しさん
2020/02/07(金) 18:40:56.99ID:jtk/IwGo
>>366
何言ってんだ?
手抜きしたいからこそ、コンパイラの警告に素直に従うんだぞ。
368はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 18:45:33.43ID:BIRgOLIs
>>367
それもそうだな。
369デフォルトの名無しさん
2020/02/07(金) 18:51:12.38ID:ZYtSuiu/
DirectX関連使ってるとenumよりenum classを優先しますという警告出るんだけど、ライブラリ変えるわけにもいかなく、どう対応するのが正解なんだろ?
370デフォルトの名無しさん
2020/02/07(金) 18:58:20.00ID:HVBpNa40
そもそも警告って規格で定められている訳でもなく、コンパイラが独自の基準で勝手に出してくる物だからね

mutableは悪だってconst付いてない変数全てに警告出すコンパイラとか出てきたらどうするんだろう
371デフォルトの名無しさん
2020/02/07(金) 19:03:54.90ID:jtk/IwGo
>>370
議論のための議論とか、言いがかりのような仮定の話に、いちいち付き合わないことが重要。
372デフォルトの名無しさん
2020/02/07(金) 19:04:25.00ID:/AlUflk/
>>365
とりあえずgprofでいいんじゃね?
373デフォルトの名無しさん
2020/02/07(金) 19:08:56.34ID:yxrGSGnH
>>372
見てみます。
374はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 19:25:21.94ID:BIRgOLIs
>>371
変な作法が追加されることなんて良くあるんだぞ。
今じゃ gcc や clang で -Wall オプションを付けたら
a || b && c
みたいな式にすら警告が出る。
優先順位を間違えやすいとこだから括弧で明示した方が良いんだと!
演算子の優先順位くらい把握しとるわ!

こんなの警告されるようになると想像したことあったか?
他の演算子でも同様の警告を出すようになることくらいはあるかもしれんぞ?
確かに >>370 は極端な例ではあるが、ようわからんところでしょうもない警告が出るようになる
かもしれんという懸念は無い話ではないぞ。
375デフォルトの名無しさん
2020/02/07(金) 19:30:53.52ID:9DO99WJ1
いやそれはカッコ付けろよ
376デフォルトの名無しさん
2020/02/07(金) 19:33:08.02ID:jtk/IwGo
>>374
趣味でしかやってない人の意見なんて無視しろ、というが私の回答です。
377デフォルトの名無しさん
2020/02/07(金) 19:39:25.14ID:1PiYJQ+8
>>374
それは括弧つけろよ
378はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 19:46:55.57ID:BIRgOLIs
>>375-377
そっかー (´・ω・`)
379デフォルトの名無しさん
2020/02/07(金) 19:55:08.75ID:yxrGSGnH
はちみつ先生は何を作ってるんですか?
380はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 20:28:02.80ID:BIRgOLIs
>>379
ゲームのチートツールとか。
汎用的な便利なツールは色々とあるけど、個別のソフトをいじるには行き届かないこともあるので。
念のため言っとくけど買い切りの RPG かフリーゲームだけ。 ネットゲームはやってないよ。
ちなみにそのツールは公開してない。

その他に作った有用そうなものは公開してるんで、身バレするから言えない。
381デフォルトの名無しさん
2020/02/07(金) 20:52:16.35ID:yxrGSGnH
>>380
そうなんですか。
ずいぶん詳しいのに仕事じゃないというから不思議に思ってました。
382デフォルトの名無しさん
2020/02/07(金) 20:56:00.11ID:jtk/IwGo
つまり、はちみつ某は、なんの思い入れもない他人のソースを読まされる身になった経験が少ないわけか。
383デフォルトの名無しさん
2020/02/07(金) 21:02:52.46ID:yxrGSGnH
アルゴリズム考えるときは、図を必ず書くと思うんだけど、皆さんは何を使ってますか?
いまは紙と鉛筆使ってるんだけど、探すの大変だから、ソフトに変えたい。
384はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 21:05:36.03ID:BIRgOLIs
>>382
せやな。
そんなわけで、他人のバイナリを見る機会はあるけどソースはそれほどでもって感じかも。
結果的に読まなきゃならないことはあるけど、所詮は趣味だから嫌になったらいつでも止められるし、急がなくてもいいし。
プレッシャーに晒されながらクソみたいなソースを読むってことはない。
385デフォルトの名無しさん
2020/02/07(金) 21:05:49.82ID:E/TdO4KU
たまに書く方がいい
字を忘れる
386デフォルトの名無しさん
2020/02/07(金) 21:09:26.55ID:y0pPi+zA
C++なんざ仕事で嫌々書かされるだけの言語だと思ったけど
趣味で使っちゃう子もおるんやな
387はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 21:12:24.23ID:BIRgOLIs
>>383
曖昧なところから思考を整理するなら紙と鉛筆でいいと思うけど、
それなりに書式の整ったようにするなら PlantUML とか。
GUI で自由にってことなら Dynamic Draw くらいが手頃かもしれない。
388デフォルトの名無しさん
2020/02/07(金) 21:15:03.53ID:jtk/IwGo
完全な趣味目的でC++を触る変態はそうそういないと思う。
389デフォルトの名無しさん
2020/02/07(金) 21:16:30.24ID:52vnIbYM
>>386
禿1読んで信者になった変態もおるんやで
390はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 21:16:36.84ID:BIRgOLIs
>>386
ゲームのチートとかするために
既存のプロセスに割り込んだりする処理を書こうと思うと C か C++ くらいしかまともな選択肢なくね?
C で足りるなら C で済ませることもあるけど、もうちょっと高級なことがしたくなったら C++
ってのは妥当な選択肢というか、唯一解でしょ。

まあ近頃は Rust にも興味があるけど……。
391デフォルトの名無しさん
2020/02/07(金) 21:37:46.79ID:yxrGSGnH
>>387
見てみます。
392デフォルトの名無しさん
2020/02/07(金) 22:05:07.56ID:8FC0VQS8
>>375
>>377
男ならカッコつけろ
393デフォルトの名無しさん
2020/02/07(金) 22:14:56.42ID:8FC0VQS8
カッコつけろって人
付ける付けないの基準はコンパイラの警告?

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

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

こんなのにカッコつけてたら
えっ?何か意味があるの?って考えてしまう
394デフォルトの名無しさん
2020/02/07(金) 22:26:24.78ID:52vnIbYM
> えっ?何か意味があるの?

いや、「あーまた面倒くさいやつ来やがった」だよ
395デフォルトの名無しさん
2020/02/07(金) 22:52:28.44ID:GxNDg+Fe
実務経験1年で月収80万稼げるエンジニアになった理由

@YouTube


意識が低いエンジニアこそフリーランスになれ

@YouTube


フリーランスエンジニアの週3労働ってどんな感じ?

@YouTube


ぼくがスキルのない社畜ならこうやって脱する

@YouTube


初めて人を雇ったらもう二度とサラリーマンをやりたくないと思った話

@YouTube


プログラミングは文系でも余裕で出来ます!理由を現役プログラマーが解説

@YouTube


貧乏人こそ社会不適合者

@YouTube


元ド貧乏が教える】貧乏を抜け出すための2つの考え方

@YouTube


より良いオファー貰ってるのに転職しないとか何考えてるの?

@YouTube

396デフォルトの名無しさん
2020/02/07(金) 22:55:11.74ID:NUR9HIfz
優先順位を完全に把握しているなら機能的には意味のない括弧だと理解しているんだろうが
そのうえで疑問に思った「意味」って、どんなものを想定しているんだろう。
「優先順位を完全に把握していない人が間違えないように」くらいの意味しか思いつかないが。
397デフォルトの名無しさん
2020/02/07(金) 22:59:52.10ID:8FC0VQS8
(a + b + c) + (d + e)

同じ型の整数5個を足すのにこんなカッコが付いてたらどう思う?
398デフォルトの名無しさん
2020/02/07(金) 23:17:13.31ID:NUR9HIfz
>>393と言ってる趣旨が違ってないか?
実際に>>397みたいなコードを見たことがあるの?
399デフォルトの名無しさん
2020/02/07(金) 23:24:04.71ID:8FC0VQS8
同じ印象だって話

ちなみに、
わざわざ>>397のようなカッコを付ける時はある
400デフォルトの名無しさん
2020/02/07(金) 23:24:42.60ID:jtk/IwGo
協業できない人があれこれC++について論じるのは害でしかない。
401デフォルトの名無しさん
2020/02/07(金) 23:31:57.60ID:Uosz/SQM
まずプログラム言語っての読み書きする人間のためにあるって大前提忘れてるか自覚してないやつ多いな
402デフォルトの名無しさん
2020/02/07(金) 23:34:58.95ID:NUR9HIfz
>>399
マイナスが混ざっているならわからんでもないが、>>393で言っている優先順位の話とは関係ないように思うが?
403デフォルトの名無しさん
2020/02/07(金) 23:36:27.96ID:Fqx20dQ+
>>397のようなコードを見てどう思う?
404デフォルトの名無しさん
2020/02/07(金) 23:39:04.16ID:jtk/IwGo
見やすいかどうかは主観なので、他人や未来の自分が読んで誤解しないようにすることが肝でしょ。
まさか、「数値リテラルの桁区切り文字」にまでかみついたりしないよね?
https://cpprefjp.github.io/lang/cpp14/digit_separators.html
405デフォルトの名無しさん
2020/02/07(金) 23:41:49.81ID:yMJLmx4v
主観で見やすい表記にする
その為にコンパイラの警告を無視したり切ったりする

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

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

そりゃ書いてる真っ最中は問題ないさ
しかし後から読んだときにすぐ理解できなかったり、手を加えるときに間違えたりする
warningを出すべきかは議論の余地があると思うけど、
出すべきと考える理由はわかる
407デフォルトの名無しさん
2020/02/08(土) 00:38:17.76ID:RKzyJDHj
それはエディタの機能でかっこを表示したら良いのでは。
408デフォルトの名無しさん
2020/02/08(土) 00:57:11.32ID:GuOhFnKw
主観は重要だろう。
重要でないなら全部アセンブラで書けや。
客観的には最も性能の出る言語だぞ。
409デフォルトの名無しさん
2020/02/08(土) 01:23:28.05ID:Mdfh1mSi
&,|とか&&,||は*,+の関係と同じだから括弧つける方が冗長で分かりづらくなると思うんだが
410デフォルトの名無しさん
2020/02/08(土) 01:29:21.53ID:zzucbZgG
一度書いた四則演算の数式を書き換えることはほとんどないけど、bool論理演算は頻繁に書き換えるでしょ。
411デフォルトの名無しさん
2020/02/08(土) 01:30:14.91ID:zzucbZgG
素人多いね、このスレ。
412デフォルトの名無しさん
2020/02/08(土) 01:45:08.63ID:RKzyJDHj
>>411
プロの意見だとどうなりますか?
413デフォルトの名無しさん
2020/02/08(土) 01:52:50.03ID:JKzazDKJ
数式を遅延評価するオブジェクトを作れば
演算子のオーバーロードで演算子の優先順位を変えられるも同然
414デフォルトの名無しさん
2020/02/08(土) 01:53:57.02ID:JKzazDKJ
テクニックの限りを尽くしてbetter C++を実現したら良い
415デフォルトの名無しさん
2020/02/08(土) 01:54:26.60ID:zzucbZgG
プロなら抽象的な質問には回答しないでしょ。時間泥棒にあう。
「もっと具体的に書いてくれ」と逆質問する義理がないならなおのこと。
416デフォルトの名無しさん
2020/02/08(土) 02:00:57.81ID:RKzyJDHj
自分の職業の板には一切いかないから、ここも職業プログラマはいないと思う。
ここに書き込む意味が無いと思うんだよな。
417デフォルトの名無しさん
2020/02/08(土) 02:02:06.13ID:uvgcwZ2m
>>395
グロ
418デフォルトの名無しさん
2020/02/08(土) 02:06:09.28ID:Mdfh1mSi
職業プログラマって?
仕事でソフト作るし、客先に納入したりもするけどプログラマではないな
419デフォルトの名無しさん
2020/02/08(土) 02:08:10.84ID:RKzyJDHj
たとえば、外科医が匿名の掲示板で効果的な治療法について話し合ったりしないでしょ。
治療法について話し合ってる人は患者だ。
だから、ここにもプログラマはいないはず。
420デフォルトの名無しさん
2020/02/08(土) 02:28:45.19ID:zzucbZgG
プロの対義語はアマ。素人の対義語は玄人。
今時点のこのスレの回答者が素人同然の低いレベルであることは、否定できない。
例えば一週間後は違うかもしれない。もっともまともな回答者がこのスレに常駐するようになるかもしれない。
421デフォルトの名無しさん
2020/02/08(土) 06:55:22.73ID:ARbKbNEu
>>374
-Wallとは別に「お節介は一切禁止」というオプション欲しいね
422デフォルトの名無しさん
2020/02/08(土) 07:15:13.17ID:N5LmiSOJ
特定の警告だけ無効に出来るのが普通だよ
423デフォルトの名無しさん
2020/02/08(土) 07:33:56.27ID:gtTyaGQ0
警告は全ておせっかい
424デフォルトの名無しさん
2020/02/08(土) 07:53:55.28ID:+X9VZvVK
>>374はわかるけど
>>393, >>397で警告出すコンパイラとか見たこと無い
425デフォルトの名無しさん
2020/02/08(土) 08:04:33.44ID:gtTyaGQ0
私も見たことは無い
でも他の演算子でも同じこと

1u << n+1

こんなのは良く使う
いちいちカッコを付けた方が分かりにくい
426デフォルトの名無しさん
2020/02/08(土) 08:11:34.30ID:gtTyaGQ0
カッコを付けろって結局警告が出るから付けろってことで
見やすさとか無視した意見が多い

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

こんな感じに書くヤツがいるんだよ実際
427デフォルトの名無しさん
2020/02/08(土) 08:14:44.94ID:ARbKbNEu
警告の出方がコンパイラによって違うわけで
特定のコンパイラの警告に対応するということなら
#pragma使うのと同じだね
428デフォルトの名無しさん
2020/02/08(土) 08:26:00.28ID:GuOhFnKw
>>426
それはつけた方がいいだろ。
見づらいのはスペースの使い方に問題がある。
429デフォルトの名無しさん
2020/02/08(土) 08:42:00.85ID:gtTyaGQ0
えっ?
まじで言ってる?

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

これだと一瞬で理読める
俺が特殊?
430デフォルトの名無しさん
2020/02/08(土) 09:05:35.53ID:LleYumKd
>>428
演算子の優先順位くらい勉強しておけよ
手間かけさせんな
431デフォルトの名無しさん
2020/02/08(土) 09:08:26.73ID:LleYumKd
>>408
やはりアホだったかコイツw
432デフォルトの名無しさん
2020/02/08(土) 09:10:24.21ID:ktYbgjbO
>>366
手抜きがどうこうと最もらしいこと言ってるけど
>>359で言ってるのは「警告に対処するのが面倒くさい」ってことだろ?
仕事で手を抜くべき場所とそうでない場所、みたいな次元の話じゃない

あと警告レベルは最大にしたりすると標準ライブラリにすら警告出るけど、標準より下げるのは良くない
そういうこと平気でやってると必ず後で本格的に面倒くさい原因不明のバグが頻発する
433デフォルトの名無しさん
2020/02/08(土) 09:29:30.06ID:JKzazDKJ
256倍バグを出しても256倍早く潰したら
問題無くね?
434デフォルトの名無しさん
2020/02/08(土) 09:30:03.39ID:GuOhFnKw
if( a == (b+1) || a == (b+2) )
これくらい書いてもバチ当たらんだろ。
しょうもないことでドヤってる馬鹿が開発では一番有害。
435デフォルトの名無しさん
2020/02/08(土) 09:32:02.56ID:pUDxcHmc
>>433
256倍もバグ出すような奴と仕事したくない
436デフォルトの名無しさん
2020/02/08(土) 09:39:01.42ID:JKzazDKJ
>>435
先方も256倍遅い奴と仕事したくないと思うてはるで
437デフォルトの名無しさん
2020/02/08(土) 10:08:44.51ID:Di3wk8ih
>>433
全部潰せるならね
438デフォルトの名無しさん
2020/02/08(土) 10:24:14.91ID:YOfaZC8k
じゃあ次は

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

の話でもする?w
俺はこれが一番のキチガイ記法だと思ってる
439デフォルトの名無しさん
2020/02/08(土) 10:29:50.84ID:yr4lhGWD
勢いあまってこれも否定しちゃう

BOOL b;

if (b == TRUE)
440デフォルトの名無しさん
2020/02/08(土) 10:33:51.20ID:JKzazDKJ
>>439
b==-1が成立することが有るのはウィンドーズのバグ
441デフォルトの名無しさん
2020/02/08(土) 10:39:25.53ID:yaVA2/v3
if (a = b+1 || a == b+2)
こう書いたとき気づきづらい
手間をかけるのはそれ自体だけでなくいろいろ見る機会になる
442デフォルトの名無しさん
2020/02/08(土) 11:00:58.51ID:Di3wk8ih
>>438
if(a != true){
return true;
} else {
return false;
}
みたいなコード見たときは流石に絶句したわw
443デフォルトの名無しさん
2020/02/08(土) 11:05:13.10ID:Di3wk8ih
>>441
それはまた別な話
ところで>>374
if(a = b){
みたいなコードに対する警告も不要と言うんだろうか?
444デフォルトの名無しさん
2020/02/08(土) 11:09:08.44ID:LleYumKd
>>441
学習が足りてないだけ
括弧なんて要らん
理解できるレベルまで進化しろ原始人
445デフォルトの名無しさん
2020/02/08(土) 11:17:32.81ID:yr4lhGWD
>>440
で、 if (b) と書いちゃっても自分のバグじゃなくてWindowsのバグと主張する
446デフォルトの名無しさん
2020/02/08(土) 11:39:54.89ID:pjdiRHlo
>>445
C/C++ では、b が「非0」、つまり「0 以外」だとすべて真(true) と考えるのが伝統。

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

なので、if (b) と書く方が正しく、if ( b == TRUE ) と書くのは間違い。
447デフォルトの名無しさん
2020/02/08(土) 11:53:39.76ID:yr4lhGWD
>C/C++ では、b が「非0」、つまり「0 以外」だとすべて真(true) と考えるのが伝統。

名前が紛らわしいがBOOLは真偽二値じゃないんだからそれは関係ない。
TRUEかどうか判定する必要があるなら if (b) は明らかに間違い。
448デフォルトの名無しさん
2020/02/08(土) 12:11:53.25ID:JKzazDKJ
回避して使うかどうかとは無関係にバグはバグじゃわ;
449デフォルトの名無しさん
2020/02/08(土) 12:27:48.00ID:yr4lhGWD
>>439はジョークのつもりだったが、実際に勢い余った人が2人も現れるとはw
450デフォルトの名無しさん
2020/02/08(土) 12:47:51.09ID:YOfaZC8k
>>442
なにその想像を超えたキチガイ

>>449
アンタの親切心が何人かの明日を救ったねw
451デフォルトの名無しさん
2020/02/08(土) 12:53:53.46ID:JKzazDKJ
プログラミングはアートやからな
狂気もまた創造の源泉、
452デフォルトの名無しさん
2020/02/08(土) 12:56:37.29ID:zzucbZgG
>>442,450
対話デバッグでaに応じて実行をブレークしたかった人が残したデバッグの痕跡だろうね。
ソースを他人に公開する際にはブレークポイントの情報はなくなるから、他人には意味不明だけど。
453デフォルトの名無しさん
2020/02/08(土) 12:58:48.67ID:zzucbZgG
>>451
狂気じゃなくて修正の積み重ね。少しづつ修正していると大ポカに気づけない。
だからこそ親切なコンパイラの警告に従う謙虚さが大切になる。
454デフォルトの名無しさん
2020/02/08(土) 13:32:28.54ID:gtTyaGQ0
>>452
そっち?

a != true
じゃなくて?
455デフォルトの名無しさん
2020/02/08(土) 14:33:50.82ID:pjdiRHlo
BOOL b に対して、正しくはこう :
if ( b )     // 良い
if ( b != 0 )   // 良い
if ( b == TRUE ) // 駄目
456デフォルトの名無しさん
2020/02/08(土) 14:48:48.31ID:v1IBJgnW
>>383
graphviz / python
457デフォルトの名無しさん
2020/02/08(土) 14:51:43.97ID:P2cF6ghb
graphvizは主要なLinuxの標準リポジトリに入ってるから助かる
458デフォルトの名無しさん
2020/02/08(土) 14:52:17.78ID:v1IBJgnW
>>403
浮動小数点数なら桁落ちとか気にしてんのかなーとか勘繰る
459デフォルトの名無しさん
2020/02/08(土) 15:10:32.80ID:pjdiRHlo
>>403
整数の場合だと、括弧を付けてある部分に何らかのまとまった意味があるのかも知れない。

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

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

しかし、そのケースの場合は、括弧で括ると何か意味が分かり易くなると考えた間ロウ製がある。
460デフォルトの名無しさん
2020/02/08(土) 15:11:02.15ID:pjdiRHlo
>>459
間ロウ製 ---> 可能性
461デフォルトの名無しさん
2020/02/08(土) 15:12:02.03ID:JKzazDKJ
>>455
>if ( b == TRUE ) // 駄目
-1をTRUE扱いしたくないのであればこれが唯一正しい
462デフォルトの名無しさん
2020/02/08(土) 15:45:10.44ID:yr4lhGWD
MSDNの書き間違いかもしれないが、Win32 APIの一部にも「成功時はTRUEを返す」という
仕様の関数があるんだよな。
463デフォルトの名無しさん
2020/02/08(土) 15:54:04.38ID:pjdiRHlo
>>461
そもそも、-1 は TRUE 扱いすると言うのが C/C++ の伝統や文化。
-1 と TRUE を分けて扱うのは、特殊な独自仕様。

>>462
Win32 API の一部どころか、ハンドル値を返す以外のほとんど全ての関数が、
成功すれば TRUE を返す。
464デフォルトの名無しさん
2020/02/08(土) 16:07:20.11ID:yr4lhGWD
おいおい、#define TRUE 1のTRUEと真(true)の区別がぐちゃぐちゃだぞ。

BOOLを返すWin32 APIの多くは「成功時はFALSE(0)以外の値を返す」という仕様になっている。
465デフォルトの名無しさん
2020/02/08(土) 16:16:01.81ID:24Q9Tmjg
宗派論争だな
466デフォルトの名無しさん
2020/02/08(土) 16:19:44.70ID:RKzyJDHj
C++にはtrueがあるので積極的に使っていこうと思います。
467デフォルトの名無しさん
2020/02/08(土) 16:36:41.39ID:pjdiRHlo
>>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」を返すと書いてある。
468デフォルトの名無しさん
2020/02/08(土) 16:45:19.38ID:RKzyJDHj
キャッシュかキャッシュでないかで速度が変わる。
これは驚き。
469デフォルトの名無しさん
2020/02/08(土) 16:50:34.75ID:LleYumKd
バカ==TRUE
470デフォルトの名無しさん
2020/02/08(土) 17:21:59.80ID:+a4Pmd4C
○ if(b) if(!b)
○ if(b == FALSE) if(b != FALSE)
× if(b == TRUE) if(b != TRUE)

WinAPI使いには常識だと思ってたんだが
471デフォルトの名無しさん
2020/02/08(土) 17:32:20.19ID:RKzyJDHj
そういうのをみんなで共有しましょうって事で、たらこさんが2chを作ったんですよ。
472デフォルトの名無しさん
2020/02/08(土) 17:40:43.90ID:yr4lhGWD
>>470
常識というか思い込み。
大半のFALSE/FALSE以外を返す関数なら上で良いが、>>462のようにTRUEを返すなら当然
TRUEと比較しなきゃ正しくない。
473デフォルトの名無しさん
2020/02/08(土) 17:57:14.84ID:+a4Pmd4C
本当にそんなのあるの?
戻り値BOOLでFALSE(0)とTRUE(1)以外の値をTRUEと違う意味を表現するために意図的に返す奴があるってこと?
具体例どうぞ
474◆QZaw55cn4c
2020/02/08(土) 18:25:19.22ID:JRIqyhqH
>>446
>C/C++ では、b が「非0」、つまり「0 以外」だとすべて真(true) と考えるのが伝統。
>if ( b == TRUE ) と書くのは間違い。

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

はっ!これが老害というやつですか…
475はちみつ餃子 ◆8X2XSCHEME
2020/02/08(土) 18:26:30.54ID:2SU4KPt5
>>473
GetMessage という基本的な API からして変則的だから……
476デフォルトの名無しさん
2020/02/08(土) 18:31:14.43ID:yr4lhGWD
>>462に書いたMSDNのは単にドキュメントの間違いという可能性もあるけどね。
それとは別に、TRUE/FALSe以外に-1を返すAPIがあるのは有名だろう。
いずれにしても仕様をちゃんと確認してそれに従った扱いをすべきで、思い込みは禁物ってこと。
477はちみつ餃子 ◆8X2XSCHEME
2020/02/08(土) 18:33:32.51ID:2SU4KPt5
>>475
GetMessage の返却値の場合は一応は TRUE の特殊な場合として -1 の状況もある
って感じだから TRUE とは別の場合を意味する第三の状況というわけではないな。
478デフォルトの名無しさん
2020/02/08(土) 18:34:27.09ID:RKzyJDHj
判定マクロないの。
479はちみつ餃子 ◆8X2XSCHEME
2020/02/08(土) 18:44:49.18ID:2SU4KPt5
>>466
bool も式にまざるといつのまにか int に暗黙に型変換されちゃったりして、
やっぱりこう、あまりしっかり区別されてる気がしねぇなあと思うことも多いよ。
Windows API で使われている BOOL よりはかなりマシではあるけど。
480デフォルトの名無しさん
2020/02/08(土) 18:46:46.57ID:JKzazDKJ
GetMessage()が-1を返したときはエラーなんじゃわ;
481デフォルトの名無しさん
2020/02/08(土) 18:51:51.40ID:+a4Pmd4C
「WM_QUITでない」という条件における真(0以外)の中の特殊な場合(エラー)に-1ってことなのね
理屈はわからんでもないけど変なの
本当はそんなのの戻り値に「BOOL」なんていうtypedefを使うのがそもそもおかしいんだけどWinAPIだから仕方ないな
482デフォルトの名無しさん
2020/02/08(土) 18:52:06.88ID:RKzyJDHj
>>480
行末の;イイね。
483デフォルトの名無しさん
2020/02/08(土) 18:52:56.77ID:RKzyJDHj
30年前のAPIだしね。
484はちみつ餃子 ◆8X2XSCHEME
2020/02/08(土) 18:55:20.75ID:2SU4KPt5
今なら適当なフレームワークをかぶせて使うもんだと思う。
素でメッセージの処理とか面倒くさすぎるし。
485デフォルトの名無しさん
2020/02/08(土) 19:15:43.34ID:mZtPBS5R
klocworkがboolメンバ変数にportingがどうのって言ってくるのがうざい
486デフォルトの名無しさん
2020/02/08(土) 20:18:51.44ID:RKzyJDHj
>>485
これ何億円するの?
487デフォルトの名無しさん
2020/02/08(土) 21:17:13.95ID:24Q9Tmjg
>>474
やっぱQZってとんでもなくバカだな
>>439からの流れ読めよ。BOOLについて会話されてるぜ
488デフォルトの名無しさん
2020/02/08(土) 21:25:19.61ID:RKzyJDHj
正の型の値と負の型の値を比較する場合、ビット幅の大きいほうの型に変換されてから比較されるんですかね?
489デフォルトの名無しさん
2020/02/08(土) 21:30:32.47ID:uvgcwZ2m
汎整数拡張でググれ
490デフォルトの名無しさん
2020/02/08(土) 21:35:32.85ID:RKzyJDHj
>>489
ググってみたんだけど。
https://kumikomiya.com/implicit-conversion/
これを見ると変換は起きないって事なのかな?
491デフォルトの名無しさん
2020/02/08(土) 23:34:23.41ID:jnRyPLnj
>>472
いや。TRUE は、必ず if 式で真と判定されるので、if (b == TRUE) としなくても
if (b) で絶対十分であることは補償されている。
むしろ、if (b == TRUE) と書くのはバグの原因になるので駄目だと言われている。
492デフォルトの名無しさん
2020/02/08(土) 23:51:17.72ID:jnRyPLnj
なんというか、TRUE は、処理系ごとに変化する値ではなく、C/C++ においては、標準的には必ず 1 に #define されている。
一応分かり易さのために TRUE と書いているだけで、TRUEが2になったりする事は考える必要はない。

ただし、逆に、高速化のために 1 ではなく、非0の値を返してたまたまの値、
例えば、12 とかを返してくる関数が有りえる。
その場合、うっかり間違って if ( b == TRUE ) などと書いてしまっていたら
大変なことになるので、意味的に TRUE を返す場合には、
if ( b ) または、if ( b != 0 ) と書く方が安全だと考えられている。
493デフォルトの名無しさん
2020/02/08(土) 23:53:58.53ID:jnRyPLnj
非常に古い時代に、TRUE を -1 と定義していた処理系もあったかもしれないが、
現在の C/C++ では、1 に定義するのが基本とされている。
b == TRUE という判定の仕方は、C/C++ の言語仕様から考えれば推奨されない。
494はちみつ餃子 ◆8X2XSCHEME
2020/02/09(日) 00:57:27.97ID:OoesT11A
>>492-493
言語仕様にある true を避けているのだから、
その環境においては標準と異なる事情があるのだと察するべきじゃないの。
まあそういうことがあったらもっと別の名前を付けるべきだとは思うけど。

C/C++ はその性質上、様々なシステムの仲立ちをする機会があるし、
いろんな事情に左右される。
TRUE を 1 と定義する機会が多いのは確かだろうし、
そのときの習慣が確立されてもいるのもわかってるけど、
それが当たり前かっつーとそうとも言えんのじゃないかな。
495デフォルトの名無しさん
2020/02/09(日) 01:17:16.75ID:J5M0tDgl
趣味人だとかいってるがハチミツ餃子はたまに良い事いうから困る
496デフォルトの名無しさん
2020/02/09(日) 01:23:08.88ID:e66sowWB
>>494
TRUE が 1 以外に定義されていても、TRUE の値は、if 文では真と解釈されることだけは保障されているので、if (b) は問題ない。
逆に BOOL b の場合、b が非0であるが、TRUE のマクロ値とは異なった値になっている場合がないとは保障はされない。
なので、if ( b == TRUE ) だと、TRUE ではないが b に真とみなせる値が入っている場合にすり抜けてしまう恐れがあり、重大バグの原因となる。
497デフォルトの名無しさん
2020/02/09(日) 01:23:18.79ID:bHnzUNQO
>>494
避けるもクソもそもそも昔なかったし
498デフォルトの名無しさん
2020/02/09(日) 01:33:30.02ID:Jw8Rx7z0
あったぞ
MSが実装サボっただけで
499デフォルトの名無しさん
2020/02/09(日) 01:58:53.21ID:bHnzUNQO
当時のc言語には仕様に無くない?
500はちみつ餃子 ◆8X2XSCHEME
2020/02/09(日) 02:19:40.02ID:OoesT11A
>>495
ハチミツじゃなくてはちみつな。

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

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

>>497
私は >>493 からあくまで現代の話だと読み取ったのでそのつもりで返答してるけど、
C/C++ のコードは長期的に使われやすいので現代という範囲の認識に齟齬はあるかもしれん。
501デフォルトの名無しさん
2020/02/09(日) 02:27:09.56ID:cYNa4VVg
過去と未来の狭間にあるってことかな。
502デフォルトの名無しさん
2020/02/09(日) 04:25:17.31ID:ids8kf+0
WindowsAPIはC++限定じゃなくCを主軸に捉えてるだろ
クラスとか一切無いしマクロだらけだし
そもそもboolが無かったってのはそういうことやろ
503デフォルトの名無しさん
2020/02/09(日) 07:14:29.14ID:6++kPC7v
>>462
> MSDNの書き間違いかもしれないが、Win32 APIの一部にも「成功時はTRUEを返す」という
> 仕様の関数があるんだよな。
具体的にどれ?
504デフォルトの名無しさん
2020/02/09(日) 07:15:18.90ID:6++kPC7v
>>502
Cと言うよりPascalだし
505デフォルトの名無しさん
2020/02/09(日) 07:19:31.89ID:PT76WH2y
>>434
自己紹介乙
506デフォルトの名無しさん
2020/02/09(日) 07:24:44.99ID:PT76WH2y
>>493
TRUEが-1というと昔のBASICにそういうのあったね
だがその時代すでにCも存在していた
507デフォルトの名無しさん
2020/02/09(日) 08:43:40.61ID:J3Qn0niW
>>496
何回ループしてるんだよ。
真(truthy)であることが要求されているなら if (b) だし、TRUEであることが要求されるなら
if (b == TRUE) だ。それを取り違えることがバグだ。
508デフォルトの名無しさん
2020/02/09(日) 08:54:48.96ID:aEgJYC9i
>>503
これとか、
https://docs.microsoft.com/en-us/windows/win32/api/dbghelp/nf-dbghelp-makesuredirectorypathexists
509デフォルトの名無しさん
2020/02/09(日) 08:59:21.69ID:aEgJYC9i
まあ失敗時はFALSE、とも書いてあるから、こう書くのが正解!
bRet32 = MakeSureDirectoryPathExists("C:\\tmp");
if (bRet == TRUE) {
 // 成功すた
 ...
} else if (bRet == FALSE) {{
 // 失敗すた
 ...
} else {
 assert(0);
}
510デフォルトの名無しさん
2020/02/09(日) 09:03:53.87ID:aEgJYC9i
あと>>461は、>>455の三択で選ぶならif (b == TRUE)だが
正しくは↓こう書くべき
bRet = GetMessage(...);
if (b == -1) {
 // エラー1が発生すた、
 ....
} else if (bRet == FALSE) {
 // エラー2が発生すた、
 ....
} else if (bRet = TRUE) {
 // 成功すた、
 ...
} else {
 assert(0);
}

つまり出題者>>455の知識と想像力の欠如が諸悪の根源
511デフォルトの名無しさん
2020/02/09(日) 09:06:48.93ID:aEgJYC9i
訂正orz
 誤: bRet
 正: bRet32

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

>>510訂正
 誤: bRet = TRUE
 正: bRet32 == TRUE
512デフォルトの名無しさん
2020/02/09(日) 09:28:45.27ID:PT76WH2y
C89にboolがないことに拒否反応を起こす頭の固い奴に迎合して作られたboolでないBOOL
513デフォルトの名無しさん
2020/02/09(日) 09:35:18.39ID:aEgJYC9i
先にWindowsがシステムコールとしての素朴な要請からbool型の実装型を定義して、
その後コンパイラメーカーがbool型の実装を別の方式にし出すよりは
よっぽどマシやったろうが!

個人的にはBOOLは好きだがな
TRUE/FALSEを表すのに4バイトも使うところが
いかにもリッチなOSっぽく、使っていてリッチな気分になれる
514デフォルトの名無しさん
2020/02/09(日) 09:41:35.54ID:6++kPC7v
>>508
ありがと
全部は見てないけどDbgHelp関連の奴はその書き方してるみたいね
https://docs.microsoft.com/en-us/windows/win32/debug/dbghelp-functions
515デフォルトの名無しさん
2020/02/09(日) 09:47:29.30ID:Ej5ffr5G
>>510
> } else if (bRet == FALSE) {
>  // エラー2が発生すた、
>  ....
エラーじゃないぞ
人の知識とか想像力とか言う前に自分の知識を見直せよw
516デフォルトの名無しさん
2020/02/09(日) 09:55:00.47ID:aEgJYC9i
といっても成功していないのだからエラー扱いで差し支えないなのでは…
517デフォルトの名無しさん
2020/02/09(日) 10:28:32.96ID:Ej5ffr5G
>>516
なんでそんなに自信満々なんだよw
マジでドキュメント見てこい
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getmessage
518デフォルトの名無しさん
2020/02/09(日) 10:45:20.17ID:Jw8Rx7z0
>>510
GetMessageのマニュアルをちゃんと読めクソ雑魚
エラーの時は-1、WM_QUITの時はFALSE(0)を返すが、それ以外の時は「nonzeroを返す」としか言ってない
nonzeroというのはたくさんの値の集合であって、その判定をある特定の値と==で行うことはTRUEが1だろうと他の値だろうと完全な間違いだ
つまりお前のその糞プログラムは完全にバグっているし、お前がバカにしてる>>455らが言った通りの間違いをそのままやらかしてる
519デフォルトの名無しさん
2020/02/09(日) 10:54:04.79ID:Jw8Rx7z0
クソ雑魚>>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);
 }
}
520デフォルトの名無しさん
2020/02/09(日) 11:39:41.09ID:aEgJYC9i
>>519
>TRUE以外ならassertで落としていいなんてどこに書いてある?
それはこちらが聞きたい;
何を見てそう思ったのか?
521デフォルトの名無しさん
2020/02/09(日) 11:53:18.89ID:PT76WH2y
>>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");
}
522デフォルトの名無しさん
2020/02/09(日) 12:02:53.96ID:Cr/e9GtE
while(GetMessage( &msg, hWnd, 0, 0 ) >0)
{
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}
523デフォルトの名無しさん
2020/02/09(日) 12:05:04.77ID:aEgJYC9i
とオモタがわかった
GetMessage()は WM_QUIT以外を受け取ったとき非0を返す、としか書かれていないから
bRet32 == TRUEでは正しい判定にならないのねん

使ったのがスゲー昔なので忘れていたが、そのときは多分>>519式に書いたから安心してホスイ
524デフォルトの名無しさん
2020/02/09(日) 12:06:02.94ID:aEgJYC9i
>>522
気持ちはワカル
525デフォルトの名無しさん
2020/02/09(日) 15:07:49.90ID:Z95s67CZ
しょうもない事で攻撃的になるやつなんなの
いつも吹いてしまうw
526デフォルトの名無しさん
2020/02/09(日) 15:13:04.53ID:G+Zw2pJ3
(笑)
527はちみつ餃子 ◆8X2XSCHEME
2020/02/09(日) 15:27:19.45ID:OoesT11A
>>506
BASIC というか、古の言語にはビット演算と論理演算の区別がないものが結構あった。
全てのビットが立った状態 (-1) を真ということにしておけば
ビット演算用の AND, OR, NOT がそのまま論理演算のそれとして使える。

昔はこれが気の利いた方法だったんだろう。
528デフォルトの名無しさん
2020/02/09(日) 16:19:35.32ID:wTv3WydA
#define FALSE 0 ← 正しい
#define TRUE 1 ← 間違い くず! 0点!! 出入り禁止!!!
#define TRUE (!0) ← 正しい
if(b) ← 正しい
if(b != FALSE) ← 正しい
if(b == TRUE) ← 間違い くず! 0点!! 出入り禁止!!!
529デフォルトの名無しさん
2020/02/09(日) 17:16:55.31ID:J3Qn0niW
>if(b != FALSE) ← 正しい

これこそ糞コード
530デフォルトの名無しさん
2020/02/09(日) 17:20:45.96ID:GpaXptWq
意味的にboolなら
if (a)
if (!a)
で判断すべきだと思う
531デフォルトの名無しさん
2020/02/09(日) 17:24:22.90ID:GpaXptWq
if (a == TRUE)
if (a == TRUE == TRUE)
if (a == TRUE == TRUE == TRUE)
532デフォルトの名無しさん
2020/02/09(日) 17:32:39.19ID:DvSFPggO
とぅっとぅるぅ~♪
533デフォルトの名無しさん
2020/02/09(日) 17:40:32.11ID:J3Qn0niW
もともと>>438>>439を混同すんなという話なんだが、混同してる奴が次から次へと湧いて出てくるw
534デフォルトの名無しさん
2020/02/09(日) 17:46:22.21ID:cYNa4VVg
ちゃうねん。
535デフォルトの名無しさん
2020/02/09(日) 17:46:32.42ID:ugWNThcV
>>528
#define TRUE (!0) ← 正しい

C/C++ では、!0 は、必ず1 になることが仕様化されているので、仕様に準拠している
処理系ではこれは必ず、
#define TRUE 1
と書くのと同じになるので、敢えて (!0) と書く意味は無い。
536デフォルトの名無しさん
2020/02/09(日) 17:48:20.60ID:GpaXptWq
boolだろうがBOOLだろうがYESNOだろうが
意味がboolであればboolと同じ扱い
537デフォルトの名無しさん
2020/02/09(日) 17:48:58.88ID:6++kPC7v
>>529
糞コードだが
> if(b == TRUE) ← 間違い くず! 0点!! 出入り禁止!!!
より1億倍マシ
538デフォルトの名無しさん
2020/02/09(日) 17:50:49.32ID:GpaXptWq
>>528
1がイヤなら0もイヤだろう
#define FALSE (0!=0)
としないと
539デフォルトの名無しさん
2020/02/09(日) 17:55:11.50ID:J3Qn0niW
>>537
マシとか言う以前にそもそも動作が違うんだが。
bがTRUEと一致するかどうか判断するのに他にどういう書き方をするというんだろう?
540デフォルトの名無しさん
2020/02/09(日) 17:59:01.69ID:cYNa4VVg
>>539
!(b != TRUE)。
541デフォルトの名無しさん
2020/02/09(日) 18:02:21.32ID:GpaXptWq
普通はTRUEかFALSEしか入ってないんだよ

それ以外が入ってる可能性があるなら
普通TRUEがどうかの判断だけじゃダメじゃないか?
542デフォルトの名無しさん
2020/02/09(日) 18:05:49.02ID:GpaXptWq
switch (b){
case FALSE:
...
case TRUE:
...
case ???
...
default
...
}

これで
543デフォルトの名無しさん
2020/02/09(日) 18:07:19.16ID:ugWNThcV
>>539
それは難しくいえば数学の集合論の話になる。
{0} と {非0} の二つの集合が有り、
if の条件式では、前者が偽、後者が真と評価される。
TRUEはどんな処理系であれ、必ず後者の集合の要素(元)になっていることだけは
保障されている。
なので、if ( b != 0 ) や、if (b) は正しいが、
if (b == TRUE) は絶対駄目、ということになる。
544デフォルトの名無しさん
2020/02/09(日) 18:09:46.56ID:GpaXptWq
>>543
BOOLなのに
1と2を区別したい事があるんだってさ
545デフォルトの名無しさん
2020/02/09(日) 18:10:45.32ID:ugWNThcV
if ( b == TRUE ) は、この条件式自体の動作は問題ないが、
b が TRUE ではないが、真である何らかの値を持っていたときに破綻してしまう。
BOOL b と書いた場合、本人が書いたプログラムでは b は、必ず
TRUE か FALSE の二値に限って書くことになろうが、往々にして、
APIなどでは、「真」の意味で「非0」の値を返してくること関数が含まれて
しまっている。
だから、勘違いや混乱が起き易い。
そのため、if ( b == TRUE ) というのは、絶対にやめておいたほうが良い書き方
となる。
546デフォルトの名無しさん
2020/02/09(日) 18:16:58.01ID:GpaXptWq
TRUE/FALSE以外を想定するなら
時と場合による

TRUE/FALSEしか想定しないなら
if (b) / if (!b)
と書くべき
547デフォルトの名無しさん
2020/02/09(日) 18:19:53.44ID:TF4jiljH
昔VB6からWinAPI呼ぶときの注意点として本で読んだ気がする
それboolじゃないよね?とは思った
548デフォルトの名無しさん
2020/02/09(日) 18:20:59.38ID:J3Qn0niW
>>545
じゃあ聞いてみよう。
bがTRUEと一致するかどうか判断する必要がある場合はどう書く?
549デフォルトの名無しさん
2020/02/09(日) 18:29:21.05ID:J3Qn0niW
>>546
排中律が成り立たないからFALSEでないことはTRUEを意味しない。
成功した場合にTRUE、失敗した場合にFALSEを返すという関数がある場合、成功したかどうかは
FALSEでないことではなくTRUEと一致するかどうかで判断しなければならない。
550デフォルトの名無しさん
2020/02/09(日) 18:29:23.53ID:cYNa4VVg
>>548
!(b != TRUE)。
551デフォルトの名無しさん
2020/02/09(日) 18:30:08.13ID:aEgJYC9i
>>548
架空のケースについてのお答えは差し控える
つか糞コードかどうかはともかく>>509の方はMSDNの記述に準拠したコードという意味では
非の打ち所が無い(何かあってもMSDNのせいにできる
552デフォルトの名無しさん
2020/02/09(日) 18:30:08.50ID:6++kPC7v
>>539
> bがTRUEと一致するかどうか判断する
それ自体がまずい(ことが多い)と指摘されてることにそろそろ気づこうよ…
553デフォルトの名無しさん
2020/02/09(日) 18:36:27.78ID:J3Qn0niW
>>552
>>514見ているのにいまだにそんなこと言っているのはなんでだろう
554デフォルトの名無しさん
2020/02/09(日) 18:42:52.19ID:cYNa4VVg
いやちゃうねん。
555デフォルトの名無しさん
2020/02/09(日) 18:59:34.88ID:aEgJYC9i
intの取り得る値の集合に対し、TRUEの定義が-93でありかつそれ以外は偽と解釈をせよと仕様に書いてあったら
さすがに(b == TRUE)とか(b != TRUE)書くことを現実の選択肢として考慮せざるおえない
もちろんそんな仕様が糞だが、仕様なのだからしようが無い
数学の本質は自由性にある、
556デフォルトの名無しさん
2020/02/09(日) 19:07:50.42ID:mORiFTgk
>>549
>>546
日本語読めますか?
557デフォルトの名無しさん
2020/02/09(日) 19:15:36.19ID:PT76WH2y
FALSEは定数
TRUEは範囲で観測によって収束する

適性に乏しいやつには厳しいよな
558デフォルトの名無しさん
2020/02/09(日) 19:16:00.10ID:mORiFTgk
boolからBOOLになってintになってた
559デフォルトの名無しさん
2020/02/09(日) 19:16:09.28ID:MeV8oXxA
集合B={FALSE=0,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 を示す
560デフォルトの名無しさん
2020/02/09(日) 19:17:37.19ID:mORiFTgk
数学関係ないのに数学ネタでひっぱってるヤツがいるな
IDは違うけど同じ人?

数学関係ないから
561デフォルトの名無しさん
2020/02/09(日) 19:18:03.88ID:6++kPC7v
>>553
>>514の話なら>> 509だし、そうでないAPIもたくさんあるから
> それ自体がまずい(ことが多い)と指摘
されてるんだが、まじでわかってないのか?
引っ込みつかなくなってるだけだと思ってたが…
562デフォルトの名無しさん
2020/02/09(日) 19:18:39.73ID:cYNa4VVg
ちゃうねんちゃうねん。
563デフォルトの名無しさん
2020/02/09(日) 19:19:01.31ID:MeV8oXxA
訂正
b=1∩b=2∩b=3
→b=1∪b=2∪b=3
564デフォルトの名無しさん
2020/02/09(日) 19:22:41.80ID:qoRTNAXH
グローバル領域にインスタンスを作って、初期化はmain()の中でしたいとします。
で、初期化に必要な情報はmain()の中で初めて分かるとします。

こういうときってそのクラスのコンストラクタとしては何もしないものを作っておいて、初期化用の関数を別途用意するというのが普通ですか?
インスタンスの宣言だけしておいてコンストラクタは後で呼ぶなんてできないですよね?
565デフォルトの名無しさん
2020/02/09(日) 19:23:38.68ID:mORiFTgk
ポインタにしとけ
566デフォルトの名無しさん
2020/02/09(日) 19:29:17.77ID:J3Qn0niW
>>561
逆に不思議だわ。
「成功時に0以外の値を返す」と「成功時にTRUEを返す」は違うということがなんで理解できないのか。
567デフォルトの名無しさん
2020/02/09(日) 19:30:00.78ID:aEgJYC9i
std::unique_ptr<T>の出番
568デフォルトの名無しさん
2020/02/09(日) 19:30:50.97ID:bHnzUNQO
apiの仕様見て適切に処理で終わる話だろこれ
569デフォルトの名無しさん
2020/02/09(日) 19:37:32.03ID:54+KBSAm
optionalの出番だろ
570デフォルトの名無しさん
2020/02/09(日) 19:39:43.34ID:OliK3lJl
>>568
同意
571デフォルトの名無しさん
2020/02/09(日) 19:45:02.77ID:6++kPC7v
>>566
どこから違うことを理解してないと思った?
思い込み激しすぎw
572デフォルトの名無しさん
2020/02/09(日) 19:45:29.20ID:6++kPC7v
>>568に一票
573デフォルトの名無しさん
2020/02/09(日) 19:47:47.73ID:mORiFTgk
もともとはboolの話だったのに
574デフォルトの名無しさん
2020/02/09(日) 19:49:14.41ID:VD5bohdG
GetGlyphOutline などで文字画像を取り出そうとすると、フォントが持ってない文字は代わりの文字を出力してくる。
(例えば、昔の毛筆フォントでは「髙(はしご高)」などはMSゴシックになる。)
これを抑制したいので、そのフォントがグリフデータを持っているかどうか、調べる方法はありますでしょうか?
575デフォルトの名無しさん
2020/02/09(日) 19:50:25.08ID:mORiFTgk
C++の相談?
576デフォルトの名無しさん
2020/02/09(日) 19:52:53.59ID:J3Qn0niW
>>571
違いを理解しているなら>>566の後者はまさに>>539だということも理解できそうなもんだが。
577デフォルトの名無しさん
2020/02/09(日) 19:54:35.07ID:bHnzUNQO
>>574
ここよりwindows apiのスレのがいいんじゃないかな
578デフォルトの名無しさん
2020/02/09(日) 20:00:40.91ID:6++kPC7v
>>576
もしかして(ことが多い)っていう意味もわかってないのか?
579デフォルトの名無しさん
2020/02/09(日) 20:05:04.78ID:54+KBSAm
win32は変な仕様多いからAPIの仕様確認しないと罠にはまる
580デフォルトの名無しさん
2020/02/09(日) 20:05:21.07ID:J3Qn0niW
多い方に合わせろって話でもないだろう。
>>568の通りそれぞれの仕様に合わせて適切に扱えってこと。
581デフォルトの名無しさん
2020/02/09(日) 20:05:58.49ID:PT76WH2y
>>579
ほんこれ
582デフォルトの名無しさん
2020/02/09(日) 20:07:59.65ID:54+KBSAm
GetModuleFileNameとか仕様作った奴のセンスを疑う
583デフォルトの名無しさん
2020/02/09(日) 20:20:16.24ID:6++kPC7v
>>580
誰も多い方に合わせろなんて言ってないのに…
単にそういうケースが多いって言うだけの話であることも説明しないとわからんのかな?w
584デフォルトの名無しさん
2020/02/09(日) 20:30:08.24ID:J3Qn0niW
なら問題ないケースもあることを理解してるわけだ。だとすると>>552で指摘してたのはなんだろうと。
585デフォルトの名無しさん
2020/02/09(日) 20:34:19.93ID:6++kPC7v
>>584
えっ?
まだ(ことが多い)ってわざわざ書いてる意味がわからんのか?
まともな奴と会話してる時ならいちいち書かないんだが、ネット掲示板なのでわけわからん奴に絡まれないようにわざわざ書いたのに想定外の低能さんなの?
586デフォルトの名無しさん
2020/02/09(日) 20:46:39.77ID:J3Qn0niW
>>585
つまり>>552は、まずい場合もあるしそうでない場合もあるという意味のない指摘なわけだ。
ようやく>>539に戻れたな。

>>537
マシとか言う以前にそもそも動作が違うんだが。
bがTRUEと一致するかどうか判断するのに他にどういう書き方をするというんだろう?
587デフォルトの名無しさん
2020/02/09(日) 20:52:41.00ID:mORiFTgk
bがTRUEと一致する条件の話はしてなくて
boolに対するif文をどう書くかの話だろ

APIの使い方なら他スレでやって
588デフォルトの名無しさん
2020/02/09(日) 20:55:58.33ID:PT76WH2y
余所でやれって、APIと言語仕様のズレの話だろ
正しい理解はどのようなものかという興味は
スレ違いじゃねえぞ
589デフォルトの名無しさん
2020/02/09(日) 21:03:28.51ID:mORiFTgk
APIの正しい理解ならAPIのドキュメントを見れば良いのでは?

もともとのboolの話とは全く関係ないですね
590デフォルトの名無しさん
2020/02/09(日) 21:05:18.68ID:6++kPC7v
>>586
> つまり>>552は、まずい場合もあるしそうでない場合もあるという意味のない指摘なわけだ。
お前には意味ないのかもな…
必死になりすぎw
591デフォルトの名無しさん
2020/02/09(日) 21:05:59.85ID:J3Qn0niW
>>533に書いたが、boolじゃなくてBOOLの話をしているのになぜかboolと混同する人が
592デフォルトの名無しさん
2020/02/09(日) 21:06:45.54ID:mORiFTgk
boolの話題でbool以外を語るのはこんな感じ

内部的に固定小数点なfloatライブラリもあるぞ
内部的にvectorなmapライブラリもあるぞ
593デフォルトの名無しさん
2020/02/09(日) 21:07:53.15ID:mORiFTgk
BOOLも同じ
意味的なBOOLが前提
それ以外は特殊事情
594デフォルトの名無しさん
2020/02/09(日) 21:21:02.28ID:J3Qn0niW
>>590
意味のあるなしは主観だからいいとして、結局これ理解できたかな?

>>537
マシとか言う以前にそもそも動作が違うんだが。
bがTRUEと一致するかどうか判断するのに他にどういう書き方をするというんだろう?
595デフォルトの名無しさん
2020/02/09(日) 21:23:11.71ID:6++kPC7v
>>594
>>552
低能は一度指摘されたことを何度も繰り返すw
596
2020/02/09(日) 21:32:30.02ID:Z95s67CZ
boolができるまでは

if (!!b)

こういうイディオムもありましてね
597デフォルトの名無しさん
2020/02/09(日) 21:42:44.86ID:J3Qn0niW
>>576を理解しているなら

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

このような判断がが必要な場合があることも理解しているはずだろうが、
結局この質問には答えられない(答えたくない)ようだな。
598デフォルトの名無しさん
2020/02/09(日) 22:05:36.89ID:6++kPC7v
まだやってるのかよw
無能無限ループ乙
599デフォルトの名無しさん
2020/02/09(日) 22:07:19.29ID:EoI3r47q
あいかわらずしょーもない話題だと盛り上がるのな。
600
2020/02/09(日) 22:16:06.44ID:Z95s67CZ
goto、マクロ、BOOL
全部C言語の範疇なんだよなw
おじさんがんばりすぎ
601デフォルトの名無しさん
2020/02/09(日) 22:18:57.48ID:aEgJYC9i
つか真理値の型であるbool型および
真理値の型としての名前を与えられたBOOL型の議論が
Win32 APIの仕様という現実に汚染されてぐちゃらけてますな
TRUEに幅が有る、なんていうおかしいことを言い出す香具師まで出る始末、!
602デフォルトの名無しさん
2020/02/09(日) 22:23:19.21ID:J3Qn0niW
本当は昨日で終わっていたはずの話題なんだがな。
603◆QZaw55cn4c
2020/02/09(日) 22:31:58.84ID:mQrdek/f
>>487
え?話の発端は >>438 でしょう?
>>439>>438 の bool を BOOL にすげ替えたミスリードでしょう?

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

前提条件を全然考慮せず、条件反射的に
>if (b == TRUE) と書くのはバグの原因になる
と判断するのは老害的発想と私は断定しますね
604デフォルトの名無しさん
2020/02/09(日) 22:33:23.30ID:EiJfhZVq
>>602
お前が言うなよww
605デフォルトの名無しさん
2020/02/09(日) 22:33:54.63ID:aEgJYC9i
一般論として、APIの呼び出しが成功しました、という情報にはそれ以上幅も糞も無い(成功した要因など知っても無駄
から、成功=TRUE、失敗=FALSEとする割付の下では、TRUEこそ単一値として規定されるべきブツに他ならない
よって、一般論としては b == TRUEは言うほど糞ではないはずであった、
606デフォルトの名無しさん
2020/02/09(日) 22:37:13.53ID:aEgJYC9i
まあエラー要因を複数種類返したい、ということなら
成功判定は b == SUCCEEDEDでSUCCEEDEDでなかったらエラーコードが入っている、という
INTかDWORD返しがストレートやったがな!(成功時非0を返す、とか言われるよりは
607デフォルトの名無しさん
2020/02/09(日) 22:42:00.12ID:VD5bohdG
if( b == TRUE ) って、結局 if( b ) ってことだろ。
608デフォルトの名無しさん
2020/02/09(日) 22:45:14.84ID:Z95s67CZ
クソワロタ
口調も激変
609デフォルトの名無しさん
2020/02/10(月) 00:02:35.66ID:SkPzv01G
>>555
ヘッダファイルの中で TRUE の値が -93 に #define で定義されていたとしても、C/C++ の仕様だと、0だけが偽で、0以外は真であることだけはANSI Cで決まっているので、それはない。
610デフォルトの名無しさん
2020/02/10(月) 00:06:15.78ID:hYCIpnsp
つまり、
#define TRUE (-93)
はANSI Cの規格上非合法だからそれはない
611デフォルトの名無しさん
2020/02/10(月) 00:07:32.18ID:SkPzv01G
>>548
その場合で、かつ、b が TRUE に一致するもの以外を除去したいなら
if ( b == TRUE ) と書く以外には無い。
しかし、Win32 API の仕様でも、そのようなことを判定する必要があることはない
ように通常、作られている。
何人かが指摘しているように、FALSE との判定は良いのだ。
TRUE との判定はまずい。
612デフォルトの名無しさん
2020/02/10(月) 00:08:23.83ID:hYCIpnsp
gotoといいBOOLといい、闇が深いな
裾野が広がれば、底辺は底なしカヨ、
613デフォルトの名無しさん
2020/02/10(月) 00:08:59.15ID:hYCIpnsp
>>611
>>601
614デフォルトの名無しさん
2020/02/10(月) 00:39:11.13ID:NGNAXTbr
【IT】不動の人気を誇る「Python」、評価が二分される「Java」「JavaScript」
http://2chb.net/r/bizplus/1581244420/

>JavaScript、Java、Python、「C++」「C」が特に多くの人に習得されたプログラミング言語だった
615デフォルトの名無しさん
2020/02/10(月) 01:06:29.16ID:2gVSY1CN
C++11規格でJavaやC#の優位性がかなり失われた気がするわ。
616デフォルトの名無しさん
2020/02/10(月) 01:07:48.45ID:Ro8qON5e
c#ならまだしもjavの優位性って?
617デフォルトの名無しさん
2020/02/10(月) 01:35:35.28ID:SkPzv01G
>>614
というか、JSやJavaは、ちゃんと学んだ人も多いだろうが、
Pythonを実際に使ったことのある人はかなり少数派だと思う。
618デフォルトの名無しさん
2020/02/10(月) 01:38:59.61ID:SkPzv01G
>>617
Javaは、GUIも出来たしブラウザ上でも動いたし、他に代わるものがなかったので
それしか選択肢がなかったために実際に使った人は多かったはず。
JSも、HTMLを使おうとした際にそれしか動的言語は無かったから同様。

一方で、Pythonに関しては、似たようなものは他にたくさんあるし、
自分以外の人に使ってもらうにも実行環境のインストールが必要だし、
Javaと違って互換性にも問題あるので使いにくい。
619デフォルトの名無しさん
2020/02/10(月) 01:43:33.69ID:SkPzv01G
>>618
つまり、Pythonの評価が高いのは、前評判だけで実際に使った人が少ないから。
620デフォルトの名無しさん
2020/02/10(月) 03:53:35.38ID:rxX2x5Pb
んなわけない。
621デフォルトの名無しさん
2020/02/10(月) 04:03:09.14ID:2gVSY1CN
Pythonはtypoがつらい。
622デフォルトの名無しさん
2020/02/10(月) 08:01:35.21ID:staO5LAL
ごちゃごちゃいうよりまずはいっぺんオッPythonで
そこそこの規模のプログラム(最低1000行以上)かいてみりゃわかる
はっきりいってクソだよ
あんなもんで巨大なプログラムはとても書けたもんじゃない
623デフォルトの名無しさん
2020/02/10(月) 08:53:11.04ID:GJT/1Bxa
自分で1000行も書かなくても、どこかの誰かが書いてくれたライブラリを呼び出せば
望んだ仕事をやってくれるって部分がPythonの好まれる理由じゃないのん?

C++を使う人は、Pythonの流行を裏から支えてる感じで。
624デフォルトの名無しさん
2020/02/10(月) 10:10:17.80ID:hDJC6jsQ
pythonで1000行くらいで根をあげてるようじゃ
どんなコード見ても文句言い出すだろ。。仕事にならんわ。
625デフォルトの名無しさん
2020/02/10(月) 10:24:50.55ID:JgTqubiS
インデントをきっちり合わせないといけないので、Cの適当なインデントにうんざりしてる人にはむしろ合うかもしれない
でも関数やブロックが大きくなると、同一階層を探すのがつらくなるので、適切なブロック、関数分けが必須になる
いずれにしても、神経質な人には合ってるのかもしれない
626デフォルトの名無しさん
2020/02/10(月) 10:46:13.48ID:oMyz9pGE
機械学習ならpythonほぼ必須なんだが
いまだにやったことないとか
ロートルなのを白状してるようなもん
627デフォルトの名無しさん
2020/02/10(月) 11:15:12.10ID:yW0oU9fF
変数がどんな型にも化けられる変態言語
628デフォルトの名無しさん
2020/02/10(月) 11:25:16.00ID:8A84p9rG
pythonがいいとは思わないけど、perlがクソすぎるので相対的にマシだから流行ってる
それ以上の理由はないと思う
629デフォルトの名無しさん
2020/02/10(月) 11:37:39.28ID:oMyz9pGE
perlの代替っていつの時代の話だよ
お前完全に取り残されてるぞ
630デフォルトの名無しさん
2020/02/10(月) 11:50:23.10ID:SkPzv01G
Pythonは、スマホで動かすのは難しいらしい。
少なくともスクリプト言語として動かすのは困難。

デスクトップマシンですら、
・互換性の問題がある。Ver 2系と Ver 3系で大幅に異なると聞いた。
・Windowsですらどの処理系が標準か不明。
・GUIがちゃんとまともに使えるかどうか不明。
631デフォルトの名無しさん
2020/02/10(月) 11:55:31.13ID:SkPzv01G
>>630
Pythonのせいではなく、Perlのようなスクリプト言語がそもそも使えないという
スマホの限界だとは思う。
スマホでも使えることは使えても、IDEのような専用環境だけで使えるだけでは
本来のスクリプト言語としては使い物にならない。
このスマホの時代に Perl, Python, Ruby は合わないかも。
632デフォルトの名無しさん
2020/02/10(月) 11:58:33.88ID:SkPzv01G
iOS, Android 共通にスクリプト的なことをやりたいなら、もう、スクリプト言語は諦めて、
C++で書いておいて iOSではSwift とリンクし、Androidでは、JNIを使ってJavaから
呼び出すほうがずっと簡単。
なお、AndroidならシェルスクリプトがPythonなんかより遥かに簡単に使える。
633はちみつ餃子 ◆8X2XSCHEME
2020/02/10(月) 12:13:49.40ID:gblDkkh1
>>625
- 括弧などに従って自動でインデントが付く
- 手動 (あるいは半自動) でインデントの位置を合わせる

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

Python はいじったことないからよう知らんけど、 (インデントで構造を表す系統の文法である) Haskell を書くのはつらかった。
Haskell ではインデントと改行の替わりに波括弧とセミコロンも使えるけど、Python にそういうのないの?
634デフォルトの名無しさん
2020/02/10(月) 12:34:04.03ID:oMyz9pGE
pythonをswift, javaなんかと比較してる人は
隔離された世界で誰にも使われないアプリを細々と作ってる感じがするわw
学習系を含むデータ解析のツールとして環境が優れてるからpythonが人気なんだよ
c++でテンプレートいじってるよりビッグデータ解析してビジネス提案できる方がはるかに収入高い
635はちみつ餃子 ◆8X2XSCHEME
2020/02/10(月) 12:51:05.23ID:gblDkkh1
おっ、煽り入りました~~
636デフォルトの名無しさん
2020/02/10(月) 13:26:43.90ID:NGNAXTbr
ビジネス提案おじさん
637デフォルトの名無しさん
2020/02/10(月) 14:18:49.02ID:SkPzv01G
>>633
ブロック開始終了記号とインデントを両方組み合わせたものが一番分かり易くて間違いにくい。
インデントだけでやると、個人的には見間違いそうで神経をすり減らすので辛い。
638デフォルトの名無しさん
2020/02/10(月) 17:30:56.95ID:rxX2x5Pb
研究者が使うのにPythonは良い選択なんじゃないの。
事務作業にVBAが良い選択なのと同様に。
639デフォルトの名無しさん
2020/02/10(月) 17:40:26.33ID:pqZ9DEAl
今さらですが、そもそもWin32のFALSEって、0であることは保証されてるんですか?

BOOL b = FALSE;
if (b)
{
  ここに来ないことは保証されてるんですか?
}
640デフォルトの名無しさん
2020/02/10(月) 17:42:58.97ID:SkPzv01G
>>639
まともな C/C++ では、FALSE はどんな処理系でも 0 であることが保障される。
641デフォルトの名無しさん
2020/02/10(月) 17:43:39.45ID:SkPzv01G
>>639
当然、そこに来ないことも保障される。
642デフォルトの名無しさん
2020/02/10(月) 17:52:19.21ID:M5G7J8Pl
>>639
規格書のようなレベルで規定されているかどうかは知らないけど、公式ドキュメントの至るところで
FALSEは0である前提で書かれているものが見つかるから、そこを疑う必要はないと思う。

>>640
FALSEはWindows SDKの定義であってC/C++とは直接関係ないんだが。
643はちみつ餃子 ◆8X2XSCHEME
2020/02/10(月) 18:04:03.15ID:gblDkkh1
>>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 があるのはアレだよな……。
644デフォルトの名無しさん
2020/02/10(月) 18:06:40.24ID:AZ4KAaI2
システムハンガリアンもそうだけど明白な違反が堂々と放置されているからなあ
645デフォルトの名無しさん
2020/02/10(月) 18:08:58.46ID:SkPzv01G
>>642 >>643
[根拠]
数学的に以下の根拠となる:

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

1, 2 を両方成り立たせるためには、FALSE は必ず 0 でなければならないことが
証明される。
646デフォルトの名無しさん
2020/02/10(月) 18:10:00.98ID:SkPzv01G
数学が大事です。
今の場合、仕様書に書いてなくても、数学的に考えれば絶対であることが証明できます。
647デフォルトの名無しさん
2020/02/10(月) 18:13:48.89ID:M5G7J8Pl
昨日の奴かw
BOOLとboolは別物だということが結局最後まで理解できなかったんだな。
648デフォルトの名無しさん
2020/02/10(月) 18:19:36.47ID:1F9oSbm6
windows apiのスレでやってくれよ
649デフォルトの名無しさん
2020/02/10(月) 18:21:23.11ID:1D/jLqBa
>>645
頭が悪いとか話が通じないってよく言われない?
言われる度に相手の方が間違ってると思ってるだろうけど、話が通じてないのはお前が自分の間違いを認識できてないからだぞw
650デフォルトの名無しさん
2020/02/10(月) 18:22:28.83ID:SkPzv01G
このスレには、失礼ですが、はちみつさんも含め、数学に弱い人が多いようです。
651デフォルトの名無しさん
2020/02/10(月) 18:23:02.20ID:SkPzv01G
>>649
いや、むしろ逆に現実では天才と呼ばれています。
652デフォルトの名無しさん
2020/02/10(月) 18:25:05.67ID:SkPzv01G
仕様書にすべては書いてなくても、数学で考えれば絶対であることが証明できる事柄があるのです。
今回のもその一例です。
653はちみつ餃子 ◆8X2XSCHEME
2020/02/10(月) 18:25:15.66ID:gblDkkh1
ああ、荒らしに来ただけか。
まぜっかえすにしてももうちょっとマシなこと言えよ。
654デフォルトの名無しさん
2020/02/10(月) 18:27:13.76ID:rZ6GQco7
東大数学科卒だが
>>650は頭が弱いと思う
655デフォルトの名無しさん
2020/02/10(月) 18:27:37.23ID:rxX2x5Pb
マクロはほとんど書く必要なくなったよね。
656デフォルトの名無しさん
2020/02/10(月) 18:27:43.95ID:SkPzv01G
失礼ですが、はちみつ氏は、C++の仕様には詳しいですが、それ以外は結構間違っています。
657デフォルトの名無しさん
2020/02/10(月) 18:29:09.02ID:rZ6GQco7
>>656
ここでの君の書き込みだけで判断すると
君が間違ってる可能性が高い
658デフォルトの名無しさん
2020/02/10(月) 18:29:40.36ID:SkPzv01G
>>654
でも現実に私は天才と言われています。
659デフォルトの名無しさん
2020/02/10(月) 18:30:41.13ID:rZ6GQco7
数学の実績は?
660デフォルトの名無しさん
2020/02/10(月) 18:31:14.06ID:SkPzv01G
>>1
私は、東大数学科の人とは意見が一致することが多いです。
よく考えてみてください。
もし分からないようなら、多分、あたなは東大数学科ではないか、レベルが落ちてしまったと思われます。
661デフォルトの名無しさん
2020/02/10(月) 18:33:21.87ID:rZ6GQco7
学科は?
662デフォルトの名無しさん
2020/02/10(月) 18:33:32.23ID:M5G7J8Pl
まとめるとこう。

1. BOOL型およびTRUE/FALSEは真偽値として用いるために*Windowsで独自に定義*されたものだが
 厳密には真偽値と振る舞いが異なる
2. 具体的には、FALSEでなれければTRUE、TRUEでなければFALSE、という排中律が成り立たない
3. 排中律が成り立たない以上、FALSEとの比較、TRUEとの比較はそれぞれ意味がある
663デフォルトの名無しさん
2020/02/10(月) 18:34:10.03ID:SkPzv01G
ここは、学歴も実績も嘘を付けてしまうので参考になりません。
東大数学科と言うのもたぶんデタラメでしょう。
664デフォルトの名無しさん
2020/02/10(月) 18:34:25.57ID:rZ6GQco7
なんでWindows前提?
665デフォルトの名無しさん
2020/02/10(月) 18:37:31.54ID:rZ6GQco7
排中律君も数学君と同じ人かと思った
違うのかな?

普通の言葉で書こうよ
書けるでしょ
666はちみつ餃子 ◆8X2XSCHEME
2020/02/10(月) 19:01:26.22ID:gblDkkh1
>>664
TRUE を持つ内では皆が共通に論じられるほど広く知られたもののひとつだからでしょ。
反例としてはひとつあれば充分。
ちなみに「TRUE と比較するべきではない」に対する反例ね。

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

現実はそんな綺麗なもんじゃねーよっていうのに Windows はうってつけだろ?
667デフォルトの名無しさん
2020/02/10(月) 19:02:19.07ID:VRCQc/iz
BOOLはWindows APIでしか使わないと思ってるから話が通じないんだな

数学君はなぜ話が通じない?
BOOLがTRUE, FALSE, UNKNOWN, ERROR
からなる集合だったら?
668デフォルトの名無しさん
2020/02/10(月) 19:04:47.41ID:4ZzuDNO4
>>664
>>639からの流れで、あくまでWin32APIの中でのFALSEの話をしているからだろう
669デフォルトの名無しさん
2020/02/10(月) 19:06:03.16ID:VRCQc/iz
BOOLは非常に広い環境で使われていて
その多くはTRUE/FALSEの2値を示す型として使われる

こういう普通の環境では
if (b) / if (!b)
で判断するのが最良

そうではない特殊な環境(Windows APIなど)は
個々のAPI別に語らないと意味が無い
670デフォルトの名無しさん
2020/02/10(月) 19:06:46.57ID:VRCQc/iz
Wimdows APIに限定した話ならここですべきではない
他へ
671デフォルトの名無しさん
2020/02/10(月) 19:33:07.36ID:M5G7J8Pl
つまり、Windowsで>>439のように書いていたのをWindowsのBOOLを知らずに否定しちゃう人、
というネタそのものを体現してくれたわけだな。
672デフォルトの名無しさん
2020/02/10(月) 19:35:42.65ID:Ro8qON5e
BOOLについて議論するならどのBOOLか限定しないと
enum BOOL {TRUE,FALSE};
みたいなのかもしれないし

負論理の入出力ポート読み書きする値だとかで順番も重要だったりして
673デフォルトの名無しさん
2020/02/10(月) 19:47:34.98ID:VRCQc/iz
>>671
何が「つまり」だか

Windows APIが色々と特殊なのは知ってるよ
Windows 2.0から組んでるし

特殊事情はあくまで特殊事情
674デフォルトの名無しさん
2020/02/10(月) 19:56:01.41ID:M5G7J8Pl
そもそも、特殊じゃない「普通の環境」のBOOLって何ぞ?
typedef bool BOOL; とかw
675デフォルトの名無しさん
2020/02/10(月) 20:01:48.67ID:rxX2x5Pb
https://ideone.com/T9gWWT
こうなるので、負の型にキャストするのが良いんですかね?
676デフォルトの名無しさん
2020/02/10(月) 20:25:38.47ID:L7QZkeGE
なんでBOOLの話をしてんだよジジイども
677デフォルトの名無しさん
2020/02/10(月) 20:46:16.46ID:te1zn0Q+
標準にはboolと_Boolしかないんだからそれ以外はどこぞの馬の骨が好き勝手に決めただけの独自定義
そのライブラリのマニュアル熟読しろでこの話は終わり
678デフォルトの名無しさん
2020/02/10(月) 21:07:46.28ID:oMyz9pGE
>>675
そうなんだけど
C言語スレでやれ
じじくさい話ばっかりでうんざりするわ
679デフォルトの名無しさん
2020/02/10(月) 21:11:10.36ID:dan9Jlhp
ナウでヤングな話題よろ
680デフォルトの名無しさん
2020/02/10(月) 21:30:33.43ID:Ui+QSiGG
じゃあboolに戻すけど
if (b == true)
これ書く異常者は一定数おるわな
681◆QZaw55cn4c
2020/02/10(月) 21:33:51.78ID:3bnN/FFY
>>680
私には正常な書き方に思えますよ
その書き方のどこが異常なのでしょうか?
682デフォルトの名無しさん
2020/02/10(月) 21:37:09.03ID:AZ4KAaI2
if (b) で済むのを
if (b == true) と書くのは
if (b == true == true) と書く異常者と同じ
きりねえって話
683デフォルトの名無しさん
2020/02/10(月) 21:38:01.11ID:AZ4KAaI2
括弧ねえと読めねえ「異常者」出てこいw
684デフォルトの名無しさん
2020/02/10(月) 21:49:47.77ID:rxX2x5Pb
>>678
ちゃうねん。
685デフォルトの名無しさん
2020/02/10(月) 21:51:16.94ID:oMyz9pGE
>>683
つまんないことでイキんなカス
686デフォルトの名無しさん
2020/02/10(月) 21:51:26.11ID:M5G7J8Pl
bool b;
if (b == true) // コードスメルではあるがバグではない

BOOL b;
if (b == TRUE) // 正しいか正しくないかは状況による
687デフォルトの名無しさん
2020/02/10(月) 21:53:08.25ID:AZ4KAaI2
>>685
C++スレでC++以外の言語という「つまんないこと」でイキってんのおまえだろ
688デフォルトの名無しさん
2020/02/10(月) 21:53:54.97ID:AZ4KAaI2
おまえみたいの「いちびり」って言うんだけど意味わかる?w
689◆QZaw55cn4c
2020/02/10(月) 21:55:45.19ID:3bnN/FFY
>>682
バグにならなければ問題ないのでは?
>if (b == true == true)
とは私も書きませんが、だからといって異常だとは思わない

というか、あなたの「異常」の定義が異常なのでは?
690◆QZaw55cn4c
2020/02/10(月) 21:56:36.80ID:3bnN/FFY
>>688
いちびり、とは、あなた、関西人ですなぁ
691デフォルトの名無しさん
2020/02/10(月) 22:02:36.14ID:AZ4KAaI2
>>689
正常と異常の境をおまえさんはどこだと思っている?
692デフォルトの名無しさん
2020/02/10(月) 22:02:53.98ID:VRCQc/iz
>>674
Windowsしか知らないの?
世界が狭い

非常に多くの環境でBOOLを使う
693デフォルトの名無しさん
2020/02/10(月) 22:03:55.09ID:AZ4KAaI2
>>690
ああ、おまえほんまは関西人ちゃうなw
俺もほんまの関西人ちゃうけどなw
694デフォルトの名無しさん
2020/02/10(月) 22:04:40.63ID:AZ4KAaI2
>>692
大文字のBOOLを使う「非常に多くの環境」とは?
695デフォルトの名無しさん
2020/02/10(月) 22:06:02.65ID:VRCQc/iz
>531や>>682が異常とは思えないって
まじかQZ
696デフォルトの名無しさん
2020/02/10(月) 22:07:56.51ID:M5G7J8Pl
>>692
その定義を出してみなよ。
標準の仕様じゃないんだからその環境ごとの特殊な定義であることは変わらんだろ。
697デフォルトの名無しさん
2020/02/10(月) 22:14:01.58ID:VRCQc/iz
本当に知らないんだ
まじか
698デフォルトの名無しさん
2020/02/10(月) 22:22:07.37ID:4ZzuDNO4
>>697
その返しは口喧嘩に負けた小学生みたいだから、ちゃんと相手の質問に答えなよ
699デフォルトの名無しさん
2020/02/10(月) 22:23:41.11ID:1F9oSbm6
非常に多いなら具体例2、3あげて終わりでしょ
700デフォルトの名無しさん
2020/02/10(月) 22:24:53.62ID:M5G7J8Pl
もう自分で何を言っているのかわからなくなっているんだろうな。
BOOLやTRUEの定義が環境によって異なる場合があると認めた時点で

if (b == TRUE)

これが正しいと言えるかどうかはその定義次第だということになるのに。
701デフォルトの名無しさん
2020/02/10(月) 22:29:19.34ID:TAH0RZ5f
俺の狭い経験だと
BOOLはintで、TRUEは1、FALSEは0
しか見たことないけど、他の定義の環境ってあるのかな?
702デフォルトの名無しさん
2020/02/10(月) 22:33:34.58ID:PZnoEIEf
-1というか全ビットonは何かで見た
703デフォルトの名無しさん
2020/02/10(月) 22:50:32.94ID:Qny4UpdU
windef.hのFALSEが-1とかに変更されたら、既存のソースは崩壊だろうな
704デフォルトの名無しさん
2020/02/10(月) 23:14:46.53ID:zaYnGTVS
!FALSE
705デフォルトの名無しさん
2020/02/10(月) 23:38:01.28ID:yW0oU9fF
typedef unsigned BOOL:1;
ならまだ救いがあった
なんでint型にしてんだろうな
706デフォルトの名無しさん
2020/02/11(火) 00:40:44.45ID:wwgXq7Q5
>>705
それは BitField みたいだけど、構造体メンバ以外で使えるようになったんだっけ?
707デフォルトの名無しさん
2020/02/11(火) 01:18:20.91ID:wwgXq7Q5
>>703
FALSEは絶対的に0のまま。
708デフォルトの名無しさん
2020/02/11(火) 01:20:55.07ID:wwgXq7Q5
もしかしたら、Rubyが、0をtrueと解釈してしまうことから変なことを思ってる
人がいるのかもしれないが、C/C++においては、言語仕様的に条件式で偽と
解釈されるのは、古くから、唯一、整数の 0 しかないなかったので、言語仕様が
修正されない限り TRUE が 0 以外の値にマクロ定義されることは絶対に無い。
709デフォルトの名無しさん
2020/02/11(火) 02:07:59.10ID:iFdutQCH
あれ?
もしかして私・・また同じ日を繰り返してる・・??
710デフォルトの名無しさん
2020/02/11(火) 02:12:10.45ID:lTJc7ZeR
まだやってんのかお前ら
ゲハ厨みたいなスレだな
711デフォルトの名無しさん
2020/02/11(火) 02:43:47.12ID:wwgXq7Q5
>>708
スマン:
誤:修正されない限り TRUE が 0 以外の値にマクロ定義されることは絶対に無い。
正:修正されない限り FALSE が 0 以外の値にマクロ定義されることは絶対に無い。
712デフォルトの名無しさん
2020/02/11(火) 02:58:41.73ID:f/mZFEPY
>>681
if(b)で十分なのにif(b==true)と書くのはif((a==b)==true)と書くのと同じで冗長なんだよ
これがすぐに理解できないなら論理を簡潔にする能力が欠如してるのでプログラミングの才能はないね
713デフォルトの名無しさん
2020/02/11(火) 03:04:36.42ID:wwgXq7Q5
>>712
しかも、b は、少なくとも見かけ上は int 型ではなく、BOOL 型だし。
それに他の言語の場合、if の条件式に入れられるのは唯一 bool 型の
場合があり、一番 if の条件式に入れ易い型。
714デフォルトの名無しさん
2020/02/11(火) 03:08:16.20ID:wwgXq7Q5
>>713
他の言語の場合、例えば x, y が整数型の場合、
x == y
とした結果の型が bool 型。
そして、if の条件式に入れられるのは bool 型のみだったりする。
だから、もともと b が bool 型なのに、敢えて b == true と判定して
また bool 型に「直して」しまうのはとても奇妙な感じになる。
その文化との兼ね合いから、C/C++ でも、b が BOOL 型の場合は、
if (b) とするのが美しく見える。
715デフォルトの名無しさん
2020/02/11(火) 03:33:01.69ID:AiNLffgv
MISRA-C でも、if( 変数 )で、変数が実質的にブール型の場合は、これでOK

int a = ( 5 < 10 );
printf( "%d", a ); /* 1 */

if( 5 < 10 ) と、if( a ) は同じ意味。
a は、実質的にブール型
716デフォルトの名無しさん
2020/02/11(火) 06:36:51.44ID:DrkniQZr
bool型が存在しない時代に何故bool型になるのか
717◆QZaw55cn4c
2020/02/11(火) 08:01:59.71ID:Sh/x76Zj
>>695
異常を「コンパイラがコンパイルできない」と定義していますから
718◆QZaw55cn4c
2020/02/11(火) 08:02:50.77ID:Sh/x76Zj
>>712
コンパイルが通るんだったら異常ではないのでは?
719◆QZaw55cn4c
2020/02/11(火) 08:03:52.59ID:Sh/x76Zj
>>712
>論理を簡潔にする能力が欠如してる
簡潔すぎてわかりにくいのも困りますね、プログラミングはまず他人への分かりやすさを優先するべきでは?
720デフォルトの名無しさん
2020/02/11(火) 08:29:09.76ID:lXsf9fbV
簡潔過ぎて分かりにくいって何?

if (b) で分かりにくいなら
変数名が適切でないとかそもそも分かりにくい作りとか
他に問題があるんじゃないの?
721デフォルトの名無しさん
2020/02/11(火) 08:33:12.52ID:lXsf9fbV
もしかして
if (a ==b)
よりも
if ( (a == b) == true )
の方が見やすいとかいっちゃう?
722デフォルトの名無しさん
2020/02/11(火) 08:56:04.07ID:tUwi24Vl
そりゃ
if (a == 42)
よりも
if (a == 42 == true)
のほうが見やすいし
if (a == 42 == true != false)
のほうがさらに見やすいのが異常者
723デフォルトの名無しさん
2020/02/11(火) 08:58:48.06ID:lXsf9fbV
カッコも付けないと見にくいよな

if (((a == 42) == true) != false)
724デフォルトの名無しさん
2020/02/11(火) 09:09:46.71ID:Kcy+Q8b9
どれだけ冗長に書けるか選手権?
725デフォルトの名無しさん
2020/02/11(火) 09:15:23.55ID:oAfdlMqH
QZは変なこだわりに固執するやつだから、一般的な感覚とか常識とかについて議論しようとしてもそもそも議論が噛み合わないし、スレを無駄に汚すだけ
726デフォルトの名無しさん
2020/02/11(火) 09:21:24.68ID:tUwi24Vl
if (true == true == true == b == true)
if (true == b == true == b == true)
int *p = &*&*(int *)&*&*&*&*&*(int *)&a;
727デフォルトの名無しさん
2020/02/11(火) 09:34:27.73ID:Gt4Evnq6
ようちえんじがかんじをつかわないでってぐずってるのとおなじだね
728デフォルトの名無しさん
2020/02/11(火) 10:19:17.04ID:G5APdl5q
異常とは、普通じゃないことだよ
少数派のこと
if (b == true == true) は明らかに異常
if (b == true) はたまに見るけど、まぁ異常かな
729デフォルトの名無しさん
2020/02/11(火) 10:34:12.60ID:lXsf9fbV
つまりQZは異常
730デフォルトの名無しさん
2020/02/11(火) 10:35:43.55ID:Kcy+Q8b9
boolやBOOLでない変数abcをif(a==b==c)と書きたい事はある。
731デフォルトの名無しさん
2020/02/11(火) 10:56:56.94ID:0rT9FQIK
QZってコイツ片山だっけ?
732デフォルトの名無しさん
2020/02/11(火) 11:01:53.65ID:u3DUqgh+
if(b==true)
はifのなかには比較入れないとダメだと思っているんじゃね

そう言う言語もあるし
733デフォルトの名無しさん
2020/02/11(火) 11:09:22.66ID:IotAbjtu
「rust が c++ を超えた!! 神!!」みたいな記事をよく見ますけど、今後c++がrustから学んでもっと良くなることって期待して良いですよね?
rustに勉強のコストを割くか迷っています
734デフォルトの名無しさん
2020/02/11(火) 11:12:06.04ID:HeZx7HUk
>>731
片山はQZほど馬鹿ではない
まず国籍が違う
735デフォルトの名無しさん
2020/02/11(火) 11:29:50.94ID:Ci+AyeA2
なぜ

if (a == true)

と書くやつがでてくるのか
それは条件式に食わせるためには比較演算子で値から「真偽値」に変える必要があると
思っていてそれがboolと同値と理解していないからだろ
だからそういうやつは

if (a == 42 == true)

とは書かない
この例はむしろboolを理解してるやつからしか出てこない発想
やつらはいったん「真偽値」になればあとは論理演算子でつなげると理解している
ある意味、条件式を作るときのイディオムに馬鹿正直に従っているわけで別に
異常だと騒ぐほどひどくはない

別の見方をすればboolを特別視しないで書いてるわけで、
冗長にはなるが共通のフォーマットで書ききるってことはほかでもあることだ
そう思えばやっぱりひどくはない
実際おれは特別読みにくいとは感じないし、この無駄は最適化で消える
何かの機会にこれ冗長だよねと教えてやるぐらいで十分
736デフォルトの名無しさん
2020/02/11(火) 11:37:00.49ID:kh2SGwFh
ほんといつまでやってんの
737デフォルトの名無しさん
2020/02/11(火) 11:38:29.11ID:KQZ3+5BK
冗長な書き方をする人の真意なんて測りようもないし理由が一つに決められるわけもないだろう。
想像するだけ無駄。
738はちみつ餃子 ◆8X2XSCHEME
2020/02/11(火) 12:17:11.73ID:GpQNLMm4
>>715
そう書くべきだしそれが普通ってことはわかってんだって。
自分で書く分にはそう書くよ。
でも、他者が書いたコードを読むときや利用するときは
> 変数が実質的にブール型の場合は
っていう前提を確信できない場合がある。

整数型で真偽値の代用にすることがある C/C++ では
型で判断できないことがあるから罠だよねって話をしてるんだよ。
真っ当なデザインではない場合があるから思い込まずにちゃんと確認しようねってこと。
739デフォルトの名無しさん
2020/02/11(火) 15:09:17.27ID:lXsf9fbV
>>735
同値
意味しらないのね
740デフォルトの名無しさん
2020/02/11(火) 15:15:33.26ID:Gt4Evnq6
> この例はむしろboolを理解してるやつからしか出てこない発想

そりゃそうだ
ifの制御式は比較でなければならないと言い張るやつへの皮肉なわけで
741デフォルトの名無しさん
2020/02/11(火) 15:19:47.85ID:QCVkc9h/
operator =(BOOL value){
if(value==0){
return FALSE;
else if(value==1||value==2||...){
}
742デフォルトの名無しさん
2020/02/11(火) 15:21:35.11ID:IKSpGnXe
>>596
あったあった

今はわざわざそれ使う理由忘れた
743デフォルトの名無しさん
2020/02/11(火) 15:25:53.55ID:Uk2CrnAG
Cだとそれで必ず0か1になるからTRUEと比較しても大丈夫!っていうクソみたいなバッドノウハウ
744デフォルトの名無しさん
2020/02/11(火) 15:28:40.66ID:QCVkc9h/
operator ==(BOOL value){
 if(this->value == 0){
  if(this->value == value){
   return TRUE;
  }
 }
 else{
  if(value==1||value==2||...){
   return TRUE;
  }
 }
}
745デフォルトの名無しさん
2020/02/11(火) 15:38:44.74ID:KQZ3+5BK
>>743
そもそもTRUEと比較する必要はないしWindowsから出てきたイディオムでもないと思うが。
どちらかというとtruthyな値からtrueを得るイディオムとして使われているような。
よく見かけるのはJavaScriptとか。
746デフォルトの名無しさん
2020/02/11(火) 15:45:19.74ID:Gt4Evnq6
リターン式から返却値の型を推定させる場合にはautoが必要だ
747◆QZaw55cn4c
2020/02/11(火) 17:36:36.42ID:Sh/x76Zj
>>725
あなたのいう「一般的」というものが、実はそれほど一般的ではなかった、という可能性はありませんかね?
というか、まずあなたのいう「一般的」をあなたの言葉で定義するべきでしょう

あなたに定義できますか?
748デフォルトの名無しさん
2020/02/11(火) 18:04:17.83ID:G5APdl5q
単語の意味は辞書引けよ
APIの仕様はヘルプ読め、と同様だな
なんで個人が定義するんだよ
749はちみつ餃子 ◆8X2XSCHEME
2020/02/11(火) 18:24:26.11ID:GpQNLMm4
C++相談室 part148 YouTube動画>17本 ->画像>2枚
750はちみつ餃子 ◆8X2XSCHEME
2020/02/11(火) 18:40:23.65ID:GpQNLMm4
true と比較したけりゃすればいいじゃないの。
そのプロジェクト内で一貫したポリシーがあるのならそれでいいよ。
751デフォルトの名無しさん
2020/02/11(火) 18:49:13.60ID:TuMeiRsT
ちゃうねん。
752デフォルトの名無しさん
2020/02/11(火) 18:52:49.99ID:TuMeiRsT
ストリーム遅いな。
753デフォルトの名無しさん
2020/02/11(火) 20:44:57.22ID:f/mZFEPY
コード規約「if(bool)はif(bool==true)と書かなければならない」
やだよ、そんな規約ww
規約決めるまでに紛糾してプロジェクト始められねぇよw
754デフォルトの名無しさん
2020/02/11(火) 20:57:43.57ID:Z6POtQL5
どっちでもええやん
755デフォルトの名無しさん
2020/02/11(火) 22:08:40.56ID:Pk2ehCPz
explicit operator boolだとラムダとかの戻り値強制したいときそうなっちゃわない?

value() && true か value() || false
static_cast<bool>(value())は好きじゃない
756デフォルトの名無しさん
2020/02/11(火) 22:19:09.87ID:Uk2CrnAG
素直に戻り値boolに指定しろよ
757デフォルトの名無しさん
2020/02/11(火) 22:21:59.64ID:ggTX+OPA
意味的にboolの型であればboolにキャスト
そうじゃないなら意味通りにboolに変換
758◆QZaw55cn4c
2020/02/11(火) 22:23:23.42ID:Sh/x76Zj
>>258
mmap を確かめています、なんだかすごく時間がかかってしまいました…
ideone はファイルを作らせてくれないみたいですね… https://ideone.com/zXFtEY

fd と fd に紐付いた mmap をつくっておいて、
①fd 側にデータを追加すれば mmap でも見えるのですが、
②mmap 側からデータを追加しても fd は増量しないようですね

今は cygwin で見てますが、ちゃんと linux をいれて確かめるつもりです…
759デフォルトの名無しさん
2020/02/11(火) 22:24:35.42ID:ggTX+OPA
オンメモリで出来ることは素直にオンメモリでやれば
760デフォルトの名無しさん
2020/02/11(火) 23:36:09.88ID:TuMeiRsT
くじで決めてはどうか。
761デフォルトの名無しさん
2020/02/11(火) 23:39:16.71ID:RnNFx+rl
モンテカルロ法やな
762デフォルトの名無しさん
2020/02/11(火) 23:56:08.12ID:TuMeiRsT
I/Oの遅さの陰に隠れてたけど。
ストリームよりSSDのほうが速いよって時代になって困る。
763デフォルトの名無しさん
2020/02/12(水) 01:53:51.39ID:CB9IiDBv
YouTuberは「最強の職業」である理由。

@YouTube


【事例付き】YouTuberは最強の副業である件について。

@YouTube

;t=267s
【初心者向け】YouTubeの始め方・稼ぎ方を徹底解説!

@YouTube


「YouTubeなんていつか稼げなくなる」という主張を論破する。

@YouTube


収益化から丸1年!YouTubeでいくら稼いだか公開。

@YouTube

;t=103s
その動画で月商○○万!? YouTubeで稼ぐ裏技的アプローチ。

@YouTube

;t=433s
【貧者の工夫で戦え】ガラケーだっていい。YouTube始めるのにパソコンはいらない!

@YouTube


【第一回】SNS、YouTube、ブログで稼ぐ方法を、丁寧に解説します!

@YouTube

764デフォルトの名無しさん
2020/02/12(水) 06:38:05.77ID:m8mhjAm7
>>763
グロ
765デフォルトの名無しさん
2020/02/12(水) 10:03:09.83ID:DWihvkH4
https://qph.fs.quoracdn.net/main-qimg-2c09000282ddcbb32359dc242831a052
766デフォルトの名無しさん
2020/02/12(水) 16:01:35.18ID:a1w2Xqz0
>>743
ああなるほど
if(TRUE == !!b) のことか

if(!!b) は javascript の方だろ
767はちみつ餃子 ◆8X2XSCHEME
2020/02/12(水) 16:24:33.81ID:KQxiYwOn
! は見づらいから私は not と書くことにしてる。
768デフォルトの名無しさん
2020/02/12(水) 17:16:20.22ID:DU9qWhLl
一応、alternative tokensに規定はあるが
使う奴の心は #define BEGIN { なんてやるやつと同質だね
769デフォルトの名無しさん
2020/02/12(水) 17:20:59.01ID:DU9qWhLl
Cにも_Boolがなきゃヤダジタしてたやつとか
マジそういう言語へ行ったきり帰ってくるなって感じ

で結局BOOL < 0みたいなオカシイことが起き出す原因を作りやがる
770はちみつ餃子 ◆8X2XSCHEME
2020/02/12(水) 17:47:16.08ID:KQxiYwOn
C と C++ で解釈が違うのに結果として動作は同じみたいなのがたまにあってすげーなって思う。
771デフォルトの名無しさん
2020/02/12(水) 18:09:20.78ID:goJJte/u
たとえば?
772はちみつ餃子 ◆8X2XSCHEME
2020/02/12(水) 19:09:04.21ID:KQxiYwOn
>>770-771
if 文の条件式を見てて思い出した。
C だと条件式の評価結果を 0 と比較するというルール
C++ だとブールに変換するというルール。

まあ整数をブールに変換する規則は結局のところ 0 と等しいかどうかなんで
ちょっと回りくどくなってるだけなんだけど、
そういう違いがあっても互換性が維持されるというのがどこかで検証されてるんだろうと思うと、
手間かかってんなぁという感想が浮かんだ。

他にも列挙定数の型が C と C++ では違うとか……。
私が把握してるのはそんくらいだけど、
探せばもっとあるんじゃないかな。
773デフォルトの名無しさん
2020/02/12(水) 20:25:01.80ID:ytylQgpT
>>766
>if(TRUE == !!b) のことか

さすがにこんな意味のない書き方が人の目につくほど蔓延りはしないだろう。おそらく>>743の妄想。

!!b は、bool型(と、しばしばオーバーロード)を備えた言語で非bool型の値bをbool型に変換するテクニックだろ。
774デフォルトの名無しさん
2020/02/12(水) 20:38:11.07ID:rfok9Tr/
b!=0 で良い
775デフォルトの名無しさん
2020/02/12(水) 21:12:18.94ID:h1wCYtKx
そういうゴミみたいな自己満テクニック()が積もり積もって誰も触れないスパゲティモンスターになっちまうんだよ
b!=0でも(bool)bでもいいからやるべきことを直接表現しろ
776デフォルトの名無しさん
2020/02/12(水) 21:26:37.63ID:rfok9Tr/
(bool)b
はCへの移植の可能性があるならやっちゃダメ
777デフォルトの名無しさん
2020/02/12(水) 21:31:03.80ID:DU9qWhLl
>>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.
778デフォルトの名無しさん
2020/02/12(水) 21:34:37.96ID:rfok9Tr/
typedef char bool;
の可能性があるから
779デフォルトの名無しさん
2020/02/12(水) 21:35:17.48ID:ytylQgpT
Cに移植する可能性があるならC++の機能を使っちゃダメなのは当たり前だよなぁ
C++スレで言うことではないと思うが
780デフォルトの名無しさん
2020/02/12(水) 21:36:55.01ID:rfok9Tr/
>>779
問題点はそこじゃない
移植時にコンパイラが問題点を見つけられないのが問題
781デフォルトの名無しさん
2020/02/12(水) 21:38:26.52ID:rfok9Tr/
コンパイラが問題点を見つけられない例は他に山ほどあるが
だからといってわざわざ増やさなくても良い
782デフォルトの名無しさん
2020/02/12(水) 21:39:05.32ID:ytylQgpT
いや、問題があるなら移植する人が見つけろよ
783デフォルトの名無しさん
2020/02/12(水) 21:40:47.83ID:rfok9Tr/
移植は完璧な人がする
なんて妄想は捨てた方が良い
784デフォルトの名無しさん
2020/02/12(水) 21:42:13.60ID:rfok9Tr/
Cに移植する可能性が無いならどうでも良い
ちなみにキャストで警告が出る環境もある
785デフォルトの名無しさん
2020/02/12(水) 21:42:36.95ID:ytylQgpT
だからそれは移植する側の問題だろ。勝手にやれよ
786デフォルトの名無しさん
2020/02/12(水) 21:52:54.99ID:DU9qWhLl
>>778
マクロとtypedefが被った場合どうなるか解ってる?
787デフォルトの名無しさん
2020/02/12(水) 22:12:26.79ID:ecElmrkB
もちろん
788デフォルトの名無しさん
2020/02/13(木) 00:16:13.58ID:X++L6urQ
>>733
Rustを少し見てみたけど、書き方が全くC/C++とは違っていて、
全く異なる文化圏の言語になれた人が設計した臭がした。
これがC/C++の代替になるとは考えにくい。
はっきり行って、これを使えといわれると辛い。
789デフォルトの名無しさん
2020/02/13(木) 00:26:27.60ID:YbJF2Pjt
テスト機能が標準で用意されてるのはいい
790はちみつ餃子 ◆8X2XSCHEME
2020/02/13(木) 00:45:52.57ID:XX4mj9DD
個人的には Rust は好感触。
型システムは ML 系言語で実績があるものを基礎にしてることもあって、C++ のグダグダな歴史を背負ったものよりはまとも。
ML 系はやっぱり高級路線の言語だし、インデントでブロックを表す系統なのがしんどいけど、
Rust は上手く低レイヤ用 (としても使えるよう) に着地させてるし、 C 風の外観を踏襲してもいる。

C++ が Rust から取り入れられるものはそんなに多くないと思う。
C++ は良くも悪くも互換性についてかなり強い要求があるので、
Rust 的な、カッチリと保護された仕組みを後付けするのはどう考えても無理。
C++ が Rust を参考にすることは間違いなくあるとは思うが、
全体の思想がまるで違うので限定的な範囲でしか取り入れられない。

もし取り入れらたらそれは C++ の新機能として新しく学ぶので十分でしょ。

Rust を学ぶのは間違いなく有用ではあるけども、
Rust の知見が C++ に取り入れられる可能性がありそうだからという理由ならそんなに意味ない。
791デフォルトの名無しさん
2020/02/13(木) 01:02:46.91ID:b1nbpqgi
C++の配列は長さの情報を持ってないってことになってるけど
長さを与えなくてもdelete[]できるんだから、メモリのどこかにその情報はあるよね?
なんでその情報をプログラマが利用できないようになってるの?
792デフォルトの名無しさん
2020/02/13(木) 01:06:29.86ID:qzSQSiwu
rustがかっちり保護してくれるとか低レイヤー向けとか馬鹿ほど信じてるよね。
ありゃ帯に短し襷に長しの典型言語だわ。
793デフォルトの名無しさん
2020/02/13(木) 01:44:34.08ID:X++L6urQ
>>792
実際、Rustは、Cを簡単にするのではなく、Cを難しくしてしまっていて、Cのポインタが理解できない or 難しく感じる人には、Rustの特徴の核心たる所有権、借用などの部分はちんぷんかんぷんだと思う。
794デフォルトの名無しさん
2020/02/13(木) 01:48:50.73ID:X++L6urQ
>>793
Cの問題点を取り除いたと言うより、ほとんど全てのプログラミング言語が暗黙のうちに用いている代入の概念をなるべく使わないようにして変数束縛などの全く異なる独自概念を用いようとしている。
しかし、これは、手続き型言語と関数言語の違いに匹敵するくらいのプログラミングの概念の変更になってしまうため、手続き型言語の中で改良された次世代言語と言うものではなくなってしまっているとも言える。
795デフォルトの名無しさん
2020/02/13(木) 05:24:36.37ID:AWnkBPoe
変数束縛って右辺値参照でしょ
796デフォルトの名無しさん
2020/02/13(木) 06:24:47.58ID:fMXzK7Sc
RustはC++なら簡単にできることをものすごく回りくどく書かないとコンパイル通らない感じだからとてもつらい
797デフォルトの名無しさん
2020/02/13(木) 09:13:38.23ID:6FSFTWhE
>>790
RustがC++に取って代わることがあるか、というニュアンスの質問でした
今C++でやってる仕事がRustに置き換わる可能性が高いなら今から勉強しとこうか、と
798デフォルトの名無しさん
2020/02/13(木) 12:35:22.33ID:z5cRWLgY
>>797
断言してもいいが、RustはC++に取って代わることは無い。
なぜなら、普通の手続き型言語での枠組みにすら入ってない書き方を強要されるから。
手短に言えば、単にC/C++と書き方が大幅に違っているだけではなく、書き方が他のどんな減の範疇にも属していない。
799はちみつ餃子 ◆8X2XSCHEME
2020/02/13(木) 13:30:24.18ID:XX4mj9DD
>>796
C/C++ でのオブジェクトの寿命の管理の難しさってのは
理屈が理解しづらいというよりはわかってても間違うという難しさなんだよね。
そして間違っていてもコンパイラは黙って通すことも多い。
C/C++ を長く使っていればそれを感じることって結構あるでしょ。
そういう部分のプログラムが正しいことはプログラマが保証しなくてはならんわけだ。
でも Rust では言語処理系の側でやってくれる。
C/C++ で面倒な部分を Rust では自動でやってくれる。
まわりくどいのは確かだけど、それで楽できるのも確かなので、
どっちを取るかって話だな。

オブジェクトをどこで後始末するか。
管理の主導権はどのモジュールに持たせるか。
そういうのって C/C++ でも考えてるよね。
C/C++ ではプログラムに書いてないだけで本来はあるはずのものなんだよ。
(C++ だとスマートポインタの導入で少し楽にはなったけど。)
自分が何を考えていたのか、そして何を考えられていなかったのが
明らかになるのはそれはそれで楽しいと思う。
まあ、それは俺が趣味でやってるからかもしれんな。
800デフォルトの名無しさん
2020/02/13(木) 13:34:58.25ID:3lSBa444
おまえの設計がヘタクソなだけだろ
801はちみつ餃子 ◆8X2XSCHEME
2020/02/13(木) 13:45:30.52ID:XX4mj9DD
>>800
そうだよ。
そんでもって大抵の人間は設計がヘタクソだし、
ヘタなところが検出されるなら検出されないより良い。
802デフォルトの名無しさん
2020/02/13(木) 14:01:13.64ID:z5cRWLgY
>>799
変数束縛やら所有権や借用の概念が複雑すぎて、そっちの方が C/C++の
メモリ管理よりミスし易い。
803はちみつ餃子 ◆8X2XSCHEME
2020/02/13(木) 14:13:53.49ID:XX4mj9DD
>>802
間違いなくミスし易いけどミスした箇所が検出できないということはあまりない。
804デフォルトの名無しさん
2020/02/13(木) 14:20:14.02ID:3lSBa444
設計がヘタクソなヤツが書いたソースのメンテやらされるのは最悪だけど自分で組み上げるならC++以外有り得ない
各々の力量が顕著に表れやすい最高の言語には違いない
バカも容易に炙り出せるしな
805デフォルトの名無しさん
2020/02/13(木) 14:20:33.11ID:z5cRWLgY
>>803
仮にあなたはちゃんと理解できても、一般のプログラマは変数束縛やら所有権や借用の概念を理解することが難しすぎるので、C/C++を置き換える言語にはならない。
それらの概念は学習コストが高すぎるどころか、一生理解できないプログラマが多いだろう。
806はちみつ餃子 ◆8X2XSCHEME
2020/02/13(木) 15:53:13.34ID:XX4mj9DD
>>805
誤解のないように補足しておくけど、俺は Rust が C++ を置き換えるという主張はしてないからね。
C++ の重大な欠点を (実行コストをあまり払わない形で) 改善しているのは確かってだけ。
そんでもってそれが必要な場面は間違いなくあるってことも。
807デフォルトの名無しさん
2020/02/13(木) 19:21:34.29ID:b1nbpqgi
>>791
わかる人いませんか?
808デフォルトの名無しさん
2020/02/13(木) 19:29:34.59ID:z5cRWLgY
>>807
new TYPE[] のようにしてヒープから配列として確保されたメモリは確かに
要素数の情報を持っている。
しかし、new TYPEのように配列ではない場合は、高速化のために情報を
持ってない処理系もある。そのために 前者では delete[] を、後者では
deleteを使うことになっており、間違った組み合わせを使った場合には
不具合を生じる。

また、ポインタは、ヒープから確保された配列ばかりをポイントしているとは
限らず、例えばスタック上のローカルオート変数や、グローバル変数をポイント
していることもあり、その場合には、要素数の情報は全く持っていない。

さらに、Cの場合、関数の引数に TYPE buf[] のように配列を書いても、
TYPE *buf に自動修正される仕様となっている。
そのため、配列を受け取るのは、必ずポインタということになる。
しかし、ポインタで受け取るということは、そこには、&a のように、
ローカルオート変数も実引数として指定して呼び出すことも出来る。
その場合には要素数が無いので、あなたの望みをかなえる高速な
一般的方法が存在しない。

望みをかなえるためには、言語の拡張が必要となる。
809デフォルトの名無しさん
2020/02/13(木) 19:33:05.83ID:bRhYdbIA
Rustっていろいろ清々しいよね
関数型言語に必須じゃねえのと思うリスト関係がぽっかり抜けてるのは不満だけど
810デフォルトの名無しさん
2020/02/13(木) 19:57:05.87ID:WjLTLikp
>>807
https://ideone.com/DfYRYS
811デフォルトの名無しさん
2020/02/13(木) 20:01:17.55ID:b1nbpqgi
>>808
ヒープに確保した配列の要素数はやはりメモリ上にあるんですね
手段がないのは文法として一貫性をもたせられないからということでしょうか
なるほど、回答ありがとうございます
812デフォルトの名無しさん
2020/02/13(木) 20:08:49.19ID:J94ypinO
delete [] pと同じように
sizeof [] pを用意すりゃいいのにね
pがnew []されてなかったら誤動作するって挙動ならdeleteと同じだろうに
813デフォルトの名無しさん
2020/02/13(木) 20:15:32.26ID:iivZofrB
言いたいことは分かるが構文がきもい
814デフォルトの名無しさん
2020/02/13(木) 20:17:34.65ID:Y6SS1xK+
欲しいなら作れば?
それができるのがc++じゃん
815◆QZaw55cn4c
2020/02/13(木) 20:36:41.73ID:ImKshd8q
>>791
>C++の配列は長さの情報を持ってないってことになってるけど
>長さを与えなくてもdelete[]できるんだから、メモリのどこかにその情報はあるよね?

new したときは、その領域サイズが実行時にユーザーのみえないところに保存される、というだけなのでは?
C/C++ の配列は長さ情報を(自分でそう書かないかぎり)持たないとおもいますよ
816デフォルトの名無しさん
2020/02/13(木) 20:38:39.62ID:WjLTLikp
ちゃうねん。
817デフォルトの名無しさん
2020/02/13(木) 20:50:05.52ID:qzSQSiwu
設計がダメな場合コンパイラにいくら指摘されようと根本的には治らんのだが、
(たいていそういう馬鹿はコンパイラ通すためにmut,RefCell,unsafeを使いまくる)
そういうのを少しもわかってないバカがrust推しなんだよなぁ。
構造体を1から作り直さなきゃならんかったり根本的に間違ってる。
818デフォルトの名無しさん
2020/02/13(木) 21:00:18.27ID:sl9OX6cI
>>808
new TYPE[]するとき内部的にサイズ情報を持つ保証ってあったっけ?
例えば自前でoperator new []を実装するとき、予め2^nバイトのブロックを所定の数用意しておいて、要求サイズに応じて必要十分な大きさのブロックを返すなら、割り当て時に要求されたバイト数または要素数の情報を保持しないという実装も可能かと思う。
819デフォルトの名無しさん
2020/02/13(木) 21:18:32.64ID:9NIgZq2/
>>811
いえいえ
820デフォルトの名無しさん
2020/02/13(木) 21:37:18.24ID:Y6SS1xK+
>>818
デストラクタ呼ぶ必要ある
821デフォルトの名無しさん
2020/02/13(木) 21:39:24.09ID:J94ypinO
デストラクタ呼ぶ必要ない型だと、size情報持ってないと言うことなんだろうね
822デフォルトの名無しさん
2020/02/13(木) 21:40:36.17ID:sl9OX6cI
>>820
デストラクタの実装も、返ってきたアドレスの値でどのサイズの領域か(割り当て要求されたサイズではなく、自分で区切ったブロックのサイズ)が分かるようにしておけば大丈夫でないかな?
823デフォルトの名無しさん
2020/02/13(木) 21:41:24.98ID:sl9OX6cI
>>822
すまん、勘違いでした。全部忘れてください
824デフォルトの名無しさん
2020/02/13(木) 22:02:22.87ID:WjLTLikp
はい忘れました。
825デフォルトの名無しさん
2020/02/13(木) 22:06:16.93ID:Bk3UL691
アドレスだけじゃなくて長さも受け渡しするインターフェースにしましょうとしか。
826デフォルトの名無しさん
2020/02/13(木) 22:36:33.13ID:WjLTLikp
シリアル化の王道ってありますか?
827デフォルトの名無しさん
2020/02/13(木) 22:45:19.55ID:iq5JxXln
オブジェクトならCORBA、データ構造だけでいいならASN.1とか。
828デフォルトの名無しさん
2020/02/13(木) 22:54:55.06ID:tx2lxPGZ
>>822
TYPEがデストラクタを持つclassの場合に、ptr = new TYPE[n] で確保されたメモリ
を delete[] ptr とすると、 正確に n 回デストラクタを呼び出す必要がある。
new が n * sizeof(TYPE) より大きめのブロックを確保した場合でも、
delete[] ptr 時に正確な n の値を割り出す方法が必要となる。
なので、n の値は ptr の値さえあれば知ることが出来ることが必要条件となる。
つまり、少なくともデストラクタを持つ TYPE の場合に TYPE の配列をヒープから
確保した場合には、配列の要素数を必ず配列の先頭のポインタの値から「知る」事が出来る。
829デフォルトの名無しさん
2020/02/13(木) 23:01:33.00ID:WjLTLikp
>>827
もうちょっと簡単なのないですかね。
型情報要らないんで。
830デフォルトの名無しさん
2020/02/13(木) 23:09:58.23ID:iq5JxXln
型情報が無けりゃデシリアライズしても使いようがあるまい。
831デフォルトの名無しさん
2020/02/13(木) 23:12:32.63ID:WjLTLikp
それがあるんですよ兄さん。
832デフォルトの名無しさん
2020/02/13(木) 23:12:57.71ID:ktN45haN
双方向mapって何使うのがいいですか?boostのbimap?
それともこのくらいは自作してる人のほうが多いですか?
833デフォルトの名無しさん
2020/02/14(金) 00:05:24.00ID:CPLKNT1n
双方向Mapって何に使えるんですか?
834デフォルトの名無しさん
2020/02/14(金) 01:54:24.23ID:0WgbwkuV
型情報ないならそもそもデシリアライズできないし
型情報なしで成り立つ、つまり型情報を事前に知っている前提なら
バイナリでそのまま送ればいいだろ
835デフォルトの名無しさん
2020/02/14(金) 02:05:36.33ID:raWqkpxU
型がわかっててもコンテナはそのままではバイナリで送れない
836デフォルトの名無しさん
2020/02/14(金) 02:11:15.54ID:CPLKNT1n
>>834
そのやり方教えて。
あめさんあげるから。
837デフォルトの名無しさん
2020/02/14(金) 07:52:45.40ID:RsXMnrpQ
ちゃんとやるならPODに詰め替えてからchar配列へreinterpret_cast
838はちみつ餃子 ◆8X2XSCHEME
2020/02/14(金) 09:19:01.22ID:nLeEzkye
>>826
シリアル化ってのにどういう要件を置くかだな。
同じ環境でデシリアライズ出来ればよいのであれば >>837 で十分だろうし、
データ形式が決まってて (あるいはデータ形式の側を中心に策定したくて)
それのシリアライズとデシリアライズを (それぞれ別の環境で (ときには言語も違うかも)) やりたいということなら
protobuf などのツールを使うのはよい案だと思う。
839デフォルトの名無しさん
2020/02/14(金) 13:35:07.90ID:vZZ7SPTm
boostにあるじゃないですか
googleのなんか使うんじゃありません
840デフォルトの名無しさん
2020/02/14(金) 13:41:23.49ID:a5iC3cHy
>>791
>>807
実装依存だと思うけど hoge[-1] あたりに格納されてた
841デフォルトの名無しさん
2020/02/14(金) 13:49:57.91ID:rQdJoGM9
>>840
VC++の場合、ptr = new TYPE[n] で確保された場合は、確かに
ptr[0] == n
になっていた気がする。
「確かに」というのは言葉のあやで、厳密には覚えてないが、
VC++の new で使われる組み込み関数のライブラリのソースコードを見ると分かる。
842デフォルトの名無しさん
2020/02/14(金) 13:50:28.63ID:rQdJoGM9
>>841
すまん、
ptr[-1] == n
の間違い。
843デフォルトの名無しさん
2020/02/14(金) 14:03:39.33ID:a5iC3cHy
>>807
>>841
OSやコンパイラで違うんでしょ
https://ideone.com/DuTmC5
844デフォルトの名無しさん
2020/02/14(金) 15:26:11.39ID:rQdJoGM9
>>842
あ、すまん、正しくは、大体、
 ((DWORD *)ptr)[-1] == n
だ。
ptr[-1] だと、sizeof(TYPE)分、アドレスが戻ってしまうし、
結果の型も DWORD とかではなく、TYPE 型になってしまう。
845デフォルトの名無しさん
2020/02/14(金) 15:28:19.59ID:rQdJoGM9
>>843
言っておくが、new char[n] とかでは、駄目な可能性は有るよ。
話は、「TYPEがデストラクタを持つとき」のnew TYPE[n]に限定。
846デフォルトの名無しさん
2020/02/14(金) 17:17:51.62ID:jFoBh/u0
一時オブジェクトの寿命について、ご教示ください。
例えば、以下のようなコードがあった時、

void foo(const char* c); // 外部ライブラリの関数につき変更不可とする
void main()
{
const std::string s = "aaa";
foo((s + "bbb").c_str());
}

一時オブジェクトstring(s + "bbb")の破棄が行われるのは、
関数foo()を呼ぶ前でしょうか、呼んだ後でしょうか。
調べた範囲では、「完全式の終わり」という話が出てきたのですが、
どこまでが完全式なのか判断できませんでした。
847はちみつ餃子 ◆8X2XSCHEME
2020/02/14(金) 17:22:07.67ID:nLeEzkye
>>846
この場合はその行の終わり。
セミコロンのところだと思っていい。
848はちみつ餃子 ◆8X2XSCHEME
2020/02/14(金) 17:34:07.49ID:nLeEzkye
すごくどうでもいい話なんだけど、
JIS では完結式という用語を使ってるのに完全式って言葉の方がよく使われているよね……。
849はちみつ餃子 ◆8X2XSCHEME
2020/02/14(金) 17:59:01.70ID:nLeEzkye
>>846-847
式の一部であるような式が部分式で、
そうでないような式が完結式って言う。
850デフォルトの名無しさん
2020/02/14(金) 19:29:16.13ID:CPLKNT1n
>>837-838
ありがとん。
851846
2020/02/14(金) 19:44:55.13ID:jFoBh/u0
>>847-849
ご回答ありがとうございます。
大変勉強になりました。
852デフォルトの名無しさん
2020/02/14(金) 20:52:54.21ID:x/oqiD9H
おいCぺろぺろ
853デフォルトの名無しさん
2020/02/14(金) 20:58:59.55ID:V/oEZCXU
>>851
いえいえ
854デフォルトの名無しさん
2020/02/15(土) 10:34:21.20ID:BMoFghq4
newって意外と速いんだな。
アクセスは不利かもしれないけど。
855デフォルトの名無しさん
2020/02/15(土) 12:11:39.70ID:DzNKB5Jj
>>854
速いよ。
高速なゲームでも普通に使える。
856デフォルトの名無しさん
2020/02/15(土) 12:12:59.04ID:BMoFghq4
でもスタックは常にキャッシュに乗ってるから、そこらへんでどう変わるのかな。
857デフォルトの名無しさん
2020/02/15(土) 13:19:54.61ID:J1bovO5o
キャッシュに乗るくらいの量だったらそもそもクリティカルな重さにはならんだろ。
newで問題になるのは10万とかそのくらいのオーダーをがっつりfor文で呼ぶとかそれくらいのことする場合。
858デフォルトの名無しさん
2020/02/15(土) 13:21:27.11ID:BMoFghq4
スタックは常にキャッシュに乗ってる。
859デフォルトの名無しさん
2020/02/15(土) 13:23:13.35ID:lTU5fwx1
>>857
風邪が騙りかけます
860デフォルトの名無しさん
2020/02/15(土) 14:11:39.55ID:DzNKB5Jj
>>857
VC++の場合、コンストラクタが無い場合、new が必要とする時間は 170クロック。
3.0GHz の CPUの場合、1.7 * 10^7 回(1,700万回)くらい new してやっと一秒
位。
だから、問題になるのは、1万回ループではなく、100~1000万回くらいのループ。
861デフォルトの名無しさん
2020/02/15(土) 14:15:19.79ID:DzNKB5Jj
もちろん、スタック変数で済むならスタック変数の方がいい。
ただ、スタックは容量に限りがあるので全部スタックという訳にもいかない。
ヒープにも限りはあるにはあるが、それは OSやマシンの限界。
862デフォルトの名無しさん
2020/02/15(土) 14:25:57.86ID:BMoFghq4
そこでgotoなんですよ。
863デフォルトの名無しさん
2020/02/15(土) 14:43:25.87ID:BMoFghq4
コレクションがソートの有無でだいぶ変わる。
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
864デフォルトの名無しさん
2020/02/15(土) 14:44:57.19ID:BMoFghq4
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
865デフォルトの名無しさん
2020/02/15(土) 14:46:37.02ID:BMoFghq4
挿入速度が変わるのは仕方ないとしても、検索速度が変わるのは、キャッシュじゃないかと思うんだけど。
866デフォルトの名無しさん
2020/02/15(土) 14:49:41.43ID:BMoFghq4
std::sort: 306ms, (466551count).
先にソートしてから挿入したほうが速度的にお得っぽい。
867デフォルトの名無しさん
2020/02/15(土) 16:03:09.29ID:0hgUDlXi
>>854
速いといっても
単純な演算と比べれば劇遅
868デフォルトの名無しさん
2020/02/15(土) 16:18:40.81ID:qSK05WKV
>>867
とにかく、足し算/引き算が1クロック程度、new が170クロック程度だからね。
使い方を間違えなければ劇遅とはいえまい。
869デフォルトの名無しさん
2020/02/15(土) 16:32:01.46ID:4O8uAQVX
auto hentai = SM(std::move(羞恥心));
870デフォルトの名無しさん
2020/02/15(土) 17:12:18.08ID:BMoFghq4
newより+のほうが速いってことか。
871デフォルトの名無しさん
2020/02/15(土) 17:25:57.34ID:BMoFghq4
+と-ならどっちが速いんだろう。
872はちみつ餃子 ◆8X2XSCHEME
2020/02/15(土) 17:49:06.00ID:cwLPNCdO
>>871
回路はほぼ共有してるんじゃないの?
2の補数を使うのもそれが理由なんだろうし。
少なくとも Pentium 時代まではクロックは同じだったはず。

近頃の事情は知らんけど
GCC あたりで強い最適化をかけてみても引き算か足し算を特に避ける様子もないので、
まあだいたい同じなんでしょ。
873デフォルトの名無しさん
2020/02/15(土) 18:01:50.38ID:zARYy4pH
>>870
C++の場合、+ひとつだけでも裏でどんなコードが動くか油断ならない。
874デフォルトの名無しさん
2020/02/15(土) 18:13:26.25ID:2RWOAy2H
>>871
+ と - で速度が違うCPUは見たことがない

- は順番が関係あるので
処理によっては遅い事がある

b = 1 + b
b = 1 - b
875はちみつ餃子 ◆8X2XSCHEME
2020/02/15(土) 18:14:19.52ID:cwLPNCdO
整数だけの話じゃなくてってことか。
ある程度の常識的判断が出来る場合もあるけど、
基本的には実装次第だわな。
876デフォルトの名無しさん
2020/02/15(土) 18:19:46.61ID:2RWOAy2H
組み込み型じゃなけりゃそりゃね
+ でミサイル発射とか
877デフォルトの名無しさん
2020/02/15(土) 19:02:33.35ID:qSK05WKV
>>870
new より + の方が 170 倍速いと言うことだ。
878デフォルトの名無しさん
2020/02/15(土) 19:04:43.75ID:cVttwiPD
>>874
一度bをnegateしてから足す処理系があるかもな
879デフォルトの名無しさん
2020/02/15(土) 19:30:46.15ID:qSK05WKV
>>874
確かに引き算には順序があるので、足し算より最適化に不利になることがある。
880デフォルトの名無しさん
2020/02/15(土) 19:48:11.00ID:x3vECiAE
if(bReaZyuu){
881デフォルトの名無しさん
2020/02/16(日) 00:34:55.37ID:pXV6w9YM
if (false != bReaZyuu) {
882デフォルトの名無しさん
2020/02/16(日) 00:35:58.12ID:pXV6w9YM
newが常に数百クロックで済むと思ったら
間違いかもしれん…
883デフォルトの名無しさん
2020/02/16(日) 01:50:35.50ID:1DEBeg9G
経験的にはnewが遅いと思ったことは無い。
なお、コンストラクタの処理時間以外はnewはmallocと同じ速度。
ゲームメーカーでも必要な場合に malloc を使うことは問題ないとされている。
884デフォルトの名無しさん
2020/02/16(日) 02:03:13.40ID:MPWqg8uW
new からしてmallocを呼んでる実装が多い気がする。
885デフォルトの名無しさん
2020/02/16(日) 02:34:52.46ID:yR2k1LO6
そりゃnew用とmalloc用でヒープ別けたら無駄だし
886はちみつ餃子 ◆8X2XSCHEME
2020/02/16(日) 02:36:27.06ID:VK9AAsv4
ヒープからの割り付けをする機会を減らすことで実行速度を上げる工夫はよく聞く話ではあるよな。
ただ、そこまでギリギリのチューニングが必要ってことがあまりないだけで。
887デフォルトの名無しさん
2020/02/16(日) 07:37:50.08ID:Rlzwkt+8
newは最悪値が読めないからなぁ
組込とかシビアなゲームでは使い辛い
888デフォルトの名無しさん
2020/02/16(日) 08:25:44.50ID:Yy7z+EdH
具体的な数字が出てるとイメージが湧く。
889デフォルトの名無しさん
2020/02/16(日) 08:45:53.63ID:Yy7z+EdH
170クロックならあんまり気にする必要ないな。
890デフォルトの名無しさん
2020/02/16(日) 10:26:07.87ID:w0IbR+6u
組み込みでc++がそもそもおかしい
891デフォルトの名無しさん
2020/02/16(日) 11:00:34.43ID:1DEBeg9G
>>887
よっぽどでない限り、AAAゲームでも使われてるよ。
892デフォルトの名無しさん
2020/02/16(日) 11:01:02.59ID:B02+i8yM
最近では小規模組み込みでもC++を使う事はあります

new / deleteやヒープを無効にしたり
newのみでdelete出来ないようにしたり
なんてこともあります
893デフォルトの名無しさん
2020/02/16(日) 11:03:58.49ID:+vprjU7s
>>890
視野狭すぎ
894デフォルトの名無しさん
2020/02/16(日) 11:12:03.97ID:w0IbR+6u
また馬鹿が無駄に一般化してできるワイ言ってんのか。。相変わらずだな。
895デフォルトの名無しさん
2020/02/16(日) 11:20:41.43ID:+vprjU7s
日本語でおk
896デフォルトの名無しさん
2020/02/16(日) 11:23:16.68ID:Yy7z+EdH
ストリームってなんで遅いんだろね。
897デフォルトの名無しさん
2020/02/16(日) 11:39:47.59ID:Rlzwkt+8
>>891
そりゃそういう例もあるわな
だから何?w
898デフォルトの名無しさん
2020/02/16(日) 11:42:38.67ID:Yy7z+EdH
スレで、do{}while()はダメっぽいこと書いてあったけど、なんでダメなの?
899デフォルトの名無しさん
2020/02/16(日) 12:30:30.11ID:q7JzY0gs
>>887
でもお前は組み込みにもゲーム開発にも携わってないじゃん
900デフォルトの名無しさん
2020/02/16(日) 12:42:15.06ID:Rlzwkt+8
>>899
ごめんねー、俺はプリンタ屋さんなのw
ゲームは知り合いの話ね
901デフォルトの名無しさん
2020/02/16(日) 12:54:36.44ID:Yy7z+EdH
プリンタ屋さんってどんな仕事ですか?
902デフォルトの名無しさん
2020/02/16(日) 12:58:53.64ID:Rlzwkt+8
>>901
俺は制御周り、上位インターフェースからのデータを描画ルーチンにに渡したり、下位インターフェースにデータ渡したり、パネルとかの制御をやってる
描画部分はまた別の人がやってる
903デフォルトの名無しさん
2020/02/16(日) 12:59:56.11ID:Yy7z+EdH
なんか難しそうですね。
904デフォルトの名無しさん
2020/02/16(日) 13:01:18.53ID:Yy7z+EdH
プリンタってプロセッサはどんな感じのを使うんですか?
newってあるんですか?
905デフォルトの名無しさん
2020/02/16(日) 13:02:40.97ID:Yy7z+EdH
プリンタのヘッドについてる穴の数は決まっているんだから、あまりヒープが必要無さそうな気もする。
906デフォルトの名無しさん
2020/02/16(日) 13:03:59.79ID:Yy7z+EdH
std::vectorの上にヒープを作っても速度的に大丈夫なことは確認した。
907デフォルトの名無しさん
2020/02/16(日) 13:07:31.29ID:Rlzwkt+8
昔はSHシリーズとかR2000とか
今はARMもそれなりに使ってる
制御だとnewは基本使わない
あと俺がやってるのは業務用のLBP
908デフォルトの名無しさん
2020/02/16(日) 13:08:47.09ID:Yy7z+EdH
ってことはキャノンですか。
909デフォルトの名無しさん
2020/02/16(日) 13:10:53.15ID:Yy7z+EdH
メモ問題は結局ホワイトボード買ってきた。
ホワイトボードをワンノートに撮影するという昔っぽいことに。
910デフォルトの名無しさん
2020/02/16(日) 13:11:07.93ID:Rlzwkt+8
流石に社名までは出せんわw
911デフォルトの名無しさん
2020/02/16(日) 13:12:13.52ID:Yy7z+EdH
ワンノートのアンドロイド版はカメラにホワイトボードのモードがあるんだけど、テカリ消してくれないし、ホワイトバランスも調整してくれない。
912はちみつ餃子 ◆8X2XSCHEME
2020/02/16(日) 13:12:31.37ID:VK9AAsv4
PostScript くらいならプリンタの側で処理することもあるし、
世間で想像されているよりは高級なことをやっているんじゃないかなぁという気もする。
913デフォルトの名無しさん
2020/02/16(日) 13:16:21.65ID:Yy7z+EdH
ってことは、別の人がnew使いまくりなのでは。
914デフォルトの名無しさん
2020/02/16(日) 13:17:17.71ID:Yy7z+EdH
テカテカしないホワイトボードないのかな。
915はちみつ餃子 ◆8X2XSCHEME
2020/02/16(日) 13:20:18.57ID:VK9AAsv4
>>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
916デフォルトの名無しさん
2020/02/16(日) 13:20:51.42ID:Yy7z+EdH
ありがとん。
917デフォルトの名無しさん
2020/02/16(日) 13:27:19.36ID:Yy7z+EdH
モーター動かしたりするのはnew使ったらダメなんだろな。
918デフォルトの名無しさん
2020/02/16(日) 13:52:37.96ID:Yy7z+EdH
リアルタイムOSはヒープあるんだろか。
919デフォルトの名無しさん
2020/02/16(日) 14:03:56.47ID:1DEBeg9G
>>900
ゲームに関しては、かなりちゃんとした現場で昔から malloc は使われていたし、全社的に使っても問題ないとされていた。
920デフォルトの名無しさん
2020/02/16(日) 14:33:04.16ID:Rlzwkt+8
>>919
で?
使われてる例も使われない例もあるよ
タイミングにシビアなゲームだと使い辛いと言うだけ
921デフォルトの名無しさん
2020/02/16(日) 14:34:24.22ID:Rlzwkt+8
>>918
最大実行時間が読める専用のヒープを持ってたりするよ
922デフォルトの名無しさん
2020/02/16(日) 14:44:07.47ID:Yy7z+EdH
あるんだ。
923デフォルトの名無しさん
2020/02/16(日) 14:49:10.64ID:B02+i8yM
>>918
ヒープを使うかどうか選べるものが多い
924デフォルトの名無しさん
2020/02/16(日) 14:53:55.58ID:Yy7z+EdH
選べるってことは、用途によって使い分けが必要って事なんだろな。
925デフォルトの名無しさん
2020/02/16(日) 14:59:29.04ID:D2RmZx9z
ループ内で可変長のvector使っているようなのは、外に出してループ始めにclearする方がいい
ループごとにvector出力しなきゃいけない場合も、moveしないでcopyした方がいい
926デフォルトの名無しさん
2020/02/16(日) 15:03:54.38ID:k775l7KG
>>920
意見されたら喧嘩売りたくなる病気なの?
927デフォルトの名無しさん
2020/02/16(日) 15:10:11.48ID:D2RmZx9z
mallocは使い方が余程ひどく無ければ、性能上問題になることはない
問題になっている場合もプロファイラでその部分だけ対策すればどうにでもなる
断片化やmalloc自体の管理領域容量が気になるほどの環境では使わない方がいいが
928デフォルトの名無しさん
2020/02/16(日) 15:11:53.22ID:+ZTPu1gL
>>926
それお前じゃね?
929デフォルトの名無しさん
2020/02/16(日) 15:13:28.86ID:+ZTPu1gL
>>927
リアルタイム系の仕事したことないならそう言う考え方でもいいと思うよ
930デフォルトの名無しさん
2020/02/16(日) 15:17:30.49ID:D2RmZx9z
そもそもリアルタイム系の処理で、実処理部分でmallocするってのは普通しないよね

初期化時に必要なバッファはあらかじめ確保しておくものでしょ
そこはmallocだろうが静的確保だろうが変わらないし
931デフォルトの名無しさん
2020/02/16(日) 15:23:06.64ID:8bxeBykO
>>929はループの中で毎回malloc freeしてるからそりゃ性能が気になるよね
932デフォルトの名無しさん
2020/02/16(日) 15:24:31.11ID:1DEBeg9G
>>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の方が良い。
933デフォルトの名無しさん
2020/02/16(日) 15:25:54.32ID:1DEBeg9G
>>932
誤:Cはデータ集合用のデータ構造として動的リストではなくリンクリストを用いるのが伝統。
正:Cはデータ集合用のデータ構造として動的配列ではなくリンクリストを用いるのが伝統。
934デフォルトの名無しさん
2020/02/16(日) 15:27:49.69ID:D2RmZx9z
いやいや、速度がシビアならreserveしとけと
cとの親和性考えなきゃdequeも良いが、cのAPI呼び出し考慮すると結局vectorをうまく使うのが一番良い
935デフォルトの名無しさん
2020/02/16(日) 15:28:20.99ID:1DEBeg9G
>>929
std::vector<TYPE>を使っていて、TYPEのコンストラクタの中でnewするのはリアルタイム処理には向きません。
その場合、std::list<TYPE>に変えれば劇的に速度が安定するはずです。
936デフォルトの名無しさん
2020/02/16(日) 15:30:12.10ID:1DEBeg9G
>>934
CのAPI呼び出しで集合を渡す場合、通常、集合の要素はコンストラクタを持ちません。
その場合は、std::vectorは適すでしょう。
ところが、要素がコンストラクタを持つ場合は、std::listが適します。
937デフォルトの名無しさん
2020/02/16(日) 15:32:54.67ID:D2RmZx9z
vectorで再配置する際にmoveされない前提なのね
938デフォルトの名無しさん
2020/02/16(日) 15:33:13.19ID:1DEBeg9G
>>936
補足すれば、APIは、リング0のシステムランドで実装されていることが多いため、
リンクリストの様な複雑な構造が用いられることが少ないのです。
しかし、それはAPIに限った話で、Cは誕生したときから、要素数が変化する
集合には、動的配列よりもリンクリストを用いるのが伝統でした。
伝統と言うよりも、リンクリストこそがCの核心・本質といっても過言では有りません。
939デフォルトの名無しさん
2020/02/16(日) 15:35:27.77ID:1DEBeg9G
>>937
C言語とはリンクリストのことです。
動的配列は、Cの文化ではありません。
940デフォルトの名無しさん
2020/02/16(日) 15:36:04.25ID:MPWqg8uW
アドレスで直にアクセスできる言語の強みはリンクリストで活きるからごもっとも
941デフォルトの名無しさん
2020/02/16(日) 15:40:23.46ID:+ZTPu1gL
>>930
そう言う事
平均的には間に合っても確保や解放にかかる時間が読めなくなる
100万回に1回でもダメならダメっていう世界だしね

>>931とかはそう言うことがわかってないので頓珍漢なレスになってるw
942デフォルトの名無しさん
2020/02/16(日) 15:40:27.92ID:pXV6w9YM
>>934
reserveしただけだとOSによっては実メモリ確保しなさそう…
で初回アクセスでおもむろにページが用意されれる
ヨカン
943デフォルトの名無しさん
2020/02/16(日) 15:42:34.49ID:D2RmZx9z
それだとmalloc使うこと自体不味いだろ
確率でmmapしちゃうのだから
944デフォルトの名無しさん
2020/02/16(日) 15:44:00.56ID:pXV6w9YM
別に
>>925の前半でおk
945デフォルトの名無しさん
2020/02/16(日) 15:46:21.91ID:D2RmZx9z
もちろん初期化時以外でね
946デフォルトの名無しさん
2020/02/16(日) 16:01:46.00ID:1DEBeg9G
>>937
moveを使いたい場合、要素の TYPE クラスに move 用の記述が必要となるため、手間がかかります。
947デフォルトの名無しさん
2020/02/16(日) 16:01:54.10ID:Yy7z+EdH
is_pod_vで事前条件を確認してるけど、PODはなくなるんだってね。
948デフォルトの名無しさん
2020/02/16(日) 16:02:29.34ID:Rlzwkt+8
>>935
まあお前がそう思うならそうなんだろうな
お前ん中ではな…
949デフォルトの名無しさん
2020/02/16(日) 16:07:00.64ID:D2RmZx9z
listで美味しいのはsplice使いたい時くらいだろ
multi threadのログ統合したい時とかに、lockに必要な時間を最小化出来る
950デフォルトの名無しさん
2020/02/16(日) 16:26:27.54ID:c8Po0Swg
>>947
POD = trivialかつstandard_layout
だから後者を使うようにすればいい
951デフォルトの名無しさん
2020/02/16(日) 17:05:35.53ID:+vprjU7s
子スレッドを休眠状態で作る方法ない?
起動直後にcondition_variable::waitとかじゃなく
初期状態として
952デフォルトの名無しさん
2020/02/16(日) 17:13:29.37ID:YrNuZAe7
何のために?それによる
953デフォルトの名無しさん
2020/02/16(日) 18:53:05.64ID:Yy7z+EdH
>>950
ありがとん。
954デフォルトの名無しさん
2020/02/16(日) 21:26:26.27ID:D0JJuQrX
>>953
いえいえ
955デフォルトの名無しさん
2020/02/16(日) 23:16:48.80ID:B02+i8yM
>>924
まあそりゃね

使えるようにしてもPCやスマホのように自由には使えないぞ
こまめに確保解放なんてことはしない
基本最初に確保して終わり
解放はしない
だから確保しか出来ないヒープも選べる
956デフォルトの名無しさん
2020/02/16(日) 23:20:30.34ID:B02+i8yM
>>927
それはPCやスマホなどリッチな環境の場合

>>931
一見軽そうで重い関数があったりするから
同じ人が同じ時に作ってたらそんな処理にはしないだろうけど
957デフォルトの名無しさん
2020/02/17(月) 00:08:48.44ID:U44ZlMgK
白物家電のマイコンやら、pfcのマイコンやらもやったが、そんなのはそもそもmalloc使うような環境じゃなかったしなぁ
RAMもkB単位で少ないし、自由に関数呼べるほどスタックも無いし
割り込み部分はアセンブリで書いてた
958デフォルトの名無しさん
2020/02/17(月) 00:14:53.75ID:/jKzm6f9
今は冷蔵庫や電子レンジもAI積んでネットワークに繋がるIoT時代だけど
それでも組み込みって未だにそんな感じなの?
959デフォルトの名無しさん
2020/02/17(月) 00:16:48.70ID:U44ZlMgK
まあそれは特に東南アジア向けだったし
日本よりさらにチープだったのかも
960デフォルトの名無しさん
2020/02/17(月) 00:19:59.06ID:uafn9Eqq
>>958
そんなのごく一部
961デフォルトの名無しさん
2020/02/17(月) 00:20:59.44ID:uafn9Eqq
いまだにチープな8bit CPUもたくさん使われている
962デフォルトの名無しさん
2020/02/17(月) 00:23:25.57ID:U44ZlMgK
cortex-m0とか載ってたらもう小躍りしちゃうくらいのリッチさだよね
963デフォルトの名無しさん
2020/02/17(月) 00:34:16.83ID:H8nvOahp
リッチなCPUを使うって事は
それだけ求められる事が大きいわけで
964デフォルトの名無しさん
2020/02/17(月) 07:41:59.44ID:xyBTOgD8
でもCPU節約するために人件費かけて結局商品高いじゃん
965デフォルトの名無しさん
2020/02/17(月) 09:22:40.01ID:usLteeFN
趣味じゃないんだから
当然トータルで考えるよ

開発工数、単価、機能性能、信頼性、供給、大人の事情、...
966デフォルトの名無しさん
2020/02/17(月) 10:36:24.72ID:sgjaAMaL
ゲーム業界の人だけど
new使っても問題ないってのはおれの常識とは異なる

まず問題が広すぎる
言いたいことはデフォルトのグローバルヒープを無邪気に使っていいか
ということだと仮定すると
AAAクラスでそんな杜撰なことしてるところはないと思う

組み込みもそうだがリアルタイム性が必要とされるところでは、メモリ予算というものがある
グラフィック、オーディオ、ネットワークなどのモジュールごとにメモリいくらと決められる
モジュールの責任者はその中でやりくりする
ここで大事なのはメモリの最大使用量を保証しなければならないってこと

必要ならローカルのヒープは作ったりするが、この時点で担当者が気ままにnewってのは認められない
基本的にすべてコントロールされる
現実的に最大量が正確に見積もれないものもあるがそれでも最大量は決める
967デフォルトの名無しさん
2020/02/17(月) 10:57:08.38ID:sgjaAMaL
といってもグローバルヒープを使わないわけじゃない
オープンソースのもので無邪気にmallocするものは多数あるが、それほど荒ぶらなければそのまま使う
(リアルタイム性が不要なら仮想メモリに任せる)

あとmalloc遅くないという論調の人がいるけどそれはベストケースの話でしょう
ヒープメモリが不足したり一度に巨大なメモリを確保する場合はシステムコールになるからずっと遅くなる
ワーストが見積もれないものはリアルタイムで使いづらい

まぁ昨今は仮想マシン上で動くゲームが多数あるわけで気にしなくていいレベルという意見はある
ただesports系で一瞬カつくとか商品性に関わるわけで
また後から直すのも地獄なので
最初から計画的に作るべきだろう
968デフォルトの名無しさん
2020/02/17(月) 11:06:49.04ID:tDJaHp5K
ここC++スレだよね、つかぬことだけど
記憶管理はいつでも如何様にもカスタマイズできるようにtypename Allocatorになってるわけじゃん
なんでいきなり組み込みには向かないとかキリッてんの?
969デフォルトの名無しさん
2020/02/17(月) 12:20:34.06ID:ipOy1V1j
>>968
typename Allocatorとかすげぇ初心者っぽい
キリってるのはお前だ
970デフォルトの名無しさん
2020/02/17(月) 12:22:54.84ID:tDJaHp5K
>>969
kwsk
971デフォルトの名無しさん
2020/02/17(月) 12:39:53.15ID:sgjaAMaL
>>968
標準ライブラリでもallocatorが指定できないものもあるんだよ
もはや今のc++で標準ライブラリを全面的に使いつつ、ヒープを個別に差し替えるのはかなり非現実的だ
allocatorを差し替えられてもnewするタイミングや量はリバースエンジニアリングしないとわからない
それが問題になることもある
972デフォルトの名無しさん
2020/02/17(月) 12:48:18.84ID:2c+OKT/4
てか、静的確保したメモリブロック使うアロケータ書いてそれで標準コンテナ使うのが基本じゃね
まあeastlでも良いが
973デフォルトの名無しさん
2020/02/17(月) 12:51:50.81ID:tDJaHp5K
>>971

> 標準ライブラリでもallocatorが指定できないもの
例えば?

newだってoperator newですぐカスタマイズできるし
placementで環境依存の細かい設定もできる

ライブラリはISO/IEC14882に固執する必要はなく
サードパーティでも内製でもより都合のよいほうを使えばいい
というだけの話
974969
2020/02/17(月) 12:56:55.88ID:nfQInp9b
カスタマイズの話なら真っ先にnewの話をすべきなんだが順番おかしくね?
ていうか今時はallocatorより先にpolymorphic resourceだと思うが

というかそもそもmallocの速度の話からであって、いきなりallocatorの話したり
C++全体を否定されたかのように過剰反応するとか・・
975デフォルトの名無しさん
2020/02/17(月) 13:12:34.13ID:y136Nw0W
仕様通りに書けばいい感じにうごいてくれて、責任は俺にはないとか
思い込んでんじゃってるキッズなんだろう。
デバッグするなんてことはもちろん頭にない。
976865
2020/02/17(月) 13:34:28.75ID:FC0zZXW0
>>890からの流れでは直後からnewが出てきてたろ
C++が組み込みに向かないという主張の
理由がmallocじゃおかしいだろ
それしか使えんわけでもなし
977デフォルトの名無しさん
2020/02/17(月) 13:44:11.06ID:nfQInp9b
>>968に突っ込むと>>890に同意したことになるのか
978デフォルトの名無しさん
2020/02/17(月) 14:00:21.02ID:sgjaAMaL
>>973
> > 標準ライブラリでもallocatorが指定できないもの
> 例えば?

でしょ?
お前さんは人並み以上にc++知ってると思うけどこの事実知らない
どこで使われてるか知らなきゃ置き換えができないよね

答えはあえて教えない
標準ライブラリのヘッダーをnewでgrepすればallocatorを通さないものが見つかるさ
自分で確認してこりゃ置き換え無理だわと悟って欲しいw
もし見つからないなら後で書くよ

ちなみにグローバルにnewを置き換えるぐらいならmallocのバイナリを差し替えた方が早いし確実
979はちみつ餃子 ◆8X2XSCHEME
2020/02/17(月) 14:31:40.00ID:qpTD/rYC
おっ。
野党みたいなことを言い始めたぞ。
980デフォルトの名無しさん
2020/02/17(月) 14:37:47.70ID:nfQInp9b
>>979
横からだが、具体的に誰のどこを指してそう思ったのかよろしく
981デフォルトの名無しさん
2020/02/17(月) 14:59:36.07ID:QYRwM+i2
>>966
もちろん、むやみやたらと使って全く問題ないわけではない。
が、本当に必要な箇所で使う程度なら(多くの場合)余り問題ないという程度。
大体ゲームの場合のnewやmallocは、敵や弾やイフェクト、3Dオブジェクトなど
を1つずつ収めるために使うことが多いが、ゲームの1シーン内に登場する個数が
newやmallocが問題ない程度に元々なっている事がわりと多いと言うだけ。
3Dの雑草の葉っぱ一枚単位で new したりすると問題になってくるかもしれない。
982デフォルトの名無しさん
2020/02/17(月) 15:51:15.09ID:sgjaAMaL
>>981
なんとも感覚的な話だね
だいたい動けばOK!って感じ?
おれは仕事でそういうもの作りはしない
983デフォルトの名無しさん
2020/02/17(月) 16:08:54.93ID:HCTe1ZqE
コンシューマかPCかでも違うだろうし
(自分はさほど詳しくないが、基本コンシューマは標準ヒープ使わないはず)
ジャンルによっても違うんじゃね
PCのMMORPGなんかだとシーン中のメモリ確保は必須だろうし
あと草は普通同じメッシュやテクスチャ使うだろうし、揺れを入れるにしても一つ一つにデータ持たせるなんてアホなことしないだろ
984デフォルトの名無しさん
2020/02/17(月) 16:15:08.76ID:tDJaHp5K
>>978
「後で」かw
もう1000間近だし期限切らないでおけば時効だろってか?
985デフォルトの名無しさん
2020/02/17(月) 16:32:36.59ID:y136Nw0W
いやそれくらい調べろって話だろ。。馬鹿が。
986デフォルトの名無しさん
2020/02/17(月) 16:44:43.28ID:tDJaHp5K
>>985
sgjaAMaLが、自分の話に傾聴してきた人の質問に答えなかった
つまり自分の考えを伝える努力を中止したということでしかない

何人も自らの意見を他人に伝えるには
その意見を説明するしかなく
説明をやめることは沈黙に等しい
987デフォルトの名無しさん
2020/02/17(月) 16:55:56.23ID:9WiS2n1W
黙って調べてくれば?
調べて無いと結論づけられればまた偉そうに出来るだろw
988デフォルトの名無しさん
2020/02/17(月) 17:15:39.87ID:9Dh9neDd
ちゃうねん。
僕が組み込みいうたのはArduinoのことな。
RAM2KBやし。
989デフォルトの名無しさん
2020/02/17(月) 17:31:33.05ID:9Dh9neDd
Arduino面白いよ。
990デフォルトの名無しさん
2020/02/17(月) 18:25:59.21ID:sgjaAMaL
>>984
条件は明示してるんだからおれが書くかはお前に委ねられている
1000が迫っているぞw
991デフォルトの名無しさん
2020/02/17(月) 18:30:32.07ID:T3Z0MUY2
この手の人最後まで答えないか
答えても的外れなのしか見たことないわ
992デフォルトの名無しさん
2020/02/17(月) 18:32:18.22ID:wtNXL+i7
だね
消えて良いよ
993デフォルトの名無しさん
2020/02/17(月) 19:27:27.34ID:XybgTXf7
>>978
std::arrayとか言わないよね
994デフォルトの名無しさん
2020/02/17(月) 19:33:45.21ID:nfQInp9b
arrayのどこに動的メモリ確保が出てくるんだよ
アホか
995デフォルトの名無しさん
2020/02/17(月) 19:46:45.93ID:9Dh9neDd
なぞなぞですか。
996デフォルトの名無しさん
2020/02/17(月) 23:00:17.88ID:HZSaiYXA
漏れはnewのときたまの遅さの可能性に警鐘を鳴らしたからセフセフ、
997デフォルトの名無しさん
2020/02/17(月) 23:06:03.72ID:HZSaiYXA
やっぱnew/deleteのレイテンシーを設計に乗せるには非ページプールメモリにアロケートするべきですよねー
998デフォルトの名無しさん
2020/02/17(月) 23:19:17.27ID:sgjaAMaL
なんかスレ止めてたら悪いから書いておくよ
ひとつは17からallocatorがdeprecatedになったstd::functionね
これは結構知られてるばずだ
定期的にこれ濫用する人が現れるんだけど中身理解してから使うか判断しろと職場では言っている代物

もうひとつあげるなら、
処理系によってかなり違うかもだけどstd::threadも中でこっそり内部クラスをnewしてるはず
ただスレッド間で引数を引き渡すためのものでサイズは小さいしスレッド作るコストの方が遥かにでかいから問題にはなりにくい

他にもあるけどとりあえずこんなもんで
999デフォルトの名無しさん
2020/02/17(月) 23:46:06.60ID:HZSaiYXA
std::functionを使わないと1 bitもプログラムが書けなくなった漏れガイル、
クロージャをいちいちクラス定義から手で書く日々に戻るのはいやじゃー
1000デフォルトの名無しさん
2020/02/17(月) 23:54:13.03ID:HCTe1ZqE
1000なら>>986, >>991-992が土下座
ニューススポーツなんでも実況



lud20250923125453nca

ID:jVWLSRwcのレス一覧:


200デフォルトの名無しさん
2020/02/02(日) 15:05:16.61ID:jVWLSRwc
ソースコードチェック目的でプログラム読むとき、gotoが出てきたら
そのgotoの使用方法が問題ないものなのか、いちいちチェックしないといけない。
breakならループ抜けるという意図が明白なので、チェックしなくてよい。
201デフォルトの名無しさん
2020/02/02(日) 15:11:47.92ID:rWwvB4I9
そんなに名前が無いと発狂するんならもうgoto使えば?って思うし
なんなら関数化して正式に名前付ければって思うし
そこまでしたくないってときにbreak nが便利なわけだ
やりたいことは「多重ループから抜けたい」であって
「名前を付けたい」ではない!!
202デフォルトの名無しさん
2020/02/02(日) 15:11:53.90ID:gkoi3ncl
関数コールも問題のないコールかどうかチェックしないといけないから
使わない方が良い
203デフォルトの名無しさん
2020/02/02(日) 15:14:22.99ID:EDNK6zQt
それならもうポインタもグローバル変数もマルチスレッドも大量のチェックが必要だから使ってはいけないってことで
204◆QZaw55cn4c
2020/02/02(日) 15:14:36.78ID:Rn0kkYyt
>>199
私と認識が似ていますね

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

>>164
java にはラベル付き break が存在して、ほとんど goto です https://www.sejuku.net/blog/20100
205デフォルトの名無しさん
2020/02/02(日) 15:15:16.61ID:7b/FZYuN
現行のC/C++にはgoto <label>がある一方、break <n>は無い
もしbreak <n>の追加がgoto <label>の実装より難しかったからやらなかったのだとしたら、
break <n>の飛び先がgoto <label>の飛び先より簡単にワカルから優れているという主張は根拠を失う

break <n>はわかりにくいか、さもなくばgoto <label>と同等なんである
206デフォルトの名無しさん
2020/02/02(日) 15:16:38.00ID:mzCY/+E0
constがスレッドセーフなのも困った。
207デフォルトの名無しさん
2020/02/02(日) 15:24:46.36ID:jpTipLln
>>201
現実ありえないのは重々承知したうえで書くけど
100重ループを脱出するとき数を数えたくないだろうなって思うじゃん
ほかにも3重ループとかで2ndと3rdのループから共通の脱出先ラベルにもできるわけじゃん
文法を拡張する前提ならそこまで想定すべきだと思うね

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

というかそういう観点からラベル付きbreakというのは他の言語にはあるわけで
で今話してるのはもっと書きやすく読みやすくできないかというトピックでしょ
break Nは使えるだろうけど洗練されてない感じ
208デフォルトの名無しさん
2020/02/02(日) 15:27:11.67ID:gkoi3ncl
break [n] はラベル名を考えなくて良い利点がある
使えるなら使いたい

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

ループの先頭で名前を付けるのはgotoより見づらいから使わない
209デフォルトの名無しさん
2020/02/02(日) 16:01:27.30ID:o79zkFFu
break n とか言ってる奴は何故か>>150をスルーしてて笑うわ
210デフォルトの名無しさん
2020/02/02(日) 16:07:52.43ID:nz0OxFB3
他の人は「マジックナンバー」だと思わなかったからでは。
211デフォルトの名無しさん
2020/02/02(日) 16:20:03.66ID:gXxB23XL
foobarやhogeを超える人気なダミー文字列を考えたほうがよほど建設的だぞ、君たち。
212デフォルトの名無しさん
2020/02/02(日) 16:35:55.51ID:SWo7Ruqh
break 5; //C
GOTO 5 : REM BASIC
213デフォルトの名無しさん
2020/02/02(日) 16:37:04.55ID:gkoi3ncl
マジックナンバーがイヤなら
break break;
214デフォルトの名無しさん
2020/02/02(日) 16:50:03.80ID:DTIMfhpJ
関数で置き換える
引数がめんどうならラムダで置き換える
returnが多重breakの代わりになる
215デフォルトの名無しさん
2020/02/02(日) 16:58:55.02ID:SWo7Ruqh
>>214
多重ループを単一関数に書くって前提だね
216デフォルトの名無しさん
2020/02/02(日) 17:03:09.93ID:7b/FZYuN
>引数がめんどうならラムダで置き換える ←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()は引数がぞろぞろ並ばねばならない

レス:1-200 201-400 401-600 601-800 801-1000 ALL

このスレへの固定リンク: http://5chb.net/r/tech/1580471646/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 
  ↓この板の人気?スレ↓(一覧)
 
C++相談室 part144
スレ立てるまでもない質問はここで 149匹目
Pythonのお勉強 Part67
Visual Studio 2019 Part4
UNIXプログラミング質問すれ Part10
【超高速】C/C++に代わる低級言語を開発したい 8
Kotlin初心者質問スレ
★★Java質問・相談スレッド172★★
「Cでプログラミングするには人生は短すぎる」か?
C#とC++を無理矢理戦わせたい人専用スレ
構成管理ツール Chef,Ansible,Puppet,Itamae,Packer
Java入門・初心者質問スレ Part.9
Pythonのお勉強 Part62
【未来】マイニング工場は全てがスクラップに!
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
推薦図書/必読書のためのスレッド 83
■暗号技術【ROUNDπ】■
Androidパターンロック解除
Lisp Scheme Part41
Ruby 初心者スレッド Part 63
Visual Studio .NET 2002
0からの、超初心者C#相談室
【GUI】Fletスレ【Python/Flutter】
C#, C♯, C#相談室 Part91
Qiita
ブロックチェーンプログラマ来てくれないか
プログラミングのお題スレ Part16
proce55ing プログラミングアート全般
Ruby 初心者スレッド Part 66
23:54:53 up 10 days, 21:03, 1 user, load average: 145.10, 137.42, 147.35

in 0.95489406585693 sec @0.03072190284729@0.1 on 092312