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

C++相談室 part148 YouTube動画>9本


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

このスレへの固定リンク: 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

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() とは独立でない、と推測しています

@この解釈で正しいですか?
Aこういうのは、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の倍数だから、素数じゃない

2532522020/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デフォルトの名無しさん2020/02/07(金) 06:00:43.94ID:yxrGSGnH
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万稼げるエンジニアになった理由


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


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


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


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


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


貧乏人こそ社会不適合者


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


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


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
主観で見やすい表記にする
その為にコンパイラの警告を無視したり切ったりする

何も問題無い

4062020/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
素人多いね、このスレ。


lud20200208013858
このスレへの固定リンク: 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++相談室 part148 YouTube動画>9本 」を見た人も見ています:
C++相談室 part152
C++相談室 part126
C++相談室 part124
C++相談室 part154
C++相談室 part149
C++相談室 part155
C++相談室 part151
C++相談室 part139
C++相談室 part143
C++相談室 part137
C++相談室 part138
C++相談室 part146
C++相談室 part134
C++相談室 part132
C++相談室 part117
C++相談室 part145
C++相談室 part135
C++相談室 part142
C++相談室 part141
C++相談室 part137
C++Builder相談室 Part21
0からの、超初心者C++相談室
C++相談室 part131 [無断転載禁止]
C++相談室 part130 [無断転載禁止]
Cygwin + MinGW + GCC 相談室 Part 8
C♯相談室 Part20
Mac G5 中古買入相談室
MFC相談室 mfc23d.dll
C#, C♯, C#相談室 Part79
C#, C♯, C#相談室 Part75
自営業 悩みごと相談室 40
C#, C♯, C#相談室 Part91
C#, C♯, C#相談室 Part93
自営業 悩みごと相談室 47
自営業 悩みごと相談室 41
自営業 悩みごと相談室 46
C#, C♯, C#相談室 Part95
自営業 悩みごと相談室 48
C#, C♯, C#相談室 Part94
自営業 悩みごと相談室 43_
ライダーマンのお悩み相談室
[特設]サマータイム対応相談室
★★★ゲイの生活相談室3★★★
マイコンソフト 悩み事相談室 4
■コンサル田中の経営相談室。■
【太気拳】なんでも相談室 part3【意拳】
【太気拳】なんでも相談室 part5【意拳】
アパート経営なんでも相談室【136号室】
自営業 悩みごと相談室 45 [無断転載禁止]
【スキー】中級者以上・アイテム相談室【板靴何でも】
【NTT】ドコモ お客様相談室【docomo】
黒田広史行政書士相続まちがど相談室非弁高額報酬
NHK総合を常に実況し続けるスレ 144411 相談室CEO
アパートマンション経営なんでも相談室【157号室】
アパートマンション経営なんでも相談室【155号室】
アパートマンション経営なんでも相談室【156号室】
アパートマンション経営なんでも相談室【155号室】
アパートマンション経営なんでも相談室【152号室】
アパートマンション経営なんでも相談室【151号室】
【スキー】初級者アイテム相談室5【板靴何でも】
アパートマンション経営なんでも相談室【146号室】
アパートマンション経営なんでも相談室【154号室】
マイコンソフト 悩み事相談室 2 [無断転載禁止]
No A012-2 【ジャマイカン恋愛相談室】広告対策
00:10:28 up 14 days, 1:14, 1 user, load average: 8.51, 8.55, 8.97

in 2.1027939319611 sec @2.1027939319611@0b7 on 012714