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

C++相談室 part142 ->画像>13枚


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

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

1デフォルトの名無しさん2019/04/01(月) 22:17:05.84ID:wmfpIKt/
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part137 (正しくはpart138)
http://2chb.net/r/tech/1535353320/
C++相談室 part139
http://2chb.net/r/tech/1538755188/
C++相談室 part140
http://2chb.net/r/tech/1547326582/
C++相談室 part141
http://2chb.net/r/tech/1550772463/

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

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)

----- テンプレ ここまで -----
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

2デフォルトの名無しさん2019/04/01(月) 22:24:49.84ID:2cPHsZN4
すっぱい葡萄
http://ja.wikipedia.org/wiki/%E3%81%99%E3%81%A3%E3%81%B1%E3%81%84%E8%91%A1%E8%90%84
 自分のものにしたくてたまらないにもかかわらず、努力しても到底かなわない対象である場合、
 人はその対象を「価値の無いもの」「自分にふさわしくないもの」と見なそうとし、
 それをあきらめの理由として納得し、心の平安を得ようとするものである。
 フロイトの心理学では、これを防衛機制および合理化の例とする。また、社会心理学においては、認知的不協和の例とされる。
 英語には、この寓話を元に生まれた熟語として "sour grapes" があるが、これは「負け惜しみ」を意味する。

3デフォルトの名無しさん2019/04/02(火) 01:05:02.56ID:/U03ydJ3
前スレの
やりたいことはこうかな
メンバ関数をバインドするときは&クラス名::関数名と変数を放り込むこと
https://wandbox.org/permlink/gDWEXupOcEbbhBzs

4デフォルトの名無しさん2019/04/02(火) 01:47:19.91ID:rKGqH4gv
c言語でclassって使えるの?

5さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/04/02(火) 01:50:46.47ID:wSWhi9Oz
>>4
変数名として使える。

6デフォルトの名無しさん2019/04/02(火) 07:55:15.08ID:iDbW+eLG
柴山昌彦
https://twitter.com/shiba_masa/status/1112661447366967296
 なるほど、新しい年数に「れいわ(018)」を足すと西暦か…

[GCC] error: invalid digit "8" in octal constant
[Visual C] Compiler Error C2041: 8 is not a base 8 digit
[Python] SyntaxError: invalid token
https://twitter.com/5chan_nel (5ch newer account)

7デフォルトの名無しさん2019/04/02(火) 18:51:10.44ID:m0eX+8Q8
>>4
オブジェクト指向の何たるかをきちんと理解していれば、概念として使えなくはない。
もっとも、C 言語に限った話ではないけど。

8デフォルトの名無しさん2019/04/02(火) 19:17:21.52ID:LpV8NoZ4
>>4
原則、C言語ではclassは使えない。
そもそも、CをOOPの概念に対応させようとして、
classの概念(classというキーワードも)を追加したところから
始まったのがC++。

9デフォルトの名無しさん2019/04/02(火) 23:46:57.28ID:rKGqH4gv
vcでCString使えるよ

10デフォルトの名無しさん2019/04/03(水) 00:40:39.45ID:94cMasUZ
>>4
Win32API?
C++以前から(純粋OOPLな)smalltalk的な価値観をC言語に押し付けた結果。

11デフォルトの名無しさん2019/04/03(水) 12:59:01.63ID:cnGXlgmF
はあ?

12デフォルトの名無しさん2019/04/03(水) 18:43:28.55ID:9GPCcesD
テンプレートをテンプレートクラスで特殊化したい場合ってどうするの?

13デフォルトの名無しさん2019/04/03(水) 18:44:12.24ID:uuRoUePR
>>12
普通にテンプレートにすればいい

14デフォルトの名無しさん2019/04/03(水) 21:15:34.88ID:2lV8d+D6
次スレから>>2に登場人物を列挙してはどうでしょうか?

15デフォルトの名無しさん2019/04/04(木) 01:13:57.58ID:tIFeeQbc
VS2019来てるじゃん
まともなメモリ使用量になってる奇跡だ

16デフォルトの名無しさん2019/04/04(木) 01:26:19.69ID:NSLfK+j2
C++erはVS毛嫌いする人も多いけどVS2017あたりからC++対応もマジでかなり良くなってる

17デフォルトの名無しさん2019/04/04(木) 01:29:18.48ID:MCx08DTu
一番使えるIDEなのに毛嫌いする人はいないと思います。

18デフォルトの名無しさん2019/04/04(木) 01:33:25.98ID:kff2Ii9e
標準ライブラリの実装がいい加減だから使いたくない

19デフォルトの名無しさん2019/04/04(木) 01:33:38.34ID:MCx08DTu
4/2を選んだのはエイプリルフールを避けたからかな。

20デフォルトの名無しさん2019/04/04(木) 01:40:18.27ID:l5IgkZnr
>>16
そう言う輩はプログラマーではなく言語オタか、最新規格対応の入門書売って糧を得てる様な奴だけ。

21デフォルトの名無しさん2019/04/04(木) 01:46:00.78ID:tIFeeQbc
最近はCMakeに優しいけど標準的なビルドシステムに優しくない
clのオプションが独特すぎる
Linuxで動かない
Windows上でのライブラリの取り回しが悪すぎる

wslやらvcpkgでだいぶましになったとはいえまだ若干抵抗がある

22デフォルトの名無しさん2019/04/04(木) 01:48:02.16ID:c6BVWPCA
VS2017以前よりもコンパイルが速くなっている気がする。
色々細かい不満は出てくるかもしれないが、完全に乗り換える価値は十分ある。
私はVS2017をアンインストールして退路を断った。

23222019/04/04(木) 01:55:45.14ID:c6BVWPCA
わかりにくかったので訂正。
VS2019はVS2017よりもコンパイルが速くなっている気がする。
デフォルトでスタックメモリ消費の静的解析をしてくれるので、
10KB以上のバッファをスタックからとるクセのある人は、
C++のstd::vectorなどへの置き換えを考える良い手助けになるなのでは。

24デフォルトの名無しさん2019/04/04(木) 18:08:19.41ID:USs/shwk
Qt VS toolsの対応待ち

25デフォルトの名無しさん2019/04/04(木) 18:37:00.98ID:tIFeeQbc
QtはCMakeでよくない?

26デフォルトの名無しさん2019/04/04(木) 20:38:54.64ID:O7o9gYjG
つか、プラットホームに依存しないような
プログラミングをかける奴なんてほとんどいないだろ

素人が書いたようなおもちゃをなんで他に移植しなきゃいけないんだよ

27デフォルトの名無しさん2019/04/05(金) 00:33:23.07ID:Zwa/Lf0S
hppファイルに実装を書いてることがたまにあって、すごく違和感があるんですけどどういうメリットがあるんですかね?

28デフォルトの名無しさん2019/04/05(金) 00:43:12.95ID:fDyBpfV8
配布が容易
宣言と定義が分かれないから読みやすい(人による
宣言と定義が分かれないからリンケージとかの罠にはまりづらい(場合によってはむしろODRの罠にはまる
翻訳単位が大量にある状況ではヘッダに実装したうえで少数のcppからインクルードした方がコンパイル速い
テンプレートの場合はほぼそうせざるを得ない

などなど・・・

29デフォルトの名無しさん2019/04/05(金) 00:49:55.23ID:1W3Y/f1q
そもそもhppファイルは実装書くためのファイルじゃないの?
templateとかで、分割コンパイルできない場合の

30デフォルトの名無しさん2019/04/05(金) 00:54:41.98ID:yOtZbpQl
もしかしてhppをhとcppの間の子みたいに思ってる?
Cのヘッダと区別するためにhppにしてる人がいるだけでただのヘッダ拡張子だぞ
VCだとヘッダはhになるけど

31デフォルトの名無しさん2019/04/05(金) 01:19:03.58ID:1W3Y/f1q
いや、そう言う流儀もあるよ

32デフォルトの名無しさん2019/04/05(金) 02:32:36.17ID:5WucuzOp
流儀なんか10年もしたらガラっとかわるから拡張子なんか好きにやれ
c++ではじめの頃の昔はたまにソースを .c++ で書いてるやつもいた

33デフォルトの名無しさん2019/04/05(金) 02:42:38.39ID:qwUluuCg
ファイルパスにプラス記号使うのは、文字コード自動判定でUTF-7と誤認されやすくなるからさけたほうがいいね。

34デフォルトの名無しさん2019/04/05(金) 06:43:01.93ID:Z6l9czOn
前スレのenumから文字列についてこんなのあったよ
https://qiita.com/ta_dragon/items/1828ceb16bc8733526e1

35デフォルトの名無しさん2019/04/05(金) 07:27:13.05ID:Lymez0qU
>>28
無理やりテンプレート使ってビルドを腐らせる典型的アンチパターンじゃねーか。

36デフォルトの名無しさん2019/04/05(金) 08:06:44.62ID:a4VQ1u2O
>>28
配布出来るようなコードかけるの?
誰もお前さんのなんて欲しがらないだろ

37デフォルトの名無しさん2019/04/05(金) 09:33:27.78ID:XIaLs/Gd
.C ならC++ なんてのも黎明期にはあったのう

38デフォルトの名無しさん2019/04/05(金) 14:59:43.19ID:8pIebtc7
>>34
ほう、すごいね、そんな方法があったんだ。
これなら、enumの定義から自動的にunorderd_mapに登録して逆変換テーブルを作るとかもできるかもね。

39デフォルトの名無しさん2019/04/05(金) 16:37:26.15ID:Axh2Vo9Q
なんで何でもライブラリでできるんだよ

40デフォルトの名無しさん2019/04/05(金) 20:58:14.82ID:Qo5/2ixY
.hは宣言だけ、.hppは実装ありって使い分けてたこともあったけどやめた
includeする方はそんなの知ったこっちゃないし、いちいちhかhppか判断させられるのが無駄だとわかった

41 ◆QZaw55cn4c 2019/04/05(金) 21:25:06.14ID:sL+JrEGq
>>40
>hppは実装あり
それは悪手なのでは?

42デフォルトの名無しさん2019/04/05(金) 21:28:37.12ID:Qo5/2ixY
別に全部入りって意味じゃないよ
テンプレートとかinlineとか、処理の実装も書いてますよーっていうこと

43デフォルトの名無しさん2019/04/05(金) 21:42:34.57ID:Axh2Vo9Q
暗黙の了解でもそんなのないだろ
hppなら少なくともC言語ではないというくらいしかない

44デフォルトの名無しさん2019/04/05(金) 22:05:43.09ID:YxBlyJP7
そもそもユーザーがincludeする部分は拡張子書いてないライブラリもある

45デフォルトの名無しさん2019/04/05(金) 22:12:58.31ID:Qo5/2ixY
だから意味ないからやめたって言ってるじゃん
意味ないし有害だよやめた方がいいよ

46デフォルトの名無しさん2019/04/05(金) 23:31:31.45ID:yvFnJ+4h
そもそも素人が書いたテンプレートを用いたものなんて使い物にならん

47デフォルトの名無しさん2019/04/05(金) 23:51:13.69ID:zbJZTl/M
じゃあ玄人が書いたモンは形式だけで分かるのか?

48デフォルトの名無しさん2019/04/06(土) 00:02:05.00ID:zp0ZZwhH
実装隠しても公開しても同じだぞ

49デフォルトの名無しさん2019/04/06(土) 00:09:06.17ID:tDMvjH1l
むしろプロの方がゴミみたいなコード書いてる人多いよね

50デフォルトの名無しさん2019/04/06(土) 00:22:46.49ID:K6S/+wtb
>>47
boostみたいなのをかけるのか?

51デフォルトの名無しさん2019/04/06(土) 00:35:20.36ID:zp0ZZwhH
小規模なライブラリに6ヶ月かけていいなら書けるよ

52デフォルトの名無しさん2019/04/06(土) 00:55:05.26ID:/WRt9p3o
boostで開発効率上がるとか信じてるバカが世の中にはまだいるのな。

53デフォルトの名無しさん2019/04/06(土) 00:58:36.65ID:zp0ZZwhH
boostのどれだよ

54デフォルトの名無しさん2019/04/06(土) 01:19:45.64ID:XiUalYkv
実際上がるだろ
ライブラリ使えばコーディング量減るのは当然

55デフォルトの名無しさん2019/04/06(土) 01:22:34.24ID:d3+s3AWp
コーディング量を減らしたいならC++使うのやめるべき

56デフォルトの名無しさん2019/04/06(土) 01:27:27.25ID:XiUalYkv
速くてコンパクトなソフト作るのに最適だろ。
慣れてりゃ開発速度も同じようなのLLで作るのと大差ないし

57デフォルトの名無しさん2019/04/06(土) 01:41:14.78ID:zp0ZZwhH
言語によって作業量が増えるとか無いから
目的に合ったフレームワークがあるかどうかが重要

58デフォルトの名無しさん2019/04/06(土) 01:53:28.65ID:d3+s3AWp
>>57
残念ながらあるんだよね

59デフォルトの名無しさん2019/04/06(土) 01:54:41.01ID:zp0ZZwhH
そっか

60デフォルトの名無しさん2019/04/06(土) 02:02:09.95ID:K6S/+wtb
どうせお前らなんて、数十行程度の小さなもばっか書いて、あーでもないこーでもない言ってるだけだろ

会社にもいるわ、細かいことばっか、正論言って
実際の仕事では何にもできない、言語規格ヲタ

61デフォルトの名無しさん2019/04/06(土) 02:06:54.68ID:zp0ZZwhH
そっかそっか

62デフォルトの名無しさん2019/04/06(土) 02:59:01.41ID:totkvsPq
仕事してるより細かいとこ突き詰めてる方が楽しいんだ、ごめんね

63デフォルトの名無しさん2019/04/06(土) 03:15:48.33ID:d3+s3AWp
>>60
ドワンゴで働いてるのか?

64デフォルトの名無しさん2019/04/06(土) 06:57:44.30ID:grJD5FiV
ドワンゴ今やばいしあの人も首が涼しくなってそう

65デフォルトの名無しさん2019/04/06(土) 07:57:21.33ID:/WRt9p3o
ドワンゴでコード書いてて江添みたいなバカに
しょうもないアドバイスされたらそらキレるだろうな。

66デフォルトの名無しさん2019/04/06(土) 08:47:14.06ID:dOsEQJqb
あの手の連中って小さなサンプルしか書いたことないんだろ
実際の数百万行あるようなプロジェクトなんかには
参加したことないんだろうな

67デフォルトの名無しさん2019/04/06(土) 09:02:21.08ID:jpD7ojAE
弁理士みたいなもんだろ。
自分じゃモノ作らないけど複雑なルールに精通してて「それじゃ通らないよ」とアドバイスする。

68デフォルトの名無しさん2019/04/06(土) 10:37:53.59ID:DWbJNRMu
数百万ってOSとかミドルウエアでも作ってるのか?

69デフォルトの名無しさん2019/04/06(土) 10:40:30.76ID:lEFKAYHm
>>68
c++なんかでosなんか作れるかよ
遅すぎる

70デフォルトの名無しさん2019/04/06(土) 10:52:37.36ID:DWbJNRMu
>>69
じゃあ何作ってるの?

71デフォルトの名無しさん2019/04/06(土) 11:08:56.61ID:oXBRKV1B
>>70
ia32

72デフォルトの名無しさん2019/04/06(土) 11:11:25.61ID:dOsEQJqb
>>67
作らないじゃなくて、作れないんだろ
標準ライブラリの使い方を示す小さなものは作れるけど、現実的に使用するアプリケーションはかけないんだろう

73デフォルトの名無しさん2019/04/06(土) 11:26:29.61ID:DWbJNRMu
>>71
Intelの奴隷

74デフォルトの名無しさん2019/04/06(土) 11:27:31.68ID:DWbJNRMu
>>72
で数百万行で何を参加して、そのうち何行書いたの?

75デフォルトの名無しさん2019/04/06(土) 11:30:01.81ID:g9dCbj7p
>>74
自動機が約1000台あるCAMで40%は書いてるよ

76デフォルトの名無しさん2019/04/06(土) 11:33:57.74ID:DWbJNRMu
>>75
じゃあこのスレで一番C++に詳しい人は君ね

77デフォルトの名無しさん2019/04/06(土) 11:47:11.69ID:XiUalYkv
どうせその数百万行のコードで意味があるのは数万行から十数万行とかだろ

後は無駄なコピペやら、標準ライブラリにある機能を知らずに毎度一から書いて水増しされた無意味どころか保守考えたら害悪にしかならんくその塊

78デフォルトの名無しさん2019/04/06(土) 11:52:36.82ID:jpD7ojAE
>>72
弁理士の喩えで言えば、弁理士自身が発明できなくても別によくね?って話なんだが。

79デフォルトの名無しさん2019/04/06(土) 12:45:48.78ID:zp0ZZwhH
どうせ納期に追われて妥協に妥協を加えたやっつけのコードを○行書きましたwとか言われても自慢にもならん

80デフォルトの名無しさん2019/04/06(土) 12:59:26.47ID:zp0ZZwhH
>>78
ダメだぞ
弁護士は立法の経験が無いとダメだしスポーツの評論家は一流アスリートじゃないとダメだし調理器具を作る人は繁盛してるレストランで勤務したことがないとダメw
ライブラリ開発や教材の執筆には数百万行のシステム開発と組み込みの経験が無いとダメw
ちなみに数百万行のシステム開発や組み込みの経験があると自動的にライブラリ開発者や教材の執筆者より現実を知ってる格上()だし現場のニーズを満たした理想のライブラリを作れるようになるぞ

81デフォルトの名無しさん2019/04/06(土) 13:01:20.04ID:dOsEQJqb
ビャーネなんて、ロクなの作ってないよなw
数十行程度のものをあーでもないこーでもない言ってるだけだろ

82デフォルトの名無しさん2019/04/06(土) 13:04:46.19ID:zp0ZZwhH
せやなw
建築物の工法の研究者なんかろくに家も建てたこともない雑魚w
ネイルガンの一つも使えないくせに机上でああでもないこうでもないって言ってるだけw

83デフォルトの名無しさん2019/04/06(土) 14:13:10.98ID:BcLgwe4j
>>80
>立法の経験が無いとダメ
つまり議員の経験が無いとだめってことか

84デフォルトの名無しさん2019/04/06(土) 14:25:22.19ID:HZH6vgE1
STLの美しさは時代を超越してるし、オーパーツに認定してもいいのではないか。

85デフォルトの名無しさん2019/04/06(土) 15:08:23.30ID:FeLBMWFl
直交性とか説明しても誰にも通じなかった

86デフォルトの名無しさん2019/04/06(土) 15:56:35.00ID:DWbJNRMu
ラムダ式使えない馬鹿「今まで書いたソースの行数は?」
そんなの気にしねえwwws

87デフォルトの名無しさん2019/04/06(土) 16:00:55.76ID:grJD5FiV
なるほどラムダ式が嫌いな奴は書く行数が減ってコードの生産量()が減るのが嫌なんだな
ボイラープレートコードを書き殴ってれば仕事したフリができる人たちは気楽っすなあ

88デフォルトの名無しさん2019/04/06(土) 16:07:07.88ID:/WRt9p3o
まあ実際クヌースなんかもtexプログラム作ってプログラムの大変さに気づいた
的なことは言っているしな。
偉い人でもその辺実際に作ってみると感覚が違うってのはあるんだろう

89デフォルトの名無しさん2019/04/06(土) 16:49:06.59ID:HZH6vgE1
コンセプト来い。
コンセプトはよう来い。

90デフォルトの名無しさん2019/04/06(土) 16:52:05.91ID:TQhcrP/j
>>68, >>77
こいつらみたいな世間知らずの根拠のない自信はどっから来てるんだろう

91デフォルトの名無しさん2019/04/06(土) 17:41:57.80ID:zQgZMa/6
>>90
そもそも世間知らずほど自信にあふれがちではある
初心者ほど偉そうだったりもする

92デフォルトの名無しさん2019/04/06(土) 19:26:54.62ID:/WRt9p3o
クソライブラリやクソ開発メソッドを持ち込む怪しいコンサルと一緒なんだよな。
それが押し通ることが結構あるから怖い世の中なんだが。

93デフォルトの名無しさん2019/04/07(日) 00:51:26.62ID:MFkC9rxe
>>90
元号もろくに変えられない癖に何が自信だあほ

94デフォルトの名無しさん2019/04/07(日) 01:23:19.03ID:27fxqR4U
自分より劣る存在を想定してホルホルしててもお前の実力は上がらんよ

95デフォルトの名無しさん2019/04/07(日) 02:59:31.42ID:KMX3xd+u
コードを書くしか能が無いというのでは
業界に名が通った有名人クラスにならない限り
コンサルに勝つのは難しい

96デフォルトの名無しさん2019/04/07(日) 09:59:23.22ID:AvqFg232
>>88
それソースある?
TeXの前にも色々プログラム書いてるみたいだし、そもそも大学で俺ならもぅとうまくやれるとアセンブラとコンパイラを書き換える決心したらしいからTeXでどうのこうの言うのはちょっと考えづらい
あとTeX自体は今の基準だとそんなにでかく無い
ソースは24ks程度で半分以上はweave出処理される解説だし

97デフォルトの名無しさん2019/04/07(日) 15:25:28.13ID:GYBhj6UR

98デフォルトの名無しさん2019/04/07(日) 15:38:44.91ID:7JuoUDJS
そんなインタビュー集までチェックするのか普通とか言われてもなぁ

99デフォルトの名無しさん2019/04/07(日) 16:36:39.64ID:Uqhse/UH
>>98
自分は知らないからソースくれとだけ言えばいいところを、想像で要らんことをいうから反論されるのでは?

100デフォルトの名無しさん2019/04/07(日) 16:41:57.11ID:7JuoUDJS
>>99
根拠書いてあるんだから反論したいなら根拠に反論したら?

101デフォルトの名無しさん2019/04/07(日) 17:48:00.72ID:OFkYw0l7
なるべく高級な言語でちっさいOS作ろうと思うんだがよい言語ないかな?

102デフォルトの名無しさん2019/04/07(日) 17:59:05.12ID:dyW8i1kK
ハードウェアによるのでは

103デフォルトの名無しさん2019/04/07(日) 18:12:26.51ID:OFkYw0l7
armかrisc vの64bit
32bitでもいいです
比較対象のためにc/c++でも作る予定

104デフォルトの名無しさん2019/04/07(日) 18:19:23.23ID:wdVE5f+b
そもそも高級言語で小さいOS作れる言語ってC言語一択じゃね?

105デフォルトの名無しさん2019/04/07(日) 18:20:11.20ID:lGwZZxlu
>>103
rust

106デフォルトの名無しさん2019/04/07(日) 19:17:40.54ID:rrYyxHxh
rustでqemuでhelloworldして満足した(´・ω・`)

107デフォルトの名無しさん2019/04/07(日) 19:51:30.08ID:VbL09+YA
haskell

108デフォルトの名無しさん2019/04/07(日) 20:29:30.34ID:OFkYw0l7
>>105
rustぐらいですかね?
全然違うパラダイムの言語で作れないもんかと
アセンブラとの相性考えたら結局cっぽい言語しか選択肢ないのかな

109デフォルトの名無しさん2019/04/07(日) 21:29:30.01ID:NOCaxMAw
OSつったって、どのレベルのこと言ってるかによってかわるしな
電源ONから自分でブートして起動できるレベルのものいってるならC+アセンブラ一択だし
ブラウザで仮想環境動けばいいぐらいなら、まあいろいろ変な言語系の実験できるけど
それ実際的な意味あるの?っていう話になってくるし・・
というわけでブラウザで C++ の実行環境を動かしてみるっていうのはどうだろう?
emscripten のオルタネートみたいな・・

110デフォルトの名無しさん2019/04/07(日) 21:58:15.58ID:GYBhj6UR
>>100
事実でもなんでもない勝手な想像を根拠とか言われても反論できんわ。

111デフォルトの名無しさん2019/04/07(日) 22:14:49.77ID:AvqFg232
>>110
> TeXの前にも色々プログラム書いてる
> 大学で俺ならもぅとうまくやれるとアセンブラとコンパイラを書き換える決心した
> あとTeX自体は今の基準だとそんなにでかく無い
> ソースは24ks程度で半分以上はweave出処理される解説だし
の中に事実でない箇所あるの?

112デフォルトの名無しさん2019/04/07(日) 22:51:26.81ID:KMX3xd+u
ソースがわからん…

113デフォルトの名無しさん2019/04/07(日) 23:51:05.57ID:WwvhmWfk
ソース出せと言った人が、ソースが出てきたら、ソース出すのは反則と言い出したって流れかな。

114デフォルトの名無しさん2019/04/08(月) 07:00:51.66ID:lSCOP8uB
どうやったらそんな頓珍漢な解釈ができるのか…

115デフォルトの名無しさん2019/04/08(月) 09:33:48.87ID:gQiHeALa
>>113
ソース出せと言った人が(>>96)、ソースが出てきたら(>>97)、ソースじゃなくて根拠(?)に反論しろと言い出した(>>98,>>100,>>111)って流れかな。

116デフォルトの名無しさん2019/04/08(月) 10:03:38.99ID:xZraFIBG
クソどうでもいい話にこだわるな

117デフォルトの名無しさん2019/04/08(月) 12:15:44.74ID:lSCOP8uB
引っ込みつかなくなってるんだろww
話の内容変わってるし

118デフォルトの名無しさん2019/04/08(月) 13:16:50.24ID:/rKIWzXZ
>>109
ブラウザの仮想環境とは何?
osなのでcpuが見えてて欲しいのだけど
ひとまずqemuで始めるつもりです

119デフォルトの名無しさん2019/04/08(月) 14:17:17.10ID:B03nMGGM
ビャーネストロヴストルップ先生のプログラミング入門買ったんだけど、読破した人っている?

120デフォルトの名無しさん2019/04/08(月) 14:40:49.88ID:yFytPSzO
いないんじゃあないの
本当に読破したと言える人間は日本人で20人しかいないと聞いた

121デフォルトの名無しさん2019/04/08(月) 16:02:36.28ID:B03nMGGM
>>120
毎日30分読むことにした
C++は仕事で使ったことない

122デフォルトの名無しさん2019/04/08(月) 17:17:23.27ID:nF+E8GMD
>>108
まずベアメタルに対応してる必要があることを考えると、選択肢はそうないのでは?

123デフォルトの名無しさん2019/04/08(月) 18:57:24.65ID:j9hUx87z
>>119
もはやそれは「国語辞典」読破した奴おる?ってのに近い。

124デフォルトの名無しさん2019/04/08(月) 19:33:22.28ID:RJuwHc+q
ストラウストラップの『プログラミング入門』って
日本語版で1100ページもあるんか。

このとっつぁん、厚い本を書きまくっとるなぁ。
そもそもプログラミング入門のお題でそんなに語るネタあるんか。

125デフォルトの名無しさん2019/04/08(月) 20:02:21.26ID:lSCOP8uB
実は愛読書が辞書という人はそれなりに居たりするw
https://togetter.com/li/1119810

1261242019/04/09(火) 17:49:07.46ID:ZAJK3xJP
>>119
なんか『C++によるプログラミングの原則と実践』て本が
同じ原書の新版の和訳みたいだけど。
おまけに『ストラウストラップのプログラミング入門』よりお安い。

127デフォルトの名無しさん2019/04/10(水) 00:37:04.74ID:weZfZZPq
この界隈では「入門」といいながらどうみてもマニア向けの本が多いよね

128デフォルトの名無しさん2019/04/10(水) 00:51:58.60ID:uYzixBoY
自分が読んだ本は全て入門書扱いする人多いよね

129デフォルトの名無しさん2019/04/10(水) 01:02:13.57ID:On8YhqHc
上級者の評価が高い入門書ってのは本質や精神を理解し免許皆伝まで至るような道の第一歩であるものだもの
素人が何も理解しないままこうすればこうなるでおいしいとこだけいきなり得ようとするようなハウツー本とは違う

130デフォルトの名無しさん2019/04/10(水) 09:04:52.41ID:ryP68qDF
「本質」を語るやつは大抵アホ

131デフォルトの名無しさん2019/04/10(水) 10:05:45.31ID:cwT5VSoK
結論のでないどうてもいい話題に食い付くやつはアホ

132デフォルトの名無しさん2019/04/10(水) 11:09:30.74ID:dQX53bJY
同価格帯のXeonとThreadripperではどっちの方がコンパイル速いか知ってる人いますか?

133デフォルトの名無しさん2019/04/10(水) 11:21:44.56ID:vfHnS1kx
C++はF35にも使われている戦争の兵器
C++erを見たら悪魔の手先と思え!

134デフォルトの名無しさん2019/04/10(水) 11:25:06.35ID:dQX53bJY
それかCかC++のソースコードのコンパイルのベンチマークをCPU別で取っているサイトがあれば教えてほしいです

135デフォルトの名無しさん2019/04/10(水) 19:23:50.56ID:xcPdAU38
effective c++読めるくらいになればまあその先に薦める本や文献なんかは結構あるが、
そこまでにどういう本勧めればいいかは相当難しい。
とりあえずcからとか言いたいとこだがそれからeffective c++までの間に読む本としては何が良いのだろうか。

136デフォルトの名無しさん2019/04/10(水) 19:50:32.44ID:CKpW95z6
https://www.anandtech.com/bench/CPU/1858
こんなページがあるけど。
https://www.reddit.com/r/cpp/comments/6kncnu/compile_speed_or_recent_cpusryzen_surprisingly_bad/
マイクロソフトが悪い、すべてマイクロソフトのせいだという意見も出てるね。

137デフォルトの名無しさん2019/04/10(水) 20:42:17.28ID:P0TERnuJ
タイムマシンって何言語で、書かれてるの?
やっぱりc++

138デフォルトの名無しさん2019/04/10(水) 21:08:53.18ID:EODMjdpe
Objective-Cだろjk

139デフォルトの名無しさん2019/04/10(水) 23:10:10.82ID:dQX53bJY
>>136
ありがとう最新のはこれだった
https://www.anandtech.com/bench/CPU-2019/2223

i9が価格の割に速かったコンパイルはシングルコアの周波数が正義なのか
XeonはマルチCPUするためのものだな

140 ◆QZaw55cn4c 2019/04/10(水) 23:38:55.47ID:57hoitEO
>>135
独習→acceleratedとプレC++11STL(ハーバードシルト)→テンプレート本、くらいを私は歩いてきました…

141デフォルトの名無しさん2019/04/11(木) 00:09:23.85ID:SMdbPkuM
>>135
どの言語でも、言語を学ぶ順番は、
1. 入門書
2. Effective 何々
3. 逆引き・レシピ本
4. (必要なら) メタプログラミング

Ruby なら、
1. たのしいRuby 第6版
2. Effective Ruby
3. 改訂2版 Ruby逆引きハンドブック
4. メタプログラミング Ruby 第2版

先にRuby で、1~3 を読んだ方が早いかも

もちろん他の言語でも良いけど、
プログラミング全般は、Rubyで学ぶのが、正確で紛れがないし、詳しい本が揃っている

142デフォルトの名無しさん2019/04/11(木) 00:18:20.98ID:+5scCOHz
このご時世に本読んでプログラミング勉強するってあほだろ

143デフォルトの名無しさん2019/04/11(木) 00:27:14.17ID:m6dr6a58
1周回ってきて本になるんだよなあ

144デフォルトの名無しさん2019/04/11(木) 00:36:20.66ID:MrjztWsK
Effective系以上は本でもいいと思う

145デフォルトの名無しさん2019/04/11(木) 00:47:54.22ID:XplD4nHz
少なくともeffective系統読んでもわけわからんレベルの人はまずはしっかりした本を読むべきと思う。
しかしc++は勧めたい本がない。。「独習c++」かな。。いいとは言いずらいがしかしほかに勧めたい本もない。

146デフォルトの名無しさん2019/04/11(木) 01:24:17.64ID:GbgLM3aJ
ネットさえありゃ本なんかいらんだろアホ、と思っていた時期が俺にもありました
実際ちょっと前まではそんな感じだったんだけど、最近は Google のアルゴリズムがポンコツなのか
それの裏をかく技がものすごく洗練されたからなのかしらんが、とにかく検索上位にアホみたいな
ページがひっかかる事が多い上に、ほんとうに必要な情報が見つからないことが多い
特に最近では Python 関係のネット情報はほんとどうしょうもなくぐらい腐ってるな
C++ 関係はまだかなりましな感じだが

1471412019/04/11(木) 02:06:27.08ID:SMdbPkuM
外人が書いた「Effective 何々」には、良い本が多い

「Rubyのしくみ」も良い。
RubyVM(仮想マシン)の内部の仕組みがどうなっているのか、など

コンパイラ・インタープリタを作る人は、読んでおいた方がよい

C++ の場合「1. 入門書、2. Effective 何々」の間隔が大きい

つまり、仕様が複雑すぎるから、入門書の範囲が大きすぎる!
独習1冊で、Rubyの1~3 まで軽く読める

常識的には、C++ の本を読めるレベルは、Rubyなど数言語をやった後の話。
とてもじゃないが、素人がやるような言語じゃない!

素人は、細かい仕様の話よりも、
まず、Ruby on Rails などのフレームワークなどで、アプリが動くまでの全体の構造・工程を学ぶのが先

各部分の細かい仕様・バグは、後でよい。
そうしないと、バグってばかりで何も作れない

148デフォルトの名無しさん2019/04/11(木) 03:36:50.02ID:Fl8qN29n
ネットで学ぶのがアホってドワンゴ社員のあいつの主張繰り返すのかよ
誰が仕様書読むんだあほ

149デフォルトの名無しさん2019/04/11(木) 03:41:11.24ID:m6dr6a58
日本語でおk

150デフォルトの名無しさん2019/04/11(木) 06:24:23.60ID:wX/7fvyH
>>141,147
消えろ

151デフォルトの名無しさん2019/04/11(木) 06:54:46.28ID:QTZ5s2CM
>>146
例の医療関係のページビュー稼ぎ対策の影響で個人が細々とやってる良質なサイトが引っ掛かりにくくなってる
って新聞に書いてあったな

152デフォルトの名無しさん2019/04/11(木) 09:44:13.72ID:vYC2bkpl
具体的にC++でいいサイトはどこ

153デフォルトの名無しさん2019/04/11(木) 10:06:20.10ID:m6dr6a58
cpprefjp

154デフォルトの名無しさん2019/04/11(木) 11:14:37.00ID:Kj8z6I1B
>>146
お前のいうネットってqiitaとかだろ?
だからダメなんだよお前はw

155デフォルトの名無しさん2019/04/11(木) 18:46:33.30ID:Ukf06xgg
cpprefjp一択。

156デフォルトの名無しさん2019/04/11(木) 19:07:44.03ID:XplD4nHz
リファレンスだけ並べたクソサイトじゃねーかw

157デフォルトの名無しさん2019/04/11(木) 19:27:25.55ID:yce5TkL4
この手のランキングは本当に十人十色だな。
人気言語ランキングC++3位
https://www.tiobe.com/tiobe-index/

158デフォルトの名無しさん2019/04/11(木) 19:30:26.87ID:m6dr6a58
リファレンスがあれば十分だわ
応用は頭使え

159デフォルトの名無しさん2019/04/11(木) 19:38:13.25ID:XplD4nHz
話にならん。。

とりあえずここら辺から始めるのが良いか。
https://www.tutorialspoint.com/cplusplus/cpp_quick_guide.htm

160デフォルトの名無しさん2019/04/11(木) 19:48:35.94ID:TKLgRtKS
cpprefjpは仕様の成り立ちから使用例まで載ってる

161デフォルトの名無しさん2019/04/11(木) 19:54:53.54ID:a2+oAAfA
cppreference.comの方が好き

162デフォルトの名無しさん2019/04/11(木) 19:58:11.07ID:m6dr6a58
cpprefjpは左の文字が小さすぎるのをなんとかしてほしい

163さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/04/11(木) 20:14:39.34ID:4WryY6sc
Ctrl+ホイールで画面拡大縮小

164デフォルトの名無しさん2019/04/11(木) 20:36:15.86ID:m6dr6a58
それはおかしい

165 ◆QZaw55cn4c 2019/04/11(木) 20:40:05.89ID:mnND5pqz
>>145
独習の後は同じくハーバートシルトの stl 本(ただしC++11じゃない) でしょうけれども…

166デフォルトの名無しさん2019/04/11(木) 21:41:21.15ID:Ukf06xgg
【小説】ストリームの悪魔

167デフォルトの名無しさん2019/04/11(木) 21:42:54.19ID:Ukf06xgg
>>157
でも、C++17だと圏外かも。

168デフォルトの名無しさん2019/04/11(木) 21:49:17.62ID:Ukf06xgg
C++の人気はだいたいWindowsと同期してて、XPで盛り上がり、その後下降して、Windows10発売後ちょっと盛り上がり、その後下降し始め、WSLでまたちょっと盛り上がり、みたいな感じで上下する。

169デフォルトの名無しさん2019/04/11(木) 23:00:30.59ID:Fl8qN29n
>>165
ビャーネストロヴストルップのプログラミング入門はどうですか?

170デフォルトの名無しさん2019/04/11(木) 23:10:49.56ID:Fl8qN29n
>>165
◆QZaw55cn4c さんはプログラマーですか?

171デフォルトの名無しさん2019/04/11(木) 23:16:43.21ID:4rTUFtuy
STLを解説した本として最も優れてるのどれ?

172デフォルトの名無しさん2019/04/11(木) 23:26:14.78ID:m6dr6a58
解説するほどのものか?

173デフォルトの名無しさん2019/04/11(木) 23:29:16.82ID:MrjztWsK
cpprefjpかcppreference.com眺めるのが一番いいのでは

174デフォルトの名無しさん2019/04/11(木) 23:35:00.33ID:Fl8qN29n
>>171
C++標準テンプレートライブラリがおすすめ

175デフォルトの名無しさん2019/04/11(木) 23:36:01.51ID:Fl8qN29n
https://cppmap.github.io/
個人的にはこっちもおすすめ

176デフォルトの名無しさん2019/04/12(金) 00:33:29.09ID:Oce6Eotz
C++ coding standards が、入門書と effective C++の間という感じで良かったのですが、今新品で買いやすい和書の中で同じくらい良い本ありますか

177デフォルトの名無しさん2019/04/12(金) 07:49:20.68ID:iSiavc0f
>>173
それでコードを書けるようになるとは全く思わん。

178デフォルトの名無しさん2019/04/12(金) 08:33:36.67ID:iSiavc0f
「ロベールのC++入門講座」を勧める

179デフォルトの名無しさん2019/04/12(金) 09:37:34.83ID:uO4ZqrOg
コード書くために勉強したことが無い人間とコード書くために勉強した人間に分かれるな

180デフォルトの名無しさん2019/04/12(金) 10:54:15.24ID:+AQGVq0O
RPGのバトルシステムがいつまでたっても出来ない
どうなってんだコレ

181さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/04/12(金) 12:39:56.53ID:O/TRJpno
>>180
ドラクエの技術を解説した本を買えば

182デフォルトの名無しさん2019/04/12(金) 13:56:50.34ID:phN3RSne
そこでレポート プログラム ジェネレータを思い出さないと
文句はユニシスに言っとくれ

183デフォルトの名無しさん2019/04/12(金) 16:07:32.84ID:JVT+o1/N
RPGなつかしいなw
知人でそれの専門で仕事やってるやついたが
今ごろどうしているだろうか・・

184デフォルトの名無しさん2019/04/12(金) 16:19:27.39ID:lUKpExyl
>>180
自分が具体的に何を作るのか見えていないとか、自分が何が分からないかがわかっていないとか。

185デフォルトの名無しさん2019/04/12(金) 18:44:05.94ID:+CDO09PL
std::rpgの登場が待たれる

186デフォルトの名無しさん2019/04/12(金) 21:59:51.74ID:9AU6i9F6
>>179
どういう分類か興味がありますね…

187デフォルトの名無しさん2019/04/12(金) 22:35:09.99ID:20VLO3ye
これもSFINAE???

int plus(int a,int b){return a + b;}
double plus(double a,double b){return a + b;}

int main( int argc, char *argv[] )
{
double c = plus(1.0,2.0);
return 0;
}

188デフォルトの名無しさん2019/04/12(金) 23:46:54.37ID:w8o2kbz2
SFINAEを理解してないな?
templateでわざと失敗させるんだぞ

189デフォルトの名無しさん2019/04/12(金) 23:50:14.00ID:WMCXK/Zp
それは関数のオーバーロード(オーバーロード関数)
SFINAEはテンプレートに関わる話

190デフォルトの名無しさん2019/04/12(金) 23:55:37.58ID:yQNXRLnI
SFINAE ていう単語みるたびになぜか
ソフバンの白犬が低い声で「スフィ姉ーーー」て言ってる映像が頭にうかぶ

191デフォルトの名無しさん2019/04/13(土) 00:08:44.65ID:pAXxDbKI
>>188
最初のplusで失敗して、次のオーバーロードを探しに行ってんじゃん。
もし最初でコンパイルエラーなら、このプログラムはコンパイルされないが、SFINAEのおかげでコンパイルエラーが出ない

192デフォルトの名無しさん2019/04/13(土) 00:43:18.21ID:2fZ9oexv
>>186
自分の興味のあることをやっていたら気づいたらコードが書けるようになっていた人と
コードを書けるようになることを目標に勉強をした人
前者は入門の仕方を聞かれると上手く答えられない傾向にある
とりあえず好きなもの作ってみて困ったらリファレンスとかみれば良いんじゃないの?とかは割とガチで言ってる

193デフォルトの名無しさん2019/04/13(土) 01:17:48.59ID:Gm2Aztfm
せやな
なぜそこでロベール!?とか思ったけど、なんか納得した

194デフォルトの名無しさん2019/04/13(土) 02:30:55.25ID:ExcsBrHj
rvalue・lvalueの見分け方について、=の左に書けないならrvalueって考えで良いですかね?

195デフォルトの名無しさん2019/04/13(土) 07:01:49.87ID:bq5Y4VLb
>>194 確かダメじゃないかな。
C の例でアレだけど、配列名 int a[5]; の a は
左辺値だけど代入の左辺に置けない、
「代入不可能な左辺値」というカテゴリになる。

『プログラミング言語C++』第4版 §6.4.1 (p. 175)の図によると
左辺値 lvalue は「アイデンティティを持ち、ムーブ不可能」
右辺値 rvalue は「(アイデンティティの有無によらず)ムーブ可能」

…ムーブできるか出来ないかの判断を、左辺値か右辺値か見分けることで
やろうとしてるなら、この説明は循環論法でしかないけどね。

196デフォルトの名無しさん2019/04/13(土) 08:07:08.65ID:odoOG67D
その場で(1つの文の中で)ムーブされ得るやつが右辺値、ぐらいで良いのでは、
と言いたいところだが
 SomeType a = b = 1;
でbあ右辺値なのかと言われるとうーん…
実際bがその場で所有権を失うこともできる(SomeTypeにムーブコンストラが定義されていた場合
のだから当たらずしも遠からずだとは思うが知らん

197デフォルトの名無しさん2019/04/13(土) 09:00:05.96ID:TufrjDxL
てかリファレンスだけ必要な奴はここにそういうことを聞きには来ないだろ。
なんかその辺の感覚がすでにずれてるように思うが。

198デフォルトの名無しさん2019/04/13(土) 09:09:41.91ID:TufrjDxL
>>195
「代入できない」って視点で言えば194で合ってるんでは?
確かに a[0] =5 なんかはできるけど、 a = b みたいにポインタそのものは代入できないわけだし。

199デフォルトの名無しさん2019/04/13(土) 09:48:36.03ID:ubPOLJQD
>>196
右結合なんだから b は左辺値、 b = 1 が右辺値でいいんでは?

200L2019/04/13(土) 11:50:51.08ID:U0TmzhoK
全く関係ない話になるけど、JNI = Java Native Interface(?) なるものを使えば、
C++で OS 非依存のアプリが作れるんだね。多分。
C++からJavaの任意のメソッドを呼び出せるし、逆も可能なので、
グラフィックをJavaに描かせて、キーやマウスのイベントをJavaからC++に
伝達すればよさそう。すると、LinuxやAndroidで共通に動くC++アプリ(?)
が出来てしまう。wasmも必要ない。

201デフォルトの名無しさん2019/04/13(土) 15:06:42.85ID:nqhK1mlk
>>200
C++の部分はネイティブなのでOSに依存する

202デフォルトの名無しさん2019/04/13(土) 15:20:25.21ID:U0TmzhoK
スマン。CPU毎にバイナリは必要で、
clangに -macrh=xxx-xxx-xxx オプションを指定して CPUやOSを
指定してコンパイルしておくことを想定していた。
ただし、複数のCPU/OS向けのバイナリを1つのAPKにパッケージして、
使用時に自動選択する事が出来るらしい。

203デフォルトの名無しさん2019/04/13(土) 15:31:06.15ID:pwnjfljv
わざわざjavaを使わなきゃいけないのが気にくわない
その場合、javaだけで書くこと以上のメリットある?

204デフォルトの名無しさん2019/04/13(土) 15:32:58.01ID:U0TmzhoK
速度が速い。

205デフォルトの名無しさん2019/04/13(土) 15:33:33.54ID:MSTjQ8pp
てかそれってjavaのアプリ作っているだけじゃ

206デフォルトの名無しさん2019/04/13(土) 15:36:48.83ID:U0TmzhoK
Androidアプリは、Javaで書くのが基本とされてるけど、
Chromeブラウザなんかはきっと、C++で書いたものを ARMなどの
CPU向けのnative binaryに直し、それをAPKにパッケージ化して
配布してるのではなかろうか? AmazonのFire7 や Fire HD 8 などの
タブレットのCPUはどちらもARMらしい。スマホもARMが多いのかな。

207デフォルトの名無しさん2019/04/13(土) 15:38:37.67ID:U0TmzhoK
>>205
基本的な描画系と入力系をライブラリ化しておけば、メインロジック部分は
C++で書けると思うよ。

208デフォルトの名無しさん2019/04/13(土) 15:42:52.17ID:U0TmzhoK
さっき、AdoptOpenJDK なるものをインストールしてみたら、
java と javac コマンドが起動することを確認した。
多分このJDKは、Oracle フリーで無料でクローズド商用利用できると思う。

209デフォルトの名無しさん2019/04/13(土) 15:46:26.77ID:MSTjQ8pp
jniはjavaのプラットフォームにc++での開発成果物を持ち込むためのもので、そうでないならわざわざそんなもの使う意味は薄い

マルチプラットフォームなアプリを作りたいならQtなりwxなりを使った方が速いし楽

210デフォルトの名無しさん2019/04/13(土) 15:47:10.35ID:Uq+8Y9kK
>>208
でもいつ訴えられるかわからないから怖いですう。

211デフォルトの名無しさん2019/04/13(土) 15:58:39.59ID:U0TmzhoK
そもそも、Androidアプリにとってのシステムコール(API)とは、Javaの関数だと
思うので、この構造自体は Android における「最も高速なアプリ」になっている
と思う。

212デフォルトの名無しさん2019/04/13(土) 15:59:50.41ID:U0TmzhoK
>>210
一般アプリ作者は大丈夫だと思うな。一番危ないのは、オイラみたいに、
ToolKit作って儲けようなんて思ってる人なのさ。(^_^;)

213デフォルトの名無しさん2019/04/13(土) 16:11:49.69ID:U0TmzhoK
>>209
それらはサイズが大きい。

214デフォルトの名無しさん2019/04/13(土) 16:14:38.06ID:MSTjQ8pp
糞デカイ上に更新面倒なjavaのruntime入れさせるほうが害悪だろ

flashより糞度が高い

215デフォルトの名無しさん2019/04/13(土) 16:22:55.04ID:U0TmzhoK
AndroidはJREはプリインストール済みなんじゃないの?
オイラは実機持ってないので全く分からないんだな。

216デフォルトの名無しさん2019/04/13(土) 16:32:58.01ID:MSTjQ8pp
androidで実質c++でのアプリ開発する仕組みなら既にある
jniそのまま使うよりは大分マシ

217デフォルトの名無しさん2019/04/13(土) 16:36:12.19ID:jD4Gkzzm
>>216
どうやるの?

218デフォルトの名無しさん2019/04/13(土) 16:39:07.74ID:2fZ9oexv
何でグラフィックをわざわざJavaに?


>>217
QtならほぼC++で書ける

219デフォルトの名無しさん2019/04/13(土) 16:42:39.35ID:U0TmzhoK
Qt は、内部的に Backend で Java を使ってるのかな。

220デフォルトの名無しさん2019/04/13(土) 17:18:44.33ID:ubPOLJQD
なんかJavaを間違って理解してるっぽい。

221デフォルトの名無しさん2019/04/13(土) 17:21:04.26ID:YpOFfnix
>>219
もういい加減スレ違いだから消えてくれ

222デフォルトの名無しさん2019/04/13(土) 19:21:24.16ID:mZFqlfzi
vector に格納されてる値から添え字の番号を取得するための最も手軽な方法はなんでしょうか

イテレータから添え字番号を取得することはできますが、あくまで値からやりたいです

223デフォルトの名無しさん2019/04/13(土) 19:26:24.27ID:ujTcdvrD
格納してる値にインデックスの手がかりがないんだったら
findで探して結果のイテレータから取得するしかないな

224デフォルトの名無しさん2019/04/13(土) 19:26:44.48ID:2fZ9oexv
>>222
findしてdistance

225デフォルトの名無しさん2019/04/13(土) 19:31:01.29ID:mZFqlfzi
>>223-224
ありがとうございます
格納する値の範囲もサイズも小さいvectorなので、今回は辞書を作って対応しようと思います

226デフォルトの名無しさん2019/04/13(土) 19:42:14.61ID:2fZ9oexv
>>225
そんな単純な検索なら3行くらいなんだから作ればいいのに

227デフォルトの名無しさん2019/04/13(土) 20:12:30.52ID:mZFqlfzi
奇遇なことに辞書も三行くらいです

228デフォルトの名無しさん2019/04/14(日) 01:05:39.34ID:dZAE6IVm
そら奇遇ですな。

229 ◆QZaw55cn4c 2019/04/14(日) 06:41:11.16ID:AVvjfIV7
>>200
とても興味を覚えました
私は、そろそろ言語間でライブラリも共用されるべきだと考えています
一つの記述体で各言語共通というのはさすがに難しいにせよ、
Java のライブラリと同等なもの(名前と機能が共通のもの)が C++ にもあってもいいんじゃないか?と数年前から妄想しています…

230デフォルトの名無しさん2019/04/14(日) 07:17:55.90ID:/tPpXRHC
もうJavaのことは忘れて生きろ

231デフォルトの名無しさん2019/04/14(日) 07:42:20.38ID:YohaqxbG
JavaとC++に共通インターフェースを作るのは反対。
車輪の再発明にしかならない。自由を奪うだけの愚策。

232 ◆QZaw55cn4c 2019/04/14(日) 07:51:31.17ID:AVvjfIV7
>>231
強要するのではなく、オプション(選択肢)として提供するのはどうでしょうか?

233デフォルトの名無しさん2019/04/14(日) 08:04:00.89ID:YohaqxbG
>>232
共通ライブラリを使う側にとってはオプションであることは当然。
共通ライブラリを作る側の話をすべき。共通ライブラリの規格決定権者が増えすぎること自体が好ましくない。
これはEU諸国がトルコがEU参加することを拒否する感覚に近い。

234 ◆QZaw55cn4c 2019/04/14(日) 08:50:47.24ID:AVvjfIV7
>>233
私は EU には否定的(グローバリストの巣窟であり、普通選挙/自由選挙による合意形成をスキップするポジションを作って人を操作するからくり、トルコもたぶん目が覚めているのでは?)ですが、それはさておき、
すでにある java/classpath スケルトンを真似してしまおう、という低姿勢・低いプライドを貫くのであれば、規格策定者は基本要らなくなりませんか?だって真似するだけだし…

235デフォルトの名無しさん2019/04/14(日) 08:59:21.33ID:k2b6YaL9
まだC++98しか知らないと、取り残されますか。

236デフォルトの名無しさん2019/04/14(日) 09:09:36.38ID:YohaqxbG
まずは、Javaと瓜二つな C#、.NET、C++/CLIが今どうなっているか考えてみては。

237L2019/04/14(日) 09:28:45.12ID:Y1IcINvd
>>229
ちょっと話しはズレるけど、あなたの賛同で嬉しくなったので、入手した耳寄りな
情報を書いておこうと思う。既に知ってる人も当然いると思うけど、
WebAssemblyで作ったようなWebAppliは、ブラウザのURL欄やタイトルバーなどが
表示されてしまうのが難点として残っていた。ところがなぜかElectronでは消せて
いたのでChromeではなくChromiumを使っているからかと思っていた。
ところが、manifest.json なるものを書いて、HTMLにそのファイルを使うように
書いておいて、display プロパティーを standalone やfullscreen にすると、
URL欄が消せるらしい。

238 ◆QZaw55cn4c 2019/04/14(日) 09:41:42.35ID:AVvjfIV7
>>237
もう時代はすっかり html/css/js ですね…
VSCode も Electron ですし…

239デフォルトの名無しさん2019/04/14(日) 10:28:52.88ID:k2b6YaL9
質問を変えてみよう。
C++11やC++14のコードは、職場で取り入れられてますか。

240デフォルトの名無しさん2019/04/14(日) 11:49:20.77ID:q+cUY/8y
>>239
ガンガン取りいれてるよ。

なにげにでかいのが日本語識別子の保証。適切に使うと可読性が笑っちゃうくらい上がるw
ヘッダーのプロトタイプ宣言とかが特におすすめかな。

あとchar16_t/char32_tも結構ありがたい。WindowsとUNIX系のOS間で同じ文字コードとして共通で使える型が以前はなかったからね。
20でようやく入るみたいだが、なぜchar8_tを入れかったのか(´・ω・`)

std::initializer_listもかなり便利。型安全で個数も分かる上に、引数の一番後ろじゃなくてもいいので、cの...と違って気軽に使える。

あとよく使うのは範囲for文と、イテレータの簡略化かな。いくつかの演算子をオーバーロードすれば良いだけだから、
結構気軽に範囲for文対応のイテレータを書ける。

ラムダ式も関数の引数に直接関数を埋め込んだりできて便利。

241 ◆QZaw55cn4c 2019/04/14(日) 12:36:24.13ID:AVvjfIV7
>>240
>char16_t/char32_tも結構ありがたい

確かに
char16_t と u"" がなければ win32api W 系とか途方に暮れていたとおもいます… http://2chb.net/r/tech/1434079972/53

242はちみつ餃子 ◆8X2XSCHEME 2019/04/14(日) 12:43:45.83ID:+qOUcSLR
ガンガン最新を追うべきとまでは思わないけど、
C++11 は最低限度じゃないかなぁ。

243デフォルトの名無しさん2019/04/14(日) 14:27:39.08ID:6Gooiv09
17便利すぎ
variant,visit,lambda,if constexpr
のコンボで捗る

244デフォルトの名無しさん2019/04/14(日) 14:34:56.13ID:GSX89KOm
つーか今はもうC++11の機能は使わずにC++で書け!といわれても
やりきる自信がなくなった・・

245デフォルトの名無しさん2019/04/14(日) 14:39:38.95ID:krJLkXqZ
古い環境だと最近のサンプルがビルドできなくて困る

246デフォルトの名無しさん2019/04/14(日) 16:02:33.26ID:YQLb8Tsj
c++11とか名乗るから誤解されるんだよ。
c++++とかのがイメージ的に正しい。

247デフォルトの名無しさん2019/04/14(日) 16:06:36.29ID:dZAE6IVm
C#ってことか。

248デフォルトの名無しさん2019/04/14(日) 16:12:40.18ID:YQJCzKEv
repeat文って入らないの?

249はちみつ餃子 ◆8X2XSCHEME 2019/04/14(日) 16:16:59.50ID:+qOUcSLR
>>248
どんな機能?

250デフォルトの名無しさん2019/04/14(日) 16:20:53.89ID:YQJCzKEv
>>249
repeat(int i; n) で for(int i; i<n; i++) と同じ意味な機能

251デフォルトの名無しさん2019/04/14(日) 16:22:55.01ID:6Gooiv09
>>250
そんなどうでも良いもののために予約語追加する意味って
その文法じゃ初期値すら変えられない

252デフォルトの名無しさん2019/04/14(日) 16:24:45.44ID:6Gooiv09
初期値はi=0とかすればいいのか
でもそうなるとi=1にした場合何回ループするのか混乱しそう

253デフォルトの名無しさん2019/04/14(日) 16:32:41.09ID:IovzG98E
>>229
QtとかGtk、wxとか色々有るじゃん。。。
入れるの面倒くさいなら、Power Builder(だっけ?)とかの有料開発環境はVSを除いてマルチプラットフォームなライブラリが売りだぞ。

254 ◆QZaw55cn4c 2019/04/14(日) 16:36:01.32ID:AVvjfIV7
>>253
Java の人も C# の人も c++ の人も python も ruby も一緒の名前で一緒の機能が使えたら,コストの中でも一番高くつく勉強コストを減らせるのではないでしょうか

255デフォルトの名無しさん2019/04/14(日) 16:44:39.61ID:YQJCzKEv
>>251
Linuxのカーネルにrepeatマクロ大量にあるもん

256はちみつ餃子 ◆8X2XSCHEME 2019/04/14(日) 16:52:53.22ID:+qOUcSLR
>>255
ならマクロでいいじゃねぇか。

257デフォルトの名無しさん2019/04/14(日) 16:53:20.02ID:6Gooiv09
こんなので十分だろ
https://ideone.com/I6e8NZ

258デフォルトの名無しさん2019/04/14(日) 16:59:12.33ID:6Gooiv09
>>254
wxでもQtでもメジャー言語のbinding位あるだろ

259デフォルトの名無しさん2019/04/14(日) 17:09:53.36ID:IovzG98E
>>254
うん。
それはまさにそうで、だからQt,Gtk,wxあたりのメジャー所は色んな言語にラッパーがある。

260デフォルトの名無しさん2019/04/14(日) 17:10:32.89ID:h7KNzBMl
webプログラマーなんですが、右辺値、fowardっていつ使うのか気になります
というかなんでそこまで、厳密に分ける必要があるのか 
業務で使ってる方、使用例を教えてください

261デフォルトの名無しさん2019/04/14(日) 17:20:10.51ID:sCsh6GnA
右辺値というかムーブ関数の定義といらなくなるオブジェクトにstd::move付けとくのは絶対損にはならないからとりあえずやっとく
forwardはテンプレートライブラリ作るなら必須だけど自分では使ったことないなあ

262さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/04/14(日) 17:25:45.47ID:86P3zzV7
コピーにコストがかかる場合は、std::swapやstd::moveのが早い場合があるからね。ムーヴはコピーじゃなくて引っ越しだから。

263デフォルトの名無しさん2019/04/14(日) 17:27:07.70ID:YQLb8Tsj
まあ理論上はね。。そういう実装になってるかどうかはコード見ないとわからんけどね。

264デフォルトの名無しさん2019/04/14(日) 17:29:38.84ID:6Gooiv09
基本的には高速化が目的でmove使わなくてもなんとかなるが、
所有権絡むとmoveは必須になる

forwardはtemplateで引数渡すときにmoveやら参照やらの完全転送する場合必須

265さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/04/14(日) 18:16:04.21ID:86P3zzV7
ちょっと実際にやってみようか。コピーコンストラクタで十秒待つコードを書く。ムーヴコンストラクタとムーヴ代入でなにもしない。
この状態でstd::moveを使わないで代入すると十秒かかる。

266さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/04/14(日) 18:17:20.92ID:86P3zzV7
訂正。「コピー代入で十秒待つコードを追加」

267デフォルトの名無しさん2019/04/14(日) 18:47:05.84ID:xCvd3oj/
>>264
>所有権絡むとmoveは必須
必須とまでは言えない
 T::T(const T& obj)
という通常のコピコンを定義して、コピコンの中でconst剥がししたら
とりあえず所有権の移動もmove無しで逝ける

268はちみつ餃子 ◆8X2XSCHEME 2019/04/14(日) 18:50:44.06ID:+qOUcSLR
>>260
高速化のために出来るのは、アルゴリズムのレベルでの工夫を別にすれば、出来ることはショートカットだ。
高速化とは近道なんだよ。

場合分けが出来るなら、どうしてもやらなければならないこと、やらなくてもいいことを「区別」できる。
区別できるなら、やらなくてもいいことは省略できる。

言語での区別が無くても、たとえば C でも区別を陽に書けばムーブみたいなことだって、そりゃあ出来るけども、
そんなクソ面倒くさいことはしたくないので言語でのサポートがあるとありがたい。

まあ速度的にそこまで必要ないってのなら、区別を積極的に利用しなくてもかまわないよ。
でも、必要なときに出来る方法が用意されているとうれしいし、
C++ を使うときというのはそれなりに実行速度が必要なときだろうし。

269デフォルトの名無しさん2019/04/14(日) 18:52:09.33ID:xCvd3oj/
とわいえmoveコンストラクタの方が意図が明確なコードが書けるから良い。
moveコンストラクタがふさわしい例っていやーつぎごケース。
class BarWithBigData {
  Foo* m_pBigData;
  BarWithBigData() : m_pBigData(new Foo[1000000000000] { }
  ~BarWithBigData() { delete[] m_pBigData; }
  BarWithBigData(BarWithBigData&& rhs) { m_pBigData = rhs.m_pBigData; rhs.m_pBigData = NULL; }
  Foo* refBigData() { return m_pBigData; }
};

ちなstd::arrayは使った無いから知らん

270デフォルトの名無しさん2019/04/14(日) 18:53:54.12ID:xCvd3oj/
訂正orz、

誤:
  Foo* m_pBigData;
  BarWithBigData() : m_pBigData(new Foo[1000000000000] { }

正:
  Foo* m_pBigData;
public:
  BarWithBigData() : m_pBigData(new Foo[1000000000000]) { }

271デフォルトの名無しさん2019/04/14(日) 18:54:00.95ID:mEGAHR/Y
コピコンの中でconst剥がしってちょっと何言ってるか分からない

272さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/04/14(日) 18:55:03.68ID:86P3zzV7
十秒待つ待つコードはWindowsなら#include <windows.h>してSleep(10*1000);であり、
Linuxなら#include <unistd.h>してsleep(10);だ。
C++11ならstd::chronoに待つ関数があったはず。

273さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/04/14(日) 18:57:07.74ID:86P3zzV7
const_castだろ。jk

274デフォルトの名無しさん2019/04/14(日) 18:57:37.12ID:xbTIwD1q
>>271 「move無しで(未定義動作に)逝ける」ってことでしょ。

275デフォルトの名無しさん2019/04/14(日) 18:57:39.39ID:xCvd3oj/
>>271
こうじゃわ;
BarWithBigData::BarWithBigData(const BarWithBigData& rhs) { m_pBigData = rhs.m_pBigData; const_cast<BarWithBigData&>(rhs).m_pBigData = NULL; }

>>269もmoveコンストラの変わりに↑のように書いても逝ける

276デフォルトの名無しさん2019/04/14(日) 19:10:15.32ID:sCsh6GnA
まあ実際にはそんなムーブをゴリゴリ書くことはなくて
m_pBigDataをunique_ptr<array<Foo, 1000000000000>>にしてムーブctor、ムーブop=、デストラクタを=defaultにするけどな

277デフォルトの名無しさん2019/04/14(日) 19:21:51.01ID:kBfBajGR
auto_ptrよりヤバイ奴
const_castでconst外した後実際に書き換えてしまうとかw

278デフォルトの名無しさん2019/04/14(日) 19:38:34.53ID:xCvd3oj/
>>277
ちなconst T&で渡されたブツを関数内でconst_castして書き換えることはそれ自体は合法
ROM上のオブジェクトを渡して死ぬことは有り得るがしたら呼び出し側の違反
また最適化にしくるとしたらそれはコンパイラーのバグ

279デフォルトの名無しさん2019/04/14(日) 19:46:40.04ID:xbTIwD1q
>>278
ROM上になくても const T 型で構築されたオブジェクトを書き換えたら未定義動作になるから、
値が変わらない前提の最適化は許されてるよ。

const 無しで構築されたオブジェクトを指す const& の話と混同してそうだね。

280デフォルトの名無しさん2019/04/14(日) 19:53:21.04ID:uvZ0DMTi
質問: c🐴++のrust相対の優位性はなんですか?

281はちみつ餃子 ◆8X2XSCHEME 2019/04/14(日) 19:57:27.42ID:+qOUcSLR
>>280
正しくないコードをコンパイル出来る。
C++ はプログラマを信頼するのだ。

282デフォルトの名無しさん2019/04/14(日) 19:57:44.28ID:6Gooiv09
>>278
未定義じゃないか
c++03 5.2.11の7にはこんなことが書いてある
[Note: Depending on the type of the object, a write operation through the pointer, lvalue or pointer to data
member resulting from a const_cast that casts away a const-qualifier68) may produce undefined behav-
ior (7.1.5.1). ]

283デフォルトの名無しさん2019/04/14(日) 20:14:45.20ID:xCvd3oj/
>>282
Depending on the type of the objectにおいてmay produce undefined behaviorである
すわなちオブジェクトの型によっては未定義動作に成りえる、
と言っているだけなのでconst T&渡しされたパラメータの書き換えがNGの祥子にはなんね

>>279
>const T 型で構築されたオブジェクトを書き換えたら未定義動作になる
それはそう。しかしconst T&渡しされた関数内でコンパイラはそれを判断できないから
そういった関数内で、参照型かポインタ型引数で関数に渡されたlvalueのconst_castした結果はあくまでlvalue扱い
のはず…

284デフォルトの名無しさん2019/04/14(日) 20:25:38.94ID:xbTIwD1q
>>283
関数内では const& であることを根拠に最適化に使えないのは合ってる。
でもだからといって const& で受け取ったものを書き換えてもよいとは言えない。

void f1(int const&);
int f2()
{
int const x = 1;
f1(x);
return x;
}

x は int const なので、 f2() の return x は f1() が const_cast して x を
書き換える可能性を無視して return 1 に最適化できる、という話。

BarWithBigData const x; が >>275 のコピーコンストラクタに渡された後も
const_cast<BarWithBigData&>(rhs).m_pBigData = NULL; を無視して書き換え前の
m_pBigData が使われる可能性がある。

285デフォルトの名無しさん2019/04/14(日) 20:33:37.36ID:mEGAHR/Y
規格が云々言わなくても、9割のプログラマの意図に反してるで終わる話
頼むからそんなコードは頭の中にしまっといてほしい

286デフォルトの名無しさん2019/04/14(日) 20:37:26.81ID:6Gooiv09
つまりはそれ自体は問題ないが、constとして生成したオブジェクトを渡した瞬間にダメになると言うことか
で、渡すこと自体は制限できないから
プログラム中に罠を仕掛ける事が出来るわけだ。

287デフォルトの名無しさん2019/04/14(日) 20:39:28.07ID:6Gooiv09
てか、mutable付けとけば問題なくなるな。

288デフォルトの名無しさん2019/04/14(日) 20:40:25.78ID:6Gooiv09
const_castも要らないし良いことずくめじゃないかw

289デフォルトの名無しさん2019/04/14(日) 20:45:26.81ID:xCvd3oj/
>>285
わかりたそうする。>>275のケースは素直にムーブコンストラクタを使えば良い。または↓でもだいたいおk
BarWithBigData::BarWithBigData(BarWithBigData& rhs) { m_pBigData = rhs.m_pBigData; rhs.m_pBigData = NULL; }

だいたいというのはムーブコンストラクタ有りの規格のC++コンパイラで↑の非constなコピコンだけ書く警告が出ることがあるからイヤン、

>>286
>つまりはそれ自体は問題ないが
いや問題がある可能性が潰せていない。
void f1(int const&);
int f2()
{
int x = 1;
f1(x);
return x;
}
(xがconst無し)の場合であってもf1(x)がxを書き換えない前提の最適化がf2()にかかったりすると、
f1(x)内で変更したxの値がreturnされるxの値に反映されない可能性がある(f1(x)の呼び出し前後でxがレジスタに乗ったままであるとか、

290デフォルトの名無しさん2019/04/14(日) 21:11:05.08ID:xbTIwD1q
>>289
その x の型は const じゃないから return x は最適化できないよ。

291デフォルトの名無しさん2019/04/14(日) 21:48:29.79ID:uvZ0DMTi
>>281
わからないです。それはメリット?

292デフォルトの名無しさん2019/04/15(月) 01:36:50.54ID:20PlYkfs
ラムダに11個の引数を参照で渡すのと、キャプチャするの、どっちが速いかな?

293デフォルトの名無しさん2019/04/15(月) 02:40:05.27ID:e1RUhzz1
測ればいいだろ

294はちみつ餃子 ◆8X2XSCHEME 2019/04/15(月) 02:50:17.52ID:94OTneyx
>>291
メリットのときもデメリットのときもあるだろう。

295デフォルトの名無しさん2019/04/15(月) 02:59:24.82ID:XbOtvNIU
参照渡しな時点でその場で呼び出すのだろ。
最適化かければ結局同じようなアセンブリになるよ。

296デフォルトの名無しさん2019/04/15(月) 09:13:13.35ID:+swIGlrx
それはわからんだろ
ブロック待ちするかもしれないわけで

297デフォルトの名無しさん2019/04/15(月) 19:29:41.18ID:8vw8m6ly
引数で渡すとスタックに積まれる可能性があるけど、キャプチャするとそうならないのでは。

298デフォルトの名無しさん2019/04/15(月) 19:36:28.26ID:XbOtvNIU
いや、形式上は無名クラスにキャプチャを変数としてぶちこんだもののインスタンス作ってメンバ関数のoperator()呼ぶのだから、スタックは使うだろ。

299デフォルトの名無しさん2019/04/15(月) 20:08:47.93ID:Auf6nZgf
C言語じゃダメなんですか!

300デフォルトの名無しさん2019/04/15(月) 20:20:07.70ID:NSErsM12
いいよ

301デフォルトの名無しさん2019/04/15(月) 20:25:01.30ID:IXPbMXJW
無駄に複雑にしとるな。

302デフォルトの名無しさん2019/04/16(火) 01:01:07.13ID:ZVmLHBMP
>>298
じゃあ、引数で渡すとスタックに積まれない可能性があるので、速い場合もあるのでは?

303デフォルトの名無しさん2019/04/16(火) 02:15:09.28ID:WfxisTJA
海外だと、Javaに負けて、Rustに圧倒的実力で追いやられるC++

304デフォルトの名無しさん2019/04/16(火) 02:27:07.22ID:WfxisTJA

305デフォルトの名無しさん2019/04/16(火) 15:01:04.19ID:RMLQoksE
本当に、コンパイル時に何かしたいならRustだけどね

306デフォルトの名無しさん2019/04/16(火) 18:28:44.44ID:ZVmLHBMP
>>304
Java圧倒的な強さだな。

307デフォルトの名無しさん2019/04/16(火) 18:30:10.89ID:ZVmLHBMP
全部足すと500%位になりそうだから、複数の言語を使う人が多いんだろね。

308デフォルトの名無しさん2019/04/16(火) 21:18:54.40ID:dFuxCqAG
江添が転職できずに困っとるw
まあこいつがクソなだけでc++の問題ってわけじゃないんだがイメージは悪いわな。

309デフォルトの名無しさん2019/04/16(火) 21:36:49.03ID:jMhdT2ep
こうしてみるとホッシーの全タクシー移動ってのは理に適ってるな
バカな公害に捕まる心配が減る

310デフォルトの名無しさん2019/04/16(火) 23:25:27.27ID:LsPOsuul
なんか私怨でもあるんかいな

311デフォルトの名無しさん2019/04/16(火) 23:41:35.10ID:InK+cNH/
喫煙者が目に入った途端癇癪起こして殴り掛りかかる狂犬なんだっけ?

312デフォルトの名無しさん2019/04/17(水) 00:03:12.24ID:vVzTJh6n
知らね
よく人を招いているようだし揉めたことがある人も少なくはないんじゃいか

313はちみつ餃子 ◆8X2XSCHEME 2019/04/17(水) 01:12:11.58ID:UWuCQ9XR
>>310-311
当事者の様々な主張の食い違いがあるので、結論としては「わからない」。
少なくとも彼自信の主張としては掴みかかってきたのを払いのけた結果として眼鏡が割れたということになっている。
(江添が殴りかかったわけではなく、むしろ防衛した側、と江添は主張している。)

江添が煙草について過激な意見を持っているのは確かだが、
シェアハウス内で禁煙場所であると合意がなされている場所で煙草を吸った客人がいたというところは当事者全体が認めているようだ。

314デフォルトの名無しさん2019/04/17(水) 08:21:52.75ID:DaACwh1w
恨みというかまともにコード書かない奴がクソ意見で現場荒らすって事自体がクソだと思うわけで、
まあその反動で現場で働くことができないって事になればザマァって思う。

315デフォルトの名無しさん2019/04/17(水) 09:46:31.27ID:vVzTJh6n
現場を荒らしてる?

316デフォルトの名無しさん2019/04/17(水) 09:53:30.15ID:vVzTJh6n
どのプロジェクトにも参加してないと認識してたけど乗り込んでケチつけてたりするのかな
まあ俺ドワンゴとは縁が無いからどこで何してようが関係ないけど

317デフォルトの名無しさん2019/04/17(水) 17:08:02.09ID:I32j715f
C++がPython抜いて3位 - 4月TIOBE言語ランキング 2019/04/17 10:55 後藤大地
https://news.mynavi.jp/article/20190417-810363/

TIOBE Softwareから、2019年4月のTIOBE Programming Community Index (PCI)が公開された。
TIOBE PCIは、複数の検索エンジンの検索結果から、対象となるプログラミング言語が
どれだけ話題になっているかをインデックス化したもの。

4月TIOBE Programming Community Index / 円グラフ
C++相談室 part142 	->画像>13枚

2019年4月はC++がPythonを抜いて3位に返り咲いた。ただし、Pythonのシェアが下落したの
ではなく、Pythonの増加傾向をC++の増加が上回ったことによる結果と思われる。C++は
長期にわたって下落傾向が続いていいたものの、2019年に入ってから増加傾向へ転じている。
Pythonも増加傾向が続いており、どちらも今後さらにインデックス値を増やす可能性がある。

長期にわたって1位を確保しているJavaは依然として1位のポジションにあるが、下落の
傾向が続いている。2位のC言語も長期で見ると下落を続けており、C++やPythonの存在感が
強くなってきている。

318デフォルトの名無しさん2019/04/17(水) 17:11:50.34ID:hoIwj+sG
>>317
何回だからみんな何回もググってるんだよ

319デフォルトの名無しさん2019/04/17(水) 18:34:58.84ID:LllPIzo0
俺が検索しまくったからだろうな。

320デフォルトの名無しさん2019/04/17(水) 19:59:29.56ID:fJF68+PR
今もしインターネットが完全にシャットダウンされると
プログラム書けなくなるプログラマけっこう数いるだろうな

321はちみつ餃子 ◆8X2XSCHEME 2019/04/17(水) 20:18:46.81ID:UWuCQ9XR
>>320
cpprefjp はとりあえず手元にダウンロードしてあるけど。

322デフォルトの名無しさん2019/04/17(水) 20:35:09.94ID:P5fp2rRi
どうやってダウンロードしたの?
巡集じゃできなかった…

323デフォルトの名無しさん2019/04/17(水) 20:39:18.77ID:WWgiT6Ow
githubじゃない?

324デフォルトの名無しさん2019/04/17(水) 21:27:54.32ID:P5fp2rRi
そうなんだ、ありがとう

325デフォルトの名無しさん2019/04/19(金) 02:16:29.43ID:/DYxLH/O
どういたしまして。

326デフォルトの名無しさん2019/04/19(金) 08:26:54.03ID:gmGy9oTC
江添は職質裁判でも、不当判決が出たので控訴するみたい

警官は、複数人で口裏合わせするから、民間人は勝てない

漏れもやられたけど、酒酔い運転でも、漏れが機械に息を吹き掛けても、ランプが点かない。
そこで、警官がクルッと後ろを向くと、ランプが点く

そっと見たら、酔っ払い警官が、自分で息を吹きかけて、ランプを点ける

こういう裁判で争っている人もいるけど、
警官は複数人で口裏合わせするから、絶対に勝てない!

警官は皆、このやり方で出世しとる

327デフォルトの名無しさん2019/04/19(金) 08:33:03.47ID:PWe5dNBv
ありゃ普通に対応してりゃ済む話だと思うがね。

やってることは完全に当たり屋だろ。

328デフォルトの名無しさん2019/04/19(金) 09:27:15.01ID:biH+fvR8
>>326
Rubyバカの人か。相変わらず思い込みが激しく、言っていることが滅茶苦茶だな。

329デフォルトの名無しさん2019/04/19(金) 12:05:02.85ID:rPSCrubJ
どんだけ江添好きなの?w

330デフォルトの名無しさん2019/04/19(金) 13:28:48.91ID:W5tFDDw/
日本でC++真剣にやってるのって彼だけだし

331はちみつ餃子 ◆8X2XSCHEME 2019/04/19(金) 13:41:25.74ID:mypEidUJ
だけ、というのは言い過ぎだと思うが、
日本語で最新の C++ の事情を本にしているのは江添くらいしかいないからなぁ。

江添本人は自分のことを実務家ではなく教育者だと考えているようだし、
(肩書は何なんだろ? エヴァンジェリストのようにも見えるが……)
今のポストは妥当なとこだろ。
そのままやってくれればありがたいもんだ。

332デフォルトの名無しさん2019/04/19(金) 13:41:50.58ID:i8rhoxHy
つまり他の日本人は竹刀とか木刀ってことか。

333デフォルトの名無しさん2019/04/19(金) 13:50:35.12ID:rPSCrubJ
江添個人の裁判は完全にスレチなんだよなあ
仮に違法な取り締まりだと判断されても警察のやり方が改まるわけもないだろうし

334デフォルトの名無しさん2019/04/19(金) 14:15:26.68ID:JVA9qfGz
江添すなわちC++なのだから
江添の話題は全てC++の話題だょ

335デフォルトの名無しさん2019/04/19(金) 15:08:33.32ID:j263LUSd
宗教の話はよそでやってくれないか

336デフォルトの名無しさん2019/04/19(金) 15:16:01.57ID:JwgM4FAg
もう少しc++の話をしてくれと思う事もある

337デフォルトの名無しさん2019/04/19(金) 18:50:10.05ID:/DYxLH/O
はちみつさんも真剣にやってると思います。

338デフォルトの名無しさん2019/04/19(金) 19:16:13.92ID:yj9Iz3m1
こんな事言うと勘違いされそうだが、はちみつ餃子はちゃんとしてると思うよ
C++に関しておかしなことは言っていない
ていうか、はちみつ餃子ってものすごい不味そうなんだがそんなの本当にあるのだろうか・・?

339デフォルトの名無しさん2019/04/19(金) 19:17:39.46ID:j263LUSd
肉料理にはちみつを入れること自体はわりと普通
量の問題

340デフォルトの名無しさん2019/04/19(金) 19:28:19.17ID:PWe5dNBv
いや明らかに開発してねーだろって感覚じゃねーか。
まあここならそれでもいいんだろうけれど。

341はちみつ餃子 ◆8X2XSCHEME 2019/04/19(金) 19:51:37.44ID:mypEidUJ
>>338
ググればわかるけどはちみつ餃子はそこそこありふれた料理だよ。

その昔、 higepon が自分でもどうして higepon などと名乗ったかわからない
と述べていたので、そのくらい意味不明感じにしようと思って適当に
思いついた語をコテハンにした。
Scheme スレが本来の住処なので当初は SCHEME餃子 と名乗っていたけど、
他のスレにも顔を出すようになったのでなんとなくはちみつ餃子になった。
およそ意味不明な組合せにしたつもりだったんだけど、
実際にある料理だとは後になってから知った。

342デフォルトの名無しさん2019/04/19(金) 21:11:54.81ID:fEN/Hp+M
initializer_listを引数に取るオブジェクトを引数に取る関数で
下記のケースでUniversal Initializationが効かないのですが
何かいい手はないでしょうか

using KVPCollectionType = std::map<std::string, std::string>;
void f(const KVPCollectionType&& kvps = {});

f(); // OK
f({}); // OK
f(KVPCollectionType{{"key1", "value1"},{"key2","value2"}}); // OK

f({{"key1", "value1"},{"key2","value2"}}); // NG これをやりたい!!

343デフォルトの名無しさん2019/04/19(金) 21:13:17.21ID:UQpKfTQY
エピ…いや何でもない

344デフォルトの名無しさん2019/04/19(金) 21:17:05.52ID:fEN/Hp+M
すみません、訂正です
× void f(const KVPCollectionType&& kvps = {});
○ void f(const KVPCollectionType& kvps = {});

345デフォルトの名無しさん2019/04/19(金) 21:22:53.30ID:/DYxLH/O
アークエンジェルに搭載されてるstd::variant<>。

346デフォルトの名無しさん2019/04/19(金) 22:49:42.25ID:DWxUZ3pl
wandboxで試したらclangでもgccでもc++11 -pedanticで通ったけど?

347デフォルトの名無しさん2019/04/20(土) 00:01:37.25ID:a7z6m7l4
ごめんなさい、ごめんなさい。本当にごめんなさい。
勝手に脳内で要約したのが間違えまくってました

正確には以下の通りです。
#include <map>
#include <memory>
using KVPCollectionType = std::map<std::string, std::string>;
class c {
public:
c(const KVPCollectionType&& kvps = {}){}
};
int main()
{
auto ok = std::make_shared<c>(KVPCollectionType{{"key1", "value1"},{"key2","value2"}}); // OK
auto ng = std::make_shared<c>({{"key1", "value1"},{"key2","value2"}}); // NG!!!
}

348デフォルトの名無しさん2019/04/20(土) 10:47:21.77ID:5oa1AZjP
全てのバグを絶滅せよ。
「今日は死に日和」好評発売中。

349デフォルトの名無しさん2019/04/20(土) 11:08:43.59ID:3kBWifqd
C++11や14を使ってる人、コンパイラは何ですか。

350デフォルトの名無しさん2019/04/20(土) 11:25:30.96ID:m+a2EYsq
ゲームエンジン作ってる人いますか

351デフォルトの名無しさん2019/04/20(土) 11:30:38.02ID:5oa1AZjP
clとgcc。

352デフォルトの名無しさん2019/04/20(土) 13:20:15.93ID:lwVpLCzw
c+11以降はバージョン違うと全く別のコンパイラ

353デフォルトの名無しさん2019/04/20(土) 13:23:19.12ID:8Vh3F1FF
Twitchでプログラミングしてるやつの中でゲームエンジンも居たような

354はちみつ餃子 ◆8X2XSCHEME 2019/04/20(土) 13:30:02.11ID:7hm/FBJ7
>>347
テンプレートの推論ルールとして「関数テンプレートのパラメータとして波カッコの初期化子リストを渡して型推論させることはできない。」
ということになっている。 ( https://cpprefjp.github.io/lang/cpp11/uniform_initialization.html )
make_shared の実際の型は template <class T, class... Args> shared_ptr<T> make_shared(Args&&... args); なので、
このとき Args が推論できない以上はどうにもならん。
型を固定した専用の関数をはさんでこんな感じにするくらいのことしか思いつかないな。

#include <map>
#include <memory>
#include <initializer_list>
#include <utility>

using KVPCollectionType = std::map<std::string, std::string>;
class c {
public:
c(const KVPCollectionType&& kvps = {}){}
c(const std::initializer_list<typename KVPCollectionType::value_type>){}
};

std::shared_ptr<c> make_c_shared(std::initializer_list<typename KVPCollectionType::value_type> a) {
return std::make_shared<c>(std::move(a));
}

std::shared_ptr<c> make_c_shared(KVPCollectionType&& a) {
return std::make_shared<c>(std::move(a));
}

int main() {
auto ok = make_c_shared(KVPCollectionType{{"key1", "value1"},{"key2","value2"}});
auto ng = make_c_shared({{"key1", "value1"},{"key2","value2"}});
}

355はちみつ餃子 ◆8X2XSCHEME 2019/04/20(土) 13:32:51.70ID:7hm/FBJ7
>>347 >>354
呼出す側で

auto ng = std::make_shared<c, std::initializer_list<typename KVPCollectionType::value_type>>({{"key1", "value1"},{"key2","value2"}});

というように型を明記してもかまわないけど、使う側でいちいちこんなこと書きたいわけじゃないだろ?

356はちみつ餃子 ◆8X2XSCHEME 2019/04/20(土) 13:35:42.76ID:7hm/FBJ7
>>347
ちゃんと考えたら >>354 はいらんことしとるな……
これで充分か

#include <map>
#include <memory>
#include <utility>

using KVPCollectionType = std::map<std::string, std::string>;
class c {
public:
c(const KVPCollectionType&& kvps = {}){}
};

std::shared_ptr<c> make_c_shared(KVPCollectionType&& a) {
return std::make_shared<c>(std::move(a));
}

int main() {
auto ok = make_c_shared(KVPCollectionType{{"key1", "value1"},{"key2","value2"}});
auto ng = make_c_shared({{"key1", "value1"},{"key2","value2"}});
}

357デフォルトの名無しさん2019/04/21(日) 08:19:35.76ID:jJhiZdMc
>>354-356
ありがとうございます、その手を使わせていただきます
状況によって推定ルールが変わるのはやめて欲しいなってちょっと思ったんですけど。

358デフォルトの名無しさん2019/04/22(月) 23:55:58.01ID:uyfay/gq
メンバアクセスにthis->つける?

359デフォルトの名無しさん2019/04/23(火) 00:01:58.24ID:cW1os5L0
エディタの補完機能使いたいときにたまにそうやって補完して最後に消す。
が、たまに忘れる。

360デフォルトの名無しさん2019/04/23(火) 00:02:35.52ID:BSgCsXpz
IDEの都合で付ける事が良くある
付けないと補完候補多すぎて

361デフォルトの名無しさん2019/04/23(火) 00:09:08.10ID:JKfCESEZ
ああなるほど
補完候補を絞るのには便利ですね

362デフォルトの名無しさん2019/04/23(火) 18:16:01.64ID:Wx+D+gzo
メンバであるという保証ができるので付ける

363デフォルトの名無しさん2019/04/23(火) 19:39:28.32ID:cE0Yu4R7
メンバ名は頭にm_付けろみたいなクソルールよりずっといいと思うので付けるべき

364デフォルトの名無しさん2019/04/23(火) 19:42:38.83ID:JKfCESEZ
仮引数と別の名前つけるのだるいからm_は別に良いと思う

365デフォルトの名無しさん2019/04/23(火) 20:02:01.86ID:8XemHsTC
メンバ変数に専用の色付けたらいいじゃん

366デフォルトの名無しさん2019/04/23(火) 20:13:43.06ID:sktjqElV
引数そのままメンバに入れるなら引数に_つけてvar(_var)って初期化してるわ

367 ◆QZaw55cn4c 2019/04/23(火) 20:16:13.74ID:JSYnwir1
>>366
それって var(var) でも問題ないんですよ…

368さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/04/23(火) 21:18:06.78ID:DAl4rXky
バーバー

369デフォルトの名無しさん2019/04/23(火) 21:32:08.36ID:BSgCsXpz
>>367
綴り間違えたら悲惨なことになった

370デフォルトの名無しさん2019/04/23(火) 21:34:08.78ID:3k1+3l7a
ハンガリアン記法は、入力補完のないエディタ上での可読性を高めるのに役立ってるでしょ。今でも。

371デフォルトの名無しさん2019/04/23(火) 21:35:06.30ID:8XemHsTC
ゴミ使ってる奴のことなんか知らん

372デフォルトの名無しさん2019/04/23(火) 21:36:10.37ID:BSgCsXpz
あれ可読性落ちるだろ

373デフォルトの名無しさん2019/04/23(火) 21:39:11.30ID:lLaZpSEH
定期的にunsignedとsigned混在させてハマるアホをみるとハンガリアン必要だと思うわ

374デフォルトの名無しさん2019/04/23(火) 21:40:37.34ID:lAbUfbw7
C#で入力補完のないエディタがどうとかさすがにナンセンスでは
だってvisual studio使うじゃん

375デフォルトの名無しさん2019/04/23(火) 21:41:16.53ID:ZkNEZW45
どっちでもいいわ。
大抵の場合そんなとこに気を使わんといかんコードになってることのが問題。

376デフォルトの名無しさん2019/04/23(火) 21:45:47.89ID:lLaZpSEH
>>375
こういうやつがそのうちハマって丸1日つぶしたりするんだよなw

377デフォルトの名無しさん2019/04/23(火) 21:51:11.17ID:8XemHsTC
>>373
関係なくて草

378デフォルトの名無しさん2019/04/23(火) 21:55:03.06ID:lLaZpSEH
関係あることわかってなくて草

379デフォルトの名無しさん2019/04/23(火) 21:55:54.04ID:8XemHsTC
黙ってろゴミw

380デフォルトの名無しさん2019/04/23(火) 21:59:25.62ID:ZkNEZW45
>>376
だから人を嵌めるようなコード書くなつってんだよばか。

381デフォルトの名無しさん2019/04/23(火) 22:06:36.15ID:lLaZpSEH
>>380
コードの問題じゃなくて言語仕様の問題だから
こういうえらそうなくせに何もわかってないカスが一番始末に困る

382デフォルトの名無しさん2019/04/23(火) 22:53:19.60ID:ZkNEZW45
いつの間にかハンガリアンが言語仕様になってた。。

383デフォルトの名無しさん2019/04/23(火) 23:10:13.77ID:lLaZpSEH
ハンガリアンも防御的なプログラミングと考えたら悪くないよ
成り立ち調べてみな
でも基本型とポインタだけだな
クラスには無用だと思う

384デフォルトの名無しさん2019/04/23(火) 23:27:23.37ID:8XemHsTC
てめーらはまともなIDEかエディタ使ってねえのかよ

385デフォルトの名無しさん2019/04/23(火) 23:37:57.35ID:JKfCESEZ
むしろVSがないと何も書けない

386デフォルトの名無しさん2019/04/23(火) 23:55:15.96ID:UPBQPhwq
VSがあっても何も書けない。

387デフォルトの名無しさん2019/04/23(火) 23:55:30.60ID:ZkNEZW45
c++みたいに型情報ありがデフォルトの言語でハンガリアンとか二重メンテもいいとこだわ。

388デフォルトの名無しさん2019/04/24(水) 01:00:02.97ID:pnt3hUol
前方宣言したクラスをTにしたスマポメンバでコンパイル通るときと通らないときがあって調べてたら
デストラクタがインライン(暗黙)だと駄目だとわかった
しかもこの問題が起こるのはunique_ptrのときだけでshared_ptrはデストラクタの定義に関係なく通る
わけわからんぞ
教科書に書いておいてくれ

class ClassB;
class ClassA{
public:
ClassA();
private:
std::unique_ptr<ClassB> u; // NG
std::shared_ptr<ClassB> s; // OK
}

---

class ClassB;
class ClassA{
public:
ClassA();
~ClassA(); ←これでunique_ptrもOK
private:
std::unique_ptr<ClassB> u; // OK
std::shared_ptr<ClassB> s; // OK
}

389デフォルトの名無しさん2019/04/24(水) 07:38:59.52ID:IdP8M60W
>>388
unique_ptr<T>のデストラクタはインスタンス化するときにTが完全型であることを要求する(デストラクタで直接Tのデストラクタを呼ぶ)
unique_ptrを内包するクラスのデストラクタが暗黙だとクラス内でコンパイラによって実装されるけど、その場でunique_ptrのデストラクタを要求する
しかし、その翻訳単位内でTの定義が無ければコンパイルエラーとなる

unique_ptr<T>を内包するクラスのデストラクタがとりあえず宣言だけでもあると
実際の定義がある場所で同様の事が起こるので、その場所でTの定義が見つかればいい
その場合に定義を書かないと、コンパイラさんが適切な翻訳単位内に定義をおいてくれるみたい

shared_ptrは動的削除子のおかげでデストラクタが呼ばれるところで適切にデリータを定義し、デストラクタを呼ぶようになっているのでこの様な問題は起こらない
shared_ptr<T>のデストラクタ内ではTのデストラクタを直接呼び出すようなコードが無い

390デフォルトの名無しさん2019/04/24(水) 18:54:26.06ID:pnt3hUol
>>389
解説ありがとう

391デフォルトの名無しさん2019/04/26(金) 01:05:34.79ID:UW94aXeh
うーんC++プライマー8500円かぁ。本家のプログラミング言語C++第4版はもっとするし
情報量からすると安いが本一冊にポンと出すにはお高い……日本語である程度網羅的な本となるとこの2冊くらいよね

392デフォルトの名無しさん2019/04/26(金) 19:40:01.51ID:aJMYFNVy
set<double> って int のときと同様にちゃんとソートされるんですか?

393デフォルトの名無しさん2019/04/26(金) 20:34:04.97ID:Fns+A8Ou
NaNが無ければ大丈夫NaNじゃね

394デフォルトの名無しさん2019/04/26(金) 20:34:22.70ID:Fns+A8Ou
NaNが無ければ大丈夫NaNじゃね

395デフォルトの名無しさん2019/04/26(金) 22:17:06.30ID:PbDaLlJb
のちに永久保存される平成最後のスベり

396デフォルトの名無しさん2019/04/26(金) 23:59:20.16ID:LBUDtqYL
たしかにそうだな・・いよいよ平成最後なんだな
みなさん、>>393-394 みたいな事にならないよう、気をひきしめましょう

397デフォルトの名無しさん2019/04/27(土) 00:20:06.56ID:nrL5Mhiq
平成最後っていう言い回し使われすぎて嫌いになってきた

398デフォルトの名無しさん2019/04/27(土) 00:23:11.48ID:v7q7vgVx
イテレータの参照を次に移すときってなんでitr++ではなく++itrなの?

399デフォルトの名無しさん2019/04/27(土) 00:33:20.40ID:nrL5Mhiq
ヤフーでぐぐれ

400デフォルトの名無しさん2019/04/27(土) 01:04:24.73ID:oB7jkl++
素直な実装だとitr++より++itrのほうが速いんじゃないかなあ、となんとなくみんなが思っているから

401デフォルトの名無しさん2019/04/27(土) 01:07:57.61ID:v7q7vgVx
速度に差が出るのか
知らなかった

402デフォルトの名無しさん2019/04/27(土) 01:35:51.19ID:KjSesqKI
インクリメント後のイテレーターの値を返す処理の実装を考えると
先の場合はインクリメントしてそのまま渡せばいいけど
後の場合はインクリメント前の値を保存しといてそれを渡さないといけないので一手間かかるから
・・なんだけど諸々の最適化とか色んな条件とか考えたらそこまで差がでるかどうかはよくわからん

403デフォルトの名無しさん2019/04/27(土) 01:38:33.58ID:EJ6OYH9I
it++だと、戻り値をコピーしてとっておいてから、ポインタなりを進めた後にreturnする必要があるが、
++itだと、ポインタを進めた後に参照を返すだけでするからな。

404デフォルトの名無しさん2019/04/27(土) 01:39:08.58ID:EJ6OYH9I
被ったw

405デフォルトの名無しさん2019/04/27(土) 11:13:20.29ID:qp4sR6Ay
>>398
ite++と++iteなんて気持ちの問題
てか範囲for文使えばいい

406デフォルトの名無しさん2019/04/27(土) 11:46:20.51ID:Tan1PMrG
>>402-405
cppcheck にかけたらちゃんと警告出るね。

407デフォルトの名無しさん2019/04/27(土) 14:06:33.77ID:dwPa57iA
どうせ戻り値捨てるんだったら++itを選んでおいて損はない
無駄にit++を使うのは時期尚早な最不適化って奴だ

408デフォルトの名無しさん2019/04/27(土) 19:31:57.61ID:Ht8C3PIL
C++で書くんだから後置インクリメントの方がメインに決まってんじゃん
前置は異端だ

409デフォルトの名無しさん2019/04/27(土) 19:37:22.12ID:nrL5Mhiq
殺せ

410デフォルトの名無しさん2019/04/27(土) 20:12:28.01ID:uerCNQ9f
++C

411デフォルトの名無しさん2019/04/27(土) 20:53:36.82ID:hHA0b+W+
C++でいいんだよ。
規格は一歩進むけど、使ってるやつはbetter Cばかりってな

412デフォルトの名無しさん2019/04/27(土) 20:55:05.03ID:nrL5Mhiq
++C++まだかよ

413デフォルトの名無しさん2019/04/27(土) 22:37:09.45ID:Czz6ceI0
>>411
vectorとかstringとか使わんの?

414デフォルトの名無しさん2019/04/28(日) 03:35:47.43ID:c2OY2Ben
CArrayとCStringだぞ
コピコンは定義されてないから自分で作るぞ

415デフォルトの名無しさん2019/04/28(日) 11:01:20.49ID:DJV+PGkd
CArrayは、<algorithm>ヘッダーで定義された信頼性の高いユーティリティ関数を使えないのがね・・・。

416デフォルトの名無しさん2019/04/28(日) 13:46:52.13ID:nadmD8id
>>413
この思考がbetter C

417デフォルトの名無しさん2019/04/28(日) 14:25:38.47ID:n1RanWws
>>416
わけわからん

418デフォルトの名無しさん2019/04/28(日) 14:29:28.69ID:c2OY2Ben
俺がBest Cだ

419はちみつ餃子 ◆8X2XSCHEME 2019/04/28(日) 14:56:12.05ID:mA4VukHK
>>415
イテレータをうまいこと定義すれば使えるやつも結構あるんじゃね?
そうでもない?

420デフォルトの名無しさん2019/04/28(日) 15:37:56.41ID:UbqPSgHc
inconsistent begin/end types in range-based ‘for’ statement

gcc(g++) 8.2で -std=c++17オプションでコンパイルで
範囲forでこのエラーが出るんだが
begin endの型不一致の制限緩和されいるはずだよな?
原因わかる方いますか?

421デフォルトの名無しさん2019/04/28(日) 15:49:39.60ID:4R543R/q
>>415
GetData()とGetData()+GetSize()を渡せば、とりあえず動くんじゃね?

422デフォルトの名無しさん2019/04/28(日) 16:05:30.47ID:n1RanWws
>>420 比較演算子定義されてないとか?

423デフォルトの名無しさん2019/04/28(日) 16:22:25.11ID:UbqPSgHc
>>422
int _n = 0;
auto __begin = _container.begin();
auto __end = _container.end();
for (; __begin != __end; ++__begin) {
_n = *__begin;
}
比較演算子はちゃんと定義してるし
上のコードは何故かコンパイル通る
だけど
for (const auto _n : _container) {
//hoge
}

は何故か通らない

424デフォルトの名無しさん2019/04/28(日) 16:41:14.97ID:n1RanWws
範囲for文のconst autoをconst auto&かauto&&に変えるとどうなる?

425デフォルトの名無しさん2019/04/28(日) 16:43:13.35ID:UbqPSgHc
>>424
auto&&にした時のみエラーが増えます
cannot bind rvalue reference of type ‘const long unsigned int&&’ to lvalue of type

426デフォルトの名無しさん2019/04/28(日) 16:54:13.46ID:/ZzCGjK1
beginとendのシグニチャは?

427デフォルトの名無しさん2019/04/28(日) 17:02:57.34ID:UbqPSgHc
>>426
using iterator = typename std;;vector<int>::iterator;
using const_iterator = typename std;;vector<int>::const_iterator;
using my_iterator = MYIterator;
my_iterator begin();
iterator end();
const my_iterator begin() const;
const_iterator end() const;
const my_iterator cbegin() const;
const_iterator cend() const;

428デフォルトの名無しさん2019/04/28(日) 17:18:10.81ID:HBE/zmE6
これで動かん?
for (auto&& _n : _container) {
}

429デフォルトの名無しさん2019/04/28(日) 17:28:42.95ID:UbqPSgHc
>>428
動かないです

430デフォルトの名無しさん2019/04/28(日) 18:12:40.94ID:/ZzCGjK1
MYIteratorの実体がunsigned longみたいだけど
vector<int>::iteratorの実体がポインタだったらoperator!=の定義できなくない?

431デフォルトの名無しさん2019/04/28(日) 18:13:25.64ID:7uO4eV2c
>>420
wandboxで再現コード作って出直すか、それができないんならエスパーに頼んだほうがいいんじゃないかな。
https://mevius.2ch.net/test/read.cgi/tech/1187922645/

432デフォルトの名無しさん2019/04/28(日) 20:53:07.97ID:B+3vkW9O
>>423
bool operator != (~) const ← これ付け忘れてないか?

433デフォルトの名無しさん2019/04/28(日) 20:57:20.67ID:HwAGJ3yN
constつけ忘れは時々はまる

434デフォルトの名無しさん2019/04/28(日) 23:15:17.87ID:UbqPSgHc
>>427
自己解決
const iteratorとconst_iteratorが一緒だと勘違いしていた
const my_iteratorではなくmy_const_iteratorを実装して返り値とすべきでした

435デフォルトの名無しさん2019/04/29(月) 08:12:30.69ID:caHZo185
struct A{
int member;
};
struct B: A{
void run(){member = 0;}//ok
};

template<typename T>
struct TA{
T member;
};
template<typename T>
struct TB:TA<T>{
void run(){member = 0;}//NG。this->memberとするとok
};
クラステンプレートを継承してクラステンプレートを作成した場合にthisでないと継承元のメンバーが見えないのは仕様?

436デフォルトの名無しさん2019/04/29(月) 10:32:33.68ID:ytpB6N2f
仕様
一寸前までのmsvcではなぜか通っていたけど

437デフォルトの名無しさん2019/04/29(月) 11:47:53.29ID:atpu4K08
>>436
なんでそんな仕様になってるんだろう…

438デフォルトの名無しさん2019/04/29(月) 12:13:25.59ID:TWBg2sM/
>>437
2phase lookupだから
最初のTB解釈時にはTAが型引数一つのtemplate classであるという情報以外使わない
だいたいTAが特殊化される可能性があるだろ

439デフォルトの名無しさん2019/04/30(火) 10:16:07.47ID:5viqjSMx
8bitや16bitのintしか使えない環境で、
32bitなどの大きな数を扱うにはどうすれば良いですか?
変数をいくつかつなげて大きな数を表現できないかと思っているのですが、やり方が分りません。
ご存知の方いらっしゃいましたら教えて頂けると嬉しいです。

4404392019/04/30(火) 10:20:33.67ID:5viqjSMx
補足させて下さい。
足し算、引き算は出来るようにしたいです。
可能でしたら、掛け算や割り算もできると助かります。

441デフォルトの名無しさん2019/04/30(火) 10:25:07.05ID:l5C1eDEl
多倍長演算で検索

442デフォルトの名無しさん2019/04/30(火) 10:45:28.19ID:Cm5pFeJF
>>438
> だいたいTAが特殊化される可能性があるだろ
なるほどそりゃそうか、サンクス

443 ◆QZaw55cn4c 2019/04/30(火) 11:43:40.55ID:iYYZTFZo
>>439-440
http://2chb.net/r/tech/1434079972/51
近々、委譲をやめて継承に戻すつもりです
あと掛け算はkaratsubaを適用できる目処がたちました
x64 に特化してインラインアセンブラ化することも考えています

444はちみつ餃子 ◆8X2XSCHEME 2019/04/30(火) 12:03:49.54ID:MGpUBTsC
karatsuba はかなり桁数が多いときじゃないと効果がないとも聞くけど

445 ◆QZaw55cn4c 2019/04/30(火) 12:09:22.58ID:iYYZTFZo
>>444
多分それは乗算FFTのことかと

446デフォルトの名無しさん2019/04/30(火) 12:28:54.66ID:44LYo/LT
>>439
stdint.h で int_least32_t とか使えるのでは?

447 ◆QZaw55cn4c 2019/04/30(火) 13:43:58.68ID:iYYZTFZo
>>446
8bit/16bit CPU で int_least32_t とかはそもそも存在しないのでは?

448デフォルトの名無しさん2019/04/30(火) 14:19:40.82ID:44LYo/LT
>>447
「8bitや16bitのintしか使えない」を見て long や long long はもっと大きいんじゃないの?と思ったんだよ。
「整数型」の意味で"int"って書いてたんなら、確かに存在しない環境のことを言ってるのかもしれない。
その場合は ISO C/C++ の LONG_MAX の最低絶対値の要求に準拠できないってことになるんだけど。

449デフォルトの名無しさん2019/04/30(火) 14:19:47.17ID:gDkH0fQs
8bit pic用XCでもlongは32bitなのに

450 ◆QZaw55cn4c 2019/04/30(火) 15:03:05.44ID:iYYZTFZo
>>449
それはそれですごいインプリメンテーションですね…
8 bit PIC で 32bit int がさくさく書けちゃうとは、そのインプリメンターは根性がありますね、それか頭のねじが何本か外れていて「無理を無理と思わない人」とか…

451デフォルトの名無しさん2019/04/30(火) 15:29:16.24ID:0LsajAP1
shortは16bit固定でlongは32bit固定でしょ。何言ってんの?

452デフォルトの名無しさん2019/04/30(火) 16:18:35.89ID:coQMvXAj
>>451
いや、お前こそ何を言ってるんだ?

453 ◆QZaw55cn4c 2019/04/30(火) 16:37:10.66ID:iYYZTFZo
>>451
残念でした、short も long もインプリメンターが好きに実装していいのですっ!きりっ!

454さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/04/30(火) 16:45:08.36ID:lzNlO/OB
>>451
64-bit Linux でsizeof(long) が8だった。移植がある場合は<cstdint>使わんとあかん

455デフォルトの名無しさん2019/04/30(火) 17:46:03.06ID:bcA0O1+B
intが16bitならISOの規格は満たしてることになるかな。

32bit以上の長い整数はクラスと演算子オーバーロードで誤魔化すか。
頑張ってもリテラル表記もダメだろうから、使い勝手は悪いよな。

456デフォルトの名無しさん2019/04/30(火) 19:51:46.33ID:tnl21ewQ
>>451
うろ覚えだが
VC Win32bit: int 32bit long 32bit pointer 32bit
gcc Linux32bit: int 32bit long 32bit pointer 32bit -ここまでは同じ

VC Win64bit: int 32bit long 32bit pointer 64bit -int64_tで64bit整数
gcc Linux32bit: int 32bit long 64bit pointer 64bit

457デフォルトの名無しさん2019/04/30(火) 20:17:37.41ID:YvhWBPAF
既にLP64とかLLP64とかの呼び方が存在するんだから、そっちを使おうよ
https://ja.wikipedia.org/wiki/64%E3%83%93%E3%83%83%E3%83%88#64%E3%83%93%E3%83%83%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF%E3%83%A2%E3%83%87%E3%83%AB

458デフォルトの名無しさん2019/04/30(火) 20:34:29.38ID:4LCMFhXh
厳密なbit長が必要なときにintだのlongだの使っちゃ駄目よ

459デフォルトの名無しさん2019/04/30(火) 20:56:09.36ID:ba2OmOyM
じゃあ何を使えばいいの?

460デフォルトの名無しさん2019/04/30(火) 20:59:46.66ID:jq/I62+g
int_leastシリーズでは?

461デフォルトの名無しさん2019/04/30(火) 21:02:03.72ID:tJFiug19
intの配列のラッパーのようなものから再発明すりゃーいい

class Bignumber{
int number[4];

Bignumber(const String num){
for(int i=0; i<4; i++){
number[i] = //考えるのが面倒臭い
}
}

Bignumber operator+(){
//以下、延々とオペレータオーバーロードが続く
}

};

462 ◆QZaw55cn4c 2019/04/30(火) 21:02:11.05ID:iYYZTFZo
>>459
int64_t とか int32_t とか cstdint の面々を使うしかないでしょうね…私もデフォでそうするようになりました

463デフォルトの名無しさん2019/04/30(火) 21:08:03.86ID:0LsajAP1
あ…ありのまま 今 起こった事を話すぜ。
平成の終わりにいろんな奴からshort/longに対する認識の誤りを指摘される恥辱を味わった。
何言ってるかわからねーと思うが(以下略

464デフォルトの名無しさん2019/04/30(火) 21:08:35.71ID:QYmLdpSV
なんかもうビットという表現すら無くそうとしてるんじゃなかった?

465デフォルトの名無しさん2019/04/30(火) 21:19:14.38ID:l5C1eDEl
制限された環境で使える多倍長整数のライブラリくらいいくらでもありそうだけど

466デフォルトの名無しさん2019/04/30(火) 21:42:28.23ID:ba2OmOyM
>>462
なるほど、cstdint ですか!
教えてくださりありがとうございます

467デフォルトの名無しさん2019/04/30(火) 23:24:19.16ID:xHYWEb3z
ビット数を付けるのは、MISRA-C で決まっているだろ

int8, 16, 32
uint8, 16, 32

468デフォルトの名無しさん2019/05/01(水) 00:05:54.61ID:rGIFhODV
C++の規格上はintは16 bit以上(ターゲットのアーキテクチャで一番自然なサイズ
、longは32 bit以上
だったと思った

469デフォルトの名無しさん2019/05/01(水) 06:23:13.87ID:EdGuPz7E
class ClassA
class ClassB: public ClassA
class ClassA::ClassC

のときに、ClassBはClassAのサブクラスと言いますがClassCはなんと呼ぶものですか?

470 ◆QZaw55cn4c 2019/05/01(水) 06:32:09.33ID:JcO9/TOD
>>469
>class ClassA::ClassC
この意味はなんですか?

471デフォルトの名無しさん2019/05/01(水) 06:32:44.82ID:TS5dpT59
基底クラス
スーパークラス
親クラス
ベースクラス

472デフォルトの名無しさん2019/05/01(水) 06:56:41.43ID:q4ZM9Khf
細かいことを言えば、規格準拠の処理系でも
int32_t (ピッタリ32bit) が定義されるとは限らないのね。
int_fast32_t, int_least32_t なら定義される。

8bit単位じゃないCPUへの配慮らしいから、
普通の(この表現も危険だけど)コンピュータを使う分には
int32_t があると仮定して書いてもたいがい大丈夫だろうけど。
コンパイルエラーが出るから出たら対処、で十分かと。

473デフォルトの名無しさん2019/05/01(水) 07:06:00.95ID:EdGuPz7E
>>470
クラス内で定義したクラスです

class ClassA {
public:
...
private:
class ClassC;
ClassC * C;
}

class ClassA::ClassC {
...
}
の場合class ClassA::ClassC からClassA::を取るとコンパイルが通りません

474デフォルトの名無しさん2019/05/01(水) 07:25:40.44ID:shCLaGGL
「プログラミング言語C++」だと、入れ子クラス(nested class)とか
メンバクラス(member class)とか呼んでるみたい。

475デフォルトの名無しさん2019/05/01(水) 07:36:13.31ID:EdGuPz7E
おお、なるほど
ありがとうございます

476デフォルトの名無しさん2019/05/01(水) 09:29:42.19ID:HwrGV3PF
内部クラス(inner class)もよく聞くけど調べたらJava用語っぽいな

477デフォルトの名無しさん2019/05/01(水) 10:28:09.06ID:imZnb7dZ
Inner Class、Java用語なのか。そう呼んじゃってたわ

478デフォルトの名無しさん2019/05/01(水) 17:22:15.78ID:Ul5/0sra
今よみがえる構造体ネストの悪夢

479はちみつ餃子 ◆8X2XSCHEME 2019/05/01(水) 17:31:05.65ID:Gk4iJJA0
>>473-474
nested class は仕様にあるので、
これが公式な用語と思って良いみたいだね。

480デフォルトの名無しさん2019/05/01(水) 19:23:34.42ID:DLNQH846
以前、「完全さを求めるあまり今存在する良い物を犠牲にしてはならない」という趣旨のことわざをBBCハードトークで仄聞したのだが、原典はなんだろうか?

481 ◆QZaw55cn4c 2019/05/01(水) 19:59:09.50ID:JcO9/TOD
>>480
ググってヒットしたもののうち、これについてめぐらせています(ことわざとは関係ありません…)
http://www.kt.rim.or.jp/~hisashim/gabriel/WIB.ja.html
この人(原著者)、最後まで間違ったままでいるような気がしてなりませんが、実際のところどうでしょうか

482デフォルトの名無しさん2019/05/01(水) 22:03:28.27ID:EdGuPz7E
>>479
ありがとう

483デフォルトの名無しさん2019/05/04(土) 17:19:13.49ID:x8LtSB02

484デフォルトの名無しさん2019/05/06(月) 08:44:53.70ID:Omhj+R8I
ストリームの遅さは凄い凄すぎる。
ほとんどの場合、遅くても問題ないということはわかる。
でもあそこ迄遅くする必要があったのだろうか。

485デフォルトの名無しさん2019/05/06(月) 10:41:12.07ID:ZJRraXBB
突然何?

486デフォルトの名無しさん2019/05/06(月) 12:17:09.96ID:jqdyfBGc
3.5  ストリーム
http://sicp.iijlab.net/fulltext/x350.html

これだろう
理想的にはこうなるべきだが、技術的には未だに追いついてないだけであり、将来的には解決される

なのでC++では他のどの言語も真似してない<<や>>がある
逆に言うとストリーム・プログラミングが主流になったらC++が主流の座に返り咲く

487デフォルトの名無しさん2019/05/06(月) 15:05:44.09ID:XjarcZ9f
今やどの言語もprintfのような書式付き文字列を指定する方式に回帰した(jsすら!)。
少なくとも書式付き出力に限れば、ストリームはプログラミング言語の中ではもう淘汰されてしまったんだと思うよ。
早いとこ、string::format()とかbasic_ostream::format()とか作ってほしいわ

488デフォルトの名無しさん2019/05/06(月) 15:24:11.52ID:ecbY6TsO
多言語対応するためにはC#みたいに %1, %2みたいに引数を番号で指定できる書式じゃないとダメでしょ。

489デフォルトの名無しさん2019/05/06(月) 15:30:05.12ID:HRNpJ9Fc
ストリームの精神はrangeに受け継がれて生き残るよ
だから書式はそろそろ負けを認めよう

490デフォルトの名無しさん2019/05/06(月) 16:03:09.57ID:ZJRraXBB
どうしてprintf使わないの?

491デフォルトの名無しさん2019/05/06(月) 16:28:48.00ID:YSlWnmwv
オーバーロードできないから

492デフォルトの名無しさん2019/05/06(月) 16:36:53.99ID:oGUqqIoM
<<には<<なりの良さがあると思うので、ストリームというより、stringがoperator <<をサポートすれば良いと思う。

493デフォルトの名無しさん2019/05/06(月) 16:40:04.95ID:DF3zK1Xx
文字列操作するためのインターフェイスとしては最悪だよ。
考えた奴は自分では絶対使わないで人に使わせるだけのタイプだろうな。

494デフォルトの名無しさん2019/05/06(月) 16:45:40.32ID:Yv9FD/Sb
そもそもだけど、なんで文字って表示されるのに
<< とか %s とかこういうのが必要なの?
どの言語でもprint(a);だけで表示させればよくない?aが文字列でも整数でも小数でもさ。
引数で判断してくれよ。

495デフォルトの名無しさん2019/05/06(月) 16:51:17.77ID:oGUqqIoM
>>493
え、そう?
文字列を連結する時に、+=と+を使い分けるより<<だけですむ方が楽だし、連結する順番も自明だし結構良くない?
std::string str;
str << "hoge" << 123 << ".txt";
みたいな。

496 ◆QZaw55cn4c 2019/05/06(月) 17:27:51.75ID:vu8V8zIe
>>492
それは私も考えていました、cerr に都度吐いているメッセージを、もう一度プログラムの最後にまとめて吐きなおす、とかをやってみたいんです…

497デフォルトの名無しさん2019/05/06(月) 17:37:23.51ID:QULX0INn
>>495
そのやり方は引数の順序を変えられないから語順が違う言語間での翻訳で困る

498デフォルトの名無しさん2019/05/06(月) 17:37:57.33ID:ecbY6TsO
コンストラクタの引数に出力先stringインスタンスを渡すostream派生クラスを作ればいいじゃない。
string str;
hogestream sstr(str);
sstr << "hoge" << 128;

499デフォルトの名無しさん2019/05/06(月) 17:42:30.68ID:B4KNKrTg
別にstringstreamで良いじゃない

500デフォルトの名無しさん2019/05/06(月) 17:42:46.83ID:B4KNKrTg
別にstringstreamで良いじゃない

501デフォルトの名無しさん2019/05/06(月) 18:13:11.14ID:L6nFhRY+
iostreamの<<はC++の黒歴史の一つだね

502はちみつ餃子 ◆8X2XSCHEME 2019/05/06(月) 18:19:09.50ID:K/rO19sE
stream の機能はいらんからとにかく文字列に差し込むだけ出来ればいいってのなら
単に operator<< を定義すれば出来るけど……。

https://wandbox.org/permlink/dIkEh0LDZEixGoiF

503デフォルトの名無しさん2019/05/06(月) 18:27:12.43ID:ecbY6TsO
>>499,500,501
ostream派生クラスじゃなくて独自のクラスのほうが軽量でいい。
stringインスタンスへのポインタのほかに、数値書き込み時の進数設定(oct,dec,hexを覚えておく)などをメンバ変数に持てばOK。

504デフォルトの名無しさん2019/05/06(月) 18:58:24.90ID:oGUqqIoM
>>502
をを、なるほど、これは素晴らしいw

505デフォルトの名無しさん2019/05/06(月) 21:02:54.05ID:ZJRraXBB
>>492
stringstream・・・

506デフォルトの名無しさん2019/05/07(火) 19:51:10.38ID:FbrTB0S1
basic_ostream使えよっていつも思う
なんで決め打ちするのかわからない

507デフォルトの名無しさん2019/05/08(水) 21:52:50.27ID:iQQm+nuQ
to_charsというものをみつけました。

508デフォルトの名無しさん2019/05/09(木) 18:03:02.17ID:PdPEbd3c
b配列全てをa配列のケツにコピーするとき

std::vector<char> a;
char b[]={0,1,1,3,4};
a.insert(a.begin(),&b[0],&b[sizeof b]);

これでいいの?

&b[sizeof b]
これが死ぬほど気持ち悪いんだけど

509デフォルトの名無しさん2019/05/09(木) 18:18:44.76ID:JXKWFyOS
そんな気色悪い書き方しなくてもこれでいいよ
a.insert(a.end(), std::begin(b), std::end(b));

510デフォルトの名無しさん2019/05/09(木) 18:25:51.81ID:PdPEbd3c
なるほど!ありがとう

511はちみつ餃子 ◆8X2XSCHEME 2019/05/09(木) 18:44:16.05ID:IVoLxnXn
>>508-509
std::copy に back_inserter を渡す方が効率的という豆知識。

512デフォルトの名無しさん2019/05/09(木) 18:53:31.44ID:vbHvKAwn
>>511
insertのが速いんでね?
resizeしてmemcpyになるはず

513デフォルトの名無しさん2019/05/09(木) 23:40:45.34ID:q7ofaYCv
アルゴリズムよりvector::insertのほうが実装による最適化の余地は大きそうだな

514デフォルトの名無しさん2019/05/10(金) 00:47:30.50ID:5C678nxv
ポインタがイテレータとして渡された時点で相手が連続バッファだってわかるからね

515デフォルトの名無しさん2019/05/10(金) 11:00:01.95ID:KAkBQh2y
&b[sizeof b]でもstd::end(b)でもやってることは変わらないんだけどな
見映えは重要だな

516デフォルトの名無しさん2019/05/10(金) 11:08:59.15ID:pPfi71KH
sizeof bじゃcharでしか使えないんで、そういう意味でもイケてないかも

517はちみつ餃子 ◆8X2XSCHEME 2019/05/10(金) 12:01:59.87ID:g2QrvVju
>>515
見栄えというか、名前が付いているってのはそれだけで単純にわかりやすいな。
(名前が妥当であれば。)

518デフォルトの名無しさん2019/05/10(金) 19:02:43.61ID:UhKi+qPE
嫌儲で、東京五輪チケットのソースコードが出てるけど
C++使ってるお前らなら、こんなソースコードじゃないよね?
C++相談室 part142 	->画像>13枚

519デフォルトの名無しさん2019/05/10(金) 19:05:10.83ID:curN/h5M
>>518
サーバーサイドあまりやってないけどこんな泥臭い書き方するのか

520デフォルトの名無しさん2019/05/10(金) 19:05:16.55ID:TAwz/zT/
javascriptやん

521デフォルトの名無しさん2019/05/10(金) 19:36:57.50ID:tfYAY6pz
こんなもんだろ
SIerが間違ってコンシューマ系のWeb制作を請けてしまうとこんな感じになる

522デフォルトの名無しさん2019/05/10(金) 21:47:05.61ID:oOPMkjEw
てかこんなもの韓国に出すのね
安くなさそう
ってもしや北の方?

523デフォルトの名無しさん2019/05/10(金) 21:53:19.07ID:oOPMkjEw
parseInt(Num).lengthって動かなそう

524デフォルトの名無しさん2019/05/10(金) 21:57:58.16ID:TAwz/zT/
ほんまやw桁でも返ってくるのかと思ったがundefinedじゃんかw

525デフォルトの名無しさん2019/05/10(金) 22:59:11.84ID:HK1/2Yro
型に無駄にこだわった結末がstreamと知っとくのは重要。
あの間違いを覚えとけ。

526デフォルトの名無しさん2019/05/10(金) 23:25:31.58ID:u3uVdMgu
ゲームのシーンを管理するクラスとシーンクラスがあり、管理するクラスはシーンクラスを保持しています
シーンクラスから管理クラスのシーンチェンジを行う関数を呼び出したいのですがどうやったらいいでしょうか
シーンクラスが管理クラスのインスタンスを持ちたくありません

527デフォルトの名無しさん2019/05/10(金) 23:30:31.35ID:0WVRNDv3
>>518
webにあげるなら難読化まではしないにしても最低限圧縮するよね

528デフォルトの名無しさん2019/05/10(金) 23:55:31.69ID:tshfuAdx
>>526
シーンクラスに管理クラスへの参照(ポインタ)を持たせればいいんじゃないのか

529デフォルトの名無しさん2019/05/11(土) 03:16:15.93ID:xsmcwCcm
早速情報漏洩やらかしたの?

530デフォルトの名無しさん2019/05/11(土) 10:30:07.92ID:f5HniSEP
>a.insert(a.begin(),&b[0],&b[sizeof b]);


これ、添字オーバーしてるけどメモリエラーとかにならないの?

531デフォルトの名無しさん2019/05/11(土) 10:54:36.87ID:RjxICFG6
>>530
イテレータ範囲のendは配列の場合最後の要素の次のアドレス
それは普通の実装ではアクセスされることはない
規格的にも最後の次の要素へのポインタだけは未定義じゃない

532デフォルトの名無しさん2019/05/11(土) 11:55:52.83ID:Y1ZlGg0p
>>530
アクセスしてるからダメそう

533デフォルトの名無しさん2019/05/11(土) 12:40:07.82ID:3XjGQ6E0
[]はただのアドレス計算じゃん

534デフォルトの名無しさん2019/05/11(土) 12:42:52.29ID:DVWj7ai3
&p[N]はp + Nと同じって規格にあったっけ?

535デフォルトの名無しさん2019/05/11(土) 12:44:31.45ID:RjxICFG6
確かに&b[sizeof b]はデリファレンスしてるわ
これはあかんそう

536デフォルトの名無しさん2019/05/11(土) 12:56:49.51ID:FaKAPAIh
>>533
a[i]は a+i ではなく *{a+i}

537デフォルトの名無しさん2019/05/11(土) 13:12:17.25ID:2v2BzL6t
経験上出来るプログラマーは言語オタクが多いイメージ?(ただし浅い)

538デフォルトの名無しさん2019/05/11(土) 18:44:16.82ID:fU686pnk
&*pはデリファレンスなしで単にpと評価するってどっかで特別に決められてなかったっけ?

539デフォルトの名無しさん2019/05/12(日) 06:58:46.18ID:x4ccFx6b
>>530
int a[5];
int *p = &a[5];
というコードが有効、つまり
「配列の最終要素の次の要素」(現実には存在しないデータ)のアドレスを取れる、
という仕様から、この場合は許される、というのが >>531 の指摘か。
一般的に >>538 が成り立つなら便利だけど、調べ切れなかった。

流れの元になった >>508 を見返したら、
a.insert(a.begin(),&b[0],&b[sizeof b]);
これだと b[] の内容はベクタ a の先頭に挿入されちゃうね。

540デフォルトの名無しさん2019/05/12(日) 07:43:52.68ID:2y1+p9UL
>>530
>>a.insert(a.begin(),&b[0],&b[sizeof b]);
>>

>これ、添字オーバーしてるけどメモリエラーとかにならないの?

508だけど、これは
a.insert(a.begin(),&b[0],&b[sizeof b]);

こっちの間違いです。ごめんなさい。
a.insert(a.end(),&b[0],&b[sizeof b]);

&b[sizeof b]);
この部分は

b+sizeof(b)
これなら問題ない感じ?
どちらでも動くけど、たまたまいてる可能性捨てきれないから不安なんだよね。

実際のソースはsizeof(b)がbに格納されているデータのサイズを示していて、

char b[256];
int s = read( fd, b, sizeof b);

a.insert(a.end(),&b[0],&b[s]);

みたいな感じで書いてます。
んで、b最大数来た場合にちゃんと動くか気になったというわけっす。

int s = read( fd, b, (sizeof b)-1);
無難にこれの方がいいですかね?

541デフォルトの名無しさん2019/05/12(日) 11:19:05.13ID:k8bUqGvO
>>539
>int *p = &a[5];
これは多分だめで、ポインタ値としての存在なら許される
int *p = a+5;

542デフォルトの名無しさん2019/05/12(日) 11:53:09.39ID:nuZIUjqi
ややこしいからoperator <<を定義しようw

543デフォルトの名無しさん2019/05/12(日) 15:25:00.10ID:8/5ODvoI
VC++だと
std::vector<T> a; &a[a.size()]はoperator[]のassertionに引っかかるね

544デフォルトの名無しさん2019/05/12(日) 22:25:11.86ID:yr8YjJOU
std::transformって並列処理されてますか?

545デフォルトの名無しさん2019/05/12(日) 23:20:05.82ID:jFoQmc6B
c++17のparallel版使えば並列実行されるかもしれない

546デフォルトの名無しさん2019/05/13(月) 01:24:36.27ID:RKe/NLvg
visual studioでC++17にしたけどいまいち並列版の使い方が分からなかった
普通にfor回すのと、OpenMP使ってfor並列化するのと、transform(非並列)使うの比較したら
OpenMP>普通にfor≧transform だった

547デフォルトの名無しさん2019/05/13(月) 20:49:38.54ID:YS57w6Jq
おとなしくpthead使えよ。

548デフォルトの名無しさん2019/05/13(月) 20:56:12.40ID:WUu3P+2G
非並列使ったならそりゃそうなるだろ

549デフォルトの名無しさん2019/05/16(木) 02:02:33.17ID:1v50lv4I
struct AとAを継承したstruct Bがあって
Aの内容をBの共通部分にコピーする方法ってないですか?
A a;
B b = a;
みたいにしたいんですけど親を派生先にキャストはできないので困ってます

550デフォルトの名無しさん2019/05/16(木) 02:06:57.91ID:mZDDPYlt
struct B : public A
{
B* operator=(const A& a){ this->hoge = a.hoge;}
};
これ初期時にも使えるんかな

551デフォルトの名無しさん2019/05/16(木) 02:25:05.62ID:1v50lv4I
コピーコンストラクタが実装できたとしてメンバ変数は1個ずつコピーするしかないですかね

552デフォルトの名無しさん2019/05/16(木) 02:28:08.55ID:mZDDPYlt
スライシングをさせるとか?
安全に?スライシング起こす方法ってあったっけな?
なんか危ういからやろうともしなかったが

553デフォルトの名無しさん2019/05/16(木) 06:25:17.13ID:/dAesd8e
cloneメソッド用意するとか

554デフォルトの名無しさん2019/05/16(木) 06:31:42.80ID:ebJ8HHSX
>>549
初期化時は普通にコンストラクタ初期化リストで A(a) って書けるでしょ。残りのメンバをどうするのか知らんけど。
代入なら static_cast<A&>(b) = a か b.A::operator=(a) で済みそう。

555デフォルトの名無しさん2019/05/16(木) 06:33:37.60ID:C3C4SHXA
普通にコンストラクタかオペレーター作ればいいんじゃね
B::B(const &A)
B::operator =(const &A)
A::operator B()
雑なキャストでよければdynamic_cast<A>でおk

556デフォルトの名無しさん2019/05/16(木) 06:38:27.18ID:C3C4SHXA
↑dynamic_cast<B>の間違い
B b = dynamic_cast<B>(a);

557デフォルトの名無しさん2019/05/16(木) 11:40:14.21ID:74mGoL8y
>>551
sturctでまとめればデフォルトコピーコンストラクタが使えるけどね。
あとはintとかPODオブジェクトだけだったらmemcpyしちゃうとかも、俺はたまにやるなw

558デフォルトの名無しさん2019/05/16(木) 17:20:00.24ID:PgzYowjZ
549です
解決しましたありがとうございます

以下のように書いたら思っていたことが出来ました
(派生先のコンストラクタで親のデフォルトコピーコンストラクタ呼べるの知りませんでした)
代入は現状使う予定がないので大丈夫です
B::B(const &A a) : A(a) {}

559デフォルトの名無しさん2019/05/16(木) 18:17:29.46ID:mr2QiBZl
その内容だったら=defaultでいいよ

560デフォルトの名無しさん2019/05/16(木) 21:32:58.41ID:/aEDSlbd
引数付きコンストラクタって、=default使えるの?

561デフォルトの名無しさん2019/05/16(木) 22:09:55.18ID:jJO9F8Je
使えないよね
うかうかっと読み過ごしてたわw

562デフォルトの名無しさん2019/05/18(土) 13:00:29.63ID:M54jyEoh
大本営がおるで!!!

563デフォルトの名無しさん2019/05/19(日) 21:52:57.08ID:sHpfouee
厳密にはC++の質問になるのかよく分からないんですが……
C++プライマーで勉強しててconstexprの部分にさしかかったんですけどコンパイル時評価、コンパイル時に評価される……みたいなことが書いてあるんですがこれの意味がいまいちよくわかりません
実行時評価という言葉も見られるんですがそれぞれの違いとそもそも評価ってどういう処理のことなんでしょうか
それとそもそもconstexprの使いみちが分かりません

よろしくおねがいします。

564デフォルトの名無しさん2019/05/19(日) 22:10:21.84ID:H7yZimvS
>>563
評価=機械語による演算。
コンパイル時評価とは、コンパイラ(PCなど)が演算してその結果を成果物に出力すること。
実行時評価とは実行機(スマホなど)でプログラム実行時に演算して利用すること。

565デフォルトの名無しさん2019/05/19(日) 22:21:54.17ID:Jw8g2++w
constexprってのは#defineの置き換えのために生まれたんだよ
C++11以前はenum使ってたんだけどなんかかっこわるいから専用のキーワードが出来たってことさ

566デフォルトの名無しさん2019/05/19(日) 22:26:05.40ID:yh9Mbv1R
1+2を計算するアプリ作るとするじゃん?
constexpr int a = 1 + 2;って書くじゃん?
でもこれaが3なの分かりきってるじゃん?
アプリをインストールした世界中のスマホでいちいち1+2=3って計算するの資源の無駄じゃん?
だからそういうコードを書いてコンパイルするとコンパイラが最初から「a=3」って埋め込んで世界資源の浪費を防ぐんだよ
これがコンパイル時評価

実行時評価は普通の電卓アプリがやってること
ユーザーが計算したいのは1+2か5×5かlog123456789かは使われてみるまでわからないので、おとなしくスマホのCPUと電池を使って計算する
これが実行時評価

567デフォルトの名無しさん2019/05/19(日) 22:27:31.23ID:c0f8nIXT
const int n = 5;
const int m = n * 100;

要するにこうするとmを計算してくれる

568デフォルトの名無しさん2019/05/19(日) 22:31:08.95ID:tquD1oX1
別にビルド構成に組み込めば済む話じゃね?くだらないな。

569デフォルトの名無しさん2019/05/19(日) 22:51:01.09ID:HuWon3wi
そんなことしなくてもソースコード中に普通のコードと一緒に書けるから

570デフォルトの名無しさん2019/05/19(日) 23:25:27.63ID:L0Ufwo4O
constexprはtemplateと組み合わせたときに真価を発揮する。
templateを実体化するときに、型や非型引数に加えて、変数や関数なども活用して複雑な条件をつけ、
実体化するコードをカスタマイズできるようになるからね。

571デフォルトの名無しさん2019/05/19(日) 23:34:14.21ID:+2TJ1Pbf
それなんかわかりやすい具体例コード出来ます?

572デフォルトの名無しさん2019/05/19(日) 23:36:46.24ID:oSFlthhy
constexpre定数って配列の要素数に出来るということ以外に本質的な意味ってあるの?
そのへんがよくわからない

573デフォルトの名無しさん2019/05/19(日) 23:37:52.41ID:yh9Mbv1R
「constexpr 中3女子」でぐぐると変態コードがたくさん出てくるよ

574デフォルトの名無しさん2019/05/19(日) 23:38:23.88ID:oSFlthhy
配列の要素数と非型テンプレートパラメータね

575デフォルトの名無しさん2019/05/19(日) 23:38:52.26ID:L0Ufwo4O
分かりやすいかどうかは知らないが、以前ここ?で誰かが紹介していたnameofライブラリとか?
https://qiita.com/ta_dragon/items/1828ceb16bc8733526e1
c++17で導入されたstring_viewを使った文字列操作で、enum定義を文字列化してしまうってやつ。

576デフォルトの名無しさん2019/05/19(日) 23:41:56.16ID:yh9Mbv1R
constexpr int f();

constexpr int a = f(); //OK
const int b = f(); //NG

違いってこれだけでしょ

577デフォルトの名無しさん2019/05/19(日) 23:42:38.19ID:yh9Mbv1R
あれ?違うわ
無視して

578デフォルトの名無しさん2019/05/19(日) 23:56:10.59ID:vshkspmO
変態じみたものとしてはコンパイル時cコンパイルがあるな。
http://kw-udon.hatenablog.com/entry/2016/12/03/201722

579デフォルトの名無しさん2019/05/20(月) 00:13:59.34ID:osDMULGu
constexpr以前でも定数伝搬とか意識して書いてたところはあったはず、でもそれが本当に定数になっているのかはアセンブリ見ないと分からない
constexpr導入によってconstexpr変数の初期化は確実にコンパイル時に実行される、できなければエラー
同様の理由でconstexpr関数(コンパイル時にも実行可能な関数)が導入される

580デフォルトの名無しさん2019/05/20(月) 00:26:47.75ID:TOLwHecl
アセンブリ見なくても生成コード見ればよくね

581デフォルトの名無しさん2019/05/20(月) 00:36:37.94ID:osDMULGu
コンパイラのAST見るって事?
より困難では

582デフォルトの名無しさん2019/05/20(月) 03:36:27.47ID:68OGLTNB
単なる#define定数の代わりとしても名前空間が使える分価値はあるし
例えばconstexprでCRCを計算すれば文字列switchが可能になるとか難しいけど便利ではある

583デフォルトの名無しさん2019/05/20(月) 08:10:49.52ID:lEqHTAQ5
それ普通にヘッダーファイル生成コードでも書いた方がいいだろ。。
そっちのが明らかに可読性、デバッグのしやすさ上だし。
こんなもんありがたがってるのはどうせmakeもまともに書けない連中だろう。

584デフォルトの名無しさん2019/05/20(月) 11:52:26.23ID:mpvIl0KS
そうやって何十万ものヘッダファイルを生み出した例を知ってる。

585デフォルトの名無しさん2019/05/20(月) 12:32:04.02ID:Eu4SldXI
>>583
c++の規格内で完結するのと、make等の外部ツールを使うのとでは移植性が全然違うよ。

586デフォルトの名無しさん2019/05/20(月) 12:47:56.71ID:DC309puZ
同じ記述でソースコード内に式が書け関数が使えるメリットは可読性に大きく影響するだろうに

587デフォルトの名無しさん2019/05/20(月) 16:29:52.79ID:MZiC0WHg
外部ツール使えばいいはさすがに草

588デフォルトの名無しさん2019/05/20(月) 18:36:37.69ID:a9u60dH4
configure なんて外部ツールを使ったソースファイルやヘッダーファイルを生成しまくりですが、新しい車輪の再発明ですか?

589デフォルトの名無しさん2019/05/20(月) 19:28:03.54ID:MZiC0WHg
configureできる純粋なWindowsはよ

590蟻人間 ◆T6xkBnTXz7B0 2019/05/20(月) 19:31:01.36ID:m/UtbRiI
configureは古い。GitHubやるならCMake一択。

591デフォルトの名無しさん2019/05/20(月) 19:35:30.06ID:ZjVO7Mes
CMake使ってるけど、いろいろ使いにくい。

592デフォルトの名無しさん2019/05/20(月) 19:47:55.36ID:MZiC0WHg
configureより100億倍マシだとは思うけど
それはそうとしてwindowsでpkgconfig使わせて

593デフォルトの名無しさん2019/05/20(月) 20:04:37.87ID:IyGiubcZ
CMakeって使いづらいよね
ターゲットの属性指定するのに
属性が先にくるんだもの

594デフォルトの名無しさん2019/05/20(月) 21:22:56.75ID:VWEIYE4F
Visual Studio(C#)のプログラミングに関する質問です。

インクルードする2ファイルが、双方のクラスを互いに必要とするケースにおいて、
コンパイルが通らなくて困っています。(当たり前なのですが…)

【Aファイル】
クラスAの定義{
クラスBの使用(インスタンス作成、メソッド利用)
}

【Bファイル】
クラスBの定義{
クラスAの使用(インスタンス作成、メソッド利用)
}

【全体インクルードファイル】
#include Aファイル
#include Bファイル

【コンパイル結果】
Bクラスが存在しません(Aファイルにて)

【質問】
お互いにクラス定義を必要とする場合、
★具体的に★どのような実装をすれば良いのでしょうか?

595デフォルトの名無しさん2019/05/20(月) 21:26:14.46ID:lEqHTAQ5
本当に複雑な計算が必要な定数なんてそんな多くないだろうに。。
やっぱバカしかいねーのな。。

596デフォルトの名無しさん2019/05/20(月) 21:28:50.53ID:TjPZT1E7
具体的には実装回答しないけど前方宣言

597デフォルトの名無しさん2019/05/20(月) 21:29:24.12ID:68OGLTNB
>>594
C#?

598デフォルトの名無しさん2019/05/20(月) 22:43:14.24ID:VWEIYE4F
>>596
前方宣言ありがとうございます。猛烈に調べてみます。

599デフォルトの名無しさん2019/05/20(月) 23:58:43.37ID:ZjVO7Mes
indexという構造体を作ってstd::vectorにぶち込んだらgcc8でエラーになるのだが。
ダメなん?

600デフォルトの名無しさん2019/05/21(火) 00:00:39.50ID:nvUZjTIz
ideoneでやってみると通るんだけどな。
そのままコピペしてもgcc8だと通らない。
なんやねんこれ。

601デフォルトの名無しさん2019/05/21(火) 00:42:44.99ID:R14wVX0G
ソースなりエラーメッセージなり出せや

602デフォルトの名無しさん2019/05/21(火) 00:53:39.04ID:qC5qbLDj
どうせそのクソ構造体コピーもムーブも出来ないんだろ
定義貼ってみ

603デフォルトの名無しさん2019/05/21(火) 01:07:06.57ID:XM845/F7
wandboxの8系統でもダメなん?

604デフォルトの名無しさん2019/05/21(火) 09:38:36.10ID:0u73mqpq
deleteした後のポインタに0やnullを入れることを「仕様」にしないのは何か理由があるんですかね?

605デフォルトの名無しさん2019/05/21(火) 09:42:27.71ID:BlBHQ5S4
たとえばポインタのコンテナを扱ってる場合、
deleteしたポインタをコンテナから消そうと思ったら
その仕様だと逆に不便じゃね

606デフォルトの名無しさん2019/05/21(火) 09:45:22.82ID:2HB0EGuO
>>604
・ポインタが右辺値だったら意味ないから
・今どきもうユーザーコード内に new, delete は出てこないから

607デフォルトの名無しさん2019/05/21(火) 10:02:39.86ID:/yR1kHAO
>>604,606
そんな貴方にスマポ。具体的には unique_ptr, shared_ptr。

608デフォルトの名無しさん2019/05/21(火) 10:26:36.33ID:wU6Ws5fl
>・今どきもうユーザーコード内に new, delete は出てこないから
こういう決めつけはどうかと思うんだよなぁ
とか言ったらまた荒れるんだろうな・・

というか理由は単にゼロオーバーヘッドだろ

609デフォルトの名無しさん2019/05/21(火) 10:58:39.79ID:9RXBRo+g
>>592
configureのが楽

610デフォルトの名無しさん2019/05/21(火) 11:47:39.94ID:2HB0EGuO
>>608
出てこないのが理想なんだから>>604のような機能は逆行
ってことだろ

611デフォルトの名無しさん2019/05/21(火) 12:08:41.91ID:om3WDsPR
ポインタを一時変数に代入していた時点で意味無くなるし
void*とかで持っていたらどうするつもりなんだか

612デフォルトの名無しさん2019/05/21(火) 17:11:33.15ID:OTKORriw
スマポでdeleteは排除できてもnewはいるだろ

613デフォルトの名無しさん2019/05/21(火) 18:14:30.34ID:m8UBXeEG
make_sharedに渡すのってT()がいいのかnew T()がいいのか分からない

614デフォルトの名無しさん2019/05/21(火) 18:21:48.26ID:JOJ6V6qz
どっちも普通は渡さないだろ?

615デフォルトの名無しさん2019/05/21(火) 19:18:35.44ID:/yR1kHAO
マ的にはナマポは生ポインタです?

616デフォルトの名無しさん2019/05/21(火) 22:20:27.03ID:p9O37jGc
ヌルーポ

617デフォルトの名無しさん2019/05/22(水) 00:47:45.78ID:a4QDMpfS
>>602
それが、indexという名前がダメらしくて、アンダースコア一本付け足すだけで通るんだよ。

618デフォルトの名無しさん2019/05/22(水) 00:51:52.15ID:wNVmTKK9
その環境の標準ヘッダを書き換えたバカがいるとかじゃね

619デフォルトの名無しさん2019/05/22(水) 06:17:49.28ID:t1pLQv56

620デフォルトの名無しさん2019/05/22(水) 11:05:25.06ID:bpe9UG2z
>>613
コンストラクタのパラメータ渡すもんやろ

621デフォルトの名無しさん2019/05/22(水) 17:38:02.73ID:754wR9Ar
WindowsのSleep関数みたいな変態マクロが実装されてるとか

622デフォルトの名無しさん2019/05/22(水) 19:05:38.03ID:HXP4tOE0
さっさと元ソースとgcc -Eとgcc -dM -Eの結果貼るか死ぬかどっちか選べ

623デフォルトの名無しさん2019/05/22(水) 19:07:58.37ID:0oi9wkAH
C++ってゲーム業界以外で使われてるの?

624デフォルトの名無しさん2019/05/22(水) 19:10:27.02ID:wNVmTKK9
使われているだろ
少なくともGoogle、アップル、MSでは主要言語のひとつだよ

625デフォルトの名無しさん2019/05/22(水) 19:22:56.56ID:E7rKivNV
メーカーの募集ページでも見れば?

626デフォルトの名無しさん2019/05/22(水) 19:31:09.11ID:HXP4tOE0
今をときめく人工知能のライブラリのほとんどはPythonの皮+C++のコアっていう構成だぞ

627デフォルトの名無しさん2019/05/22(水) 20:00:24.67ID:KVrYPX3F
>>623
テレビ、宇宙、鉄道路線の最短経路

628デフォルトの名無しさん2019/05/22(水) 20:09:03.46ID:tAHmoj8N
あれだけPython重点だったChainerもmasterにC++の自動微分マージしたしな

629デフォルトの名無しさん2019/05/22(水) 21:03:12.50ID:a23nlY2Z
>それが、indexという名前がダメらしくて、アンダースコア一本付け足すだけで通るんだよ。
心当たりがありすぎるw
これは外には出せんなw

630デフォルトの名無しさん2019/05/22(水) 21:12:32.67ID:omtGQ9bF
>>627
漠然としすぎでよくわからんのだがw
おれの周りだと、重い演算部分だけc/c++でライブラリ化するのはあるけど、
アプリを作るのはないな
c++使える人少ないし

631デフォルトの名無しさん2019/05/22(水) 21:31:18.91ID:G1WjNUUx
>>623
仮想通貨

632デフォルトの名無しさん2019/05/22(水) 22:42:45.38ID:u7nmxvF3
金毘羅とコンパイラ、どのくらい互換性あるの?

633デフォルトの名無しさん2019/05/23(木) 00:25:21.49ID:uUKvPk1Q
魂斗羅くらいじゃない?

634デフォルトの名無しさん2019/05/23(木) 03:17:45.28ID:tfvbct5D
コンプラの前では何れも塵芥の様なものよ

635デフォルトの名無しさん2019/05/23(木) 10:36:11.44ID:NhdF0b/F
>>497
printfも語順変えられへんで…

636デフォルトの名無しさん2019/05/23(木) 11:31:22.42ID:6zCIietC
>>635
printfはフォーマット文字列を言語ごとに切り替えればいいけど、streamはハードコーディングになってしまう

637デフォルトの名無しさん2019/05/23(木) 11:47:25.42ID:HpI/x5tV
具体的にどんな場面で困るのか例を挙げてもらうと助かる

638デフォルトの名無しさん2019/05/23(木) 12:02:43.15ID:asp3Rd8H
多言語対応とか?

639デフォルトの名無しさん2019/05/23(木) 12:58:07.89ID:NhdF0b/F
>>636
語順変えられへんわ、引数がハードコーディングだわで
printfも変わらんやろっての

640デフォルトの名無しさん2019/05/23(木) 12:59:15.62ID:NhdF0b/F
>>638
streamでも文字列をリソース使えばいいだけやで

641デフォルトの名無しさん2019/05/23(木) 13:22:43.81ID:ovhRah7H
「Aさんが所有するBをCしますか?」という文章を多言語対応すると、ABCの並びを各言語に応じて変える必要があるでしょ。
書式指定で引数並びを変えることができないprintf()やiostreamでは対応不能。JavaやC#のような対応が正解。

642デフォルトの名無しさん2019/05/23(木) 14:02:03.14ID:PBFS7PSY
>>640
streamだと文字列リソースが細切れになってもとの文字列が何だったかよく分からず翻訳者にそのまま渡せないって問題はあるかも。

いずれにしても、c++の文字列formattingは更新が必要

643デフォルトの名無しさん2019/05/23(木) 14:25:55.23ID:Y2p7ALG3
string_view、constexpr、templateを使えば、C#風のフォーマットも実現できそうな気はする。

644デフォルトの名無しさん2019/05/23(木) 15:31:58.20ID:59bc+gd2
とうとうstreamへの何癖もここまで頭おかしくなったか

645デフォルトの名無しさん2019/05/23(木) 16:05:52.24ID:ovhRah7H
Do you C B that A owns?

646デフォルトの名無しさん2019/05/23(木) 18:20:07.46ID:NhdF0b/F
>>643
それはコンパイル時に決定してしまうからだめだな。
ロケール設定に合わせて動的に変えられる仕組みではない

647デフォルトの名無しさん2019/05/23(木) 18:37:21.77ID:NhdF0b/F
型指定文字間違えたら簡単に飛ぶscanf系
飛ばないけど書式文字列と書きたい値の型合わせが必要なprintf

まー、ostreamは数値の精度指定とか面倒っちゃー面倒だが
目くじら立てて本質的に駄目って話と違うからなぁ。

648デフォルトの名無しさん2019/05/23(木) 18:39:20.26ID:9reHFHA1
結局、eof までデータを読んで vector に格納する、の正しいやり方が分からない。
リードエラーまで気にするのはやり過ぎだとしても、空行がある場合などにも正しく動くものを作るにはどうするべき?
下のコードでダメな場合ある?
駄目じゃないとしたらもっと洗練されたやり方ある?

vector<double> invec(string filename){
 vector<double> A;
 ifstream fin(filename);
 double temp;
 while(not fin.eof()){
  fin >> temp;
  A.push_back(temp);
 }
 return A;
}

649デフォルトの名無しさん2019/05/23(木) 18:45:48.03ID:GRcYBCGD
そのコードじゃむしろどのパターンでもダメじゃね
最後がダブって格納される
while(fin>>temp) {
A.push_back(temp);
}

650デフォルトの名無しさん2019/05/23(木) 18:57:16.20ID:9reHFHA1
>>649
そのwhileの条件ってtempにEOFが入ったら抜けるってこと?
double型の変数にEOFを入れたら何になるの?

651デフォルトの名無しさん2019/05/23(木) 19:08:43.60ID:0JW0v20n
istreamのoperator boolはEOFでもtrue返すから無限ループだぞ

652デフォルトの名無しさん2019/05/23(木) 19:20:55.28ID:9reHFHA1
じゃあ

while(fin>>temp, (int)temp!=EOF) {
A.push_back(temp);
}

は?

653デフォルトの名無しさん2019/05/23(木) 19:42:12.63ID:GRcYBCGD
>>651
いやdoubleの読み込み失敗するからfailになるだろ
空白読み飛ばすだけならeofしか立たないが

654デフォルトの名無しさん2019/05/23(木) 19:43:51.77ID:fqmO3Q5/
any や、Automaticallyで、機械にやらせてる。

655デフォルトの名無しさん2019/05/23(木) 22:36:29.02ID:9reHFHA1
>>653
> そのwhileの条件ってtempにEOFが入ったら抜けるってこと?

ではなくて、doubleが読み込めなかったら false になるのですね
ありがとうございます

656デフォルトの名無しさん2019/05/24(金) 00:15:40.41ID:oGkYW18h
質問です。
単純なforループ処理の途中でエンターキーを押したらストップ、もう一度押すとスタートみたいなことをするにはどうしたらいいですか?

657デフォルトの名無しさん2019/05/24(金) 01:06:43.34ID:Ph/OCthx
対象がコンソールか、ウィンドウかで違う。

conio.h使える環境で、コンソールだったら、_kbhit()と_getch()使えば実現はできるが、ウィンドウプログラムの場合はウインドウの作法に則る。

コルーチンは言ったら、少し楽になる予定??

658デフォルトの名無しさん2019/05/24(金) 04:01:03.95ID:qG9wsGG5
>>656
fiber使うとか?
APIが環境によって違うのが難点だがコルーチンより融通効くし。

659デフォルトの名無しさん2019/05/24(金) 09:10:37.78ID:oGkYW18h
>>657
コンソールです

660デフォルトの名無しさん2019/05/24(金) 10:25:59.77ID:Ph/OCthx
>>659
MITライセンスな~~っ。
暇だから書いたけど、自分の環境のVS2017だとこれしかわからない。
環境依存ちょびっとあるからご注意。

#include <iostream>
#include <cstdint>
#include <limits>
#include <thread>
#include <conio.h>

int main() {

for (std::intmax_t i = 0; i < std::numeric_limits<std::intmax_t>::max(); i++) {
std::cout << i << "\r";
if (_kbhit()) {
_getch();//output first key in.
std::cout << "Wait key in."<<"\r";
_getch();//wait next key in.
std::cout << " "<<"\r";
}
}

return 0;
}

661デフォルトの名無しさん2019/05/24(金) 10:26:55.58ID:Ph/OCthx
あ、そうだった。空白が整形されるの忘れてた。

662デフォルトの名無しさん2019/05/24(金) 10:52:12.22ID:Ph/OCthx
>>660
スレッドスリープするかもと思って、threadのヘッダーはいってるけど。使わなかったのを忘れていた。

663デフォルトの名無しさん2019/05/24(金) 14:04:30.69ID:ff7E+a9X
独自定義したクラスAのlistに、プッシュした場合、新しいインスタンスが作られる?それともアドレスの代入??

list<A> List=new.....;
A a();
List.push(a);

664デフォルトの名無しさん2019/05/24(金) 14:08:18.47ID:G1wpIN0H
インスタンス

665デフォルトの名無しさん2019/05/24(金) 14:30:44.82ID:h/Cubnb+
>>649,653,655
俺は個数指定して読み込むということしかやったことないんだが、この方法って他の型でも使えるの?
int だったら
> doubleが読み込めなかったら false になる
というのが成立しないように思えるのだが

666デフォルトの名無しさん2019/05/24(金) 14:38:19.15ID:QfLs460A
ユーザー定義型なら演算子をオーバーロードするんやで

667デフォルトの名無しさん2019/05/24(金) 14:42:16.00ID:FKmlSCsi
>>665
doubleじゃなかったら、じゃなくてEOFを読んだらfalseになるんだろ
こういうのお洒落なやり方だと思うがなんとなく怖いから俺も個数決めてやってるよ
スタンスの問題

668デフォルトの名無しさん2019/05/24(金) 15:28:08.39ID:YkjJvwKv
まあテキストファイルと言っても普通はフォーマットがもっと厳密に決まっているから、一行読み込んでパースしてって感じでやるな
エラー起こったときにこれじゃ行数すら出せないし

669デフォルトの名無しさん2019/05/24(金) 15:34:20.96ID:YkjJvwKv
その場合でもgetlineをwhileの中にいれておけば期待した動作になる

最後の行に改行があろうが無かろうがうまくいく

670 ◆QZaw55cn4c 2019/05/24(金) 20:38:16.34ID:0N6+tWvP
>>663
A のコピコンが走りますよ!

671デフォルトの名無しさん2019/05/29(水) 18:18:13.81ID:hag6qvkh
mainより上で

struct test{int x=0};
struct test obj;
obj.x=99;

ってやると三行目がエラーなんだけどなんでダメなん?
技術的になんでダメなのか教えてください

672 ◆QZaw55cn4c 2019/05/29(水) 18:41:42.94ID:8RGCI467
>>671
関数の外で
a = 2;
とか
a = a + 1;
は書けません

673デフォルトの名無しさん2019/05/29(水) 19:12:40.01ID:hag6qvkh
ありがとございます

674デフォルトの名無しさん2019/05/29(水) 19:17:03.50ID:Rr995jUT
DOUBLEのSACHIKO。

675デフォルトの名無しさん2019/05/30(木) 21:51:31.71ID:z7Zp5hm5
戻り値だけのオーバーロードしたいんだけど、むり?

676デフォルトの名無しさん2019/05/30(木) 21:57:39.88ID:WLaiWVCj
無理です

677蟻人間 ◆T6xkBnTXz7B0 2019/05/30(木) 22:06:45.23ID:rhzd9E8p
天婦羅

678デフォルトの名無しさん2019/05/30(木) 22:27:06.43ID:rl6Tun4v
どうやって使うつもりなのかな

679デフォルトの名無しさん2019/05/30(木) 22:59:49.76ID:aiZ1ZVIC
T f();
auto a = f<Type>();

680デフォルトの名無しさん2019/05/30(木) 23:10:37.32ID:rl6Tun4v
>>679
これはよくやる

681デフォルトの名無しさん2019/05/30(木) 23:12:17.72ID:rl6Tun4v
auto a=std::make_shared<A>();
みたいな感じで

682デフォルトの名無しさん2019/05/30(木) 23:16:18.93ID:z7aQRPDh
実数と複素数のジェネリックプログラミングってどうやるの

実パラメータの数が違うから、結局ほとんどの機能を特殊化してるんだが

683蟻人間 ◆T6xkBnTXz7B0 2019/05/30(木) 23:19:08.26ID:rhzd9E8p
>>682
std::complexとテンプレートを

684デフォルトの名無しさん2019/05/30(木) 23:19:32.75ID:s4B+etfT
複素数と実数をジェネリクスでまとめると大抵死ぬぞ。
行列ライブラリなんかも基本別関数だから。

685デフォルトの名無しさん2019/05/30(木) 23:40:09.00ID:z7aQRPDh
>>684
やらないのが正解ってことで良いですか?

686デフォルトの名無しさん2019/05/31(金) 19:07:02.02ID:5tY3IGQl
ジェネリック医薬品。

687デフォルトの名無しさん2019/05/31(金) 20:46:39.86ID:SYuh0ZxQ
>>685
そう。やらないのが正解。

688デフォルトの名無しさん2019/05/31(金) 22:32:45.09ID:YZ9ZViZw
なんでよ 理由を教えてくれ

689デフォルトの名無しさん2019/05/31(金) 22:41:35.25ID:8uAssd9+
理由?やる理由がないからだよ
できるからというだけの理由で無駄な汎用性を持たせようとして無駄に複雑で使いづらい糞が生み出されて結局使われないパターンを嫌というほど見てきたわ

690デフォルトの名無しさん2019/05/31(金) 22:51:46.17ID:YZ9ZViZw
うーんそういうもんかね

ある型について定義したジェネリック関数群全てを特殊化するはめになって
もうこれ型パラメータの意味ほぼねぇな
ってなったことはあったけど

691デフォルトの名無しさん2019/06/01(土) 01:01:06.10ID:jOO/UBvi
パワー系がいて、通り過ぎる人が眼鏡をかけていれば「メガネ、メガネ」、胸の大きい女性なら「オッパイ、オッパイ」と特徴を呟いていたんです。
私は「ヒゲ」と言われたのですが、ひげ生やしていないんですよね。
誰かこの暗号解ける?

692デフォルトの名無しさん2019/06/01(土) 01:21:48.47ID:amrEPTXm
>>690
今の複素数の例がそれそのものじゃん

693デフォルトの名無しさん2019/06/01(土) 01:28:26.64ID:vdsZQvk5
>>692
一応関数インターフェースの統一ができるから…

694デフォルトの名無しさん2019/06/01(土) 01:34:23.92ID:5ncHXmxx
std::complex使えばおおよその計算はdoubleその他と共通化できない?
虚部実部を見に行かない範囲ならなんとか

695デフォルトの名無しさん2019/06/01(土) 07:39:23.04ID:gFsX3PNG
そこまで無理に場合分けして共通化させるなら初めから
独立に定義したほうがいい。
しっかり勉強してきた奴ほど無理やり継承ツリーでまとめようとする傾向にある。
それが行き過ぎると無駄なジェネリックの登場となる。

696デフォルトの名無しさん2019/06/01(土) 08:15:26.41ID:uvuK6mvN
まあ一度はそういう経験しておいた方がいいな

697デフォルトの名無しさん2019/06/01(土) 08:43:52.63ID:QzRnFnM6
コルモゴロフ複雑性は計算不能なのだから
プログラムのあるべきコンパクトさについて一般論は存在しない
この点プログラムの記述方法の選択はまさに個々人のセンスに依存したartであり
真に人間らしい営みであると言える

698デフォルトの名無しさん2019/06/01(土) 09:38:35.51ID:zEOJGQ26
仮に実数と複素数を継承関係にさせるとして、どっちを親にすべきかで広い合意は取れないからな
円楕円問題と同じ

699デフォルトの名無しさん2019/06/01(土) 11:24:10.29ID:x6StDmNU
たとえすべての関数を特殊化することになったとしても、大部分のifを共通化できるはずで、他のクラスのテンプレ引数として区別なく使えるようになるからそれなりに意味はあるでしょ。

700デフォルトの名無しさん2019/06/01(土) 13:24:21.51ID:ws//1RZ4
意味はないよ
そもそも複素数なんて仮にそれを多用する分野のタスクだったとしても実数に比べて使用頻度は低いんだから、
タスクで本当に必要なものだけを実装すればよい

701デフォルトの名無しさん2019/06/01(土) 14:00:28.34ID:jOO/UBvi
いや、実数が使えたためしがないから、俺の爺ちゃんが量子を考案したのだが。

702デフォルトの名無しさん2019/06/01(土) 14:17:26.49ID:eS53UGey
お前のじーちゃんシュレーディンガーかよ

703デフォルトの名無しさん2019/06/01(土) 14:38:11.54ID:jOO/UBvi
高校のとき、心のお兄ちゃんとか心の妹とか流行ってたな。

704デフォルトの名無しさん2019/06/01(土) 15:52:18.02ID:gFsX3PNG
29=(5+2i)(5-2i)
こんな風に因数分解して欲しくケースなんてほとんどないだろ。
変にポリモルフィックにやるべきじゃない。

705デフォルトの名無しさん2019/06/01(土) 16:12:58.52ID:vdsZQvk5
おじちゃん今継承とか動的多態の話しはしてないよ?

706デフォルトの名無しさん2019/06/01(土) 16:28:52.97ID:gFsX3PNG
は?c++でジェネリクスやろうとすればデフォルトで使うことになるだろ?
ボケちゃったのかな?

707デフォルトの名無しさん2019/06/01(土) 16:40:59.16ID:vdsZQvk5
えっそうなの?
C++でジェネリクスてtemplate使うから継承とか関係なくね
例えば実数と虚数に対応するplus関数を作るとしてどういう実装を想定してんの

708デフォルトの名無しさん2019/06/01(土) 18:04:51.32ID:ws//1RZ4
>>707
テンプレートによるstructual subtypingはポリモーフィズムの実装の一種だよ

709デフォルトの名無しさん2019/06/01(土) 18:35:49.34ID:y869pNJN
conceptはともかく現行のc++のそれを構造的部分型とは言いたくない気持ちがあるのは分からないではない

710デフォルトの名無しさん2019/06/01(土) 20:21:39.08ID:HfNJIaau
マルチエージェントシミュレーションをしたいんですけど、環境と個々のエージェントのクラスはどういった関係で持てばいいんでしょうか
現在はエージェント・環境の全部のインスタンスを進行を行うクラスに持たせています
しかし個々のエージェントが相互の情報を知りたいときに相互にアクセスできるようにするにはどうしたらいいでしょうか?

全てのエージェントが全てのエージェントの参照を手にするのはどこで書き換えが起こるか分からなくなるのでしたくありません

711デフォルトの名無しさん2019/06/01(土) 20:32:54.41ID:ws//1RZ4
>>710
お前は街にいる人間全員のパンツの柄を知っているのか?
意味のあるシミュレーションをやるからにはエージェントが知ることのできる情報の範囲や内容は明確に定義されていなければならないはずだろう
その定義に従った情報を取得する手段がエージェントに提供されていればよい

712デフォルトの名無しさん2019/06/01(土) 20:55:47.81ID:HfNJIaau
例えば互いの距離を知りたい場合どうすればいいですか?

713蟻人間 ◆T6xkBnTXz7B0 2019/06/01(土) 21:01:47.55ID:O6/ikTFN
GPSで二つの位置を測定して、その差を求める。

714デフォルトの名無しさん2019/06/01(土) 21:14:48.00ID:QKlis6p8
二人の心の距離は測れますか

715デフォルトの名無しさん2019/06/01(土) 21:14:55.91ID:wq+pItFK
>>712
神クラスが更新対象のエージェントと周囲の各エージェントとの距離を予め計算し、更新対象のエージェントに計算結果のセットを渡す
そして更新対象エージェントはその結果セットの内容のみに従った行動をするだけ
それをエージェント毎、ステップ毎に繰り返す
実際に必要とされるまで計算を遅延する等、効率化のための実装の工夫は必要だろうけどね

716デフォルトの名無しさん2019/06/01(土) 23:30:04.77ID:vdsZQvk5
あらゆる数値型二つを引数にとるdistance関数を定義しろ
あとは二人の心の位置を表す型で特殊化しろ

717デフォルトの名無しさん2019/06/02(日) 10:02:04.84ID:+QRUS/U1
STGの当たり判定やガンパレの頭から伸びるラインだろ
神のような仲介者mediatorを置けばいい

718デフォルトの名無しさん2019/06/02(日) 11:00:43.72ID:JfX2j2vB
>互いの距離
<<質問の意味不明。再入力せよ>>

719デフォルトの名無しさん2019/06/02(日) 11:44:35.03ID:JfX2j2vB
神クラスが全エージェント間の距離を計算し続けるのはエージェントN個の完全グラフの枝
N*(N-1)/2個の長さを更新し続けるということであっていかにも無駄が大きい少なくともエー
ジェントが置かれる環境のデータ表現と「互い」とは何かが定義されねばならないありがちな
環境表現としては二次元座標のリストとか正方形や六角形のセル表現とかがありがちで「
互い」というのは普通はエージェントの感覚器と環境(遮蔽物とか)とのインタラクションで規
定されるように作るからそういったブツもシミュレートせよ

720デフォルトの名無しさん2019/06/02(日) 14:25:56.91ID:RszfEHjQ
>>714
まずは心の距離を定義するところからはじめよう

721デフォルトの名無しさん2019/06/02(日) 15:22:27.64ID:aSoefH8n
質問よろしいでしょうか?CORBAってもう古いですか?

CORBAのサンプルをこねくり回して送受信するオブジェクトを2つと一時停止や終了をコントロールする
オブジェクトを作ったのですが、お互いに送受信すると思ったら片方が送信しまくって受信が検出できな
いようで困ってます。送信を止めると前に送ったものを受信します。
送信する時に少しsleepを入れると遅いですが思った通りの動きになります。
出来ればsleepなしで動いてほしいのですが、omniORBって同時に送受信できないのでしょうか?

722デフォルトの名無しさん2019/06/02(日) 21:49:55.34ID:a7zvk5vs
CORBAの動きはよく分からんあれ本当にまともに動くのか

723デフォルトの名無しさん2019/06/03(月) 21:34:05.54ID:76rl+S7D
d1の実部 d1の虚部
d2の実部 d2の虚部
...



d1
d2
...

というフォーマットのファイル(の名前)が与えられたときに、前者なら複素数として、後者なら実数として読んで vector に格納する関数ってどう書くべきでしょうか

724デフォルトの名無しさん2019/06/03(月) 22:02:24.30ID:NMMhu3n8
auto f(std::filesystem::path const& n)
{
using T=double;
auto ret=
std::vector<std::complex<T>>{};
std::ifstream in(n);
std::string line;
while(std::getline(in,s)) {
std::istringstream ss(s);
T r{},i{};
ss >> r >> i;
ret.emplace_back(r,i);
}
rerurn ret;
}

725デフォルトの名無しさん2019/06/04(火) 07:18:40.68ID:mXL6ajVk
>>724
ありがとうございます
紐解いてみます

726デフォルトの名無しさん2019/06/04(火) 11:04:36.97ID:stwnRIgs
【速報】金券五百円分とすかいらーく優侍券をすぐもらえる 
C++相談室 part142 	->画像>13枚    
   
① スマホでたいむばんくを入手  
② 会員登録を済ませる   
③ マイページへ移動する 
④ 招待コード→招待コードを入力する [Rirz Tu](スペース抜き)     
  
今なら更に4日18時までの登録で2倍の600円の紹介金を入手     
クオカードとすかいらーく優待券を両方ゲットできます。   
    
数分で出来ますのでぜひお試し下さい     

727デフォルトの名無しさん2019/06/04(火) 12:18:01.44ID:ZmMHo7YV
valgrindって今も使われてますか?
通信にBoost.MPI、ファイル入出力にHDF5を使う並列プログラムをInfinibandなネットワーク環境で走らせてるんですが
valgrindにかけるとアホみたいにエラーが出てうんざりします。
シコシコSuppression Fileを用意するしかないんですかね

728デフォルトの名無しさん2019/06/04(火) 13:24:01.81ID:iQLgDYhZ
>>726
早速入れた

729デフォルトの名無しさん2019/06/04(火) 16:02:32.14ID:puihIuc4
vectorなりstringなりの各要素をfor文で回すとき何も考えずに例えば
for(int i = 0; i < v.size(); ++i)みたいなコード書いてたんだけどさ
C++プライマーで勉強してたらやっぱsize_typeとかautoとかイテレーターとか使ったほうがいいのかなぁって
signedかunsignedかなんてまず問題にならないようなちょっとしたループでも気をつけるべき?気をつけてます?

730デフォルトの名無しさん2019/06/04(火) 16:10:21.98ID:uZb76vTJ
全要素ならrange-based forは便利。

731デフォルトの名無しさん2019/06/04(火) 18:48:19.92ID:Rd1vYitp
男は黙ってfor eachやぞ

732デフォルトの名無しさん2019/06/04(火) 19:03:30.86ID:payOgJqe
for eachは環境依存では

733デフォルトの名無しさん2019/06/04(火) 19:17:46.45ID:Gdf9cmgA
要素インデックスを表現する変数にはint型を使わずsize_t型を使うようにする、とかかな。
nposによる未検出判定があるから仕方なしにだけど。

734デフォルトの名無しさん2019/06/04(火) 20:55:52.96ID:5jXXyAl7
んなくだらんことで悩むくらいならその外側で監視するコードでも組んだ方が100倍生産的だわ。

735デフォルトの名無しさん2019/06/04(火) 21:36:28.65ID:u5rIm+gJ
ループ変数にsize_t使うのを徹底しようと思い立ったことも昔あったけど
operator[]とかにsize_t変数入れると「intじゃない!!!ムキー!!!」って警告ほざくクソライブラリがこの世に多すぎて挫折した

736デフォルトの名無しさん2019/06/04(火) 21:46:44.91ID:Gdf9cmgA
今や64bitコンパイラが普通だからintよりも暗黙な64bit対応としてsize_tを使うこと増えたんじゃないかな。
intみたいな32bit変数のままだとコンパイル時に警告が大量に出るし、とりあえず無難にsize_tにしとくわ的な感じになってる。

737デフォルトの名無しさん2019/06/04(火) 22:05:00.56ID:sAkXOF3J
size_tは符号ありにすべきだった
と誰か反省してたよな
ホントめんどくさい

738デフォルトの名無しさん2019/06/04(火) 22:10:32.07ID:ZspfbBdH
intが64ビットになる日はいつですか

739デフォルトの名無しさん2019/06/04(火) 22:15:44.59ID:5jXXyAl7
その前にビットサイズ付きintでかかれるケースが増えるだろ。

740デフォルトの名無しさん2019/06/04(火) 22:24:52.24ID:payOgJqe
じゃあ128bit整数はいつですか

741デフォルトの名無しさん2019/06/04(火) 23:51:58.43ID:Q7pPWYoh
なんでお前らの職場って大卒欲しがるの?

742デフォルトの名無しさん2019/06/04(火) 23:57:38.92ID:V/nSGYnK
修士の方が多くね?

743デフォルトの名無しさん2019/06/05(水) 00:02:44.18ID:4AufAgsU
BigInteger書いてるんだけど、補数表現がわけわかめで死にそうになってる。
ウィキペディア頼りで加減算はできたけど、掛け算どうやるねん。

そこで、補数で小学生にもわかるレベルの補数表現の解説プリーズ。

744デフォルトの名無しさん2019/06/05(水) 00:24:44.84ID:oecfF/bP
そのままunsigned同士の掛け算すればいいんじゃね?
で長くなったbit数の結果からMSBから変わる直前まで好きなように切り詰める。

745デフォルトの名無しさん2019/06/05(水) 01:13:53.17ID:UjRB/6p5
>>743
とりあえず4bitで正数、負数を使った四則演算を手で紙に書いて解いてけば理解できないかな

746デフォルトの名無しさん2019/06/05(水) 04:56:49.99ID:y/B41+FI
コピーコンストラクタを避ける目的でswap使うことってありますか?

747デフォルトの名無しさん2019/06/05(水) 09:35:36.43ID:BFsqA4Jd
俺転職するわ
C++相談室 part142 	->画像>13枚

748デフォルトの名無しさん2019/06/05(水) 10:08:32.94ID:2Gd2m+Lo
会社に行っても仕事しないのに、リモートワークとか無理だわ

749デフォルトの名無しさん2019/06/05(水) 12:06:46.64ID:LHcMHkph
給料は働いた分だけでいいならリモートワークやりたい

750デフォルトの名無しさん2019/06/05(水) 16:43:40.53ID:gnp+gTKs
>>747
インディーゲームデベロッパでリモートワーク・・年収500万から800万・・・
怪しい匂いしかしない・・

751デフォルトの名無しさん2019/06/05(水) 17:11:31.00ID:4AufAgsU
743です。
解説ありがとう。理解できない頭をボンバヘッしたい感じです。
しばらく凍結させるので供養しておきます。

供養:https://dotup.org/uploda/dotup.org1865161.zip

752デフォルトの名無しさん2019/06/05(水) 17:22:41.48ID:EHQtou0g
void func(int& n){...}
int main(){int a = 0; func(a)}
こんな感じで関数の引数が参照のとき呼び出す側は変数そのまま突っ込みますよね
これなんで&aにしないんですかね。型がちげーよって怒られそうなもんですが
基本的なことだと思うんですけどどうもググっても大丈夫な理由が見つからないもので

そもそも
int val = 0;
int& refval = val;
みたいな書き方もしますよね。やっぱり左右で型違うよねって
ポインタならint* p pval = &valって&つけるのに。どうなってんでしょ

753デフォルトの名無しさん2019/06/05(水) 17:38:39.24ID:W6wnsWg/
後付けの機能だから考えても仕方ないぞ

754蟻人間 ◆T6xkBnTXz7B0 2019/06/05(水) 17:58:17.41ID:keYZi/8b
型に互換性があるから。

755デフォルトの名無しさん2019/06/05(水) 18:58:47.42ID:LHcMHkph
>>750
ネコぱらがアホみたいに売れたから気前よくなってる可能性

756デフォルトの名無しさん2019/06/05(水) 19:47:28.87ID:vfI9OlW2
template <auto N>とかできるんだな。

757デフォルトの名無しさん2019/06/05(水) 23:39:10.84ID:g8AzjXwK
カッコつけずに byref とか予約語作ればよかったんだよ。
同様に関数の後に=0でpure virtualとかバカジャネーノ。

758デフォルトの名無しさん2019/06/05(水) 23:51:08.01ID:Oo3xyqZm
&&でmoveもあるしね

759デフォルトの名無しさん2019/06/05(水) 23:55:20.60ID:PbZwo6fr
参照ってもともと演算子オーバーロードのための機能なので
呼び出し側でなんかさせるわけには行かなかったんだよ

760デフォルトの名無しさん2019/06/06(木) 00:50:27.07ID:owYx3C4X
>>759
参照とオーバーロードにどういう関係がありますのん?

761デフォルトの名無しさん2019/06/06(木) 00:51:47.37ID:vlcJQGqo
専門家が深く考えて議論して決めたことを素人が批判してて草

762デフォルトの名無しさん2019/06/06(木) 01:17:25.71ID:u8n9IUq9
>>752は、operator->()をみたらしぬ

763デフォルトの名無しさん2019/06/06(木) 03:17:03.81ID:BJpCSJfe
=0とか分かりやすすぎ

764デフォルトの名無しさん2019/06/06(木) 06:49:58.29ID:VYs0Fl5K
>>761
= 0 だけならまだしも
= default とかあまり深く考えてなくね?
まあ後付で言うのは容易いよな
って言われたらぐうの根もでないがw

765デフォルトの名無しさん2019/06/06(木) 07:01:39.10ID:PF44iNdb
Cの古い文法を(ほぼ)そのまま残した上にC++を作ったから
いきなりC++から勉強すると気色悪いと感じる面もあるかもな。

ポインタと参照が同時期に言語に入ってたら、
int a; // 通常の変数
int &ra = a; // 参照
int *pa = a; // &演算子なしで暗黙にポインタに変換
てな書き方になってたかも知れん。

void func(int n);
void func(int *pn);
void func(int &rn);
これらは曖昧で解決できない、になってたかも。

766デフォルトの名無しさん2019/06/06(木) 08:16:40.59ID:YZj7S1bc
>>765
ポインタのポインタやキャストのこと考えたら、その例のような暗黙のポインタ変換とか持ち込むとかえって混乱やミスの元になりそうだし、現状の仕様もしかたないものかなと思うよ

767デフォルトの名無しさん2019/06/06(木) 08:40:36.13ID:p2k3Z1kO
>>766
Go使いやすいよ

768デフォルトの名無しさん2019/06/06(木) 10:41:12.25ID:VbLHIWhF
参照引数に結果を代入とかたまに使うけど呼び出す側から分かりやすいようにC#のout修飾子とかほしい

769デフォルトの名無しさん2019/06/06(木) 11:48:51.90ID:CNru8FH6
C#のoutは言われてみれば確かにって感じだけど、そうやって問題提起されるまではそもそも当然すぎて問題だと思われてなかったんだろうね
引数に代入することで呼出元へ値を返すのってfortranとかの時代から続く悪しき伝統だから

770デフォルトの名無しさん2019/06/06(木) 11:53:56.84ID:fZVA+Le5
分配束縛の導入が必要だね

あと、NRVOの義務化

771デフォルトの名無しさん2019/06/06(木) 12:07:43.67ID:bIT6TIHx
仮引数名をoutにしとけばいいだけでは?

772デフォルトの名無しさん2019/06/06(木) 12:09:14.70ID:G/M7SWSB
>>768
それconst付きかどうかで判断すべきと言うか判断するだろ?

773デフォルトの名無しさん2019/06/06(木) 12:26:08.08ID:qi/Zl49P
世の中には引数にconst付けない糞ライブラリがあるんですよ

774デフォルトの名無しさん2019/06/06(木) 13:52:14.20ID:CNru8FH6
>>772
問題はそこじゃない
呼出元のコードだけを見たときにソース上で区別がつかないだろ
C#のoutは呼出元にも付ける必要があるんだよ
C++でも出力引数に参照渡しを使うことは禁止しポインタを使う流派があるが、
あれも呼出元を見たとき書換えの可能性の有無を&の有無だけで判別できるようにするのが目的

775デフォルトの名無しさん2019/06/06(木) 17:27:39.41ID:G/M7SWSB
>>774
それいちいちつけさせられたらメンドイだけのような
どうせIDEで見りゃわかるのに

776デフォルトの名無しさん2019/06/06(木) 17:40:39.24ID:AdzMW0EL
class Person
{
public:
Person& set(int);
private:
int age;
}

Person& Person::set(int num)
{
age = num;
return *this;
}

*thisを返す関数ってことで大雑把にこんな感じのサンプルが本に出てました
メンバーセットするだけならわざわざ本体の参照返す必要無くない?voidで良くない?って思ったんですけど何かメリットってありますか?

777デフォルトの名無しさん2019/06/06(木) 17:45:07.81ID:Yj1l17Nf
基本的には複数の値を戻したいならtuple返すべきだし、オブジェクトの状態を書き換える関数はそのオブジェクトのメンバにするべき
データ構造体を一部書き換えるような処理は、書き換えじゃなくて新しいのを作って返した方が読みやすいし効率的なことも多い
全部が全部そうとは言わないけど、参照引数は書き換え分かりにくいってブーブー言う奴のコードって大体汚いイメージある

778デフォルトの名無しさん2019/06/06(木) 17:49:48.99ID:Yj1l17Nf
>>776
operator=系は組み込み演算子と挙動合わせるために*thisを返すことが多い
今はあんまり推奨されないけどif(a=foo())とか書けるようにね

その例はif(p.set(40))とか書きたいのか、operator=系の話と混同してよく分からずに適当に書いてるか、そのどっちか

779デフォルトの名無しさん2019/06/06(木) 17:52:12.08ID:zzmbMYQ4
>>776
メリットとは言い難いがこんなことが出来る。
a.setx(1).sety(2);

参考書でそれをやるならoperator演算子でやるべきだったな。

780デフォルトの名無しさん2019/06/06(木) 17:57:05.98ID:vlcJQGqo
C++はアドリブ力が要求されるからな

781デフォルトの名無しさん2019/06/06(木) 18:04:35.29ID:WQTF5R5g
C++の言語仕様にケチつけたところでどうにもならんでしょ。
なにがしたいの。 >>2 にある「すっぱい葡萄」な人?

782デフォルトの名無しさん2019/06/06(木) 18:13:42.57ID:BJpCSJfe
呼び出し側の制約がしたいならtemplateでちょこっと書けば出来るし
template<typename T>
struct Out {
T& ref_;
explicit Out(T& ref_):ref_(ref_){}
T& operator()() const{return ref_;}
};
template<typename T>
inline auto out(T& ref_for_out)
{
return Out<T>(ref_for_out);
}

void func(Out<int> const& v)
{
v()=1;
}

int main()
{
int i;
//func(i);
func(out(i));
}

783デフォルトの名無しさん2019/06/06(木) 20:03:44.48ID:cAEvq2fq
やれやれ

784デフォルトの名無しさん2019/06/06(木) 20:12:37.34ID:cbON3Xt8
>>761
専門家の意見は奴がもう少し構文解析勉強してればって意見だがな。
権威だけ気にするバカがほんと増えたね。

785デフォルトの名無しさん2019/06/06(木) 20:55:57.85ID:mQulWN9t
>>776
つbuilder pattern

ここのc++サンプル参照
https://en.m.wikipedia.org/wiki/Builder_pattern

786デフォルトの名無しさん2019/06/06(木) 21:33:19.25ID:9wGcGWUm
>>777-779
ありがとうございました。本は定評のあるC++プライマーなんで多分私が書いた例がなんかおかしいんだと思います
演算子オーバーロードは今やってるところではまだ出てきてないですね。>>779は実際本にも出ていましたがやはりそれがわかりやすいメリットになりますか

787デフォルトの名無しさん2019/06/06(木) 23:08:39.21ID:Qxsak61t
メソッドチェーンか

Ruby, jQuery のマネw
Kotlin も真似してる

788デフォルトの名無しさん2019/06/06(木) 23:21:23.55ID:/EsEj/n2
マネってお前…

789デフォルトの名無しさん2019/06/07(金) 06:54:43.17ID:CBwJTjr/
メソッドチェーンって便利か?
>>779
> a.setx(1).sety(2);

a.setx(1);
a.sety(2);
って書けばいいだけだよね?

790デフォルトの名無しさん2019/06/07(金) 07:43:41.42ID:Pe4fcpYB
>>789
書くのも読むのもだるい

791デフォルトの名無しさん2019/06/07(金) 07:45:42.22ID:51aJPRpO
2個くらいならいいが
10個くらいつなぐやついて長すぎて改行するから結局同じ

792デフォルトの名無しさん2019/06/07(金) 07:52:12.96ID:bSdf4jBS
おっしゃる通り

793デフォルトの名無しさん2019/06/07(金) 07:59:02.43ID:qUGReS69
メソッドチェーンの利点で調べてみたら名前付き引数みたいなことが可能とあったな。

//メソッドチェーンで設定してない値は初期値を使用
//コンストラクタとは違いチェーンしてるので値の設定の順番は自由

void test(data().year(2019).manth(12).day(24));
void test(data().manth(12).day(24).year(2018));

794デフォルトの名無しさん2019/06/07(金) 07:59:54.93ID:CBwJTjr/
>>790
C++に向いてないからやめたらw

795デフォルトの名無しさん2019/06/07(金) 08:02:27.28ID:CBwJTjr/
>>793
間違えて1つ抜かしたり重複しててもエラーにならない
デメリットの方がでかくね?

796デフォルトの名無しさん2019/06/07(金) 08:09:00.14ID:qUGReS69
>>795
重複したら後の方が優先されるし、抜けた分は初期値を使用するし...

ただし、それだけのためにクラスを作る手間はデメリットだと思う。

あくまで使い方の一例

797デフォルトの名無しさん2019/06/07(金) 08:13:09.29ID:xj9RlcCA
「流れるような」とか言われると笑う

798デフォルトの名無しさん2019/06/07(金) 10:10:37.57ID:CBwJTjr/
>>796
> 重複したら後の方が優先されるし、抜けた分は初期値を使用するし...
だからいいってか?
抜けた部分はともかく重複をエラーにできないのは名前付引数に比べてデメリットでしかないだろ

799デフォルトの名無しさん2019/06/07(金) 10:20:00.95ID:Pe4fcpYB
>>794
行数が増えるのに耐えられるのか?
俺はできない

800デフォルトの名無しさん2019/06/07(金) 10:22:00.36ID:BtT+kizM
range adapter、C++20から使えるよ、メソッドチェーンだよ・・・

801デフォルトの名無しさん2019/06/07(金) 10:34:36.93ID:9H5/9dgd
ようするにラムダ式をチェインさせればいいんだろ
かんたんじゃん
Lispの時代に近づいてるだけだ

802デフォルトの名無しさん2019/06/07(金) 10:35:22.44ID:aX0Y7AKm
>>798
理想的な名前付き引数が存在するなら「名前付引数に比べてデメリット」といえるんだろうけど、
C++には名前付引数ないよね?

803デフォルトの名無しさん2019/06/07(金) 11:29:19.04ID:O2O1gPjv
メソッドチェーンとかいらんわ
リファクタリングしにくいし
Kotlinのapplyがベスト

804デフォルトの名無しさん2019/06/07(金) 11:30:58.83ID:dp7q4wQg
横に長いのがいやなんだよな
多少冗長でも縦の方がいい
特になっがいメソッドチェーンで途中から返り値変わってるやつとか殺意わく

805デフォルトの名無しさん2019/06/07(金) 11:38:12.52ID:Pe4fcpYB
関数の定義は正方形に近いのがいい

806デフォルトの名無しさん2019/06/07(金) 12:23:28.70ID:CBwJTjr/
>>802
そのうち追加されるだろうから待ってなよ

807デフォルトの名無しさん2019/06/07(金) 12:25:28.59ID:CBwJTjr/
>>799
行数増えるのになんの問題があるんだ?
横に長いとか見辛いし差分も取りにくいしメリットないだろ

808デフォルトの名無しさん2019/06/07(金) 14:04:49.95ID:Pe4fcpYB
>>807
縦にも横にもスクロールしたくないだけさ
>>805 に書いた

809デフォルトの名無しさん2019/06/07(金) 14:45:14.80ID:8IyUxlC9
ところで>>776のような return *this; だとコピーが発生しないか?
return this;; として->でメソッドチェーンにするのならわかる

810蟻人間 ◆T6xkBnTXz7B0 2019/06/07(金) 14:59:30.42ID:KffKHULn
>>809
戻り値の型に&が付いてるから参照だ。

811デフォルトの名無しさん2019/06/07(金) 15:25:18.97ID:adznp1U4
>>810
普通はメソッドチェーンとかいらんけど
GUIのライブラリとかはそっちのほうが使いやすそうな気がする

812デフォルトの名無しさん2019/06/07(金) 15:29:32.41ID:DvEE5fSZ
ちゃんとした設計になっていればどんなスタイルでもいいよ

813デフォルトの名無しさん2019/06/07(金) 15:59:52.88ID:Qcue35T9
sortの比較関数についてなんですけど
たとえばvector<int> v = {0, 1, 2, 3, 4, 5}があったら
bool compare(const int& num1, const int& num2) { return num1 > num2; }
sort(v.begin(), v.end(), compare)で降順になりますよね

なるほど、0< n < v.size()でどのv[n]とv[n+1]でもcompareがtrueを満たすように
並び替えてくれるんだな、って理解したんです
それで試しに
bool compare(const int& num1, const int& num2) { return num1 == (num2 + 1); }
って書き換えたんですけど降順になってくれないんです
どのv[n]もv[n + 1] + 1に等しい→降順になると思ったんですけど

評価関数ってどう理解したらいいんでしょう?

814デフォルトの名無しさん2019/06/07(金) 16:06:41.20ID:adznp1U4
pred内でprintfデバッグでもしてみたら?
n番目ととn+1番目の要素以外でも比較が発生しているのがわかるから。

815デフォルトの名無しさん2019/06/07(金) 16:47:23.38ID:StFsiGGy
比較関数の右辺と左辺が入れ替えて比較した結果が矛盾してると、ソートは意図しない挙動になる。当たり前ではあるけど。

816デフォルトの名無しさん2019/06/07(金) 16:52:15.04ID:RgT+kAkp
>>813 俺も理解せずに言葉だけ覚えてるんだけど、
比較関数の性質として「狭義の弱順序」を示さなくちゃいけないのだ。

「狭義の弱順序」でネット検索すれば分かると思うよ。
少なくとも俺の場合「自分には(今のところ)理解できない」ことが分かった。

…て言うか、誰か分かりやすい解説サイトなど紹介してください。

817デフォルトの名無しさん2019/06/07(金) 17:52:26.15ID:9H5/9dgd
群論のマグマやモノイドあたり

818デフォルトの名無しさん2019/06/07(金) 19:55:02.31ID:eP2De+H/
>>793
俺は好きだな。 jQuery みたいでかわいい

819デフォルトの名無しさん2019/06/07(金) 20:05:15.50ID:RHh4qcVs
関数チェイン入るんかいな。
任意のコンテナにチェイン出来るフリー関数を書きたいお年頃なオレ。

820デフォルトの名無しさん2019/06/07(金) 20:43:41.59ID:bGghseJi
C++20で構造体の指示付き初期化があるみたい。
https://ja.cppreference.com/w/cpp/language/aggregate_initialization

上の使えば
void test({.year = 2019, .manth = 12, .day =24});
は可能だな。
ただし構造体の順番通りじゃないといけないのが欠点(指示をしない場合は初期値を使用)

821デフォルトの名無しさん2019/06/07(金) 20:50:05.58ID:/Ew8uqLj
バカが好きそうなクソシンタックスばっかり入るなw

822デフォルトの名無しさん2019/06/07(金) 21:19:45.80ID:khSrdsPe
cでもあるし妥当だろ
まあ順番は面倒だが

823デフォルトの名無しさん2019/06/07(金) 21:34:52.47ID:51aJPRpO
もうずっとmanthが気になって仕方がない

824デフォルトの名無しさん2019/06/07(金) 21:57:41.25ID:PFCjrauz
質問です。

std::remove_ifは実際には要素の削除を行わない。
https://qiita.com/naka4/items/1f207b5d6acf102b0db7
「削除する要素を詰めて、サイズが縮んだコンテナの新しい終端イテレータを返す」
とのことですが

vector<shared_ptr<T>>の場合、その挙動に従わない場合があって困惑しています。
下記のコードで、erase()する前にCのデスタラクタが呼ばれているのは何故ですか。
https://ideone.com/7rp1Os

たぶんムーブの挙動の絡みのナニカだとは思うのですが…


また、この挙動はどう解釈すべきですか?
特に気にせずこのままremove_if→eraseは問題ないのか?
または規格に照らし合わせてNGだったり危険だったりするものでしょうか?

825デフォルトの名無しさん2019/06/07(金) 22:07:56.01ID:bSdf4jBS
最初はsp(10)sp(11)sp(12)sp(13)sp(14)
remove_ifするとsp(10)sp(11)sp(13)sp(14*)sp(14*) (*は共有)
sp(12)の参照カウンタがなくなったので破棄される

普通の挙動では?

826デフォルトの名無しさん2019/06/07(金) 22:10:55.22ID:bSdf4jBS
ムーブするからsp(10)sp(11)sp(13)sp(14)sp(null)か
結論は一緒だけど

827デフォルトの名無しさん2019/06/07(金) 22:12:27.62ID:khSrdsPe
swapじゃなくてmove代入されているんじゃね

828デフォルトの名無しさん2019/06/07(金) 22:21:39.08ID:RHh4qcVs
参照カウンタ増やさない方法で移動されてるのかな??
インプレースだから、扱いが雑な気がする。

829デフォルトの名無しさん2019/06/07(金) 22:25:21.08ID:bSdf4jBS
まあremoveの外側はunspecifiedだからどうするかは実装の勝手
雑に扱われてても文句は言えない

8308242019/06/07(金) 22:34:00.62ID:PFCjrauz
各位、どうも
なんとなく分かってきました
cpprefjpでも「有効だが未規定な値」とのこと
実装依存で参照カウントが減ってゼロになるときもあるよ、そういうmoveもされ得るよ
ということですね

とりあえず返却されたイテレータが示す範囲は正常だと思うので
erase()はそのまま使う方向でいってみようと思います

831デフォルトの名無しさん2019/06/07(金) 22:56:05.74ID:khSrdsPe
雑とかそう言う話ではなく
remove_ifの実装でremove後の空きshared_ptr部分に後の要素をどうやって詰めているかだけの話
swapじゃないなら、代入にせよmove代入にせよ、その場で参照カウント減ってデストラクタが呼ばれるよ

832デフォルトの名無しさん2019/06/07(金) 23:01:56.95ID:RHh4qcVs
実装がとある一つなのだから、変数に持ち直してやるのもオーバヘッドがーという場合もある。
コンテナ上の空き領域の作り方も幾つかあって、
今回は疑似ポインタだからコピーが軽いけど、実態をいじるときは涙目になるきがす。

実装を定義してないはずだから言いようはいくつかあるけど、
インプレースでやるときは面倒だということだけ知っておけばよい気がする。

833デフォルトの名無しさん2019/06/08(土) 01:15:29.93ID:B4mMYyrz
整数の事情って結局どうするのが正しいの?
powは遅いだの何だの以前にdoubleとの間で一々キャストするのが姿勢として正しいように思えない

マクロでやってる人が多い?

834デフォルトの名無しさん2019/06/08(土) 01:33:51.17ID:f9OaJysQ
powの整数型引数のがあるんじゃない?

835デフォルトの名無しさん2019/06/08(土) 06:52:32.97ID:81RPqzS0
std::powにはないから自分で書くしかない

836デフォルトの名無しさん2019/06/08(土) 08:59:01.58ID:JxaHk6L1
>>833
整数値で指数みたいな物を扱う場合、簡単にオーバーフローが起きるので
本気でやるとしたらだいぶ恣意的なサイズ区切りを入れることになる。
そんなことやるくらいなら浮動小数からのキャストのがだいぶ楽だし実装も安定する。

837デフォルトの名無しさん2019/06/08(土) 10:35:16.88ID:uBDMoQSs
負の数が指数に与えられたら結果は少数になるけどそれでもいいなら

838デフォルトの名無しさん2019/06/08(土) 10:47:03.88ID:Yv0NxNrw
二乗だろ?
何悩んでんだよ

839デフォルトの名無しさん2019/06/08(土) 11:17:40.81ID:CfSNJA7X

840デフォルトの名無しさん2019/06/08(土) 11:37:29.71ID:6OYPkGQi
二乗なんて直接掛け算で書き込んでもいいくらい

841デフォルトの名無しさん2019/06/08(土) 12:05:54.87ID:hw2i/19C
底が2でない3乗以上の累乗なんか整数でやろうと思ったことないな

842デフォルトの名無しさん2019/06/08(土) 18:23:48.07ID:81RPqzS0
整数の冪は速度云々よりオーバーフローが気になる
100を5乗しただけであっという間にuint32_tをぶっちぎるんだぞこえーよ

843デフォルトの名無しさん2019/06/08(土) 20:11:59.83ID:KGab8pqO
n乗してオーバーフローする整数は予め求められるんだからn乗する前に判定するだけだろ

844デフォルトの名無しさん2019/06/08(土) 20:14:05.51ID:f9OaJysQ
やっぱlog表現にすべきやな

845デフォルトの名無しさん2019/06/08(土) 20:18:41.89ID:16S9+5P1
メモリを無限に使えばええ

846デフォルトの名無しさん2019/06/08(土) 20:36:16.78ID:JxaHk6L1
>>843
判定のためにdoubleにキャストして、みたいな?

847デフォルトの名無しさん2019/06/08(土) 20:37:46.29ID:KGab8pqO
>>846
100がオーバーフローする最大値なら100と予め整数比較するだけだろ

848デフォルトの名無しさん2019/06/08(土) 20:39:53.83ID:JxaHk6L1
なるほど n=100くらいまで全て持っていればいいと。
まあそうかもな。

849デフォルトの名無しさん2019/06/09(日) 02:20:42.24ID:49FyDaAW
C++知らないことが多すぎてちょっと勉強するだけでもあーあそここれ使って書いてればよかったーってなることばっかりだわ
しばらく前に書いたコード見直したくねぇ

850デフォルトの名無しさん2019/06/09(日) 02:37:22.98ID:bDrC2N4p
そのうちこれわざわざこれ使って書く必要なかったなになるゾ

851デフォルトの名無しさん2019/06/09(日) 02:55:27.45ID:5fLgSAOM
そしてC言語が正解だったことに気づく

852デフォルトの名無しさん2019/06/09(日) 02:57:41.57ID:bDrC2N4p
それはない
コンテナはやっぱり便利
動的ポリモーフィズムは必要ねえなぁ
テンプレートで十分

853デフォルトの名無しさん2019/06/09(日) 03:16:06.77ID:/cpSAd8E
>>836
modpowは自分のライブラリとして持ってるので、それ使うことにすれば良いですかね
機能過多な感じもしますが


>>837

普通の挙動ですよね?


>>839
ありがとうございます。読んでみます
結果によっては素直にpowを使うことにします


>>840
今はマクロでそうしてます

854デフォルトの名無しさん2019/06/09(日) 09:31:54.10ID:/FZVYwra
テンプレートもそろそろガンだってことが普通に認識されるようになるだろうな。
標準のテンプレートだけ使ってりゃいいんだよ(それでも使いこなせないだろうが。)
バカの作るテンプレートライブラリほどひどいものはない。

855デフォルトの名無しさん2019/06/09(日) 10:15:07.88ID:Gi1Jt9cY
そりゃ堂々巡りの言い方だろ
酷い奴の作るテンプレートライブラリは酷い。そりゃそうだ
テンプレートライブラリが酷けりゃ作ったヤツは酷い。こうなるわな

856デフォルトの名無しさん2019/06/09(日) 10:55:06.08ID:jMWe1oeX
>>852
>動的ポリモーフィズムは必要ねえなぁ
データの通りにオブジェクト作るような設計一切出来ないぞ

857デフォルトの名無しさん2019/06/09(日) 10:55:18.69ID:g07iT4nf
>>854
どこが癌なのか教えてください。

858デフォルトの名無しさん2019/06/09(日) 12:52:56.51ID:Oof3fMf0
いやテンプレート「ライブラリ」ともなれば十分な機能と性能と使いやすさを全立させるには必要スキルがダンチになる印象

そうではなくて問題に特化した形でテンプレートを使ってコードの記述量を激減させることは常人のもできる
ただし他人に理解してもらうのが困難になるからそういのうはモジュール内に囲ってテンプレートそのものを外に出さなければ宜しい

もし使いにくいとか理解しがたいだけでなく動作品質に問題があるなら、
その場合は問題のある人物が取り替えられる方向へと管理者のソーシャルスキルの発動の時間である

859デフォルトの名無しさん2019/06/09(日) 13:05:27.14ID:bDrC2N4p
>>858
それが言いたかったんだよ、うん

860デフォルトの名無しさん2019/06/09(日) 15:35:10.73ID:oBKk3YD0
正直アプリレイヤーでテンプレートを駆使したライブラリを作ることはあんまない
使う側からすれば便利な仕組みだわ

これがライブラリを提供する側になると途端に言語仕様と環境との闘いが始まる

861デフォルトの名無しさん2019/06/09(日) 15:42:19.87ID:5fLgSAOM
何回同じ話するの?
障害あるの?

862デフォルトの名無しさん2019/06/09(日) 15:46:33.89ID:S7l1hTT6
いいからお前はC言語使ってろよ

863デフォルトの名無しさん2019/06/09(日) 15:46:44.77ID:aCcbeNVM
>>859
嘘つけ

864デフォルトの名無しさん2019/06/09(日) 16:02:49.06ID:P23LzvOV
テンプレートは、コンパイラのエラーや警告が意味不明なのが玉にキズ。

865デフォルトの名無しさん2019/06/09(日) 16:08:45.43ID:5fLgSAOM
同じ話を2回する奴はガイジ死ね

866デフォルトの名無しさん2019/06/09(日) 16:17:48.67ID:Q5Gsequk
>>861>>865 は文面は異なれど、意図として
同一の内容を繰り返してるような気がするんだが。
「同じ話を何度も投稿する人に対する敵意」ってくくり。

これは単なる感想(自己言及的で面白い)だけどね。
発言に対しての賛同でも否定でもなく。

867デフォルトの名無しさん2019/06/09(日) 16:40:22.23ID:/FZVYwra
クソライブラリ作るやつが絶滅するまで。

868デフォルトの名無しさん2019/06/09(日) 17:20:43.24ID:g07iT4nf
そのくそライブラリを使わないといけないの?

869デフォルトの名無しさん2019/06/09(日) 19:35:59.29ID:5fLgSAOM
だったら無駄なことしてないで直接乗り込んで二度とライブラリを作れないようにしてこいやゴミ

870デフォルトの名無しさん2019/06/09(日) 20:34:56.29ID:Oof3fMf0
1. より優れたライブラリを提供すれば良い

2. 労力の関係で0スタートで新規作成は無理ということであれば
  糞ライブラリをうまくwrapしてせめて使いやすい形にして見せれば良い

3. 2の場合も中身は追って作り直すこと

871デフォルトの名無しさん2019/06/09(日) 21:12:37.07ID:Gi1Jt9cY
4. 自身の頭脳がへっぽこだと、高度すぎるライブラリは全く理解できない。
 自分が使いこなせないものはダメである。
 わたしの頭のレヴェルに合わせろ。

872デフォルトの名無しさん2019/06/09(日) 21:22:41.55ID:/FZVYwra
俺なら使いこなせるって持ってきたやつが一番使えてないパターンなんだが。。

873デフォルトの名無しさん2019/06/09(日) 21:28:31.78ID:5fLgSAOM
持ってくるwww
2ちゃんガイジのくせに偉くなったと錯覚してて草

874デフォルトの名無しさん2019/06/10(月) 00:33:49.15ID:3V4oen/z
エモーショナルエンジン搭載。
その日の気分で結果が変わります。

875デフォルトの名無しさん2019/06/10(月) 00:36:48.31ID:jI97QXDl
それが!

PS2!?

876デフォルトの名無しさん2019/06/10(月) 08:57:25.07ID:SLwWwvWV
仕事で無駄に時間かけてテンプレート使ったライブラリ(という名のほぼ何もしないクソコード)書かれたら殺意も湧くだろうな、ネットでもそういうのはたまに見かける

熟練者が長年かけて作った、良くできたフリーのライブラリしか知らんアマチュアの人にはわからんかもしれんが

877デフォルトの名無しさん2019/06/10(月) 09:53:37.04ID:5SR5C4JK
そんなもん飼ってる上司の責任だろ
糞ができるまで放置してたのか?

878デフォルトの名無しさん2019/06/10(月) 13:21:16.85ID:SLwWwvWV
俺は仕事でそんなの見たことないけど>>854の肩を持ったまでだよ
>>854以降の流れを読んでからほざけ

879デフォルトの名無しさん2019/06/10(月) 14:24:51.11ID:MigAkPcZ
テンプレートってそんな身構えるようなものかな?
外部ツールとマクロで武装した旧黒魔術系のコードに比べたら、なんぼかましな気がするがw

880デフォルトの名無しさん2019/06/10(月) 14:45:47.43ID:SLwWwvWV
もちろん便利にはなったけど、STL以来むやみにテンプレートを持ち上げる風潮が・・・
初心者が上級者を気取りたくてテンプレート持て囃し、それだけに留まらずオブジェクト指向や昔ながらのテクニックをこき下ろしてるのを良く見かける

実行時、コンパイル時、プリプロセス時でそれぞれメリットデメリットあるんだけどなぁ

881デフォルトの名無しさん2019/06/10(月) 15:05:36.77ID:psqZaESW
プロ(仕事)の話と初心者の話が一緒になっちゃってるな

882デフォルトの名無しさん2019/06/10(月) 15:44:38.79ID:EWMjDPPL
初心者を指導せずほったらかしにしてる上司がいるらしい

883デフォルトの名無しさん2019/06/10(月) 16:11:30.07ID:psqZaESW
>>854は「普通に」って書いてるけど、
バカがテンプレートライブラリを書いてそれが仕事に害悪をもたらすなんてことが
普通にあるわけがないだろ。
仕事なら出来る奴に書かせるし、趣味なら仕事には無害。

884デフォルトの名無しさん2019/06/10(月) 17:43:59.55ID:sRT+YLgZ
できる奴が書いたテンプレートライブラリを使いこなせない奴が、グダグダ文句言っているだけだろ。

言っている奴ができる奴なら文句言う前に修正しているわ

885デフォルトの名無しさん2019/06/10(月) 18:56:35.92ID:OlE51f/u
まあマクロとかテンプレートとかみんな一度はやり過ぎるぐらい作り込んだことあるだろ
多分>>854をそれを経験した直後ぐらいなんだろ

886デフォルトの名無しさん2019/06/10(月) 19:08:07.57ID:YayWwtn2
無職がおしごとごっこでつか?w
以下、職業プログラマじゃない者は書き込み禁止

887デフォルトの名無しさん2019/06/10(月) 19:10:51.22ID:ZJKeta/Q
マ板でやれ

888デフォルトの名無しさん2019/06/10(月) 19:16:09.39ID:EWMjDPPL
労働厨とかいう下級国民

889デフォルトの名無しさん2019/06/10(月) 19:22:32.34ID:5SR5C4JK
お前らautoとdecltype(auto)の違いとか言語仕様の話しで盛り上がれよ

890デフォルトの名無しさん2019/06/10(月) 19:22:55.85ID:SLwWwvWV
>>885
>>852もそれ以前の段階だろ

891デフォルトの名無しさん2019/06/10(月) 19:27:55.90ID:EWMjDPPL
イテレータを受け入れる関数もオーバーロードで書いてるんですか?

892デフォルトの名無しさん2019/06/10(月) 20:00:14.92ID:J/wxl4Rl
>>886
逆だろ
プロがこんなとこに来て語ってる方が異常だわ

893デフォルトの名無しさん2019/06/10(月) 20:34:00.20ID:0NZRWrrl
auto int i =0;

K&Rはこれでいけたんだがのう

894デフォルトの名無しさん2019/06/10(月) 20:37:49.85ID:W52LT1uh
int不要とかそういう話?

895デフォルトの名無しさん2019/06/10(月) 20:48:57.81ID:9ReisgX6
decltype(auto)はあまり使わないなぁ
長いし
面倒だからauto&&で受けちゃうし
戻り値推論もauto&とかで済ましちゃう

896デフォルトの名無しさん2019/06/10(月) 21:07:56.06ID:Ii7tq5Jr
>>884
こういうクソな思想が広まってるからクソライブラリがあとを絶たないわけだ。

897デフォルトの名無しさん2019/06/10(月) 21:35:34.30ID:9ReisgX6
クソクソ言うだけで、何がどう悪いとすら具体的に例を上げないのだからもうね

898デフォルトの名無しさん2019/06/10(月) 21:36:31.46ID:YayWwtn2
>>892
(´・∀・`)ヘー
アマチュアさんはそう考えるんだね

899デフォルトの名無しさん2019/06/10(月) 21:55:37.04ID:EWMjDPPL
>>898
え?お前だけだぞこんな底辺まで来てるの
もう少し世間体とか気にしようよ

900デフォルトの名無しさん2019/06/10(月) 22:04:08.27ID:irHYgLSK
utf8の文字定数って実質ASCIIしか使えないのかコレ

901デフォルトの名無しさん2019/06/10(月) 22:42:42.99ID:J/wxl4Rl
>>898
アマチュアをからかうプロwww
エンジニアがそんなんじゃ日本の将来は暗いわ

902デフォルトの名無しさん2019/06/10(月) 23:08:47.95ID:j+S7HtNV
ていうかテンプレートが絡むととたんに問題解決できなくなるプロ

903デフォルトの名無しさん2019/06/10(月) 23:51:39.69ID:Ii7tq5Jr
テンプレートの問題なんてもう語り尽くしたわ。
それでもバカがあと立たないのもずっと見てきた。。

904デフォルトの名無しさん2019/06/11(火) 00:19:02.01ID:QaZP7mkq
テンプレートの問題について何も聞いてないし、その状態で語り尽くしたというなら何も問題はないな。

905デフォルトの名無しさん2019/06/11(火) 00:19:41.89ID:kvB4pOtR
新規参入者がいるってことだから恐悦至極なのではないか

906デフォルトの名無しさん2019/06/11(火) 00:25:55.32ID:PO+d8+1v
(果たして彼にとってはテンプレートのみが例外的に特殊な問題であって
 テンプレート以外については十分なスキルを有しているのであろうか…

907デフォルトの名無しさん2019/06/11(火) 00:53:07.47ID:7MvjruKl
コンパイル時に発見できるような問題はそもそもたいして深刻な問題ではない。

908デフォルトの名無しさん2019/06/11(火) 01:02:03.28ID:TJ/Njjhl
>>907
コンパイル時にわかる程度の問題でも、ランタイムでエラー吐かれたらデバッグ大変だよ
Pythonの型違いで嫌と言うほど思い知った

909デフォルトの名無しさん2019/06/11(火) 01:13:48.45ID:7MvjruKl
>>908
私は、ランタイムエラーを解決することの困難さに比べればコンパイルエラーなんて大したことない、という意味で言ったんだが。
あなた、読解力がないって遠まわしに指摘されること多くない?

910デフォルトの名無しさん2019/06/11(火) 01:26:55.77ID:TJ/Njjhl
そもそも文脈不明な中でそれだけ書かれてもなぁ
コンパイル時の分かるような問題かどうかではなく、エラーをコンパイル時に吐いてくれるとデバッグが捗るみたいに書けば良いのに
実際、assertやstatic_assert
SFINAE使ってのなるべく上位レイヤーでエラー発生させるのは重要でしょ

911デフォルトの名無しさん2019/06/11(火) 01:51:30.87ID:GDgSrcmQ
テンプレート駆使したライブラリ使うと最適化ありなしで速度かなり変わるの困る
デバッグビルドだとくそおっそくてデバッグがままならん
なんか良い解決法ないですかね?

912デフォルトの名無しさん2019/06/11(火) 02:00:33.22ID:TJ/Njjhl
適当なところで切る
処理の定義を別ヘッダに分けて、特定のソースファイルで定義ヘッダを読み、デバッグが必要ないところは最適化Onで明示的インスタンス化をする

913デフォルトの名無しさん2019/06/11(火) 02:07:42.02ID:7MvjruKl
>>911,912
> 処理の定義を別ヘッダに分けて、特定のソースファイルで定義ヘッダを読み

自前の切り替え処理自体が不具合の原因になりかねない。
素直にprintf()するのが一番確実でしょう。

914デフォルトの名無しさん2019/06/11(火) 02:12:17.79ID:bsFR+Nzy
C++14以降でテンプレートのデザインパターンの参考書って無い?

915デフォルトの名無しさん2019/06/11(火) 02:42:42.36ID:Pe41E3Zb
テンプレート完全ガイドの2版が出てたけど、英語

916デフォルトの名無しさん2019/06/11(火) 22:59:30.61ID:GDgSrcmQ
>>912
ソースファイルごとに最適化変えるのって簡単にできます?
VSプロジェクトかCMakeで

917デフォルトの名無しさん2019/06/12(水) 00:12:16.75ID:EuvWtF/E
VSならプロジェクトじゃなくソースのプロパティ選んで最適化変えればそこだけ反映される
まあ、それ用の構成作っておくのが安全

CMakeはわからん
makeなら簡単だけど

918デフォルトの名無しさん2019/06/12(水) 09:35:50.45ID:eCiQ25Tx
c++の場合、このコンパイラでは通るけどこっちのコンパイラでは通らないとかが
普通にある方が問題。
静的だとか動的かとかそういう問題とはまた違う。

919デフォルトの名無しさん2019/06/12(水) 09:39:04.87ID:dM+mHpC4
>>917
あ、ホントだ
ありがとうございます

920デフォルトの名無しさん2019/06/12(水) 12:59:45.38ID:pwRz5TOC
>>918
コンパイラごとに違う言語なんだから当然では?
むしろコンパイラが1つしかない言語以外でそういう問題が発生しない言語ある?

921デフォルトの名無しさん2019/06/12(水) 16:21:34.99ID:7KGE0Knu
Java、C#は「コンパイラが1つしかない言語」に含む?
どのみち比較の対象が少ないね。

922デフォルトの名無しさん2019/06/12(水) 16:22:16.09ID:7cC3bFV5
普通はコンパイラは何種類もない

923デフォルトの名無しさん2019/06/12(水) 16:24:55.92ID:EuvWtF/E
そこら辺もバージョン違いで色々あるよね

924デフォルトの名無しさん2019/06/12(水) 16:31:31.49ID:7cC3bFV5
そんなの当たり前だろ

925デフォルトの名無しさん2019/06/12(水) 16:40:28.14ID:7KGE0Knu
「コンパイラが通らない問題を解消するためにビルドツールをご用意いたしました。」
で、configureやらcmakeやらantやらといった車輪の再発明が続々生まれてくる。

926デフォルトの名無しさん2019/06/12(水) 17:19:03.04ID:79FLB/Pn
ブラウザ戦争に近いものがあるな

927デフォルトの名無しさん2019/06/12(水) 18:48:39.87ID:eqhLCWed
モダンなC++を学ぶべく右辺値参照について勉強しているのですがさっぱりわかりません
本に右辺値参照は実際は左辺値でstd::moveは実際は何もmoveしない
と書いてありましたが本当に意味がわからない
言葉遊びはいいからわかりやすく教えてくれ

928デフォルトの名無しさん2019/06/12(水) 19:07:22.06ID:iR6eT4Op
>>927
正確に言うと右辺値参照が左辺値なんじゃなくて右辺値を参照している「変数」が左辺値なのさ。
それ自体ひとつの変数なんだから当然のことだろう?

929蟻人間 ◆T6xkBnTXz7B0 2019/06/12(水) 19:12:10.36ID:KzwP9Gzw
>>927
誤解を恐れずに言うと、std::moveを付けると、&&が付いた特殊な型になる。その型のことを右辺値参照という。ムーヴコンストラクターやムーヴ代入などは、その特殊な型に対して行われる。

930蟻人間 ◆T6xkBnTXz7B0 2019/06/12(水) 19:17:22.52ID:KzwP9Gzw
&&が付いた引数は、中身の所有権を他の場所に譲り渡すことができる。
例えば、文字列クラスだったら、ポインタが指し示す文字列の所有権だ。所有権をコピーせずに、移動するだけなら、処理コストが低くて済む。

931 ◆QZaw55cn4c 2019/06/12(水) 19:33:55.80ID:1cw0Fvdf
>>930
所有権って何ですか?
私は一つの関数で new/malloc() した領域を、別の関数に渡し、さらに別の関数で delete/free() してますが、効率よくそういうことをする場合には所有権という架空のフレームは邪魔だと思います

932デフォルトの名無しさん2019/06/12(水) 19:36:15.70ID:qnyyQkgz
>>931
まさにそれをする為のフレームやん。

933デフォルトの名無しさん2019/06/12(水) 19:38:15.23ID:eqhLCWed
>>928
あーなるほど確かに変数に代入してる時点でそうですね
右辺値参照を保持する左辺値ということですね
納得です

>>929
std::moveに渡す型も&&ですよね
&&をもらってさらに特殊な&&を返すんでしょうか?
remove_referenceとかその辺がさっぱりです
なぜこれが必要なのか
さらにその型で所有権が移るというのもよくわからず

934デフォルトの名無しさん2019/06/12(水) 19:45:51.10ID:qnyyQkgz
右辺値というのはほっといたら消える。

どうせ消えるんだったら右辺値が確保してるメモリ、こっちでちゃんと解放するからもらうね→所有権の移動

もちろん所有権移動したので右辺値でメモリ解放しちゃダメよ。

935デフォルトの名無しさん2019/06/12(水) 19:47:37.87ID:GZDxeRSP
>>933
所有権が移るというか...
T&& x を引数に持つ関数(コンストラクタが多い)は右辺値を受け取るけど、
そこで x の所有するリソースを
分捕っていいという「慣習」「イディオム」があるというだけなんだよ。

936蟻人間 ◆T6xkBnTXz7B0 2019/06/12(水) 20:10:41.45ID:0iE+TYdc
>>933
そこを厳密に理解するには、lvalue, rvalue, prvalueなどの値カテゴリを理解しないといけない。
https://ja.cppreference.com/w/cpp/language/value_category
要するにlvalueをxvalueにするために、std::moveを使う。

remove_referenceは、type traitsと呼ばれる「型に対する演算」を行っているに過ぎない。
std::moveの実装のremove_referenceは、冗長な参照を削除している。
type traitsは、テンプレートに慣れないと使いどころが分からないだろう。

937蟻人間 ◆T6xkBnTXz7B0 2019/06/12(水) 20:24:57.03ID:0iE+TYdc
class STRING
{
public:
...
// ムーヴコンストラクタ(一例です)。
STRING(STRING&& s) : m_ptr(nullptr)
{
std::swap(m_ptr, s.m_ptr);
}
// ムーヴ代入(一例です)。
STRING& operator=(STRING&& s)
{
std::swap(m_ptr, s.m_ptr);
return *this;
}
protected: char *m_ptr;
};
...
STRING s("abc123");
STRING t;
t = std::move(s);

938蟻人間 ◆T6xkBnTXz7B0 2019/06/12(水) 20:34:03.21ID:0iE+TYdc
右辺値参照で挫折したら、Rustに進むがいい。
C++を完全に理解した人間は1%も居ない。

939デフォルトの名無しさん2019/06/12(水) 20:39:57.61ID:W9DAWVrH
蟻人間は行列理解からだな

940蟻人間 ◆T6xkBnTXz7B0 2019/06/12(水) 21:02:08.90ID:KzwP9Gzw
あほですみません。。。

941デフォルトの名無しさん2019/06/12(水) 21:03:19.70ID:wMzR7R80
難しいというよりただ複雑
概念的にそれほど難しいわけではない

942デフォルトの名無しさん2019/06/12(水) 21:07:19.74ID:JHNh+ipy
ムーブセマンティクスは今世紀最大の発明と言われてるからね。

943デフォルトの名無しさん2019/06/12(水) 21:11:21.95ID:7TWmWXJk
最近は標準ライブラリも文法も分かりやすくなったなと思ったら
initializer_list絡みの初期化がこのやろう

944デフォルトの名無しさん2019/06/12(水) 21:17:48.45ID:hxuK959+
・仮引数が右辺値参照&&なら、そこに渡した変数はぶっ壊される(そのかわり速いかもしれない)
・ただし安全のために使い捨ての一時変数か、std::moveを付けて「壊していいよ」と明示したものしか渡せないようになってる

これだけ理解してればだいたいOK

945デフォルトの名無しさん2019/06/12(水) 21:27:52.71ID:7cC3bFV5
ややこしいとか言う奴に限ってパターンの一覧表作っていつでも参照できるようにしないよな

946デフォルトの名無しさん2019/06/12(水) 21:52:10.38ID:eqhLCWed
このスレを読んだらだんだんわかってきました

>>937
なるほど
この例で使い方は何となく理解できたかもしれないです
abc123を一切コピーすることなく引き渡しているということですね
コンストラクタに右辺値が渡された時は自動的に&&のコンストラクタがよばれ(これはコンパイラが自動で判断してくれる)
コピーでは明示的に右辺値参照にしないとダメなのでstd::moveを使うと

947デフォルトの名無しさん2019/06/12(水) 21:59:50.66ID:eCiQ25Tx
右辺値判定はコンパイラ側も困ってそう

948デフォルトの名無しさん2019/06/12(水) 22:03:44.51ID:hxuK959+
厳密に決まってるから困らないぞ

949デフォルトの名無しさん2019/06/12(水) 22:42:16.79ID:JHNh+ipy
【 constexpr の掟】
「ブッ殺す」と心の中で思ったならッ!その時スデに行動は終わっているんだッ!

950デフォルトの名無しさん2019/06/12(水) 23:19:39.59ID:zt+60oVn
>>931
所有権というのは権利を連想させるようないかにもお得な感じを醸し出しているネーミングだが
その実体はオブジェクトの開放を最後の一人だけがやる「義務」に他ならない

で、「最後の一人だけに開放させる」というのを>>931のように
>別の関数に渡し、さらに別の関数で delete/free()
というのは大悪手に他ならない
なぜなら呼び出し先で最後かどうかなど(所有権やレキシカルな手法では)管理し切れない
所有権は呼び出し元ががっちり掴んでおくもの

951デフォルトの名無しさん2019/06/12(水) 23:36:10.29ID:dKzVqNYa
moveしたあとの変数を使おうとしたらエラー出してくれるの?

952デフォルトの名無しさん2019/06/12(水) 23:44:04.96ID:vc+7745/
まさか

953デフォルトの名無しさん2019/06/12(水) 23:51:54.31ID:EuvWtF/E
元の内容について所有権を失っているだけで普通は使える様になっている
スマポならnull相当
vectorみたいなのならemptyもしくは何らかのごみが入っているのでclearか新たに代入すればおk

954デフォルトの名無しさん2019/06/13(木) 00:01:02.92ID:GxcaYm6A
>>953
>元の内容について所有権を失っているだけで普通は使える様になっている
moveしたあとの変数について述べているのなら完璧な間違いだ
藻前のプログラムはバグだらけだな

955デフォルトの名無しさん2019/06/13(木) 00:16:54.69ID:VunnpS2y
合ってるだろ
ムーブ後のオブジェクトは内容は未規定だけど有効な状態だぞ、少なくとも組み込み型と標準ライブラリはな
褒められたプログラミングスタイルかはともかく、再利用すること自体が即間違いとは言えない

956デフォルトの名無しさん2019/06/13(木) 00:26:16.00ID:/TtN03F/
>>951
ムーブコンストラクタを書いて自分で処理するんだよw

957デフォルトの名無しさん2019/06/13(木) 00:26:51.45ID:scxOg7Fk
コンパイル時に既に顧客の要求を満たしてるとかマジカッコいい

958デフォルトの名無しさん2019/06/13(木) 01:25:50.43ID:bj2tv0KH
少なくとも標準ライブラリでこれが出来ないと、メンバ変数の内容一つmoveしただけで親のオブジェクトまで使えなくなる。
メンバ変数再利用する術が無いってことだからね

959デフォルトの名無しさん2019/06/13(木) 01:41:54.12ID:/Ra8Vlso
>>957
未初期化の変数をコンパイル時に検出できるんだからmoveした後かどうかも判定できるはずでしょ

960デフォルトの名無しさん2019/06/13(木) 02:03:22.10ID:/TtN03F/
>>958
メンバ変数1つムーブって、どういうこと?
普通メンバ変数は右辺値にならないでしょ。

961デフォルトの名無しさん2019/06/13(木) 03:03:13.46ID:bj2tv0KH
2分木で子のスマポ所有しているような場合、付け替えとかで所有権の移動するときshared_ptrならコピーでokだけど、unique_ptrみたいなのだとmoveする事になるが、メンバ変数で持っていた子の内容をmoveしたあとその変数が再利用可能じゃないと困るだろ

962デフォルトの名無しさん2019/06/13(木) 03:21:55.87ID:/TtN03F/
>>961
c++11で導入されたmoveはいわゆる所有権の移動とは違うもなので、その場合はmoveは使えないと思う。

963デフォルトの名無しさん2019/06/13(木) 03:33:01.74ID:fPdkPYzy
>>962
unique_ptrのmoveが所有権の移動じゃないと言うなら一体何なら「所有権の移動」だと言うのか。

964デフォルトの名無しさん2019/06/13(木) 03:46:23.77ID:/TtN03F/
もともと右辺値参照とmoveセマンティクスの話じゃなかったっけ?

965デフォルトの名無しさん2019/06/13(木) 04:35:02.91ID:qBl/BLKs
ループの中で int a なる整数を使うとき、ループ内で毎回宣言するのとループの外で宣言して使い回すのどっちが結局速いの?

966デフォルトの名無しさん2019/06/13(木) 09:17:30.68ID:wJ3u1v7j
自分で計ればいいじゃん

967デフォルトの名無しさん2019/06/13(木) 11:30:46.72ID:eqzI8P56
ループの外に出せるものは可能な限りすべて出せ

968デフォルトの名無しさん2019/06/13(木) 12:09:07.93ID:Br82W2pC
範囲for文を使ってそんなどうでもいいことは忘れろ

969デフォルトの名無しさん2019/06/13(木) 13:18:06.43ID:XHz4etUG
>>967
逆じゃないか?
インスタンスの生成にコストがかかるときはトレードオフだが、そうでないなら可能な限りスコープを狭くなるように変数を宣言した方が良いと思う

970デフォルトの名無しさん2019/06/13(木) 13:33:35.83ID:eqzI8P56
スコープ気にするならループ関係の部分だけでスコープ区切ればいいじゃん

971デフォルトの名無しさん2019/06/13(木) 15:27:33.99ID:P5difHG2
>>970
お前は何を言ってるんだよ…

972デフォルトの名無しさん2019/06/13(木) 15:28:06.57ID:PncfQdvG
cppcheckやVisual Studioのような静的コード解析にかけると「スコープを小さくできるよ?」みたいなアドバイスが出るよね。
実際のところ、どうなんだろうね。typoしにくくなったりスタックサイズが小さくなる利点があるとは思うけど。

973デフォルトの名無しさん2019/06/13(木) 16:20:20.51ID:fzRArnQO
さすがにこの流れは草

974デフォルトの名無しさん2019/06/13(木) 16:22:08.63ID:jHLKLHUC
ちょうど今朝cppcheckかけたら
style: The scope of the variable 'c' can be reduced.
「変数 c のスコープを縮小できますよ」って出たわ。
つまり「スコープを狭くできるなら狭くすべき」っていう方針を、
(少なくともcppcheckを作ってる人は)採用してるんだろうな。

どっちが速いかについては、ちょっと最適化オプションつければ
結局同じマシン語になっちゃうんじゃないかしら。

975デフォルトの名無しさん2019/06/13(木) 16:29:14.63ID:gMp0DWLA
>>967
セオリーだからって鵜呑みにするの良くないよ
(というか文面だけ覚えても意味ない

976デフォルトの名無しさん2019/06/13(木) 16:30:01.81ID:57+ky1er
スコープ広いほうが良いなら最終的に全部グローバルにしろやになるやんけ

977デフォルトの名無しさん2019/06/13(木) 17:32:58.81ID:fC2jn4Im
オブジェクト指向って実はprivate変数のスコープをかなり広く取ってるセミグローバル指向だと思う

978デフォルトの名無しさん2019/06/13(木) 17:37:28.56ID:wJ3u1v7j
おれは思わないな

979デフォルトの名無しさん2019/06/13(木) 18:39:42.63ID:XHz4etUG
>>977
それってクラスを大きくしすぎているだけじゃないか?

980デフォルトの名無しさん2019/06/13(木) 19:54:06.23ID:fmTPRROb
この流れは関数切り出しをまともにやってない連中が多いってことだな。。

981デフォルトの名無しさん2019/06/13(木) 23:39:11.49ID:ktOVSBzy
そろそろ次スレ。わっちょい。

982デフォルトの名無しさん2019/06/15(土) 13:52:11.56ID:DKQ0QQLH
次スレ
C++相談室 part143
http://2chb.net/r/tech/1560574313/

983デフォルトの名無しさん2019/06/15(土) 18:36:57.85ID:YCpCWY7o
最近馬鹿の一つ覚えが多いな
>>982 乙乙

984デフォルトの名無しさん2019/06/15(土) 19:13:31.09ID:wEtwZJzN
覚えてるだけまし。

985デフォルトの名無しさん2019/06/15(土) 19:37:22.36ID:y49ayDRp
グローバル変数と言っているのはオブジェクト指向スレを荒らしてるバカだろ

986デフォルトの名無しさん2019/06/16(日) 15:07:40.82ID:TXhOXCMI
任意の型に対応する整数を返すメタ関数ってC++11の標準であったりします?

intなら1
stringなら2
みたいな
上記の技法をなんと呼ぶかわからないので検索ワードも思い付かず…

987デフォルトの名無しさん2019/06/16(日) 15:52:45.94ID:eI7bdJXk
なんでワッチョイついてんの?
スレ立てミスだろ

988デフォルトの名無しさん2019/06/16(日) 16:00:01.99ID:gyfVRbSU
>>986
std::type_info::hash_code()が似た機能を持ってるけどメタ関数かどうかわからない。たぶんランタイム。
https://cpprefjp.github.io/reference/typeinfo/type_info/hash_code.html

989デフォルトの名無しさん2019/06/16(日) 19:19:35.33ID:PFinGY+5
質問ですがC++のクラスのメソッドは、大別すると、
コンストラクタとデストラクタとsetterとgetterと何になるの?

990デフォルトの名無しさん2019/06/16(日) 19:22:19.26ID:NJ2skO19
move? be?
ステートチェンジしていくのだから、動作になるのか?

991デフォルトの名無しさん2019/06/16(日) 19:31:47.13ID:Va3vueK+
setterとgetterって何?
Javaじゃあるまいしそんなの言語要素としては用意してないよ

992デフォルトの名無しさん2019/06/16(日) 21:57:17.90ID:PFinGY+5
>>991
setterとgetterが何かについてはググった方が良い

Javaは詳しくは知らないが、ググった限りにおいて
Javaでもsetter/getterを定義する専用の言語要素など用意されていない印象

993デフォルトの名無しさん2019/06/16(日) 22:03:52.19ID:PFinGY+5
で、C++/Javaどっちも
 { setter } ∪ { getter } ⊂ { メソッド }
であることは明らかだが、では
 Q1. { メソッド } - ( { setter } ∪ { getter } )には何か専用の名前は無いのか?、
というのが>>909の質問の主旨。

ついでに言うと
 Q2. { setter } や{ getter }というのは本当に確定した集合なのか?
と、
 Q3. 「操作」と言ったときそれは{ メソッド }を指すのか { メソッド } - ( { setter } ∪ { getter } ) を指すのかどっちなんじゃ、
とかも知りたい

994デフォルトの名無しさん2019/06/16(日) 22:04:40.86ID:fCIbdDP9
>>989
シグナルとスロット(Qt脳)

995デフォルトの名無しさん2019/06/16(日) 22:54:20.07ID:PFinGY+5
>>994
シグナルとスロットというのはGUI操作を処理する目的のブツなので、
実行時の時間コストがゼロコストに近いことを気体されているハズ、
よって { メソッド } - ( { setter } ∪ { getter } ) の全て(この中には実行時の時間コストが青天井のブツも含まれる)を
包含しはしないのではないか、

まあここまで書いてオモタが、 { setter } ∪ { getter } こそ実行時時間コスト0を期待されるから、
setterやgetterは次の定義で良いのではないかという気がしてきた…

- 属性を取得する目的の操作であり、かつ実行時時間コスト≒0の実装が今現在も保たれているのがgetter

- 属性を変更する目的の操作であり、かつ実行時時間コスト≒0の実装が今現在も保たれているのがsetter

996デフォルトの名無しさん2019/06/16(日) 22:56:35.57ID:PFinGY+5
後ろ2行訂正orz、
正:
- 属性を取得する目的で設けられた操作であり、かつ実行時時間コスト≒0の実装が今現在も保たれているのがgetter

- 属性を変更する目的で設けられた操作であり、かつ実行時時間コスト≒0の実装が今現在も保たれているのがsetter

997デフォルトの名無しさん2019/06/16(日) 23:24:38.97ID:PFinGY+5
補足すると、「属性を取得する目的」や「属性を変更する目的」というのは、
インターフェースをクラスの主要な機能とは独立に変更できることを暗に言っている

例えばクラスFooのsetBar()が真にsetterならば、
属性をsetterでセットするのをやめて(Foo::setBar()を廃止して)ファイルから
直接読み込むメソッドFoo::readFromFile()に置き換えても、
クラスの主要な機能Foo::mainFunc()は変更せずに済むハズ

getterについても同様

998デフォルトの名無しさん2019/06/16(日) 23:56:38.00ID:WOfC/Ugn
operator=がsetterでoperator()がgetterにならない?

999デフォルトの名無しさん2019/06/17(月) 00:00:50.16ID:x+yzwFNm
c++かどうかなんて関係ない、オレオレ分類しているだけだろ

1000デフォルトの名無しさん2019/06/17(月) 00:01:28.14ID:7HzfXopw
ずれてるのを承知で書くけど、直接読み込むメソッドってやつも含め setter なんてない方がいいよ

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

TOPへ TOPへ  

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


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

 ↓「C++相談室 part142 ->画像>13枚 」を見た人も見ています:
C++相談室 part126
C++相談室 part152
C++相談室 part148
C++相談室 part149
C++相談室 part137
C++相談室 part135
C++相談室 part153
C++相談室 part156
C++相談室 part151
C++相談室 part155
C++相談室 part150
C++相談室 part154
C++相談室 part124
C++相談室 part143
C++相談室 part161
C++相談室 part166
C++相談室 part165
C++相談室 part159
C++相談室 part163
C++相談室 part158
C++相談室 part164
C++相談室 part157
C++相談室 part132
C++相談室 part138
C++相談室 part137
C++相談室 part141
C++相談室 part146
C++相談室 part145
C++相談室 part134
C++相談室 part140
C++相談室 part139
C++相談室 part144
C++相談室 part130
C++相談室 part133
C++相談室 part117
C++相談室 part136
C++相談室 part147
C++相談室 part131
C++Builder相談室 Part21
0からの、超初心者C++相談室
Cygwin + MinGW + GCC 相談室 Part 8
Cygwin + MinGW + GCC 相談室 Part 3
C++相談室 part129 [無断転載禁止]©2ch.net
C++相談室 part123 [無断転載禁止]©2ch.net
C♯相談室 Part20
C言語相談室(上級者専用)
Mac G5 中古買入相談室
MFC相談室 mfc22d.dll->動画>2本
自営業 悩みごと相談室 40
C#, C♯, C#相談室 Part75
C#, C♯, C#相談室 Part79
MFC相談室 mfc23d.dll
C#, C♯, C#相談室 Part78
C#, C♯, C#相談室 Part93
自営業 悩みごと相談室 47
C#, C♯, C#相談室 Part94
C#, C♯, C#相談室 Part91
11:48:18 up 61 days, 12:47, 0 users, load average: 9.68, 9.67, 9.49

in 0.027567863464355 sec @0.027567863464355@0b7 on 061800