C++相談室 part147at TECH
C++相談室 part147 - 暇つぶし2ch2:デフォルトの名無しさん
19/12/18 17:59:08.02 3w1BRoQv.net
なんやこのキモい天ぷら

3:デフォルトの名無しさん
19/12/18 23:12:34.99 EE58WPKP.net
>>1
死ね

4:デフォルトの名無しさん
19/12/19 00:03:12.14 zX6m0cqE.net
藻前らにクリスマスプレゼント貼る、
URLリンク(cpprefjp.github.io)
もっともっと争いにはげむと良い

5:デフォルトの名無しさん
19/12/19 00:18:27.33 usOsPCZf.net
ワロタ

6:蟻人間
19/12/19 00:23:05.50 r6T/W91o.net
1001レス書けたのはなんで? 5chのバグ?

7:デフォルトの名無しさん
19/12/19 01:07:12.70 5BDnhVE2.net
このままいくとそのうち C++20 → C++40 → C++80 ...
などとなり、そのうち C++98 とどっちが古いかわからなくなる
時がやってくるわけだが、その点をちゃんと考えているのか
標準化委員会に問い詰めたい

8:デフォルトの名無しさん
19/12/19 06:07:09 +fuR4pm1.net
こんなだからC++敬遠されるんだよ
組み込みエンジニアとしては嘆かわしい限り

9:デフォルトの名無しさん
19/12/19 06:48:20.41 rFEDNRgX.net
>>6 前スレッドの「あれっ?」は、俺の環境だと1000番だったよ。
>>8 「こんなだから」はどこを指してる?
「そんなことも忖度できないから…」かも知れんけど。

10:デフォルトの名無しさん
19/12/19 13:50:56.27 e6wF5QYj.net
は!const付けると書き込めないから
コンパイラが最適化してくれるんじゃないだろか!!

11:デフォルトの名無しさん
19/12/19 14:53:15 CIL8E3K9.net
俺は悪い奴だからconst_castしてしまうぜ

12:デフォルトの名無しさん
19/12/19 15:58:03.38 e6wF5QYj.net
一つのクラスの単体テストって何個くらい作りますか?

13:デフォルトの名無しさん
19/12/19 16:01:43.72 hJvSxET/.net
1000個

14:デフォルトの名無しさん
19/12/19 16:03:30.00 e6wF5QYj.net
100個くらいじゃ少なすぎるんだ。

15:デフォルトの名無しさん
19/12/19 23:10:04.38 Y/zGUZTk.net
何個ぐらいって一般化できると思うか?

16:デフォルトの名無しさん
19/12/20 08:56:23.47 jk7l00+3.net
メンバ*10とか指標が出てくるかなあって。

17:デフォルトの名無しさん
19/12/20 11:48:52 N4kH8rcM.net
数じゃなくてカバレッジで考えるんだよ

18:デフォルトの名無しさん
19/12/20 12:49:40 jk7l00+3.net
そうですか。
でも測定ツールが高そう。

19:デフォルトの名無しさん
19/12/20 20:29:58.76 jjn2sxGn.net
メンバ・メイ・コボルスミ11

20:デフォルトの名無しさん
19/12/20 23:43:02.47 i1Ytyme8.net
■ windows.hのmin/maxマクロ回避策4パターン
URLリンク(yohhoy.h) a t e n a d i a r y.jp/entry/20120115/p1

こんな具合に記号定数マクロ展開を抑止する方法って無いですかね…

21:デフォルトの名無しさん
19/12/20 23:47:16.50 i1Ytyme8.net
単に展開を抑止するだけなら#undefで良いんですが
#include <Windows.h>
namespace w32w {
const w32wMOVEFILE_REPLACE_EXISTING = MOVEFILE_REPLACE_EXISTING;
#undef MOVEFILE_REPLACE_EXISTING;
const MOVEFILE_REPLACE_EXISTING = w32wMOVEFILE_REPLACE_EXISTING;
/*...*/
} // namespace w2w
みたいなのをもっと簡単にやれないものか…

22:デフォルトの名無しさん
19/12/21 00:06:23.25 gJjydDaN.net
ちょっと何言ってるかわかりませんね
FOOという定義済みマクロとnamespace barがあるとして、
const int bar::FOO
を定義済みマクロFOOの値で初期化したい
とゆーことです\(^o^)/

23:デフォルトの名無しさん
19/12/21 00:55:27 FSMLpyuy.net
簡単にできたとして一個一個手で書くつもりか?

24:デフォルトの名無しさん
19/12/21 07:55:32.45 gJjydDaN.net
>>23
手で書けるなら頃せる
今気づいたが定義済みマクロWINVERって<Windows.h>をインクルードしなくても
定義されてるのねん…

25:デフォルトの名無しさん
19/12/21 08:00:42.78 /C2Zxfa9.net
windows.hのsmallに引っ掛かって30分悩んだ

26:デフォルトの名無しさん
19/12/21 16:01:06.10 41M/xbUn.net
>>22
マクロにFOOとかを渡して、トークン連結演算子でどうにかできるのでは?
#undef使って切り替えるより簡単だと思う
何がやりたいのかいまいちわかってないので違ってたらスルーしてくれw

27:デフォルトの名無しさん
19/12/21 16:09:49.97 FSMLpyuy.net
>>24
頃せる?
できるって意味か?
手でやるのは馬鹿げてる作業だと思うぞ
でツールでやるなら別に簡単に書ける必要もなし
正直そんなとこがんばってもと言う気はするけどね
小文字のマクロだけは滅んでほしい

28:デフォルトの名無しさん
19/12/21 21:55:00.70 7S/5Xmi8.net
背中に手が届く痒いソフトないかな。

29:デフォルトの名無しさん
19/12/22 09:20:26.05 PdpWotrS.net
お前が自作して配布するんだよぉ

30:デフォルトの名無しさん
19/12/22 14:56:43.90 qJChSMJU.net
窓の手。

31:デフォルトの名無しさん
19/12/23 14:58:26.67 sEnpgkKc.net
namespace w32w {
#include <Windows.h>
} // namespace w2w
const MOVEFILE_REPLACE_EXISTING = w32w::MOVEFILE_REPLACE_EXISTING;

32:デフォルトの名無しさん
19/12/23 16:57:11.44 f3nq+WHN.net
constはスレッドセーフじゃないとダメなんだな。

33:デフォルトの名無しさん
19/12/23 18:18:55.23 .net
痒いソフト

34:デフォルトの名無しさん
19/12/23 20:10:00.49 X1aPCWn8.net
>>31
マクロだったらどうするんだ

35:デフォルトの名無しさん
19/12/23 20:11:03.19 f3nq+WHN.net
キャッシュやメモ化してるだけのメンバはconst付けたいところだけど、ミューテックス使うとマイクロ秒の単位で時間がかかるとなると、付けないほうが良いのかな。

36:デフォルトの名無しさん
19/12/23 20:11:47.02 yUC4LEa+.net
というかマクロが問題なわけだが

37:デフォルトの名無しさん
19/12/23 20:35:01.08 f3nq+WHN.net
そういえばマクロって使う必要なくなったよね。
なんでだろ。

38:デフォルトの名無しさん
19/12/23 20:39:32.58 z7fGiGkq.net
ヘッダとかでたくさん使われてる

39:デフォルトの名無しさん
19/12/23 20:46:52.21 f3nq+WHN.net
そういえばBoostがマクロまみれだった。

40:デフォルトの名無しさん
19/12/23 21:01:02.33 wextYSDX.net
c++11以降の目的の一つがマクロつぶしだからな。

41:デフォルトの名無しさん
19/12/23 21:24:59.81 kZpvALBe.net
>>39
boostはまだ言語仕様で標準化されていない機能を標準化された機能で実現しようとしている部分が多いから、自然とマクロでどうにかしなきゃならない箇所が多いんだろう

42:デフォルトの名無しさん
19/12/24 03:50:11.29 1TojzXfm.net
>>40
捨てるためにゴテゴテとよけいな機能をつけなくても、
スコープ内だけで有効なローカルマクロ的なものを導入すればそれで良かったような気がしなくもないが、
#includeが絡むとやっぱだめかなw

43:デフォルトの名無しさん
19/12/24 05:03:51.44 ZHC84Kgk.net
今さらEmscripten使ってwasm化してみたけどそこそこ使えそう

44:デフォルトの名無しさん
19/12/24 06:19:47.03 Dtupe+iE.net
いまさらかよ!

45:デフォルトの名無しさん
19/12/24 07:00:24.75 Zba7/+kU.net
マクロというかプリプロセスの一部を言語規格


46:内に取り込まないと無理なんだろ



47:デフォルトの名無しさん
19/12/24 07:02:33.85 cUFUrp77.net
C++が進化してもマクロは無くならない

48:デフォルトの名無しさん
19/12/24 14:34:27.28 .net
せめてなくそうとはしろ

49:デフォルトの名無しさん
19/12/24 15:28:29.91 mUUuTbFd.net
マクロは正義
今日もいくつも生やした

50:デフォルトの名無しさん
19/12/24 15:40:51.62 .net
マクロについて、江添はなんて言ってる?

51:デフォルトの名無しさん
19/12/24 15:46:02.23 VueyJ5PW.net
自分で読めば

52:デフォルトの名無しさん
19/12/24 16:14:08.15 qpZ25SUC.net
逆にマクロが進化する可能性は。

53:デフォルトの名無しさん
19/12/24 16:15:20.38 Uve8u0PJ.net
それはやだねえ

54:デフォルトの名無しさん
19/12/24 17:12:20.17 iCGyxCxX.net
マクロの進化を考えてみた
マクロは型に対応していないのが問題なので、まず型を導入する
しかし完全に常に型を必要としてしまうと普通の関数や変数と違いがなくなるので
コンパイル時に決定できる場合に限り、ジェネリックに何でも受けいれるようにする
・・あ、そうだ同じ名前で複数の宣言を可にして、それのうち一つでもコンパイルエラーで
ないなら他は無視して、コンパイルできるもののみ有効とかにすると色々つかえるかもしれないな
たとえばある構造体に特定のメンバがあるかどうかでコンパイル時に処理を分岐するとか

55:デフォルトの名無しさん
19/12/24 17:42:03.17 OCcxjFNd.net
テンプレートですか?

56:デフォルトの名無しさん
19/12/24 17:44:14.13 vOfEkls8.net
マクロと言えばマクロアセンブラ
C/C++のマクロより高機能なので見てみると良い

57:デフォルトの名無しさん
19/12/24 18:10:27.35 Uve8u0PJ.net
MASMのマクロと比べるべきはテンプレートだろ

58:デフォルトの名無しさん
19/12/24 18:17:05.63 .net
C++コードをプリプロセスする専用の新規言語を発明すれば!

59:デフォルトの名無しさん
19/12/24 18:31:34.23 IBUEMR4t.net
>>53
それどこのtemplate

60:デフォルトの名無しさん
19/12/24 18:33:07.30 IBUEMR4t.net
>>57
それどこのQt

61:デフォルトの名無しさん
19/12/24 18:44:21.54 Uve8u0PJ.net
>>57
それはcfrontといって世界最古のC++だ

62:デフォルトの名無しさん
19/12/24 19:43:07.15 cUFUrp77.net
>>56
テンプレートとは違う

63:デフォルトの名無しさん
19/12/24 19:53:54.69 SdQqxQDy.net
>>59
mocはまだ生きてるんだな
無くなったと思ってた

64:
19/12/24 19:59:00.17 Kb/HLSFP.net
>>60
そうか、C++11 or later を食らうをプリプロセッサーがウけるのか…

65:デフォルトの名無しさん
19/12/24 20:06:18.60 ed+tLMlR.net
rustのようなマッチングでやるとか
他にはASTのAPI提供するとか
あとはlispみたいにやるとか
c/c++よりまともなやり方はあるけど正直どれもややこしいし上に
めんどくさいんだよね

66:デフォルトの名無しさん
19/12/24 20:10:21.58 ed+tLMlR.net
メタプログラミングにおいてあえてチューリング不完全にしちゃうってのは
悪くないデザインチョイスだと思うんだよね
すがすがしい

67:デフォルトの名無しさん
19/12/24 21:38:38.95 4c9jV6+e.net
てかその手の糞みたいな発想はlispでやりつくされてる。
バカが知らないだけで。

68:デフォルトの名無しさん
19/12/24 22:07:05.33 E1PNjCWX.net
includeでテキストファイルを文字列literalとして読み込んだり、CSVファイルを行毎に指定の変換で読み込んだりしたい
外部プログラムで変換するのがめんどい

69:デフォルトの名無しさん
19/12/24 22:10:34.81 UL4fNRBx.net
なんとかいうプログラミングの偉いひとがいってたんだけど
「凡人が斬新な発想と思っている事の5割は既に誰かがやっており
残り5割は斬新ではなくそもそも機能しない」らしい

70:デフォルトの名無しさん
19/12/24 22:34:55.01 .net
よい子のみんな!のAAにもあるとおり

71:デフォルトの名無しさん
19/12/25 12:25:41.21 2ymVLaRc.net
最強のC++はC++の道から外れないこと

72:デフォルトの名無しさん
19/12/25 13:27:29.92 .net
C++のタオとは?

73:デフォルトの名無しさん
19/12/25 14:04:21.60 VS52OTGY.net
振り返るとそこに道が出来ているってことでは。

74:デフォルトの名無しさん
19/12/25 15:20:11.91 R5R0tFog.net
c++ natureを極めるためにはc++公案で鍛えるしかない

75:デフォルトの名無しさん
19/12/28 19:48:57.63 8w0fwfLC.net
主要コンパイラはすべてサポートしているにも関わらずいまだに#pragma onceを使わない人が少なくないのはなぜ?

76:デフォルトの名無しさん
19/12/28 20:16:53.24 CXPtawUE.net
onceはclang-clにしたら文句言われた。

77:
19/12/28 20:21:50.83 9Pig40yt.net
>>74
#if defined() / #ifdef で十分ですから
#progma once が規格に取り込まれでもしないかぎり状況はかわらないでしょうね
#progma once の優位性はなんでしょうか

78:デフォルトの名無しさん
19/12/28 20:24:49.66 8w0fwfLC.net
一行で済む
万が一のdefineの衝突が起こらない

79:デフォルトの名無しさん
19/12/28 20:34:45.01 izuDiHMA.net
今はgccでもつかえるんだっけか

80:デフォルトの名無しさん
19/12/28 20:40:53.71 8w0fwfLC.net
3.4.xのどこかで対応してるからもう10年以上前の話

81:デフォルトの名無しさん
19/12/28 21:01:17.79 pepWReU2.net
VSについてくるclang-clはpragma once普通に使えてる。

82:デフォルトの名無しさん
19/12/28 21:03:08.62 pepWReU2.net
いまcl、clang-cl、gccでチェックしてるけど、pragma onceは使えてる。

83:デフォルトの名無しさん
19/12/28 21:15:39.80 oW0/scDi.net
#pragma once
と書いておけばperlで#if defined() / #ifdefに直せる

84:デフォルトの名無しさん
19/12/28 21:32:47.05 jUBDgrWb.net
標準化してくれれば良いのに
pragmaで出来ることの範疇越えている気はするけど

85:デフォルトの名無しさん
19/12/28 21:48:20.70 isXVaWAp.net
他のもろもろと合わせてモジュールに移行することで済ませるつもりなんでしょ。

86:デフォルトの名無しさん
19/12/29 01:41:15.83 BmrLXJpy.net
そういやまだモジュールサポートしてるコンパイラないな

87:デフォルトの名無しさん
19/12/29 01:54:26.89 KMgGrgwo.net
exportみたいになりませんように

88:デフォルトの名無しさん
19/12/29 04:54:11 Q9hr3WtC.net
C#だとis演算子を利用してキャスト可能か判定していますが、
C++でdynamic_castでキャスト可能かってどう判断すればよいのでしょうか?
後、static_castできるかどうかの判定はどうすればよいのでしょうか?

89:デフォルトの名無しさん
19/12/29 05:54:33.33 Jtzyjysr.net
URLリンク(ideone.com)

90:デフォルトの名無しさん
19/12/29 08:13:14.15 IGe5Ocj7.net
dynamic_castがnullptrを返すかどうかで判断
if (auto dp = dynamic_cast<Derived*>(bp)) {
(dpを使った処理)
}

91:デフォルトの名無しさん
19/12/29 08:30:34.84 e4b1FoNz.net
>>87
static_castは静的に決まるから、コンパイルエラーにならなければできるということだぞ。
それが意図した通りの変換になるかは規格を正しく理解すればいい。

92:デフォルトの名無しさん
19/12/29 10:22:08.63 3P5H5aUL.net
テトリスでプログラミングの基礎は身につくますか?

93:デフォルトの名無しさん
19/12/29 10:25:16.33 BmrLXJpy.net
いいえ

94:デフォルトの名無しさん
19/12/29 10:27:06.48 OzwmxFfF.net
>>91
まずは日本語の基礎を身に付けてください。
それと、最近python関連のスレでテトリスの質問をしまくっていたキッズなら、テトリスはあきらめて愚直に入門書から始めてください。

95:デフォルトの名無しさん
19/12/29 10:43:20.20 iKwMwrMu.net
>91
知恵袋で見た質問だな
URLリンク(detail.chi)


96:ebukuro.yahoo.co.jp/qa/question_detail/q12217899992



97:デフォルトの名無しさん
19/12/29 11:38:43.95 G7raGgQx.net
江添の最近出した本、このスレ的にはどういう評価なの?

98:デフォルトの名無しさん
19/12/29 13:32:59.69 KIjz0jVz.net
江添亮のC++入門、2019/9
こんな本を出していたのかw
関係ないけど、漏れは、下の本を読んでる。
短くまとめられていて良い
[改訂第3版]C++ポケットリファレンス、高橋 晶 ほか、2018

99:
19/12/29 14:20:03.86 yqbBnK7b.net
>>96
>C++ポケットリファレンス、高橋 晶
たぶん最初に出たC++11和書ですね、すごく勇気がいったと思います、私も読ませてもらっています

100:96
19/12/29 14:38:45.96 KIjz0jVz.net
江添亮、επιστημη[エピステーメー]、高橋晶とか、
日本のC++標準化委員会のメンバーは、伝道師みたいな香具師が多い
本をよく書く

101:デフォルトの名無しさん
19/12/29 15:16:08.73 mv3qVHGb.net
まあ、猫でもなんとかとか、スッキリわかるとか、柴田よりはましだろw

102:
19/12/29 15:26:45.05 yqbBnK7b.net
>>98
エピさん、監訳ポジなら問題ないんですけどエピさん単著だったら、ちょっと考えますね
エピさんの本は出来の波が激しすぎるのです

103:デフォルトの名無しさん
19/12/29 15:40:38.44 G5unUlDw.net
エピはサンプルコードの題材が全部タイマーのイメージ

104:デフォルトの名無しさん
19/12/30 02:16:44.05 uy9KH9fJ.net
>>98
その3人全員委員会のメンバーなの?江添だけだと思ってたが

105:デフォルトの名無しさん
19/12/30 10:20:13.91 iZxqjmO+.net
sizeof(void)がビルドが通らないorz
void型を渡すときのテンプレートの特殊化ってどう書けば良いんじゃ…

106:デフォルトの名無しさん
19/12/30 10:47:48.49 obTerxTG.net
は?

107:デフォルトの名無しさん
19/12/30 10:54:41.38 fYgKDGaZ.net
サンプルコードプリーズ

108:デフォルトの名無しさん
19/12/30 11:15:51.02 g0RN7zwT.net
sizeof(void)がだめだからT=voidだけ特殊化したいということだろ?
なにも特別なことはないと思うが。
URLリンク(ja.cppreference.com)

109:96
19/12/30 23:04:11.87 p3QJuMJ/.net
>>102
C++テンプレートテクニック―簡潔で再利用しやすいコードのためのC++活用術、2009
著者の紹介文に、こう書いてある
επιστημη[エピステーメー]
C++標準化委員会会員
高橋晶
1985年生まれ。2008年05月からC++標準化委員会にエキスパートとして参加
(本データは、この書籍が刊行された当時に掲載されていたものです)

110:デフォルトの名無しさん
19/12/31 04:04:35.24 rzJRcJt/.net
まじかよ
正直ソフト開発してないライターがやたら参加してんのはどうかと思うけどなぁ

111:デフォルトの名無しさん
19/12/31 06:39:04.13 K+WZPcbo.net
でもお前らの100倍詳しい

112:デフォルトの名無しさん
19/12/31 07:04:20.12 yGRo5VMJ.net
まぁ規格の解説とかはそういうのに関わってる人にしてもらうのが一番いいんじゃない?

113:デフォルトの名無しさん
19/12/31 07:29:37.36 rzJRcJt/.net
まぁ解説とかはそうだし有難いんだけどね
ちょっと日本のライター(に限らないのかもしれんけど)は自分でがっつり使い込んでもないテクニックを
「もしかしたら役に立たないかもしれない」との疑い全く無しに押し付けてることがあるしたまに宗教じみてるから
そういう人ばかりだと今後が不安


114:だなぁと それだけw



115:デフォルトの名無しさん
19/12/31 07:57:16.28 K+WZPcbo.net
運用するのはお前らの仕事

116:デフォルトの名無しさん
19/12/31 08:08:20.03 8dhupYNq.net
技術書籍は著者の思想に染まらなくても
そこに書いてあるアイディアを欲しいとこだけつまみ食いが
デフォな読み方だろ

117:デフォルトの名無しさん
19/12/31 09:13:17.18 6pACnD9L.net
いや、どれもこれも役に立つよ
てか新機能は大概実際に使っているやつらの発案で始まっているのだから当たり前
まあ、だからこそいろんな分野での要望がまぜこぜになって、ある分野では誰も興味を持たないみたいな言語機能も出てくるのだが

118:111
19/12/31 09:23:14.27 1NlDtb3g.net
>>114
いや言語機能は大抵役に立つよそりゃ
役に立たないかも、ってのは彼らが主にブログとかで紹介してるようなテクニックのこと
完全型か不完全型かを判定するテクニック思いついたよ!(ODRに違反するので要件チェックでエラーにする為にしか使えないが、それは書いてない)とか
C++/CLI風のプロパティをテンプレートで作ってみたよ使ってね!とかな
実際に開発してて使ってたらそんな都合よくはいかんやん?開発に使ってる人間とはちょっと感覚がズレてるんだよな

119:デフォルトの名無しさん
19/12/31 09:37:10.17 qHnQy48w.net
>>115
それは開発やってる人間が考えたってある前提では上手くいくが別の前提では使えないということもあるし、巷に溢れてる初心者でも書ける記事よりは価値があると思うよ。
参考になるところだけ拾って自分の役に立つときに取り出せればいいんでない?

120:111
19/12/31 09:38:38.18 wdGRUaME.net
まぁそれはそうやね
なんだかんだ世話にはなってるし

121:デフォルトの名無しさん
19/12/31 10:34:54.28 YPeginhU.net
std::vector<std::string> で、登録済みのstringのc_str()が変化しないことを保証する方法ってないかな?
このままでも基本的にはムーブされることが期待できるけど、コピーが発生する可能性は否定できないよね?

122:デフォルトの名無しさん
19/12/31 11:23:41.27 8dhupYNq.net
restrictがないからconst&から取得したc_strでも失効してることがあるよな

123:デフォルトの名無しさん
19/12/31 11:48:24.20 qHnQy48w.net
>>118
そのvectorに対してiteratorが無効になる操作をしないこと、およびその要素stringに対してc_strが無効になる操作をしないこと、ではいけないの?

124:デフォルトの名無しさん
19/12/31 11:56:10.87 6k+egH3+.net
vectorで書き換えられたくなければvector<string_view>にすれば

125:デフォルトの名無しさん
19/12/31 11:57:01.13 8dhupYNq.net
コピーを作って、参照ではなく元々constなオブジェクトにするしかねえべ

126:デフォルトの名無しさん
19/12/31 12:01:50.45 YPeginhU.net
ありがとう、そのままじゃ無理みたいだね。
std::vector<std::unique_ptr<std::string>>> にするわ。

127:デフォルトの名無しさん
19/12/31 12:19:07.09 8dhupYNq.net
vcとgccでは通るんだけどclangだけ引っかかる
const test obj;
return static_cast<test const&&>(obj); //ok
return move(obj); // warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]
copy elisionを後押ししちゃダメってこと?

128:デフォルトの名無しさん
19/12/31 12:57:47.44 i0/j0IL1.net
そのまま読むと、「ムーブすると」コピー省略の妨げになるとしか書かれてない気がするけど

129:デフォルトの名無しさん
19/12/31 13:11:47.23 6k+egH3+.net
現代的なコンパイラならわざわざムーブする必要ないからね
最適化の邪魔になる可能性あるよって親切に教えてくれてるんでしょ

130:デフォルトの名無しさん
19/12/31 13:14:32.39 8dhupYNq.net
118からの�


131:ャれで122を書いたんだけど const付きで何かした結果をmoveでなら無理なくconst外し できるのかって発想で実験してたんだ



132:デフォルトの名無しさん
19/12/31 14:21:00.13 jcurN+EG.net
>>123
そんなことするくらいだったらstd::dequeの方がよくね?

133:デフォルトの名無しさん
19/12/31 14:39:44.01 YPeginhU.net
std::list は大丈夫かもしれないけど std::deque は vector と同じような。

134:デフォルトの名無しさん
19/12/31 14:56:19.70 jcurN+EG.net
まぁ、std:dequeはチャンク単位でメモリ確保するから、頭とお尻の操作であればの再配置が行われないけど、途中要素だと再配置入るから保証は無理か。

135:デフォルトの名無しさん
19/12/31 15:02:45.14 YPeginhU.net
ああなるほど、dequeの尻に追加する分には既存の要素の再配置は起こらないのか。ありがとう。

136:デフォルトの名無しさん
19/12/31 16:29:46.55 hkax3Wzu.net
dequeの実装方法は規定されてなかったような

137:デフォルトの名無しさん
19/12/31 17:01:07.64 jcurN+EG.net
詳しくは知らないけど、std::dequeにはreserveがないから、ちゃんと規定されているのではないかと思う。

138:デフォルトの名無しさん
20/01/01 10:18:26.20 W3M0tzcA.net
C++とか多重定義があるから関数名が内部で修飾されて違う名前にするの、英語でなんか呼び名があったと思うのですが
なんというのですか?
C++と多重定義に限らず、実際の名前と違うのを作ることを言うのかも知れなかったけど

139:デフォルトの名無しさん
20/01/01 10:23:41.44 kPvcajv8.net
マングリングのことかな

140:デフォルトの名無しさん
20/01/01 14:22:17.23 W3M0tzcA.net
>>135
それです。
ありがとうございました。

141:デフォルトの名無しさん
20/01/01 14:24:24.22 7xbR7AqI.net
昔から思ってるけど、マングリングっていう単語
ちょっと口にするのに抵抗ある感

142:
20/01/01 15:23:06.14 tqBP4ADq.net
あけおめこ
とよろ
まんぐりがえし

143:デフォルトの名無しさん
20/01/01 16:31:16.52 BCFJuGnw.net
うちの会社は開発島のとなりに総務島があってマングリングを誤解するだろうお姉さま方がたくさんいるから、とても言えない。
わざと聞こえるように言って反応を見てみたい気もするが怖くて出来ない。

144:デフォルトの名無しさん
20/01/01 16:34:16.30 9/85Pj9b.net
そんな事をいちいち気にしなきゃいけないとか大変だな
置換とか正規表現とかも言うなよ

145:デフォルトの名無しさん
20/01/01 20:13:50.83 57Nye4dF.net
マングリング返し

146:デフォルトの名無しさん
20/01/02 09:10:44.11 hTPsjNJF.net
公園で置換

147:デフォルトの名無しさん
20/01/02 10:54:51.63 fRqsjLPx.net
置換みたいな面倒なのは通勤電車の中で済ませろ

148:デフォルトの名無しさん
20/01/02 13:02:38.31 vIdqLkFw.net
string GetAnswer(string mode, string text) {
std::string ques, ans;
if (mode == "Read") {
std::ifstream ifs("xxxx.txt", std::ios::in);
ques = text;
}
else if (mode == "Write") {
std::ifstream ifs("xxxx.txt");
ques = split(text, ":")[0];
}
std::string str;
ans = "not_found";
std::vector<std::string> line;
while (getline(ifs, str))
{
 ・・・・・・・・・
}
l・・・・・・・・
この状態でgetlineを読み込まないのはなぜですか。

149:デフォルトの名無しさん
20/01/02 13:04:51.69 vIdqLkFw.net
std::ifstream ifs("xxxx.txt");
if (mode == "Read") {
// std::ifstream ifs("xxxx.txt", std::ios::in) //コメントで外す; もしくは削除
ques = text;
}
else if (mode == "Write") {
// std::ifstream ifs("xxxx.txt"); //コメントで外す、もしくは削除
ques = split(text, ":")[0];
}
こうすれば、まともに動くのですが、前記の状態で動かないのはなぜですか。
modeは"Read"と""Write"しかないのですが。

150:デフォルトの名無しさん
20/01/02 13:16:19.00 fRqsjLPx.net
if抜けたらそれはどこへ逝く?

151:デフォルトの名無しさん
20/01/02 13:19:25.49 +UNtt4nj.net
>>145
コンパイルエラーじゃね?

152:デフォルトの名無しさん
20/01/02 13:23:42.58 fRqsjLPx.net
グローバルのスコープにあるんじゃ�


153:ヒ



154:デフォルトの名無しさん
20/01/02 13:38:13.22 +UNtt4nj.net
グローバルスコープにあるならオープンされてなさそうだね

155:デフォルトの名無しさん
20/01/02 19:15:39.81 G5uvQucS.net
質問ですが以下のコードのように、enum Barが
クラスFooの中でprivateなサブタイプとして定義されているときに、
enum Barで定義されている定数TAG1やTAG2を
ラムダ式の定義の中からクラス名修飾無しで使うにはどうしたらいいんですかね…
class Foo {
private:
 enum Bar { TAG1, TAG2, TAG3 };
public:
 enum Bar some_method();
 enum Bar launch(std::function<enum Bar(int)> func);
};
Foo::Bar Foo::some_method() {
 // メソッドの地の文
 printf("TAG1=%d\n", TAG1); // これはクラス名修飾無しでもOK
 // ラムダ式の定義
 auto lambdaFunc = [=](int x)->enum Bar{
  if (x == 1) {
   return Foo::TAG1; // これはクラス名修飾しないとコンパイルエラー
  } else {
   return Foo::TAG2; // これもクラス名修飾しないとコンパイルエラー
  }
 };
 // ラムダ式を使う
 return launch(lambdaFunc);
}

156:デフォルトの名無しさん
20/01/02 19:27:46.90 LbxbUX1g.net
>>150
URLリンク(ideone.com)
出来たけど、なんか間違ってるか?

157:デフォルトの名無しさん
20/01/02 20:18:42.74 G5uvQucS.net
>>151
レス㌧クス、だいたい動いたのですがMSVC 2010だと1点変更が必要でしたorz
↓17行目
URLリンク(ideone.com)
some_method()の定義をクラスFooの定義外に持っていっても同じ。
ラムダ式の中でFoo::TAG1とせねばならないというのは誤認だった模様サーセン、
しかし上のような新たな闇に行き当たってしまった、、、

158:デフォルトの名無しさん
20/01/02 20:21:51.56 G5uvQucS.net
なお、>>152の17行目のthisをコメントアウトして(つまりオリジナルの>>151のコードに戻して)
その上でラムダ式Lmの中でFoo::T1と書くともっと訳のわからないエラーを吐かれる↓↓↓
1>ideone_38OeRz.cpp(19): error C2065: '__this' : 定義されていない識別子です。
1>ideone_38OeRz.cpp(19): error C2227: '->T1' : 左側がクラス、構造体、共用体、ジェネリック型へのポインターではありません。
21世紀も半ばにさしかかろうというのにこんなことになるとわ…!

159:デフォルトの名無しさん
20/01/02 20:32:11.41 /0b57Mnr.net
C++11ですらない化石はさすがに使う方が悪い

160:
20/01/02 20:34:22.22 VmmTWzwp.net
遅いけど、私はなかなか c++11 に移行できていない労咳だと心底自覚するようになりました…

161:デフォルトの名無しさん
20/01/02 20:35:08.33 LbxbUX1g.net
URLリンク(ideone.com)
>>152 病みすぎて良くわからん。
>>153 Ideonでは動いているので、環境が古すぎるとしか言いようがないな。
2010ってそろそろ10年前といっても差し支えない程度に古いぞ。

162:デフォルトの名無しさん
20/01/02 20:42:19.47 LbxbUX1g.net
そういえば、ドラフトのIO2Dってどうなったんすか?

163:デフォルトの名無しさん
20/01/02 21:38:42.85 /mhKa7TF.net
頓挫したんじゃない?
一時期どんなものかと資料調べてだけどまとまってなかったよ。今どうなんだろうね?

164:デフォルトの名無しさん
20/01/02 21:50:26.55 LbxbUX1g.net
ぐあ、残念。

165:デフォルトの名無しさん
20/01/02 22:43:44.99 NQs+pspB.net
ideoneが未だにジム神様としか読めない

166:デフォルトの名無しさん
20/01/02 22:53:50.64 LbxbUX1g.net
俺はアニメのほう思い出すよ。見たことないけど。

167:デフォルトの名無しさん
20/01/02 23:23:24.45 vIdqLkFw.net
>>146
ReadかWriteのどちらかを抜けてからgetlineで読み込みますね。
デバッグで確認しています。
>>147
ビルドの段階で全くエラーが出ません。
警告にもなっていません。>>149
>>149
グローバルスコープと言うより全体が__declspec(dllexport)で
出力された関数です。

168:デフォルトの名無しさん
20/01/02 23:46:28.42 HVAsQwCl.net
>>162
VS使ってんでしょ?
> while (getline(ifs, str))
このifsを右クリックして定義がどこか探しなはれ

169:デフォルトの名無しさん
20/01/03 12:08:13.91 lHIykz7y.net
>>162
ここまで頓珍漢なレスは久々に観た
釣りなら大したもんだ

170:デフォルトの名無しさん
20/01/03 13:55:16.44 fIUwKVUy.net
初心者なんてそんなもんだろ
>>145
if/else文の中で宣言されたifsはブロック{}で囲まれてしまっているから、ブロックの外からアクセスできない。
だからgetlineに渡してるifsはどこか別の場所にあるifsを参照してしまっている。
std::fstream fs; //< 読み書き両用にするなら"fstream"にすること
if (mode == "Read") {
. fs.open("xxxx.txt", std::ios::in);
. ques = text;
}
else if (mode == "Write") {
. fs.open("xxxx.txt");
. ques = split(text, ":")[0];
}
...
getline(fs, str)

171:デフォルトの名無しさん
20/01/03 17:20:32.66 f1l2rf84.net
>>165
おっしゃる通りです。お恥ずかしい。
for文とかにだけ当てはまると思っていました。
後はローカルかグローバル変数かぐらいしか。
ありがとうございました。

172:デフォルトの名無しさん
20/01/08 07:56:51.57 L9bP3bPr.net
>>166
いえいえ

173:デフォルトの名無しさん
20/01/08 11:04:42 5cG1OuZI.net
vector<vector<vector<char>>> data(10, vector<vector<char>>(3, vector<char>(3)));
だと,、char[10][3][3]になると思うのですが
[10]の部分だけ動的にするにはどうすればいいのでしょうか。

174:デフォルトの名無しさん
20/01/08 11:09:21 tEaTJVpu.net
[3][3]を固定にしたいってことか?

175:デフォルトの名無しさん
20/01/08 11:09:38 5cG1OuZI.net
そうです。

176:デフォルトの名無しさん
20/01/08 11:16:31.83 qsayucr9.net
class/structの勉強をしましょう

177:デフォルトの名無しさん
20/01/08 11:22:22.12 tEaTJVpu.net
>>168
vector<array<array<char, 3>, 3>> data(10);

178:デフォルトの名無しさん
20/01/08 11:23:40.31 5cG1OuZI.net
構造体もvectorに入れられるのですね。
ありがとうございます。

179:デフォルトの名無しさん
20/01/08 21:49:44.02 PRP72WQ5.net
ちなみに class と struct はデフォルトが public か private か、という違いしかない
事実上同じもの

180:デフォルトの名無しさん
20/01/09 00:07:44.02 KXHiDU3s.net
>>173
いえいえ

181:デフォルトの名無しさん
20/01/09 10:15:27 LsvkYb1v.net
C++のclassとstructはデフォのアクセス指定以外全く同じものだとちゃんと教えない教材がちらほらあるのが悪い
そもそもclassより先にstructをCの構造体の感覚で教えるやつは教える側がちゃんと理解してない可能性すらある

182:デフォルトの名無しさん
20/01/09 10:55:03.06 0RBXSUPh.net
そこまで言うなら
struct の方をさっさと deprecated - obsoleted すれば良かったんよ
20年位前にやっとけば良かった

183:デフォルトの名無しさん
20/01/09 11:59:01.69 +yE1fb2H.net
というかclassが要らん
private: 一行書けばいいだけだろ
まあ最近ではGoやRustによってstructが復権してるけど、
当時はオブジェクト指向の用語に対して変なコンプレックスがあったんだろうな

184:デフォルトの名無しさん
20/01/09 12:47:07.90 zQlYINS8.net
>>178
そうそう
           |
            |  彡⌒ミ
           \ (´・ω・`)デフォルトのアクセス指定子を定義したことは,十中八九,間違いであった.
             (|   |)::::
              (γ /:::::::
               し \:::
                  \

185:デフォルトの名無しさん
20/01/09 12:52:15.14 LsvkYb1v.net
指定子書き忘れにデフォがprivateならコンパイルエラーでわかるがpublicならわからん
デフォはprivateの方がいい

186:デフォルトの名無しさん
20/01/09 12:55:55.27 zQlYINS8.net
禁止がデフォで許可が明示な
constも本当はそうなっていて欲しい
ラムダ式の[=]だけデフォconstになっててmutableで外すんだけどね

187:デフォルトの名無しさん
20/01/09 18:49:23.86 vYl+3riX.net
全部コンパイルオプションで対応できそうなのに
っていうかRustいらなくならなくね

188:デフォルトの名無しさん
20/01/09 20:02:43.03 dcOC3Udy.net
>>181
最適化禁止のvolatileがデフォはウザすぎる

189:デフォルトの名無しさん
20/01/09 20:46:00.27 jeGBkGmG.net
volatileってC++20で死ぬんでしょ?

190:デフォルトの名無しさん
20/01/09 20:53:16.18 dcOC3Udy.net
まじか
SFRとかどうすんだよ

191:デフォルトの名無しさん
20/01/09 21:18:47.87 VFRbhrWi.net
volatileの有用な機能のみを残し、効果が疑わしい、または壊れている機能を非推奨化する
完全に消える分けでは無いらしい
詳細は知らん

192:デフォルトの名無しさん
20/01/09 21:55:38.56 SnSt17is.net
>>176
まじですか、C++のstructも構造体だと思っていたけど。
知らなかった。
プロパティだけならstructの中の変数とclassの中の変数
って、あまり変わらない気がするけど、classの方はメンバ
とか言われる実質は関数を含むことができるじゃない。
あと、親から継承したりとか。
なんとなく同じものという感じがしない。

193:デフォルトの名無しさん
20/01/09 22:06:14.43 LsvkYb1v.net
structもメンバ関数を持つし、継承もするし、classをstructが継承することもその逆もできる
デフォがpublicかprivateかの違いだけで機能はclassと全く同じ

194:デフォルトの名無しさん
20/01/09 22:23:38.89 SnSt17is.net
>>188
知らなかった。長い間,、Cの構造体と同じことしか
できないと思ってた。

195:デフォルトの名無しさん
20/01/09 23:18:29.42 3XE25/Yj.net
なんかboostスレ死んでるからここで教えてください。
boost使ってクラサバ作ってて、クライアントが接続されるたびに、サーバ側で比較的重い処理があり、
処理止めたく無いからio_serviceに溜まったキューの数見てスレッドを動的に調整したい。
けど、自分の拙い検索能力ではio_serviceに溜まってるキューの数を調べる方法が無さそうなんですが、取得することは可能ですか?
よろしくお願いします。

196:デフォルトの名無しさん
20/01/10 08:52:59.23 cqQYZnld.net
許容されるスレッド数で常にフルスロットルじゃいかんのけ?
処理がないスレッドは勝手に止まってるし、なんならセマフォで動作数も調節もできるだろうし

197:デフォルトの名無しさん
20/01/10 20:10:30.90 gdjTauNe.net
スレッド増やしたところで本質的な解決にならん問題な気がする。

198:デフォルトの名無しさん
20/01/11 00:59:53 NtF2wljx.net
キューの前にガバナー、調速機を付ければいい
キューに入れた個数と出てきた個数をカウントすりゃいいんだろ
スプールでも作ればいいんじゃないの

199:デフォルトの名無しさん
20/01/11 01:12:20 mrkcLLQe.net
質問ですがstd::function<T>型のオブジェクトにNULLって代入していいの?

200:デフォルトの名無しさん
20/01/11 01:15:06 GiJYoHUo.net
>>194
大丈夫
nullptrの代入は何も関数を保持していない状態にする

201:デフォルトの名無しさん
20/01/11 01:43:57 mrkcLLQe.net
なるほど!
?クス、

202:デフォルトの名無しさん
20/01/11 15:19:42.16 hPLqZ0ty.net
C++11の知識でC++書いてるけど、特に不便ないな
最新のC++だと何ができるの?

203:デフォルトの名無しさん
20/01/11 15:29:42.91 pEBt3sLq.net
なら知らなくていいんじゃない?

204:デフォルトの名無しさん
20/01/11 15:47:51.76 9vrnWCM9.net
お前がC++11で十分と思っていても他人はお前に遠慮なんかせずC++20の記法で書く
お前がヘッダーをよこせと言ってもモジュールしか提供されない

205:デフォルトの名無しさん
20/01/11 17:14:40.32 hPLqZ0ty.net
なにを怒ってるんだよ
イージーになろうぜ、イージー

206:デフォルトの名無しさん
20/01/11 17:26:39.19


207: ID:hPLqZ0ty.net



208:デフォルトの名無しさん
20/01/11 17:33:49.75 7JWsqvWB.net
標準ライブラリにはまだモジュール使われないんだろ?
20の次あたりでモジュール版も出てくるかどうかだろ

209:デフォルトの名無しさん
20/01/11 17:48:06.88 XaO4QoYK.net
>>202
シルカばーーーか

210:デフォルトの名無しさん
20/01/11 17:53:38.30 hPLqZ0ty.net
モジュールって何?

211:デフォルトの名無しさん
20/01/11 18:22:48.55 G3Wgm73J.net
モジュールってテンプレート持てるの?

212:デフォルトの名無しさん
20/01/11 18:28:46.90 AvFBkNTe.net
またテンプレートの分割コンパイルを誰かが1年ぐらいかけて実装して、
できたころには陳腐化しているという歴史の繰り返し
永遠に枯れない

213:デフォルトの名無しさん
20/01/11 19:01:55.71 hPLqZ0ty.net
gcc10入れた!
-std=c++2aでモジュールって使えるの?

214:デフォルトの名無しさん
20/01/11 19:15:28.94 hPLqZ0ty.net
なんだ-std=c++2aでは使えないみたいだな
概念的にはGoのpackageに近いのかな?

215:デフォルトの名無しさん
20/01/11 19:29:30.73 OEMCT43T.net
多分もう相手されないから引っ込んだ方がいいよ

216:デフォルトの名無しさん
20/01/11 19:30:41.47 hPLqZ0ty.net
なんでだよー><
相手してくれよー><
うわわわわん

217:デフォルトの名無しさん
20/01/11 22:12:41.17 o20hTksc.net
まだ実装してるコンパイラが無いっぽいから誰も使い勝手なんかわからんわな
>>205
持てる

218:デフォルトの名無しさん
20/01/12 05:48:12 LolRUOoj.net
1) mkl_blas.h がシステムに存在したらそれをインクルードし、行列行列積ルーチンとして (C++で実装された) dgemmを使う。
2) mkl_blas.hが存在しなければFortranルーチンのdgemm_を使う。

というのを実現したいとします。
mkl_blas.h もないし Fortranルーチンもないという状況は考えません。
関数名の末尾のアンダースコアの有無がややこしくて困っています。

#if __has_include(<mkl_blas.h>)
#include<mkl_blas.h>
#define dgemm_ dgemm
#else
extern "C" void dgemm_(省略);
#endif

としておいて、プログラム中の行列行列積ルーチンは全てdgemm_と書くことでお茶を濁しているのですが、もっとスマートな方法はありますか。
#define dgemm_ dgemm
という部分がいかにも場当たり的で気に入らないです。

219:デフォルトの名無しさん
20/01/12 09:50:22.73 GTFqFgmO.net
usingで別名にしてしまうとか?

220:デフォルトの名無しさん
20/01/12 09:59:58.48 g8OSapKt.net
俺ならソースにdgemm_みたいなのがあるのは嫌だから
#if __has_include(<mkl_blas.h>)
#include<mkl_blas.h>
#else
#define dgemm dgemm_
extern "C" void dgemm_(省略);
#endif
ってやると思う

221:デフォルトの名無しさん
20/01/12 12:48:26.98 JaW6uvCT.net
マクロが嫌ならinline関数にすればいいんじゃね

222:デフォルトの名無しさん
20/01/12 20:04:38.92 2yY0psIJ.net
C++で次々に追加される無駄機能は
Cをしっかり理解していれば同等の機能を実装するのは造作もないものが多い

223:デフォルトの名無しさん
20/01/12 20:05:36.02 Age3j7t+.net
では具体例お願いします

224:デフォルトの名無しさん
20/01/12 20:35:35.36 +J7i572i.net
void*が出てくる時点で論外なのでよろしく

225:蟻人間
20/01/12 20:41:55.23 26db5mti.net
#define my_static_assert(cond, msg) typedef char my_static_assert_failed[(cond) ? 1 : -1]

226:デフォルトの名無しさん
20/01/12 20:59:55.77 Svv4a/Ag.net
Cはマクロの使い方次第で出来ることが深まるんだよな
ただC++はマクロ使わない方向で進化してるからな

227:デフォルトの名無しさん
20/01/12 21:09:19.71 gA+rg5vj.net
>>212
下手なことするよりその書き方のが良い。個人的には214の方のが好きだが大して変わらん。

228:デフォルトの名無しさん
20/01/12 21:35:06.84 TRbEu5Zq.net
いざというときも最悪Cならコンパイラを自作できるが


229:C++はちょっと…



230:デフォルトの名無しさん
20/01/12 21:56:32.12 Svv4a/Ag.net
いやいや
gccとかC++だし

231:デフォルトの名無しさん
20/01/12 22:39:39.23 MD4l5gjt.net
うちの会社C++03なんだけど・・・

232:デフォルトの名無しさん
20/01/12 22:51:11.80 Age3j7t+.net
それが妥当かどうかは業務による

233:デフォルトの名無しさん
20/01/13 01:41:11 rQk6tfo+.net
おとなしく頭の良い奴に従っとけ
自分が優秀だと思い込んでいる精神異常者の諸君

234:デフォルトの名無しさん
20/01/13 01:58:06 xcD2sz0v.net
頭のいい奴は総じてc++はカスだと言っとるぞ。

235:デフォルトの名無しさん
20/01/13 02:05:13 Px4xDI4Q.net
増えていく機能が軒並み
プログラミング始めたてのやつが持つ不満を具現化したようなものばかりだ
慣れていくとCがそうである理由がわかってきて、いらなくなっていく

おおかた頭のいい奴が新規で入ってきて、慣れてないくせに良かれと思って追加してるんだろう

236:デフォルトの名無しさん
20/01/13 02:15:09 8CXSeWtZ.net
例を教えてくれ。

237:デフォルトの名無しさん
20/01/13 03:56:13.32 rQk6tfo+.net
頭の悪い奴向けの機能なんだが

238:デフォルトの名無しさん
20/01/13 06:52:04.51 zZXHCgLl.net
>>216 >>228
具体例早くしてくれ
抽象論では話にならん

239:デフォルトの名無しさん
20/01/13 09:16:12.93 j6Sgy/j5.net
C++コンパイラとC++のライブラリはC言語でも書けるから
当たらずしも遠からずだと思う

240:デフォルトの名無しさん
20/01/13 09:25:57.13 a0NWv3WS.net
全くCで書かれてないコンパイラってあるの?

241:デフォルトの名無しさん
20/01/13 10:25:34.29 pIGOCTOQ.net
Cでテンプレート対応できるの?

242:デフォルトの名無しさん
20/01/13 10:30:00.85 +nJPsH/6.net
>>228
C++は大人数で開発するための言語なんだからてめー個人がいるかいらないかなんて関係ねーんだわ

243:デフォルトの名無しさん
20/01/13 10:36:38.68 +nJPsH/6.net
チームでの開発を安全に進めるための機能なんて熟練者が書く分にはそりゃいらんだろ
で?

244:デフォルトの名無しさん
20/01/13 12:52:54.65 A/MByXKy.net
まあアセンブラさえあれば他に必要ないし
でもそこそこ規模大きいプロジェクトはc++多いよね
反例にlinuxはあるけど

245:デフォルトの名無しさん
20/01/13 13:04:44.90 xcD2sz0v.net
windowsでさえc++なんか使わなけりゃよかったいうとるぞ。
つまり低レイヤー触るのに向いてるようでそうでもないってのがc++なんだよ。

246:デフォルトの名無しさん
20/01/13 13:20:13.66 j6Sgy/j5.net
リーナスは低レベルな人やからな

247:デフォルトの名無しさん
20/01/13 13:20:44.02 FqpttVgU.net
だから?

248:デフォルトの名無しさん
20/01/13 22:54:55.25 /BeY0uog.net
>>233
Sun/OracleのJavaのコンパイラ javac は Java 自身で書かれている。
IBM製のJavaコンパイラ ecj も同じく。

249:デフォルトの名無しさん
20/01/13 23:00:48.10 FqpttVgU.net
JVMもJavaで書いてみせろ

250:デフォルトの名無しさん
20/01/13 23:44:05.72 vq82NN4B.net
皆さんが使用されているエディタを教えてください....🙇‍♀

251:デフォルトの名無しさん
20/01/13 23:45:43.26 jU0I703o.net
自作

252:デフォルトの名無しさん
20/01/13 23:45:56.78 5GjUS2iX.net
メモ帳

253:デフォルトの名無しさん
20/01/13 23:46:58.98 vq82NN4B.net
あ、すみません僕は今はatomを使っています
自作のエディタを使ってらっしゃる方なんているんですね。。。

254:デフォルトの名無しさん
20/01/14 06:11:49.55 J0UMnVjO.net
emacs

255:デフォルトの名無しさん
20/01/14 13:29:05.29 PBX58Pvh.net
某板金社製

256:デフォルトの名無しさん
20/01/14 16:11:50.76 gkNCY9ap.net
↓のコードはコンパイルが通るのですが、func(1)ではなく、func<int32_t>(1)のようにしなければいけないと思っていたんですが、そうではないんですか?
これはコンパイラが勝手にTの型を推測してくれているのでしょうか?
#include <iostream>
template<class T>
void
func(T value) {
std::cout << value << std::endl;
}
int main() {
func(1);
return 0;
}

257:デフォルトの名無しさん
20/01/14 16:13:46.64 MAaOflfD.net
俺は自ら望んでなったC++使いだが
リーナスの主張には何ら文句はない
俺も好かんところがいくつかあって我慢しているが
他の人がキレるのを否定はしない

258:デフォルトの名無しさん
20/01/14 19:00:56.35 jdAaUvyI.net
>>249
intに推論されてるね。
関数は推論してくれる。

259:デフォルトの名無しさん
20/01/14 19:47:23.47 gkNCY9ap.net
>>251
そうなんですか
ありがとうございました

260:デフォルトの名無しさん
20/01/14 19:55:58.10 MAaOflfD.net
C++17からはクラスも推定するようになったから気をつけろな

261:デフォルトの名無しさん
20/01/14 20:10:13.46 3eaorBLU.net
地獄になるのが目に見えるわ。

262:デフォルトの名無しさん
20/01/14 20:20:51.77 J0UMnVjO.net
>>249
>>251
もう少し正確に言うと関数の引数の型については推論してくれる。
戻り値については推論してくれないから<>で型を指定する必要がある。
template<typename T>
T func(double v){
  return static_cast<T>(v);
}
int main(){
  // int pi = func(3.14); // エラー
  int pi = func<int>(3.14);
  return 0;
}

263:デフォルトの名無しさん
20/01/14 23:30:18 gkNCY9ap.net
>>253,255
なるほど!
ありがとうございます

264:デフォルトの名無しさん
20/01/15 00:35:48 7a3J15MS.net
>>256
いえいえ

265:デフォルトの名無しさん
20/01/15 08:07:26.85 Af26ZTs6.net
>>257
楽しい?

266:デフォルトの名無しさん
20/01/16 01:26:49.29 Ue561N6A.net
C#使ってきたわい、C++入門するにあたって何から手を付けたらいいか分からない
江添の入門本読んだらええの?

267:デフォルトの名無しさん
20/01/16 04:14:44 SACm472n.net
+を重ね合わせないでずらして書くと#じゃなくて++になるやろ
つまりそういうことや

268:デフォルトの名無しさん
20/01/16 06:13:59.73 iXD/XJ1o.net
あんなカス本読むならビャーネの本とeffective系統を何冊か読んだ方がよっぽど為になる。

269:デフォルトの名無しさん
20/01/16 08:12:06.71 +e0TuAjq.net
俺も自分の経験からは禿の本をオススメすることになる

270:デフォルトの名無しさん
20/01/16 18:58:35 aiRikJgB.net
C++においてハゲとは神を意味するからな

271:デフォルトの名無しさん
20/01/16 20:10:19 5A9213qe.net
また髪の話ししてる

272:デフォルトの名無しさん
20/01/17 02:03:14 nV1+qdjp.net
C++でウィンドウ関係の処理を組もうと思っているのですが、
最近だとMFCではなく.Net Framework を利用するのでしょうか?

273:デフォルトの名無しさん
20/01/17 02:20:28 oPB0sz0H.net
いいえ

274:デフォルトの名無しさん
20/01/17 02:26:05 gAZZjojh.net
WebGL

275:デフォルトの名無しさん
20/01/17 06:22:56.76 BtsrcJh0.net
Win32APIが主流ですよ

276:デフォルトの名無しさん
20/01/17 07:24:00.72 sP/gsAG3.net
>>265
MFC抜きでWin32APIだけでコード書くことがあるけど正直無駄な苦痛を感じるよ
MFCもダサいとこあるけどMFCでできることと同じ内容のコードを書いてると泣けてくる

277:デフォルトの名無しさん
20/01/17 08:02:37.47 6PrSA6bz.net
WTLってどうなの?

278:デフォルトの名無しさん
20/01/17 08:03:39.75 +NTDhbdd.net
純粋仮想関数の=0の右辺って定数式なんでしたっけ

279:デフォルトの名無しさん
20/01/17 08:55:06 9u9GYVKv.net
0じゃないか?

280:デフォルトの名無しさん
20/01/17 09:17:21 r0ibn4Bf.net
オブジェクトを明示的に破棄する方法ってある?
自分で new したなら delete すれば良いと思うが、STL コンテナ等の場合はどうすれば良いかという質問です。

例えば巨大な vector を作って何らかの作業をした後、もうその vector は用無しでメモリがもったいないからスコープを抜けるのを待たずに破棄したいみたいな状況を想定してます。

281:デフォルトの名無しさん
20/01/17 09:19:05 oRcV/dFn.net
>>271
純粋仮想関数であることを示すための専用の構文らしい。pure-specifierという。

282:デフォルトの名無しさん
20/01/17 09:22:16 8wRp1qeu.net
>>273
空とswap

283:デフォルトの名無しさん
20/01/17 09:26:42 r0ibn4Bf.net
>>275
場当たり的な対処に思えますが、そういうのが嫌ならマメにスコープを切れということでしょうか。

284:デフォルトの名無しさん
20/01/17 10:03:31 jP7OzWuZ.net
>>276
じゃあvectorをnewしたらいいじゃん
頭使えよ

285:デフォルトの名無しさん
20/01/17 11:18:09 fMuYUnvE.net
>>265
tcl/tk
wxWidgets
Qt

286:デフォルトの名無しさん
20/01/17 12:09:31 FiFP8PG3.net
Qtはメジャーな製品でよく使われてる印象がありゅ

287:デフォルトの名無しさん
20/01/17 12:12:10.21 oPB0sz0H.net
MS製にこだわって頑なにMFCみたいな化石使ってる奴いるけど普通にサードパーティのツールキット使うのが主流

288:デフォルトの名無しさん
20/01/17 12:58:41.79 sP/gsAG3.net
他人のところの事情も知らんくせにシッタカこくと
聞こえたやつ全員からそれぞれ色んな理由でアホにされるぞ

289:デフォルトの名無しさん
20/01/17 13:10:35.05 fMuYUnvE.net
GTKは糞

290:デフォルトの名無しさん
20/01/17 13:38:21.01 oPB0sz0H.net
>>281
選択肢に.NETが出てくるあたり何の制約もない状況でサードパーティが使えない理由とは?

291:デフォルトの名無しさん
20/01/17 14:31:40 sP/gsAG3.net
身バレするから書かない

292:デフォルトの名無しさん
20/01/17 14:39:28 8NRoOtOw.net
スレ違いでしょ。続きはWin32APIスレに移動してどうぞ。

293:デフォルトの名無しさん
20/01/17 15:05:49 r0ibn4Bf.net
vectorをnewする?
ゴミみたいなこと言うな

294:デフォルトの名無しさん
20/01/17 15:19:25 yexmiyzj.net
質問する側の態度とは思えん

295:デフォルトの名無しさん
20/01/17 15:28:54 WQqGcJSL.net
> 自分で new したなら delete すれば良いと思うが

良いと思ってるならvectorもnew/deleteで良いでしょ

296:デフォルトの名無しさん
20/01/17 15:35:23 NjgiFnOV.net
vector newでいけない理由を先に説明してくれないと

297:デフォルトの名無しさん
20/01/17 17:45:27.47 xt9i4Zu8.net
> スコープを抜けるのを待たずに
> 破棄したいみたいな状況を想定してます。
破棄するタイミングはコンパイラには分からんのだろ
人が判断するしかないなら「場当たり的」にやるしか無いのでは

298:デフォルトの名無しさん
20/01/17 17:56:19.89 8NRoOtOw.net
vector::clear()、vector::shrink_to_fit() の連続実行で十分なのでは?

299:デフォルトの名無しさん
20/01/17 18:12:09.22 2FWha3Nl.net
shrink_to_fit
capacity()をsize()に縮小させるというリクエストを行う。
実装依存の最適化を許可するために、縮小するという動作は仕様上強制されない。
縮小されないかもしれない、らしい

300:デフォルトの名無しさん
20/01/18 11:20:53 Iw/95SDF.net
たいていは逆にスコープを破棄のタイミングに合わせるような書き方すればいいだろ。
分岐の激しい破棄条件書くくらいならそっちのが楽なことは多い。

301:デフォルトの名無しさん
20/01/18 11:59:37 timcC3h8.net
while {

302:デフォルトの名無しさん
20/01/18 12:04:39 timcC3h8.net
途中で投稿してしまい失礼。

do {
} while(0);

で括って、処理が続行できない場合はbreakして、doループを抜けたすぐ下でで資源解放する古典的な記述でいいのでは。

303:デフォルトの名無しさん
20/01/18 12:12:16 LluV6Hhd.net
糞野郎にみんな親切だな

304:デフォルトの名無しさん
20/01/18 14:36:14.37 cLOUBKze.net
gotoを避けるためにgotoよりクソなコードを書くのがいいわけねえだろ

305:デフォルトの名無しさん
20/01/18 14:54:44.30 timcC3h8.net
ま、資源解放のコーディングが楽になるなら正義でしょ。

306:デフォルトの名無しさん
20/01/18 16:33:12 cLOUBKze.net
>>298
確認するが、ここがC++スレということは忘れてないよな?

307:デフォルトの名無しさん
20/01/18 16:37:31 sDwxplmd.net
メモリがもったいない言うけど、ホントにカツカツなのだろうか
環境的に余裕であれば妙なコーディングする意味がない

308:デフォルトの名無しさん
20/01/18 20:06:16 6Wtj4R8r.net
どんくらいスキマと余裕があるのかを常時監視するソフトウェアはかんたんに作れる
なんせわたくしはC++を極めましたからな

309:デフォルトの名無しさん
20/01/18 20:37:07 0qsbj5e6.net
>>297
gotoより糞な訳無いだろ
こんな単純で頻出する制御構造が文法上ループにせざるを得ないのが悪いだけ
まあtry catchと同型だが、これだと遅くなるしね

310:デフォルトの名無しさん
20/01/18 20:39:57 cLOUBKze.net
>>302
doでない単純な複合文とgotoで済む話だ
アホwバカwww

311:デフォルトの名無しさん
20/01/18 20:44:02 0qsbj5e6.net
gotoだとRAII対応できないじゃん

312:デフォルトの名無しさん
20/01/18 20:44:36 7kb+tsdB.net
すまねーよ。他の例外で飛ばされたらどうすんだ馬鹿。

313:デフォルトの名無しさん
20/01/18 20:46:21 cLOUBKze.net
>>304
do(0) なんて持ち出すアホが RAII かよw

314:デフォルトの名無しさん
20/01/18 20:47:02 0qsbj5e6.net
まあ最近は
[&]{
...
}();

で書くことが多いが

315:デフォルトの名無しさん
20/01/18 20:48:42 0qsbj5e6.net
do{}while(0);の問題は知らない奴が混乱するって一点のみだろ

316:デフォルトの名無しさん
20/01/18 20:59:02 cLOUBKze.net
「知ってるやつ」の言い訳を、ここで開陳してもらおうか
最近、笑う健康法ができてないんで、よろしく頼むわ芸人さん

317:デフォルトの名無しさん
20/01/18 21:04:02 0qsbj5e6.net
その前にgotoより糞ってのが既に成立してないじゃん

どこが糞なのか具体的に

318:デフォルトの名無しさん
20/01/18 21:10:26 cLOUBKze.net
ははは、話を逸らすしかねえよな
「do{}while(0);の問題」てのが他の問題によって
成り立つのか成り立たねえのか影響されると
自ら自白してやがる(核爆

助けてやらねえよ、自分でなんとかしなアホwバカwww

319:デフォルトの名無しさん
20/01/18 21:15:23 0qsbj5e6.net
意味がわからないよ
煙に巻いて逃げる気かなw

320:デフォルトの名無しさん
20/01/18 21:19:10 cLOUBKze.net
>>312
逃がさねえぞ

「知ってるやつ」の言い訳を、ここで開陳してもらおうか
最近、笑う健康法ができてないんで、よろしく頼むわ芸人さん

321:デフォルトの名無しさん
20/01/18 21:19:14 65HS6FKB.net
やりたいことはスタックにあるvectorの早期解放なんだから
gotoもdo{}while(0)もラムダ式もいらない
単に{}で囲うだけでいい

322:デフォルトの名無しさん
20/01/18 21:20:27 cLOUBKze.net
だよなwwwwwwwwwwww

323:デフォルトの名無しさん
20/01/18 21:23:34 Upzp+V6z.net
↓do { } while(0)でこれできたっけ?
if (cond) { goto label1; }
 do {
  処理A
label1:
  処理B
 } while (0);

YES! gotoならできる!!
 if (cond) { goto label1; }
label2:
 処理A
label1:
 処理B
 goto label2;

324:デフォルトの名無しさん
20/01/18 21:28:09 Upzp+V6z.net
つか
do {
 処理A;
 if (cond) { break; }
 処理B;
 std::unique_ptr p(new Foo());
 処理C; // pを使用
} while (0);

みたいな腐り切った腐敗臭しかしないコードを書くぐらいなら
 std::unique_ptr p;
 {
  処理A;
  if (cond) { goto last; }
  処理B;
  p = std::unique_ptr(new Foo());
  処理C; // pを使用
 }
last:
 ;
と書くわ

Perl風に

325:デフォルトの名無しさん
20/01/18 21:30:23 v/DZPeDP.net
>>314
そんなことはお前ともう1名ほど除いて皆わかってる
そうじゃなくて特定の条件で早期に開放したい場合にどうするかだよ

>>315
味方が現れてウレションかよw

326:デフォルトの名無しさん
20/01/18 21:30:23 cLOUBKze.net
ID:0qsbj5e出てこいオラ

327:デフォルトの名無しさん
20/01/18 21:34:58 cLOUBKze.net
ID:0qsbj5e6 出てこい

328:デフォルトの名無しさん
20/01/18 21:42:46 65HS6FKB.net
>>318
auto v = std::make_unique<std::vector<Hoge>>(...);
...
if(特定条件){
v.reset();
}

これだけの話では?

329:デフォルトの名無しさん
20/01/18 21:45:43.25 cLOUBKze.net
そうそう
兆くだらねえ話だ(わざと誤字

330:デフォルトの名無しさん
20/01/18 21:47:11.24 cLOUBKze.net
goto過敏症のアホどもが少しでも目を醒ましてくれるといいな

331:デフォルトの名無しさん
20/01/18 21:49:54.58 v/DZPeDP.net
>>273
から読み直して
空moveが確実だけど質問者がそれを場当たり的と生意気言ったことから話が盛り上がるw

332:デフォルトの名無しさん
20/01/18 21:51:28.17 v/DZPeDP.net
>>323
この場合gotoは何の解にもなっていないことにそろそろ気づいた方がいいよ

333:デフォルトの名無しさん
20/01/18 21:53:26.94 v/DZPeDP.net
>>321
>>324 を読んでね

334:デフォルトの名無しさん
20/01/18 21:59:36.19 0qsbj5e6.net
RAII対応してないから無理矢理goto出来るようにした糞コード上げられてもああ糞ですねと言うしかないんだが。
内部が複雑になってきたらその度にブロック外に変数追加して、変数の内容の初期化は必要に応じてって書き方を続けるつもりなんかね

335:デフォルトの名無しさん
20/01/18 22:27:52 cLOUBKze.net
>>325
gotoが何かの解になったらいいの?wwwwwwww

336:デフォルトの名無しさん
20/01/18 22:28:06 4nVoSga0.net
>>304
そうなんだっけ?

337:デフォルトの名無しさん
20/01/19 00:26:12.30 M/ehGL7C.net
やっぱこういうコードは一度書いてみたいよな
try {
label:
 何かの処理;
} catch (Exception ex) {
 goto label;
}

338:デフォルトの名無しさん
20/01/19 00:32:09.37 M/ehGL7C.net
gotoを使うと糞、と言う香具師は多いが
goto以外の構文も大概なことがある
↓これとか
EnterCriticalSection(&csec);
{
 if (エラー条件成立) {
  LeaveCriticalSection(&csec);
  throw "*** ERR ***";
 }
 何かの処理; 
}
LeaveCriticalSection(&csec);
一体どうすれば…orz

339:デフォルトの名無しさん
20/01/19 00:36:14.30 M/ehGL7C.net
いやまあテストラクトされるときにLeaveCriticalSection()するような
AutoLockオブジェクトを使えば済むっていやー済むが
裏返せばgoto以外の構文も糞製造機であることにはかわりわない!

340:デフォルトの名無しさん
20/01/19 00:38:55.96 ocqIlbpk.net
それは構文が糞なんじゃなくてリソース管理が糞なだけ

341:デフォルトの名無しさん
20/01/19 01:24:22.15 PgEzQeWd.net
auto lockなんてむしろ使ってなかったらPRでリジェクトされる

342:デフォルトの名無しさん
20/01/19 06:28:34 6oeBvQPN.net
gotoの何が悪いのかを端的に表すたった一言が出てこない教条主義は物笑いの種

343:デフォルトの名無しさん
20/01/19 07:19:17.26 M/ehGL7C.net
誰にも迷惑がかからないgotoの例:
 for (a = 0; a < 2; a++) {
  for (b = 0; b < 2; b++) {
   for (c = 0; c < 2; c++) {
    ....
     for (zaaa = 0; zaaa < 2; zaaa++) {
      処理A
      if (何かの条件) { goto last; }
      処理B
     }
    ...
   }
  }
 }
last:
 ;

344:デフォルトの名無しさん
20/01/19 07:24:20.07 M/ehGL7C.net
>>334
たまたまLeaveCriticalSection()はエラーを返さないが
エラーを生じるブツだったらどうすんじゃ
まあエラー通知先があれば良いのでやりようはあるが
加速度的に手が込んだコードが必要になって全体が糞化していくんじゃ!

345:デフォルトの名無しさん
20/01/19 07:35:30.18 ilIPQsua.net
そもそもそのgotoを書きたくなるくらい深くネストしている時点でよくない説

346:デフォルトの名無しさん
20/01/19 08:03:07 Wel1D6/w.net
>>338
対象とするデータによっては単純に多重ループで処理するのがもっとも自然でシンプルなケースもあるだろう。
無条件に「ネストしたループ(・A・)イクナイ!!」と言うのも教条主義じゃね?

347:デフォルトの名無しさん
20/01/19 08:05:11 6oeBvQPN.net
教条主義というよりただのバカ

348:デフォルトの名無しさん
20/01/19 08:08:17 D5W6f6uH.net
gotoの使い方くらい知っておいた方が良いかと

349:デフォルトの名無しさん
20/01/19 08:51:50 2MN/c8bt.net
gotoにせよthrowにせよ、goto/throwの発生元が分からないのが受身になる側として辛い。
この点は、スタック情報へのアクセスが言語仕様として認められているJava/C#/Perl/Pythonに優位がある。

350:デフォルトの名無しさん
20/01/19 08:54:43 M/ehGL7C.net
throwの発生元は例外オブジェクトに情報を持たせれば良いじゃん?
gotoのジャンプ元は変数に情報を持たせれば良いじゃん??

351:デフォルトの名無しさん
20/01/19 09:02:38 2MN/c8bt.net
>>343
goto/throw発生元がバイナリで配布されている場合は、コードを書き換えられない。
クラス設計でやたらとメンバ変数をprivateにされると、クラスを利用する側はメンバ変数を古典的プリントデバッグできなくて難儀する。

352:デフォルトの名無しさん
20/01/19 09:04:12 2MN/c8bt.net
C++のprivate属性は厳しすぎ。readonlyアクセスできる属性があってもいいと思うんだ。

353:デフォルトの名無しさん
20/01/19 09:11:24 M/ehGL7C.net
>>344
バイナリ配布のブツの例外発生元を何でコードで知りたいのかがわからん…
アドレスがわかったところでソースが無いわけやし……
何事かを言わんとするための想定に無理が有るのでは…

354:デフォルトの名無しさん
20/01/19 09:12:59 2MN/c8bt.net
タイミング依存の不具合を追跡する必要に迫られると、当然ながら対話デバッグはできない。
C++のprivate変数が不具合に関与しているとわかってもランタイムで値を見れないのは辛い。
他人様の作ったC++クラスヘッダーを一時的に書き換えてコンパイルする羽目に。

355:デフォルトの名無しさん
20/01/19 09:17:35 2MN/c8bt.net
>>346
例外が吐かれた後にできることなんてほとんどなくてもスタックをダンプできるだけでかなり助かる。
特に自分が作ったわけではないレイヤーでthrowされた時には、スタック情報が役立つ。

356:デフォルトの名無しさん
20/01/19 09:20:25 2MN/c8bt.net
公式がデバッグシンボルを配布するご時世なのに、C++のスタック仕様はそれについていけていない。
デバッガを介することなくスタックをダンプできる手段が制約されすぎ。

357:デフォルトの名無しさん
20/01/19 10:49:09 CSTVsvTH.net
gotoはRAIIと相性が悪いってのが端的だろ

これはgotoが悪いと言うよりc++の言語仕様上のgotoの扱いが悪いって話

constexprで使えないとか規格が新しくなる度に不都合が増えていくよ

358:デフォルトの名無しさん
20/01/19 10:57:40 RfLx+x9F.net
gotoの使い方くらい知っておいた方が良いかと

359:デフォルトの名無しさん
20/01/19 11:07:08.87 fzpRtoDi.net
>>350
相性悪い?

360:デフォルトの名無しさん
20/01/19 11:07:41.05 CSTVsvTH.net
文字列パーサー内とかでの状態遷移に使うは推奨する
その他でのgotoは代替手段があるし、そっちの方が言語サポート良いからgoto使うのはバカのやること

361:デフォルトの名無しさん
20/01/19 11:12:09.60 CSTVsvTH.net
まあ不遇な原因はgotoが自由すぎて前にも後ろにも飛べるせいだろうね
変数のデストラクタを呼ぶべきかどうかフラグ管理でもしないとコンパイラが判断できなくなる。
goto使うならその自由さが必要な場面でこそ使うべきなんだよ

362:デフォルトの名無しさん
20/01/19 11:18:58.21 2MN/c8bt.net
>>354
プログラミング言語の世界では、前や後ろという表現は直観的にわかりにくい。
前や後ろは相対的なものであり、バックしているイテレータにとっては前はバックなのだ。
上と下なら直観的にわかるだろう。

363:デフォルトの名無しさん
20/01/19 11:21:16.66 CSTVsvTH.net
用語としては前後で統一されているような

364:デフォルトの名無しさん
20/01/19 11:22:22.50 RfLx+x9F.net
gotoの使い方を知らない初心者がこのスレにいるってのが不思議

365:デフォルトの名無しさん
20/01/19 11:27:05.68 2MN/c8bt.net
[コラム] 正規表現の先読み/後読みは、どう考えても名前が悪いので、呼称禁止令を出してルックと気軽に呼んでみませんか。 - Qiita
URLリンク(qiita.com)

366:デフォルトの名無しさん
20/01/19 11:29:47.11 6oeBvQPN.net
>>357
誤魔化さない説明が


367:ちゃんとできるやつがずいぶん少ないという、残念な状況が今の日本だ



368:デフォルトの名無しさん
20/01/19 11:38:04.97 RfLx+x9F.net
わざわざ複雑にしてまでgotoを避ける
って宗教だよな
使いどころで使う
それだけ

369:デフォルトの名無しさん
20/01/19 11:42:59.02 ZzFAG3/g.net
いうて必要になったことないや

370:デフォルトの名無しさん
20/01/19 12:30:11.44 L2mlhsAt.net
別にgoto使っても使わなくても馬鹿が書けば複雑なコードになるだろ。
そういう問題じゃない。
そもそもc++の標準ライブラリが例外投げる時点でgotoとの相性は最悪だよ。
一番末端の関数で、副作用もないようなもの以外使えんわ。

371:デフォルトの名無しさん
20/01/19 12:36:07.26 PgEzQeWd.net
gotoおじさんはたぶん例外安全性という概念をわかってない

372:デフォルトの名無しさん
20/01/19 14:43:36 6jfPBIzz.net
>>363
例外安全の定義が難しいのですが、gotoを使っても例外安全を保障することはできると思うのですが、いかがでしょうか。

373:デフォルトの名無しさん
20/01/19 15:06:56.67 PgEzQeWd.net
>>364
c++の標準ライブラリに関して例外安全とは何かは定義されてる
できるできないで言えばgotoかつ例外安全はそりゃできるでしょうよ
まずgoto関係なしに例外安全が相当大変であることを理解してから出直してくれ
そうじゃなきゃRAII、autoなんとかmakeなんとかの有難みも理解できてないのよ

374:デフォルトの名無しさん
20/01/19 15:08:40.81 RfLx+x9F.net
話題のすり替え

375:デフォルトの名無しさん
20/01/19 15:16:49.04 PgEzQeWd.net
>>366
話題を勘違いしてるのはお前だよ
お前は単にbreakでスコープの脱出することに対してgotoの方が簡潔と言ってるんだろう
そういう場合があるのは同意するけど今回の話題はそれじゃない
スコープの脱出になってるのはRAIIでリソースを安全に開放する前提だからだ
だからお前が言うべきはスコープをなくしてgotoを使うというなら
合わせてリソースをどのように安全に開放するかを説明しないといけない
場当たり的でない方法でね
そこをまったく説明できない以上お前はgotoおじさんと呼ばれ続ける

376:デフォルトの名無しさん
20/01/19 15:20:52.99 fzpRtoDi.net
>スコープをなくしてgotoを使う
なんか言ってることが変だと思ったらこんな条件付けてたのか。ブロックスコープ使えばいいじゃん。

377:デフォルトの名無しさん
20/01/19 15:26:55.90 RfLx+x9F.net
スコープを無くしてgotoで解放?
なんじゃそりゃ?
スコープを抜けないと解放されないぞ

378:デフォルトの名無しさん
20/01/19 15:27:43.53 PgEzQeWd.net
断わっておくけど
>>295 に対してgotoおじさんが >>297 と言ったのが発端
後出しはしていない
ちなみに295を書いたのはおれではない

379:295
20/01/19 15:31:10.41 2MN/c8bt.net
どんな劣悪な環境でも動く do{ } while(0); こそ絶対正義。

380:デフォルトの名無しさん
20/01/19 15:33:51.15 RfLx+x9F.net
>>295
do ループを抜けたすぐ下で資源を解放
って書いてあるように見えるけど

381:デフォルトの名無しさん
20/01/19 15:34:25.99 RfLx+x9F.net
>>370の勘違いってことでいいのかな?

382:デフォルトの名無しさん
20/01/19 15:42:01 PgEzQeWd.net
>>372
ああ確かに >>295 に対してってのは語弊があったかな
ID:cLOUBKze の発言を追ってみて
>>303
とかね
gotoおじさんかと思ったら別人なのね

383:デフォルトの名無しさん
20/01/19 17:03:31 6jfPBIzz.net
>>365
本来の「例外安全」の定義はもっと広い意味なのですが、あなたは、throwやcatchなどの「例外」が起きたときでもnewされたオブジェクトの削除などを行うという定義を採用されているようです。

break文を用いずにgoto文でブロックを脱出した場合でもオブジェクトは自動解放されるのをご存知ですか?

384:デフォルトの名無しさん
20/01/19 17:07:28 PgEzQeWd.net
>>375
自分は理解しているって言いたいわけね
じゃあさ >>273 のお題に対してgotoを使ったエレガントな方法を書いて
おれは思いつかないね
よろしく

385:デフォルトの名無しさん
20/01/19 17:11:06.93 4SQs66uE.net
そもそも一番のカスはこいつ >>276 >>286

386:デフォルトの名無しさん
20/01/19 17:42:21 fzpRtoDi.net
>>370

>>295に対して>>303

{



387: goto label; } label: でいいんじゃないかってことかと。 逆にどう解釈してRAIIとか例外安全とか持ち出したのか気になる。



388:デフォルトの名無しさん
20/01/19 18:24:30 6oeBvQPN.net
論点を増やそうとするのは苦しいやつの習性だね

389:デフォルトの名無しさん
20/01/19 18:46:40 PgEzQeWd.net
>>378
それだとdo-whileと変わんないだろ
gotoおじさんの論点てそれか?
人の事クソバカ言ってるわりに何の優位性があるのかわからんな

390:デフォルトの名無しさん
20/01/19 18:52:29 6oeBvQPN.net
そうだよ、変わんないよ
複合文だけでできることになんでわざわざdoなんて面倒くせえもん使わなきゃいけねえんだよ

391:デフォルトの名無しさん
20/01/19 18:52:32 PM2cmccN.net
Rust使えばすべて解決。

392:デフォルトの名無しさん
20/01/19 18:53:23 6oeBvQPN.net
まさかとは思うがブレースを開くのにdoだかforだか何らかのキーワードが必要とでも思ってたか?

393:デフォルトの名無しさん
20/01/19 18:56:46 PM2cmccN.net
俺は何の実績もないおまえの言うことより、あわしろいくや氏を信じるけどな。

394:デフォルトの名無しさん
20/01/19 18:57:26 yjllCGTd.net
>>378
噂のgotoおじさまもさすがにこのコードがいいなんて言わないでしょ

395:デフォルトの名無しさん
20/01/19 18:59:17 6oeBvQPN.net
>>384
ブレースを開くのにキーワードが必要か否かに実績は関係ない
他人のネームバリューにすがるしかなくなったか?

396:デフォルトの名無しさん
20/01/19 19:00:40 PM2cmccN.net
>>386
ネームバリューは関係ないんだよ。
あわしろいくや氏は信用できる。
おまえは信用できない。

397:デフォルトの名無しさん
20/01/19 19:01:36 4SQs66uE.net
>>387
俺はお前のあわしろいくや氏は信用できるという言葉が信用できない

398:デフォルトの名無しさん
20/01/19 19:02:52 PM2cmccN.net
>>388
俺のことは信用しなくていい。
あわしろいくや氏を信じろ。

399:デフォルトの名無しさん
20/01/19 19:15:30 ocqIlbpk.net
売名乙

400:デフォルトの名無しさん
20/01/19 19:29:04.71 yQO+Nq01.net
まさか do while 構文が論点だと思ってたんかな?
まあ本当はgotoを推す正当性が全くなくてごまかしてるんだろうけれど。
てかgotoと例外安全性はかなり綿密に絡んだ話だろ。誤魔化しすぎだわ。

401:デフォルトの名無しさん
20/01/19 19:45:18 6oeBvQPN.net
>>387
ヒゲ生やした教祖様のために死刑になった信者と同じだなw

402:デフォルトの名無しさん
20/01/19 19:46:34 fzpRtoDi.net
>>380
そのくらいしか思いつかなかったが、>>297はその程度の主張だったんじゃないの?
じゃあどういう主張しているとID:PgEzQeWdは解釈していたのかな。そっちが気になる。

403:デフォルトの名無しさん
20/01/19 19:46:39 6oeBvQPN.net
> かなり綿密に絡んだ話だろ

誤魔化しすぎというブーメランが脳天に突き刺さってるぞw

404:デフォルトの名無しさん
20/01/19 19:54:00 yQO+Nq01.net
なるほど。。こりゃ話しても無駄だな。

405:デフォルトの名無しさん
20/01/19 20:25:44 M/ehGL7C.net
gotoと例外安全性がどう絡むのかわからんボスケテ;

406:デフォルトの名無しさん
20/01/19 21:06:11 fzpRtoDi.net
話しても無駄以前に、結局gotoと例外安全がどう関係するのか一言も出てこなかったな。

407:デフォルトの名無しさん
20/01/19 21:10:50 CSTVsvTH.net
RAIIとgotoは混ぜられないだろ

408:デフォルトの名無しさん
20/01/19 21:13:01 AinWVopR.net
そらgotoでリソース開放ルーチンに飛ぶようなCスタイルのプログラム書くと
例外飛んできたときに死ぬって話でしょ
(いくらC++にfinallyが無いからってgotoでリソース開放ルーチンに飛ぶのはダメ)
ただし元々の質問には関係ない話なんだがな

ところでC++にfinallyが無いのはちょっと良くないよね
今となってはラムダで自作できるようになったからいいけど

409:デフォルトの名無しさん
20/01/19 21:16:51 fzpRtoDi.net
>>398
その「混ぜる」って具体的にはどういうことを言ってるんだろう。

410:デフォルトの名無しさん
20/01/19 21:24:53 AinWVopR.net
基本的に break や return も生き先の決まった goto なので
余ほど変な使い方をしない限りRAIIと goto を混ぜれないって事はないよなぁ
むしろ RAII を使わないで goto でC系のリソース開放をしていた場合にハマるって話では

まぁでもこれは
do{
  if( error ) break;
}while(0);
//開放処理
return;
でも同じことだし、元の質問には関係ないんだが

411:デフォルトの名無しさん
20/01/19 21:34:33 RfLx+x9F.net
まだやってんのか

>>377
それ

412:デフォルトの名無しさん
20/01/19 21:40:42 RfLx+x9F.net
do {
if(...) break;
} while (0);

よりは

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

の方が良い

という�


413:モ見に賛成 >>303ではないけど



414:デフォルトの名無しさん
20/01/19 21:44:50 RfLx+x9F.net
まあどっちでも大差ないけど

415:デフォルトの名無しさん
20/01/19 21:47:25.68 RfLx+x9F.net
{
{
if (...) goto label;
}
}
label:
これはbreakじゃ無理

416:デフォルトの名無しさん
20/01/19 21:57:15 RfLx+x9F.net
{
switch (...)
{
case ...: goto label;
}
}
label:

これも無理

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

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

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

420:デフォルトの名無しさん
20/01/19 22:19:27 ByUy1Erg.net
ループするつもりもないのにループの構文使うのは悪手だと思う

421:デフォルトの名無しさん
20/01/19 22:27:26 RfLx+x9F.net
>>409
日本語で

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

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

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

425:デフォルトの名無しさん
20/01/19 22:50:45 RfLx+x9F.net
>>413
誰か解説よろしく!

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

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

428:デフォルトの名無しさん
20/01/19 23:17:22.36 RfLx+x9F.net
その方法
ってどの方法?

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

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

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

432:デフォルトの名無しさん
20/01/20 01:01:38.84 KvAer05C.net
「解放ルーチンにとばすくらいしかgotoの有用な使い方なんてねーだろ。」
って思えるぐらい、Cではこの技法が多用された
なぜなら真実は逆で
「gotoでとばすぐらいしか開放ルーチンをまとめる方法なんてねーだろ」
だったから多用された
A→Bでなくて、実はB→Aだったって話
なんだけど、あまりにもB→Aが多用されたから
数の暴力で逆のA→Bも成り立つと感覚的に思ってしまう
だが本当にそうだろうか、gotoに開放ルーチンに飛ばす以外の利用法は無いのだろうか
模索してみよう、というのがスレの流れ
スレがその流れになるのは自明で
何故ならC++においては「gotoで開放ルーチン」は例外安全の意味で完全な悪手になったから
初めから勘定に入らないし、考える意味もないし、議論の余地もない
他の利用方法を前提に話すのは当たり前で既定路線


433:



434:デフォルトの名無しさん
20/01/20 01:58:07 wNCym70P.net
スレの流れはvectorの動的な解放手段についてです

435:デフォルトの名無しさん
20/01/20 05:25:12.27 KSbNzMqr.net
Javaはgotoを無くした先進設計だからな。

436:デフォルトの名無しさん
20/01/20 07:11:09 SZK6NMcF.net
>>410
ほんこれ
メインフレーム時代から「なぜ0を足すんだろう」なんてあったけど
そういう謎コード書いて俺スゲーってやる厨二病は痛いよな

437:デフォルトの名無しさん
20/01/20 07:59:32 hWOi4sNW.net
つまりgotoと例外安全がどうとか言っていた人はこんなC時代の技法を念頭に置いていたわけか。

if (fail) goto FINAL;

FINAL:
後始末

gotoとRAIIの相性が悪い、混ぜられないという話はまた別なのだろうか。

438:デフォルトの名無しさん
20/01/20 08:30:41 ItoFGwWk.net
>>426が例外安全かどうかとgotoは関係ないんじゃない?

>>273>>426のコードも関係ない

ただ例外安全て言いたかっただけと思う

439:デフォルトの名無しさん
20/01/20 09:55:56 SZK6NMcF.net
>>273
vector<usigned char> huge;
//do something
huge.clear();

gotoは全く関係ない

440:デフォルトの名無しさん
20/01/20 10:09:57 rZl1icD3.net
>>428
vector自体が確保したメモリが解放される保証がないのでNG
とっくに答えは書かれているのだから今からどやるのやめろ

441:デフォルトの名無しさん
20/01/20 10:14:06 SZK6NMcF.net
保証しないってどこに書いてあったっけ?

442:デフォルトの名無しさん
20/01/20 10:15:25 JGG/x92o.net
>>275
これで解決済みだよなぁ
std::vector<...>{}.swap(v)

443:デフォルトの名無しさん
20/01/20 10:15:47 N9WxJN6X.net
>>428
>>291,292辺りを見てこい

444:デフォルトの名無しさん
20/01/20 10:17:29 N9WxJN6X.net
もちろんclear()の仕様も確認しとけ

445:デフォルトの名無しさん
20/01/20 10:18:17 ThUag/92.net
>>292 で実装依存の最適化について言及がある。
あるサイズを超えるまではヒープではなくスタックを使うことで高速実行を期待する実装はあり得ると思う。
vectorの具体例は知らないが、EASTL::basic_stringはそうやってる。

446:デフォルトの名無しさん
20/01/20 10:40:56 SZK6NMcF.net
>>433
だから、どこに書いてあったのかと聞いているんだが

447:デフォルトの名無しさん
20/01/20 11:04:21 wNCym70P.net
>>431の言う空の一時オブジェクトとswapという常套手段で解決するのに質問者のクズは場当たり的などと難癖をつけ、
さらにじゃあnew/deleteしろよというまっとうな意見にバカを言うななどとほざいた結果がこのくだらねえ流れだよ

448:デフォルトの名無しさん
20/01/20 11:09:12 rZl1icD3.net
>>435
c++の規格書は有料だけど持ってんの?
ぐぐればstack overflowとかいくらでもひっかかるけど調べた?
これは割りと知られた仕様だと思うけどね
実際g++とかでやってみればわかるけどclearしてもcapacity変わんないから

449:デフォルトの名無しさん
20/01/20 11:14:14 wNCym70P.net
少なくともVC2019はclearでデストラクタが呼ばれてる

450:デフォルトの名無しさん
20/01/20 11:20:47 N9WxJN6X.net
>>438
それはvectorに格納した要素ごとのデストラクタの話であって、それらを格納するためにvector自身が確保した領域が解放されるわけではないだろ

451:デフォルトの名無しさん
20/01/20 11:29:18.51 SZK6NMcF.net
>>437
情報持ってるのに出してくれないのはわかったよ、無理にとは言わん
g++の挙動については情報ありがとう

452:デフォルトの名無しさん
20/01/20 11:53:45 JGG/x92o.net
むしろclearで解放せず、capacityが減らないことを保証してほしいよね
capacity減らす手段は用意されているのだから

453:デフォルトの名無しさん
20/01/20 12:32:03.74 xWGHAxxP.net
結局何を保証して欲しがってるのかさっぱりわからんが
言語仕様はvectorの何やらはもちろん、deleteだってfreeだって、OSにメモリ領域を確実にお返しになる事なんか保証してない事は覚えておこうな

454:デフォルトの名無しさん
20/01/20 12:33:54.17 RAANiraF.net
>>441
> capacity減らす手段は用意されているのだから
いや>>432はそれが確実じゃないって話だろ
まあそんな実装は


455:見たことないけど



456:デフォルトの名無しさん
20/01/20 12:52:13 JGG/x92o.net
>>443
いや空とswapすれば減るじゃん

457:デフォルトの名無しさん
20/01/20 13:22:01 hv8WW6TF.net
>>444
空とswapは場当たり的に見えて却下と質問者様がおっしゃったからこの論争になったんだぞ

458:デフォルトの名無しさん
20/01/20 13:22:46 SZK6NMcF.net
>>442
OSに返すかどうかの問題じゃねえだろ
allocatorが管理するサブプールに還元でもいいわけで

459:デフォルトの名無しさん
20/01/20 14:27:22 0GX6odYx.net
概出鴨試練蛾
do{...}while(0); と
{...} の違いって決定的なのは何かって
break; を入れられるかどうかだと思うんだけど
ループじゃないものに do{...}while(0); を使うのは可笑しいって派の人らは
後者に break; 入れられるようにしておけば良かっただけなんだよな

460:デフォルトの名無しさん
20/01/20 14:50:16 hv8WW6TF.net
ループする気もないのにループ構文を使うのは誤解の元
同様のことは他にもいくつも手段はあるのにループを使う必要がない
モダンな書き方だと[&](){...}();

461:デフォルトの名無しさん
20/01/20 15:02:12 KVDidwnp.net
違うだろ
while使わないよ派はgotoで充分だろ
ブロックを抜けるbreakが欲しいのは現状while使うよ派だろ

462:デフォルトの名無しさん
20/01/20 15:15:43 0GX6odYx.net
once{};
みたいな構文で良いんじゃね
マクロとか書けば


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch