C++相談室 part142

レス数が1000を超えています。これ以上書き込みはできません。
2019/04/01(月) 22:17:05.84ID:wmfpIKt/
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

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

前スレ
C++相談室 part137 (正しくはpart138)
http://mevius.5ch.net/test/read.cgi/tech/1535353320/
C++相談室 part139
https://mevius.5ch.net/test/read.cgi/tech/1538755188/
C++相談室 part140
https://mevius.5ch.net/test/read.cgi/tech/1547326582/
C++相談室 part141
https://mevius.5ch.net/test/read.cgi/tech/1550772463/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/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
すっぱい葡萄
ttps://ja.wikipedia.org/wiki/%E3%81%99%E3%81%A3%E3%81%B1%E3%81%84%E8%91%A1%E8%90%84
 自分のものにしたくてたまらないにもかかわらず、努力しても到底かなわない対象である場合、
 人はその対象を「価値の無いもの」「自分にふさわしくないもの」と見なそうとし、
 それをあきらめの理由として納得し、心の平安を得ようとするものである。
 フロイトの心理学では、これを防衛機制および合理化の例とする。また、社会心理学においては、認知的不協和の例とされる。
 英語には、この寓話を元に生まれた熟語として "sour grapes" があるが、これは「負け惜しみ」を意味する。
2019/04/02(火) 01:05:02.56ID:/U03ydJ3
前スレの
やりたいことはこうかな
メンバ関数をバインドするときは&クラス名::関数名と変数を放り込むこと
https://wandbox.org/permlink/gDWEXupOcEbbhBzs
2019/04/02(火) 01:47:19.91ID:rKGqH4gv
c言語でclassって使えるの?
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)
2019/04/02(火) 18:51:10.44ID:m0eX+8Q8
>>4
オブジェクト指向の何たるかをきちんと理解していれば、概念として使えなくはない。
もっとも、C 言語に限った話ではないけど。
2019/04/02(火) 19:17:21.52ID:LpV8NoZ4
>>4
原則、C言語ではclassは使えない。
そもそも、CをOOPの概念に対応させようとして、
classの概念(classというキーワードも)を追加したところから
始まったのがC++。
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言語に押し付けた結果。
2019/04/03(水) 12:59:01.63ID:cnGXlgmF
はあ?
2019/04/03(水) 18:43:28.55ID:9GPCcesD
テンプレートをテンプレートクラスで特殊化したい場合ってどうするの?
2019/04/03(水) 18:44:12.24ID:uuRoUePR
>>12
普通にテンプレートにすればいい
14デフォルトの名無しさん
垢版 |
2019/04/03(水) 21:15:34.88ID:2lV8d+D6
次スレから>>2に登場人物を列挙してはどうでしょうか?
2019/04/04(木) 01:13:57.58ID:tIFeeQbc
VS2019来てるじゃん
まともなメモリ使用量になってる奇跡だ
2019/04/04(木) 01:26:19.69ID:NSLfK+j2
C++erはVS毛嫌いする人も多いけどVS2017あたりからC++対応もマジでかなり良くなってる
17デフォルトの名無しさん
垢版 |
2019/04/04(木) 01:29:18.48ID:MCx08DTu
一番使えるIDEなのに毛嫌いする人はいないと思います。
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
そう言う輩はプログラマーではなく言語オタか、最新規格対応の入門書売って糧を得てる様な奴だけ。
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をアンインストールして退路を断った。
2322
垢版 |
2019/04/04(木) 01:55:45.14ID:c6BVWPCA
わかりにくかったので訂正。
VS2019はVS2017よりもコンパイルが速くなっている気がする。
デフォルトでスタックメモリ消費の静的解析をしてくれるので、
10KB以上のバッファをスタックからとるクセのある人は、
C++のstd::vectorなどへの置き換えを考える良い手助けになるなのでは。
2019/04/04(木) 18:08:19.41ID:USs/shwk
Qt VS toolsの対応待ち
2019/04/04(木) 18:37:00.98ID:tIFeeQbc
QtはCMakeでよくない?
2019/04/04(木) 20:38:54.64ID:O7o9gYjG
つか、プラットホームに依存しないような
プログラミングをかける奴なんてほとんどいないだろ

素人が書いたようなおもちゃをなんで他に移植しなきゃいけないんだよ
2019/04/05(金) 00:33:23.07ID:Zwa/Lf0S
hppファイルに実装を書いてることがたまにあって、すごく違和感があるんですけどどういうメリットがあるんですかね?
2019/04/05(金) 00:43:12.95ID:fDyBpfV8
配布が容易
宣言と定義が分かれないから読みやすい(人による
宣言と定義が分かれないからリンケージとかの罠にはまりづらい(場合によってはむしろODRの罠にはまる
翻訳単位が大量にある状況ではヘッダに実装したうえで少数のcppからインクルードした方がコンパイル速い
テンプレートの場合はほぼそうせざるを得ない

などなど・・・
2019/04/05(金) 00:49:55.23ID:1W3Y/f1q
そもそもhppファイルは実装書くためのファイルじゃないの?
templateとかで、分割コンパイルできない場合の
2019/04/05(金) 00:54:41.98ID:yOtZbpQl
もしかしてhppをhとcppの間の子みたいに思ってる?
Cのヘッダと区別するためにhppにしてる人がいるだけでただのヘッダ拡張子だぞ
VCだとヘッダはhになるけど
2019/04/05(金) 01:19:03.58ID:1W3Y/f1q
いや、そう言う流儀もあるよ
2019/04/05(金) 02:32:36.17ID:5WucuzOp
流儀なんか10年もしたらガラっとかわるから拡張子なんか好きにやれ
c++ではじめの頃の昔はたまにソースを .c++ で書いてるやつもいた
33デフォルトの名無しさん
垢版 |
2019/04/05(金) 02:42:38.39ID:qwUluuCg
ファイルパスにプラス記号使うのは、文字コード自動判定でUTF-7と誤認されやすくなるからさけたほうがいいね。
2019/04/05(金) 06:43:01.93ID:Z6l9czOn
前スレのenumから文字列についてこんなのあったよ
https://qiita.com/ta_dragon/items/1828ceb16bc8733526e1
2019/04/05(金) 07:27:13.05ID:Lymez0qU
>>28
無理やりテンプレート使ってビルドを腐らせる典型的アンチパターンじゃねーか。
2019/04/05(金) 08:06:44.62ID:a4VQ1u2O
>>28
配布出来るようなコードかけるの?
誰もお前さんのなんて欲しがらないだろ
2019/04/05(金) 09:33:27.78ID:XIaLs/Gd
.C ならC++ なんてのも黎明期にはあったのう
2019/04/05(金) 14:59:43.19ID:8pIebtc7
>>34
ほう、すごいね、そんな方法があったんだ。
これなら、enumの定義から自動的にunorderd_mapに登録して逆変換テーブルを作るとかもできるかもね。
2019/04/05(金) 16:37:26.15ID:Axh2Vo9Q
なんで何でもライブラリでできるんだよ
2019/04/05(金) 20:58:14.82ID:Qo5/2ixY
.hは宣言だけ、.hppは実装ありって使い分けてたこともあったけどやめた
includeする方はそんなの知ったこっちゃないし、いちいちhかhppか判断させられるのが無駄だとわかった
2019/04/05(金) 21:25:06.14ID:sL+JrEGq
>>40
>hppは実装あり
それは悪手なのでは?
2019/04/05(金) 21:28:37.12ID:Qo5/2ixY
別に全部入りって意味じゃないよ
テンプレートとかinlineとか、処理の実装も書いてますよーっていうこと
2019/04/05(金) 21:42:34.57ID:Axh2Vo9Q
暗黙の了解でもそんなのないだろ
hppなら少なくともC言語ではないというくらいしかない
2019/04/05(金) 22:05:43.09ID:YxBlyJP7
そもそもユーザーがincludeする部分は拡張子書いてないライブラリもある
2019/04/05(金) 22:12:58.31ID:Qo5/2ixY
だから意味ないからやめたって言ってるじゃん
意味ないし有害だよやめた方がいいよ
2019/04/05(金) 23:31:31.45ID:yvFnJ+4h
そもそも素人が書いたテンプレートを用いたものなんて使い物にならん
2019/04/05(金) 23:51:13.69ID:zbJZTl/M
じゃあ玄人が書いたモンは形式だけで分かるのか?
2019/04/06(土) 00:02:05.00ID:zp0ZZwhH
実装隠しても公開しても同じだぞ
2019/04/06(土) 00:09:06.17ID:tDMvjH1l
むしろプロの方がゴミみたいなコード書いてる人多いよね
2019/04/06(土) 00:22:46.49ID:K6S/+wtb
>>47
boostみたいなのをかけるのか?
2019/04/06(土) 00:35:20.36ID:zp0ZZwhH
小規模なライブラリに6ヶ月かけていいなら書けるよ
2019/04/06(土) 00:55:05.26ID:/WRt9p3o
boostで開発効率上がるとか信じてるバカが世の中にはまだいるのな。
2019/04/06(土) 00:58:36.65ID:zp0ZZwhH
boostのどれだよ
2019/04/06(土) 01:19:45.64ID:XiUalYkv
実際上がるだろ
ライブラリ使えばコーディング量減るのは当然
2019/04/06(土) 01:22:34.24ID:d3+s3AWp
コーディング量を減らしたいならC++使うのやめるべき
2019/04/06(土) 01:27:27.25ID:XiUalYkv
速くてコンパクトなソフト作るのに最適だろ。
慣れてりゃ開発速度も同じようなのLLで作るのと大差ないし
2019/04/06(土) 01:41:14.78ID:zp0ZZwhH
言語によって作業量が増えるとか無いから
目的に合ったフレームワークがあるかどうかが重要
2019/04/06(土) 01:53:28.65ID:d3+s3AWp
>>57
残念ながらあるんだよね
2019/04/06(土) 01:54:41.01ID:zp0ZZwhH
そっか
2019/04/06(土) 02:02:09.95ID:K6S/+wtb
どうせお前らなんて、数十行程度の小さなもばっか書いて、あーでもないこーでもない言ってるだけだろ

会社にもいるわ、細かいことばっか、正論言って
実際の仕事では何にもできない、言語規格ヲタ
2019/04/06(土) 02:06:54.68ID:zp0ZZwhH
そっかそっか
2019/04/06(土) 02:59:01.41ID:totkvsPq
仕事してるより細かいとこ突き詰めてる方が楽しいんだ、ごめんね
2019/04/06(土) 03:15:48.33ID:d3+s3AWp
>>60
ドワンゴで働いてるのか?
2019/04/06(土) 06:57:44.30ID:grJD5FiV
ドワンゴ今やばいしあの人も首が涼しくなってそう
2019/04/06(土) 07:57:21.33ID:/WRt9p3o
ドワンゴでコード書いてて江添みたいなバカに
しょうもないアドバイスされたらそらキレるだろうな。
2019/04/06(土) 08:47:14.06ID:dOsEQJqb
あの手の連中って小さなサンプルしか書いたことないんだろ
実際の数百万行あるようなプロジェクトなんかには
参加したことないんだろうな
2019/04/06(土) 09:02:21.08ID:jpD7ojAE
弁理士みたいなもんだろ。
自分じゃモノ作らないけど複雑なルールに精通してて「それじゃ通らないよ」とアドバイスする。
2019/04/06(土) 10:37:53.59ID:DWbJNRMu
数百万ってOSとかミドルウエアでも作ってるのか?
2019/04/06(土) 10:40:30.76ID:lEFKAYHm
>>68
c++なんかでosなんか作れるかよ
遅すぎる
2019/04/06(土) 10:52:37.36ID:DWbJNRMu
>>69
じゃあ何作ってるの?
2019/04/06(土) 11:08:56.61ID:oXBRKV1B
>>70
ia32
2019/04/06(土) 11:11:25.61ID:dOsEQJqb
>>67
作らないじゃなくて、作れないんだろ
標準ライブラリの使い方を示す小さなものは作れるけど、現実的に使用するアプリケーションはかけないんだろう
2019/04/06(土) 11:26:29.61ID:DWbJNRMu
>>71
Intelの奴隷
2019/04/06(土) 11:27:31.68ID:DWbJNRMu
>>72
で数百万行で何を参加して、そのうち何行書いたの?
2019/04/06(土) 11:30:01.81ID:g9dCbj7p
>>74
自動機が約1000台あるCAMで40%は書いてるよ
2019/04/06(土) 11:33:57.74ID:DWbJNRMu
>>75
じゃあこのスレで一番C++に詳しい人は君ね
2019/04/06(土) 11:47:11.69ID:XiUalYkv
どうせその数百万行のコードで意味があるのは数万行から十数万行とかだろ

後は無駄なコピペやら、標準ライブラリにある機能を知らずに毎度一から書いて水増しされた無意味どころか保守考えたら害悪にしかならんくその塊
2019/04/06(土) 11:52:36.82ID:jpD7ojAE
>>72
弁理士の喩えで言えば、弁理士自身が発明できなくても別によくね?って話なんだが。
2019/04/06(土) 12:45:48.78ID:zp0ZZwhH
どうせ納期に追われて妥協に妥協を加えたやっつけのコードを○行書きましたwとか言われても自慢にもならん
2019/04/06(土) 12:59:26.47ID:zp0ZZwhH
>>78
ダメだぞ
弁護士は立法の経験が無いとダメだしスポーツの評論家は一流アスリートじゃないとダメだし調理器具を作る人は繁盛してるレストランで勤務したことがないとダメw
ライブラリ開発や教材の執筆には数百万行のシステム開発と組み込みの経験が無いとダメw
ちなみに数百万行のシステム開発や組み込みの経験があると自動的にライブラリ開発者や教材の執筆者より現実を知ってる格上()だし現場のニーズを満たした理想のライブラリを作れるようになるぞ
2019/04/06(土) 13:01:20.04ID:dOsEQJqb
ビャーネなんて、ロクなの作ってないよなw
数十行程度のものをあーでもないこーでもない言ってるだけだろ
2019/04/06(土) 13:04:46.19ID:zp0ZZwhH
せやなw
建築物の工法の研究者なんかろくに家も建てたこともない雑魚w
ネイルガンの一つも使えないくせに机上でああでもないこうでもないって言ってるだけw
2019/04/06(土) 14:13:10.98ID:BcLgwe4j
>>80
>立法の経験が無いとダメ
つまり議員の経験が無いとだめってことか
84デフォルトの名無しさん
垢版 |
2019/04/06(土) 14:25:22.19ID:HZH6vgE1
STLの美しさは時代を超越してるし、オーパーツに認定してもいいのではないか。
2019/04/06(土) 15:08:23.30ID:FeLBMWFl
直交性とか説明しても誰にも通じなかった
2019/04/06(土) 15:56:35.00ID:DWbJNRMu
ラムダ式使えない馬鹿「今まで書いたソースの行数は?」
そんなの気にしねえwwws
2019/04/06(土) 16:00:55.76ID:grJD5FiV
なるほどラムダ式が嫌いな奴は書く行数が減ってコードの生産量()が減るのが嫌なんだな
ボイラープレートコードを書き殴ってれば仕事したフリができる人たちは気楽っすなあ
2019/04/06(土) 16:07:07.88ID:/WRt9p3o
まあ実際クヌースなんかもtexプログラム作ってプログラムの大変さに気づいた
的なことは言っているしな。
偉い人でもその辺実際に作ってみると感覚が違うってのはあるんだろう
89デフォルトの名無しさん
垢版 |
2019/04/06(土) 16:49:06.59ID:HZH6vgE1
コンセプト来い。
コンセプトはよう来い。
2019/04/06(土) 16:52:05.91ID:TQhcrP/j
>>68, >>77
こいつらみたいな世間知らずの根拠のない自信はどっから来てるんだろう
2019/04/06(土) 17:41:57.80ID:zQgZMa/6
>>90
そもそも世間知らずほど自信にあふれがちではある
初心者ほど偉そうだったりもする
2019/04/06(土) 19:26:54.62ID:/WRt9p3o
クソライブラリやクソ開発メソッドを持ち込む怪しいコンサルと一緒なんだよな。
それが押し通ることが結構あるから怖い世の中なんだが。
2019/04/07(日) 00:51:26.62ID:MFkC9rxe
>>90
元号もろくに変えられない癖に何が自信だあほ
2019/04/07(日) 01:23:19.03ID:27fxqR4U
自分より劣る存在を想定してホルホルしててもお前の実力は上がらんよ
2019/04/07(日) 02:59:31.42ID:KMX3xd+u
コードを書くしか能が無いというのでは
業界に名が通った有名人クラスにならない限り
コンサルに勝つのは難しい
2019/04/07(日) 09:59:23.22ID:AvqFg232
>>88
それソースある?
TeXの前にも色々プログラム書いてるみたいだし、そもそも大学で俺ならもぅとうまくやれるとアセンブラとコンパイラを書き換える決心したらしいからTeXでどうのこうの言うのはちょっと考えづらい
あとTeX自体は今の基準だとそんなにでかく無い
ソースは24ks程度で半分以上はweave出処理される解説だし
2019/04/07(日) 15:25:28.13ID:GYBhj6UR
>>96
買って読め。
こんな普通に出てるものもチェックせずにクソイチャモンつけられると腹たつな。
https://www.amazon.co.jp/Coders-Work-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E6%8A%80%E3%82%92%E3%82%81%E3%81%90%E3%82%8B%E6%8E%A2%E6%B1%82-Peter-Seibel/dp/4274068471
2019/04/07(日) 15:38:44.91ID:7JuoUDJS
そんなインタビュー集までチェックするのか普通とか言われてもなぁ
2019/04/07(日) 16:36:39.64ID:Uqhse/UH
>>98
自分は知らないからソースくれとだけ言えばいいところを、想像で要らんことをいうから反論されるのでは?
2019/04/07(日) 16:41:57.11ID:7JuoUDJS
>>99
根拠書いてあるんだから反論したいなら根拠に反論したら?
2019/04/07(日) 17:48:00.72ID:OFkYw0l7
なるべく高級な言語でちっさいOS作ろうと思うんだがよい言語ないかな?
2019/04/07(日) 17:59:05.12ID:dyW8i1kK
ハードウェアによるのでは
2019/04/07(日) 18:12:26.51ID:OFkYw0l7
armかrisc vの64bit
32bitでもいいです
比較対象のためにc/c++でも作る予定
2019/04/07(日) 18:19:23.23ID:wdVE5f+b
そもそも高級言語で小さいOS作れる言語ってC言語一択じゃね?
2019/04/07(日) 18:20:11.20ID:lGwZZxlu
>>103
rust
2019/04/07(日) 19:17:40.54ID:rrYyxHxh
rustでqemuでhelloworldして満足した(´・ω・`)
2019/04/07(日) 19:51:30.08ID:VbL09+YA
haskell
2019/04/07(日) 20:29:30.34ID:OFkYw0l7
>>105
rustぐらいですかね?
全然違うパラダイムの言語で作れないもんかと
アセンブラとの相性考えたら結局cっぽい言語しか選択肢ないのかな
2019/04/07(日) 21:29:30.01ID:NOCaxMAw
OSつったって、どのレベルのこと言ってるかによってかわるしな
電源ONから自分でブートして起動できるレベルのものいってるならC+アセンブラ一択だし
ブラウザで仮想環境動けばいいぐらいなら、まあいろいろ変な言語系の実験できるけど
それ実際的な意味あるの?っていう話になってくるし・・
というわけでブラウザで C++ の実行環境を動かしてみるっていうのはどうだろう?
emscripten のオルタネートみたいな・・
2019/04/07(日) 21:58:15.58ID:GYBhj6UR
>>100
事実でもなんでもない勝手な想像を根拠とか言われても反論できんわ。
2019/04/07(日) 22:14:49.77ID:AvqFg232
>>110
> TeXの前にも色々プログラム書いてる
> 大学で俺ならもぅとうまくやれるとアセンブラとコンパイラを書き換える決心した
> あとTeX自体は今の基準だとそんなにでかく無い
> ソースは24ks程度で半分以上はweave出処理される解説だし
の中に事実でない箇所あるの?
2019/04/07(日) 22:51:26.81ID:KMX3xd+u
ソースがわからん…
113デフォルトの名無しさん
垢版 |
2019/04/07(日) 23:51:05.57ID:WwvhmWfk
ソース出せと言った人が、ソースが出てきたら、ソース出すのは反則と言い出したって流れかな。
2019/04/08(月) 07:00:51.66ID:lSCOP8uB
どうやったらそんな頓珍漢な解釈ができるのか…
2019/04/08(月) 09:33:48.87ID:gQiHeALa
>>113
ソース出せと言った人が(>>96)、ソースが出てきたら(>>97)、ソースじゃなくて根拠(?)に反論しろと言い出した(>>98,>>100,>>111)って流れかな。
2019/04/08(月) 10:03:38.99ID:xZraFIBG
クソどうでもいい話にこだわるな
2019/04/08(月) 12:15:44.74ID:lSCOP8uB
引っ込みつかなくなってるんだろww
話の内容変わってるし
2019/04/08(月) 13:16:50.24ID:/rKIWzXZ
>>109
ブラウザの仮想環境とは何?
osなのでcpuが見えてて欲しいのだけど
ひとまずqemuで始めるつもりです
2019/04/08(月) 14:17:17.10ID:B03nMGGM
ビャーネストロヴストルップ先生のプログラミング入門買ったんだけど、読破した人っている?
2019/04/08(月) 14:40:49.88ID:yFytPSzO
いないんじゃあないの
本当に読破したと言える人間は日本人で20人しかいないと聞いた
2019/04/08(月) 16:02:36.28ID:B03nMGGM
>>120
毎日30分読むことにした
C++は仕事で使ったことない
2019/04/08(月) 17:17:23.27ID:nF+E8GMD
>>108
まずベアメタルに対応してる必要があることを考えると、選択肢はそうないのでは?
2019/04/08(月) 18:57:24.65ID:j9hUx87z
>>119
もはやそれは「国語辞典」読破した奴おる?ってのに近い。
2019/04/08(月) 19:33:22.28ID:RJuwHc+q
ストラウストラップの『プログラミング入門』って
日本語版で1100ページもあるんか。

このとっつぁん、厚い本を書きまくっとるなぁ。
そもそもプログラミング入門のお題でそんなに語るネタあるんか。
2019/04/08(月) 20:02:21.26ID:lSCOP8uB
実は愛読書が辞書という人はそれなりに居たりするw
https://togetter.com/li/1119810
126124
垢版 |
2019/04/09(火) 17:49:07.46ID:ZAJK3xJP
>>119
なんか『C++によるプログラミングの原則と実践』て本が
同じ原書の新版の和訳みたいだけど。
おまけに『ストラウストラップのプログラミング入門』よりお安い。
2019/04/10(水) 00:37:04.74ID:weZfZZPq
この界隈では「入門」といいながらどうみてもマニア向けの本が多いよね
2019/04/10(水) 00:51:58.60ID:uYzixBoY
自分が読んだ本は全て入門書扱いする人多いよね
2019/04/10(水) 01:02:13.57ID:On8YhqHc
上級者の評価が高い入門書ってのは本質や精神を理解し免許皆伝まで至るような道の第一歩であるものだもの
素人が何も理解しないままこうすればこうなるでおいしいとこだけいきなり得ようとするようなハウツー本とは違う
2019/04/10(水) 09:04:52.41ID:ryP68qDF
「本質」を語るやつは大抵アホ
2019/04/10(水) 10:05:45.31ID:cwT5VSoK
結論のでないどうてもいい話題に食い付くやつはアホ
2019/04/10(水) 11:09:30.74ID:dQX53bJY
同価格帯のXeonとThreadripperではどっちの方がコンパイル速いか知ってる人いますか?
2019/04/10(水) 11:21:44.56ID:vfHnS1kx
C++はF35にも使われている戦争の兵器
C++erを見たら悪魔の手先と思え!
2019/04/10(水) 11:25:06.35ID:dQX53bJY
それかCかC++のソースコードのコンパイルのベンチマークをCPU別で取っているサイトがあれば教えてほしいです
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/
マイクロソフトが悪い、すべてマイクロソフトのせいだという意見も出てるね。
2019/04/10(水) 20:42:17.28ID:P0TERnuJ
タイムマシンって何言語で、書かれてるの?
やっぱりc++
2019/04/10(水) 21:08:53.18ID:EODMjdpe
Objective-Cだろjk
2019/04/10(水) 23:10:10.82ID:dQX53bJY
>>136
ありがとう最新のはこれだった
https://www.anandtech.com/bench/CPU-2019/2223

i9が価格の割に速かったコンパイルはシングルコアの周波数が正義なのか
XeonはマルチCPUするためのものだな
2019/04/10(水) 23:38:55.47ID:57hoitEO
>>135
独習→acceleratedとプレC++11STL(ハーバードシルト)→テンプレート本、くらいを私は歩いてきました…
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で学ぶのが、正確で紛れがないし、詳しい本が揃っている
2019/04/11(木) 00:18:20.98ID:+5scCOHz
このご時世に本読んでプログラミング勉強するってあほだろ
2019/04/11(木) 00:27:14.17ID:m6dr6a58
1周回ってきて本になるんだよなあ
2019/04/11(木) 00:36:20.66ID:MrjztWsK
Effective系以上は本でもいいと思う
2019/04/11(木) 00:47:54.22ID:XplD4nHz
少なくともeffective系統読んでもわけわからんレベルの人はまずはしっかりした本を読むべきと思う。
しかしc++は勧めたい本がない。。「独習c++」かな。。いいとは言いずらいがしかしほかに勧めたい本もない。
2019/04/11(木) 01:24:17.64ID:GbgLM3aJ
ネットさえありゃ本なんかいらんだろアホ、と思っていた時期が俺にもありました
実際ちょっと前まではそんな感じだったんだけど、最近は Google のアルゴリズムがポンコツなのか
それの裏をかく技がものすごく洗練されたからなのかしらんが、とにかく検索上位にアホみたいな
ページがひっかかる事が多い上に、ほんとうに必要な情報が見つからないことが多い
特に最近では Python 関係のネット情報はほんとどうしょうもなくぐらい腐ってるな
C++ 関係はまだかなりましな感じだが
147141
垢版 |
2019/04/11(木) 02:06:27.08ID:SMdbPkuM
外人が書いた「Effective 何々」には、良い本が多い

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

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

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

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

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

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

各部分の細かい仕様・バグは、後でよい。
そうしないと、バグってばかりで何も作れない
2019/04/11(木) 03:36:50.02ID:Fl8qN29n
ネットで学ぶのがアホってドワンゴ社員のあいつの主張繰り返すのかよ
誰が仕様書読むんだあほ
2019/04/11(木) 03:41:11.24ID:m6dr6a58
日本語でおk
2019/04/11(木) 06:24:23.60ID:wX/7fvyH
>>141,147
消えろ
2019/04/11(木) 06:54:46.28ID:QTZ5s2CM
>>146
例の医療関係のページビュー稼ぎ対策の影響で個人が細々とやってる良質なサイトが引っ掛かりにくくなってる
って新聞に書いてあったな
2019/04/11(木) 09:44:13.72ID:vYC2bkpl
具体的にC++でいいサイトはどこ
2019/04/11(木) 10:06:20.10ID:m6dr6a58
cpprefjp
2019/04/11(木) 11:14:37.00ID:Kj8z6I1B
>>146
お前のいうネットってqiitaとかだろ?
だからダメなんだよお前はw
155デフォルトの名無しさん
垢版 |
2019/04/11(木) 18:46:33.30ID:Ukf06xgg
cpprefjp一択。
2019/04/11(木) 19:07:44.03ID:XplD4nHz
リファレンスだけ並べたクソサイトじゃねーかw
2019/04/11(木) 19:27:25.55ID:yce5TkL4
この手のランキングは本当に十人十色だな。
人気言語ランキングC++3位
https://www.tiobe.com/tiobe-index/
2019/04/11(木) 19:30:26.87ID:m6dr6a58
リファレンスがあれば十分だわ
応用は頭使え
2019/04/11(木) 19:38:13.25ID:XplD4nHz
話にならん。。

とりあえずここら辺から始めるのが良いか。
https://www.tutorialspoint.com/cplusplus/cpp_quick_guide.htm
2019/04/11(木) 19:48:35.94ID:TKLgRtKS
cpprefjpは仕様の成り立ちから使用例まで載ってる
2019/04/11(木) 19:54:53.54ID:a2+oAAfA
cppreference.comの方が好き
2019/04/11(木) 19:58:11.07ID:m6dr6a58
cpprefjpは左の文字が小さすぎるのをなんとかしてほしい
2019/04/11(木) 20:14:39.34ID:4WryY6sc
Ctrl+ホイールで画面拡大縮小
2019/04/11(木) 20:36:15.86ID:m6dr6a58
それはおかしい
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でまたちょっと盛り上がり、みたいな感じで上下する。
2019/04/11(木) 23:00:30.59ID:Fl8qN29n
>>165
ビャーネストロヴストルップのプログラミング入門はどうですか?
2019/04/11(木) 23:10:49.56ID:Fl8qN29n
>>165
◆QZaw55cn4c さんはプログラマーですか?
2019/04/11(木) 23:16:43.21ID:4rTUFtuy
STLを解説した本として最も優れてるのどれ?
2019/04/11(木) 23:26:14.78ID:m6dr6a58
解説するほどのものか?
2019/04/11(木) 23:29:16.82ID:MrjztWsK
cpprefjpかcppreference.com眺めるのが一番いいのでは
2019/04/11(木) 23:35:00.33ID:Fl8qN29n
>>171
C++標準テンプレートライブラリがおすすめ
2019/04/11(木) 23:36:01.51ID:Fl8qN29n
https://cppmap.github.io/
個人的にはこっちもおすすめ
2019/04/12(金) 00:33:29.09ID:Oce6Eotz
C++ coding standards が、入門書と effective C++の間という感じで良かったのですが、今新品で買いやすい和書の中で同じくらい良い本ありますか
2019/04/12(金) 07:49:20.68ID:iSiavc0f
>>173
それでコードを書けるようになるとは全く思わん。
2019/04/12(金) 08:33:36.67ID:iSiavc0f
「ロベールのC++入門講座」を勧める
2019/04/12(金) 09:37:34.83ID:uO4ZqrOg
コード書くために勉強したことが無い人間とコード書くために勉強した人間に分かれるな
2019/04/12(金) 10:54:15.24ID:+AQGVq0O
RPGのバトルシステムがいつまでたっても出来ない
どうなってんだコレ
2019/04/12(金) 12:39:56.53ID:O/TRJpno
>>180
ドラクエの技術を解説した本を買えば
2019/04/12(金) 13:56:50.34ID:phN3RSne
そこでレポート プログラム ジェネレータを思い出さないと
文句はユニシスに言っとくれ
2019/04/12(金) 16:07:32.84ID:JVT+o1/N
RPGなつかしいなw
知人でそれの専門で仕事やってるやついたが
今ごろどうしているだろうか・・
2019/04/12(金) 16:19:27.39ID:lUKpExyl
>>180
自分が具体的に何を作るのか見えていないとか、自分が何が分からないかがわかっていないとか。
2019/04/12(金) 18:44:05.94ID:+CDO09PL
std::rpgの登場が待たれる
2019/04/12(金) 21:59:51.74ID:9AU6i9F6
>>179
どういう分類か興味がありますね…
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;
}
2019/04/12(金) 23:46:54.37ID:w8o2kbz2
SFINAEを理解してないな?
templateでわざと失敗させるんだぞ
2019/04/12(金) 23:50:14.00ID:WMCXK/Zp
それは関数のオーバーロード(オーバーロード関数)
SFINAEはテンプレートに関わる話
2019/04/12(金) 23:55:37.58ID:yQNXRLnI
SFINAE ていう単語みるたびになぜか
ソフバンの白犬が低い声で「スフィ姉ーーー」て言ってる映像が頭にうかぶ
2019/04/13(土) 00:08:44.65ID:pAXxDbKI
>>188
最初のplusで失敗して、次のオーバーロードを探しに行ってんじゃん。
もし最初でコンパイルエラーなら、このプログラムはコンパイルされないが、SFINAEのおかげでコンパイルエラーが出ない
2019/04/13(土) 00:43:18.21ID:2fZ9oexv
>>186
自分の興味のあることをやっていたら気づいたらコードが書けるようになっていた人と
コードを書けるようになることを目標に勉強をした人
前者は入門の仕方を聞かれると上手く答えられない傾向にある
とりあえず好きなもの作ってみて困ったらリファレンスとかみれば良いんじゃないの?とかは割とガチで言ってる
2019/04/13(土) 01:17:48.59ID:Gm2Aztfm
せやな
なぜそこでロベール!?とか思ったけど、なんか納得した
2019/04/13(土) 02:30:55.25ID:ExcsBrHj
rvalue・lvalueの見分け方について、=の左に書けないならrvalueって考えで良いですかね?
2019/04/13(土) 07:01:49.87ID:bq5Y4VLb
>>194 確かダメじゃないかな。
C の例でアレだけど、配列名 int a[5]; の a は
左辺値だけど代入の左辺に置けない、
「代入不可能な左辺値」というカテゴリになる。

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

…ムーブできるか出来ないかの判断を、左辺値か右辺値か見分けることで
やろうとしてるなら、この説明は循環論法でしかないけどね。
2019/04/13(土) 08:07:08.65ID:odoOG67D
その場で(1つの文の中で)ムーブされ得るやつが右辺値、ぐらいで良いのでは、
と言いたいところだが
 SomeType a = b = 1;
でbあ右辺値なのかと言われるとうーん…
実際bがその場で所有権を失うこともできる(SomeTypeにムーブコンストラが定義されていた場合
のだから当たらずしも遠からずだとは思うが知らん
2019/04/13(土) 09:00:05.96ID:TufrjDxL
てかリファレンスだけ必要な奴はここにそういうことを聞きには来ないだろ。
なんかその辺の感覚がすでにずれてるように思うが。
2019/04/13(土) 09:09:41.91ID:TufrjDxL
>>195
「代入できない」って視点で言えば194で合ってるんでは?
確かに a[0] =5 なんかはできるけど、 a = b みたいにポインタそのものは代入できないわけだし。
2019/04/13(土) 09:48:36.03ID:ubPOLJQD
>>196
右結合なんだから b は左辺値、 b = 1 が右辺値でいいんでは?
200L
垢版 |
2019/04/13(土) 11:50:51.08ID:U0TmzhoK
全く関係ない話になるけど、JNI = Java Native Interface(?) なるものを使えば、
C++で OS 非依存のアプリが作れるんだね。多分。
C++からJavaの任意のメソッドを呼び出せるし、逆も可能なので、
グラフィックをJavaに描かせて、キーやマウスのイベントをJavaからC++に
伝達すればよさそう。すると、LinuxやAndroidで共通に動くC++アプリ(?)
が出来てしまう。wasmも必要ない。
2019/04/13(土) 15:06:42.85ID:nqhK1mlk
>>200
C++の部分はネイティブなのでOSに依存する
2019/04/13(土) 15:20:25.21ID:U0TmzhoK
スマン。CPU毎にバイナリは必要で、
clangに -macrh=xxx-xxx-xxx オプションを指定して CPUやOSを
指定してコンパイルしておくことを想定していた。
ただし、複数のCPU/OS向けのバイナリを1つのAPKにパッケージして、
使用時に自動選択する事が出来るらしい。
2019/04/13(土) 15:31:06.15ID:pwnjfljv
わざわざjavaを使わなきゃいけないのが気にくわない
その場合、javaだけで書くこと以上のメリットある?
2019/04/13(土) 15:32:58.01ID:U0TmzhoK
速度が速い。
2019/04/13(土) 15:33:33.54ID:MSTjQ8pp
てかそれってjavaのアプリ作っているだけじゃ
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が多いのかな。
2019/04/13(土) 15:38:37.67ID:U0TmzhoK
>>205
基本的な描画系と入力系をライブラリ化しておけば、メインロジック部分は
C++で書けると思うよ。
2019/04/13(土) 15:42:52.17ID:U0TmzhoK
さっき、AdoptOpenJDK なるものをインストールしてみたら、
java と javac コマンドが起動することを確認した。
多分このJDKは、Oracle フリーで無料でクローズド商用利用できると思う。
2019/04/13(土) 15:46:26.77ID:MSTjQ8pp
jniはjavaのプラットフォームにc++での開発成果物を持ち込むためのもので、そうでないならわざわざそんなもの使う意味は薄い

マルチプラットフォームなアプリを作りたいならQtなりwxなりを使った方が速いし楽
210デフォルトの名無しさん
垢版 |
2019/04/13(土) 15:47:10.35ID:Uq+8Y9kK
>>208
でもいつ訴えられるかわからないから怖いですう。
2019/04/13(土) 15:58:39.59ID:U0TmzhoK
そもそも、Androidアプリにとってのシステムコール(API)とは、Javaの関数だと
思うので、この構造自体は Android における「最も高速なアプリ」になっている
と思う。
2019/04/13(土) 15:59:50.41ID:U0TmzhoK
>>210
一般アプリ作者は大丈夫だと思うな。一番危ないのは、オイラみたいに、
ToolKit作って儲けようなんて思ってる人なのさ。(^_^;)
2019/04/13(土) 16:11:49.69ID:U0TmzhoK
>>209
それらはサイズが大きい。
2019/04/13(土) 16:14:38.06ID:MSTjQ8pp
糞デカイ上に更新面倒なjavaのruntime入れさせるほうが害悪だろ

flashより糞度が高い
2019/04/13(土) 16:22:55.04ID:U0TmzhoK
AndroidはJREはプリインストール済みなんじゃないの?
オイラは実機持ってないので全く分からないんだな。
2019/04/13(土) 16:32:58.01ID:MSTjQ8pp
androidで実質c++でのアプリ開発する仕組みなら既にある
jniそのまま使うよりは大分マシ
2019/04/13(土) 16:36:12.19ID:jD4Gkzzm
>>216
どうやるの?
2019/04/13(土) 16:39:07.74ID:2fZ9oexv
何でグラフィックをわざわざJavaに?


>>217
QtならほぼC++で書ける
2019/04/13(土) 16:42:39.35ID:U0TmzhoK
Qt は、内部的に Backend で Java を使ってるのかな。
2019/04/13(土) 17:18:44.33ID:ubPOLJQD
なんかJavaを間違って理解してるっぽい。
2019/04/13(土) 17:21:04.26ID:YpOFfnix
>>219
もういい加減スレ違いだから消えてくれ
2019/04/13(土) 19:21:24.16ID:mZFqlfzi
vector に格納されてる値から添え字の番号を取得するための最も手軽な方法はなんでしょうか

イテレータから添え字番号を取得することはできますが、あくまで値からやりたいです
2019/04/13(土) 19:26:24.27ID:ujTcdvrD
格納してる値にインデックスの手がかりがないんだったら
findで探して結果のイテレータから取得するしかないな
2019/04/13(土) 19:26:44.48ID:2fZ9oexv
>>222
findしてdistance
2019/04/13(土) 19:31:01.29ID:mZFqlfzi
>>223-224
ありがとうございます
格納する値の範囲もサイズも小さいvectorなので、今回は辞書を作って対応しようと思います
2019/04/13(土) 19:42:14.61ID:2fZ9oexv
>>225
そんな単純な検索なら3行くらいなんだから作ればいいのに
2019/04/13(土) 20:12:30.52ID:mZFqlfzi
奇遇なことに辞書も三行くらいです
228デフォルトの名無しさん
垢版 |
2019/04/14(日) 01:05:39.34ID:dZAE6IVm
そら奇遇ですな。
2019/04/14(日) 06:41:11.16ID:AVvjfIV7
>>200
とても興味を覚えました
私は、そろそろ言語間でライブラリも共用されるべきだと考えています
一つの記述体で各言語共通というのはさすがに難しいにせよ、
Java のライブラリと同等なもの(名前と機能が共通のもの)が C++ にもあってもいいんじゃないか?と数年前から妄想しています…
2019/04/14(日) 07:17:55.90ID:/tPpXRHC
もうJavaのことは忘れて生きろ
231デフォルトの名無しさん
垢版 |
2019/04/14(日) 07:42:20.38ID:YohaqxbG
JavaとC++に共通インターフェースを作るのは反対。
車輪の再発明にしかならない。自由を奪うだけの愚策。
2019/04/14(日) 07:51:31.17ID:AVvjfIV7
>>231
強要するのではなく、オプション(選択肢)として提供するのはどうでしょうか?
233デフォルトの名無しさん
垢版 |
2019/04/14(日) 08:04:00.89ID:YohaqxbG
>>232
共通ライブラリを使う側にとってはオプションであることは当然。
共通ライブラリを作る側の話をすべき。共通ライブラリの規格決定権者が増えすぎること自体が好ましくない。
これはEU諸国がトルコがEU参加することを拒否する感覚に近い。
2019/04/14(日) 08:50:47.24ID:AVvjfIV7
>>233
私は EU には否定的(グローバリストの巣窟であり、普通選挙/自由選挙による合意形成をスキップするポジションを作って人を操作するからくり、トルコもたぶん目が覚めているのでは?)ですが、それはさておき、
すでにある java/classpath スケルトンを真似してしまおう、という低姿勢・低いプライドを貫くのであれば、規格策定者は基本要らなくなりませんか?だって真似するだけだし…
2019/04/14(日) 08:59:21.33ID:k2b6YaL9
まだC++98しか知らないと、取り残されますか。
236デフォルトの名無しさん
垢版 |
2019/04/14(日) 09:09:36.38ID:YohaqxbG
まずは、Javaと瓜二つな C#、.NET、C++/CLIが今どうなっているか考えてみては。
237L
垢版 |
2019/04/14(日) 09:28:45.12ID:Y1IcINvd
>>229
ちょっと話しはズレるけど、あなたの賛同で嬉しくなったので、入手した耳寄りな
情報を書いておこうと思う。既に知ってる人も当然いると思うけど、
WebAssemblyで作ったようなWebAppliは、ブラウザのURL欄やタイトルバーなどが
表示されてしまうのが難点として残っていた。ところがなぜかElectronでは消せて
いたのでChromeではなくChromiumを使っているからかと思っていた。
ところが、manifest.json なるものを書いて、HTMLにそのファイルを使うように
書いておいて、display プロパティーを standalone やfullscreen にすると、
URL欄が消せるらしい。
2019/04/14(日) 09:41:42.35ID:AVvjfIV7
>>237
もう時代はすっかり html/css/js ですね…
VSCode も Electron ですし…
2019/04/14(日) 10:28:52.88ID:k2b6YaL9
質問を変えてみよう。
C++11やC++14のコードは、職場で取り入れられてますか。
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文対応のイテレータを書ける。

ラムダ式も関数の引数に直接関数を埋め込んだりできて便利。
2019/04/14(日) 12:36:24.13ID:AVvjfIV7
>>240
>char16_t/char32_tも結構ありがたい

確かに
char16_t と u"" がなければ win32api W 系とか途方に暮れていたとおもいます… https://mevius.5ch.net/test/read.cgi/tech/1434079972/53
2019/04/14(日) 12:43:45.83ID:+qOUcSLR
ガンガン最新を追うべきとまでは思わないけど、
C++11 は最低限度じゃないかなぁ。
2019/04/14(日) 14:27:39.08ID:6Gooiv09
17便利すぎ
variant,visit,lambda,if constexpr
のコンボで捗る
2019/04/14(日) 14:34:56.13ID:GSX89KOm
つーか今はもうC++11の機能は使わずにC++で書け!といわれても
やりきる自信がなくなった・・
2019/04/14(日) 14:39:38.95ID:krJLkXqZ
古い環境だと最近のサンプルがビルドできなくて困る
2019/04/14(日) 16:02:33.26ID:YQLb8Tsj
c++11とか名乗るから誤解されるんだよ。
c++++とかのがイメージ的に正しい。
247デフォルトの名無しさん
垢版 |
2019/04/14(日) 16:06:36.29ID:dZAE6IVm
C#ってことか。
2019/04/14(日) 16:12:40.18ID:YQJCzKEv
repeat文って入らないの?
2019/04/14(日) 16:16:59.50ID:+qOUcSLR
>>248
どんな機能?
2019/04/14(日) 16:20:53.89ID:YQJCzKEv
>>249
repeat(int i; n) で for(int i; i<n; i++) と同じ意味な機能
2019/04/14(日) 16:22:55.01ID:6Gooiv09
>>250
そんなどうでも良いもののために予約語追加する意味って
その文法じゃ初期値すら変えられない
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を除いてマルチプラットフォームなライブラリが売りだぞ。
2019/04/14(日) 16:36:01.32ID:AVvjfIV7
>>253
Java の人も C# の人も c++ の人も python も ruby も一緒の名前で一緒の機能が使えたら,コストの中でも一番高くつく勉強コストを減らせるのではないでしょうか
2019/04/14(日) 16:44:39.61ID:YQJCzKEv
>>251
Linuxのカーネルにrepeatマクロ大量にあるもん
2019/04/14(日) 16:52:53.22ID:+qOUcSLR
>>255
ならマクロでいいじゃねぇか。
2019/04/14(日) 16:53:20.02ID:6Gooiv09
こんなので十分だろ
https://ideone.com/I6e8NZ
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あたりのメジャー所は色んな言語にラッパーがある。
2019/04/14(日) 17:10:32.89ID:h7KNzBMl
webプログラマーなんですが、右辺値、fowardっていつ使うのか気になります
というかなんでそこまで、厳密に分ける必要があるのか 
業務で使ってる方、使用例を教えてください
2019/04/14(日) 17:20:10.51ID:sCsh6GnA
右辺値というかムーブ関数の定義といらなくなるオブジェクトにstd::move付けとくのは絶対損にはならないからとりあえずやっとく
forwardはテンプレートライブラリ作るなら必須だけど自分では使ったことないなあ
2019/04/14(日) 17:25:45.47ID:86P3zzV7
コピーにコストがかかる場合は、std::swapやstd::moveのが早い場合があるからね。ムーヴはコピーじゃなくて引っ越しだから。
2019/04/14(日) 17:27:07.70ID:YQLb8Tsj
まあ理論上はね。。そういう実装になってるかどうかはコード見ないとわからんけどね。
2019/04/14(日) 17:29:38.84ID:6Gooiv09
基本的には高速化が目的でmove使わなくてもなんとかなるが、
所有権絡むとmoveは必須になる

forwardはtemplateで引数渡すときにmoveやら参照やらの完全転送する場合必須
2019/04/14(日) 18:16:04.21ID:86P3zzV7
ちょっと実際にやってみようか。コピーコンストラクタで十秒待つコードを書く。ムーヴコンストラクタとムーヴ代入でなにもしない。
この状態でstd::moveを使わないで代入すると十秒かかる。
2019/04/14(日) 18:17:20.92ID:86P3zzV7
訂正。「コピー代入で十秒待つコードを追加」
2019/04/14(日) 18:47:05.84ID:xCvd3oj/
>>264
>所有権絡むとmoveは必須
必須とまでは言えない
 T::T(const T& obj)
という通常のコピコンを定義して、コピコンの中でconst剥がししたら
とりあえず所有権の移動もmove無しで逝ける
2019/04/14(日) 18:50:44.06ID:+qOUcSLR
>>260
高速化のために出来るのは、アルゴリズムのレベルでの工夫を別にすれば、出来ることはショートカットだ。
高速化とは近道なんだよ。

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

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

まあ速度的にそこまで必要ないってのなら、区別を積極的に利用しなくてもかまわないよ。
でも、必要なときに出来る方法が用意されているとうれしいし、
C++ を使うときというのはそれなりに実行速度が必要なときだろうし。
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は使った無いから知らん
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]) { }
2019/04/14(日) 18:54:00.95ID:mEGAHR/Y
コピコンの中でconst剥がしってちょっと何言ってるか分からない
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に待つ関数があったはず。
2019/04/14(日) 18:57:07.74ID:86P3zzV7
const_castだろ。jk
2019/04/14(日) 18:57:37.12ID:xbTIwD1q
>>271 「move無しで(未定義動作に)逝ける」ってことでしょ。
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コンストラの変わりに↑のように書いても逝ける
2019/04/14(日) 19:10:15.32ID:sCsh6GnA
まあ実際にはそんなムーブをゴリゴリ書くことはなくて
m_pBigDataをunique_ptr<array<Foo, 1000000000000>>にしてムーブctor、ムーブop=、デストラクタを=defaultにするけどな
2019/04/14(日) 19:21:51.01ID:kBfBajGR
auto_ptrよりヤバイ奴
const_castでconst外した後実際に書き換えてしまうとかw
2019/04/14(日) 19:38:34.53ID:xCvd3oj/
>>277
ちなconst T&で渡されたブツを関数内でconst_castして書き換えることはそれ自体は合法
ROM上のオブジェクトを渡して死ぬことは有り得るがしたら呼び出し側の違反
また最適化にしくるとしたらそれはコンパイラーのバグ
2019/04/14(日) 19:46:40.04ID:xbTIwD1q
>>278
ROM上になくても const T 型で構築されたオブジェクトを書き換えたら未定義動作になるから、
値が変わらない前提の最適化は許されてるよ。

const 無しで構築されたオブジェクトを指す const& の話と混同してそうだね。
2019/04/14(日) 19:53:21.04ID:uvZ0DMTi
質問: c🐴++のrust相対の優位性はなんですか?
2019/04/14(日) 19:57:27.42ID:+qOUcSLR
>>280
正しくないコードをコンパイル出来る。
C++ はプログラマを信頼するのだ。
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). ]
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扱い
のはず…
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 が使われる可能性がある。
2019/04/14(日) 20:33:37.36ID:mEGAHR/Y
規格が云々言わなくても、9割のプログラマの意図に反してるで終わる話
頼むからそんなコードは頭の中にしまっといてほしい
2019/04/14(日) 20:37:26.81ID:6Gooiv09
つまりはそれ自体は問題ないが、constとして生成したオブジェクトを渡した瞬間にダメになると言うことか
で、渡すこと自体は制限できないから
プログラム中に罠を仕掛ける事が出来るわけだ。
2019/04/14(日) 20:39:28.07ID:6Gooiv09
てか、mutable付けとけば問題なくなるな。
2019/04/14(日) 20:40:25.78ID:6Gooiv09
const_castも要らないし良いことずくめじゃないかw
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がレジスタに乗ったままであるとか、
2019/04/14(日) 21:11:05.08ID:xbTIwD1q
>>289
その x の型は const じゃないから return x は最適化できないよ。
2019/04/14(日) 21:48:29.79ID:uvZ0DMTi
>>281
わからないです。それはメリット?
2019/04/15(月) 01:36:50.54ID:20PlYkfs
ラムダに11個の引数を参照で渡すのと、キャプチャするの、どっちが速いかな?
2019/04/15(月) 02:40:05.27ID:e1RUhzz1
測ればいいだろ
2019/04/15(月) 02:50:17.52ID:94OTneyx
>>291
メリットのときもデメリットのときもあるだろう。
2019/04/15(月) 02:59:24.82ID:XbOtvNIU
参照渡しな時点でその場で呼び出すのだろ。
最適化かければ結局同じようなアセンブリになるよ。
2019/04/15(月) 09:13:13.35ID:+swIGlrx
それはわからんだろ
ブロック待ちするかもしれないわけで
297デフォルトの名無しさん
垢版 |
2019/04/15(月) 19:29:41.18ID:8vw8m6ly
引数で渡すとスタックに積まれる可能性があるけど、キャプチャするとそうならないのでは。
2019/04/15(月) 19:36:28.26ID:XbOtvNIU
いや、形式上は無名クラスにキャプチャを変数としてぶちこんだもののインスタンス作ってメンバ関数のoperator()呼ぶのだから、スタックは使うだろ。
2019/04/15(月) 20:08:47.93ID:Auf6nZgf
C言語じゃダメなんですか!
2019/04/15(月) 20:20:07.70ID:NSErsM12
いいよ
2019/04/15(月) 20:25:01.30ID:IXPbMXJW
無駄に複雑にしとるな。
302デフォルトの名無しさん
垢版 |
2019/04/16(火) 01:01:07.13ID:ZVmLHBMP
>>298
じゃあ、引数で渡すとスタックに積まれない可能性があるので、速い場合もあるのでは?
2019/04/16(火) 02:15:09.28ID:WfxisTJA
海外だと、Javaに負けて、Rustに圧倒的実力で追いやられるC++
2019/04/16(火) 02:27:07.22ID:WfxisTJA
>>303
https://insights.stackoverflow.com/survey/2019#technology-_-what-languages-are-associated-with-the-highest-salaries-worldwide
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%位になりそうだから、複数の言語を使う人が多いんだろね。
2019/04/16(火) 21:18:54.40ID:dFuxCqAG
江添が転職できずに困っとるw
まあこいつがクソなだけでc++の問題ってわけじゃないんだがイメージは悪いわな。
2019/04/16(火) 21:36:49.03ID:jMhdT2ep
こうしてみるとホッシーの全タクシー移動ってのは理に適ってるな
バカな公害に捕まる心配が減る
2019/04/16(火) 23:25:27.27ID:LsPOsuul
なんか私怨でもあるんかいな
2019/04/16(火) 23:41:35.10ID:InK+cNH/
喫煙者が目に入った途端癇癪起こして殴り掛りかかる狂犬なんだっけ?
2019/04/17(水) 00:03:12.24ID:vVzTJh6n
知らね
よく人を招いているようだし揉めたことがある人も少なくはないんじゃいか
2019/04/17(水) 01:12:11.58ID:UWuCQ9XR
>>310-311
当事者の様々な主張の食い違いがあるので、結論としては「わからない」。
少なくとも彼自信の主張としては掴みかかってきたのを払いのけた結果として眼鏡が割れたということになっている。
(江添が殴りかかったわけではなく、むしろ防衛した側、と江添は主張している。)

江添が煙草について過激な意見を持っているのは確かだが、
シェアハウス内で禁煙場所であると合意がなされている場所で煙草を吸った客人がいたというところは当事者全体が認めているようだ。
2019/04/17(水) 08:21:52.75ID:DaACwh1w
恨みというかまともにコード書かない奴がクソ意見で現場荒らすって事自体がクソだと思うわけで、
まあその反動で現場で働くことができないって事になればザマァって思う。
2019/04/17(水) 09:46:31.27ID:vVzTJh6n
現場を荒らしてる?
2019/04/17(水) 09:53:30.15ID:vVzTJh6n
どのプロジェクトにも参加してないと認識してたけど乗り込んでケチつけてたりするのかな
まあ俺ドワンゴとは縁が無いからどこで何してようが関係ないけど
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 / 円グラフ
https://news.mynavi.jp/article/20190417-810363/images/001.jpg

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

長期にわたって1位を確保しているJavaは依然として1位のポジションにあるが、下落の
傾向が続いている。2位のC言語も長期で見ると下落を続けており、C++やPythonの存在感が
強くなってきている。
2019/04/17(水) 17:11:50.34ID:hoIwj+sG
>>317
何回だからみんな何回もググってるんだよ
319デフォルトの名無しさん
垢版 |
2019/04/17(水) 18:34:58.84ID:LllPIzo0
俺が検索しまくったからだろうな。
2019/04/17(水) 19:59:29.56ID:fJF68+PR
今もしインターネットが完全にシャットダウンされると
プログラム書けなくなるプログラマけっこう数いるだろうな
2019/04/17(水) 20:18:46.81ID:UWuCQ9XR
>>320
cpprefjp はとりあえず手元にダウンロードしてあるけど。
2019/04/17(水) 20:35:09.94ID:P5fp2rRi
どうやってダウンロードしたの?
巡集じゃできなかった…
2019/04/17(水) 20:39:18.77ID:WWgiT6Ow
githubじゃない?
2019/04/17(水) 21:27:54.32ID:P5fp2rRi
そうなんだ、ありがとう
325デフォルトの名無しさん
垢版 |
2019/04/19(金) 02:16:29.43ID:/DYxLH/O
どういたしまして。
2019/04/19(金) 08:26:54.03ID:gmGy9oTC
江添は職質裁判でも、不当判決が出たので控訴するみたい

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

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

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

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

警官は皆、このやり方で出世しとる
2019/04/19(金) 08:33:03.47ID:PWe5dNBv
ありゃ普通に対応してりゃ済む話だと思うがね。

やってることは完全に当たり屋だろ。
2019/04/19(金) 09:27:15.01ID:biH+fvR8
>>326
Rubyバカの人か。相変わらず思い込みが激しく、言っていることが滅茶苦茶だな。
2019/04/19(金) 12:05:02.85ID:rPSCrubJ
どんだけ江添好きなの?w
2019/04/19(金) 13:28:48.91ID:W5tFDDw/
日本でC++真剣にやってるのって彼だけだし
2019/04/19(金) 13:41:25.74ID:mypEidUJ
だけ、というのは言い過ぎだと思うが、
日本語で最新の C++ の事情を本にしているのは江添くらいしかいないからなぁ。

江添本人は自分のことを実務家ではなく教育者だと考えているようだし、
(肩書は何なんだろ? エヴァンジェリストのようにも見えるが……)
今のポストは妥当なとこだろ。
そのままやってくれればありがたいもんだ。
2019/04/19(金) 13:41:50.58ID:i8rhoxHy
つまり他の日本人は竹刀とか木刀ってことか。
2019/04/19(金) 13:50:35.12ID:rPSCrubJ
江添個人の裁判は完全にスレチなんだよなあ
仮に違法な取り締まりだと判断されても警察のやり方が改まるわけもないだろうし
2019/04/19(金) 14:15:26.68ID:JVA9qfGz
江添すなわちC++なのだから
江添の話題は全てC++の話題だょ
2019/04/19(金) 15:08:33.32ID:j263LUSd
宗教の話はよそでやってくれないか
2019/04/19(金) 15:16:01.57ID:JwgM4FAg
もう少しc++の話をしてくれと思う事もある
337デフォルトの名無しさん
垢版 |
2019/04/19(金) 18:50:10.05ID:/DYxLH/O
はちみつさんも真剣にやってると思います。
2019/04/19(金) 19:16:13.92ID:yj9Iz3m1
こんな事言うと勘違いされそうだが、はちみつ餃子はちゃんとしてると思うよ
C++に関しておかしなことは言っていない
ていうか、はちみつ餃子ってものすごい不味そうなんだがそんなの本当にあるのだろうか・・?
2019/04/19(金) 19:17:39.46ID:j263LUSd
肉料理にはちみつを入れること自体はわりと普通
量の問題
2019/04/19(金) 19:28:19.17ID:PWe5dNBv
いや明らかに開発してねーだろって感覚じゃねーか。
まあここならそれでもいいんだろうけれど。
2019/04/19(金) 19:51:37.44ID:mypEidUJ
>>338
ググればわかるけどはちみつ餃子はそこそこありふれた料理だよ。

その昔、 higepon が自分でもどうして higepon などと名乗ったかわからない
と述べていたので、そのくらい意味不明感じにしようと思って適当に
思いついた語をコテハンにした。
Scheme スレが本来の住処なので当初は SCHEME餃子 と名乗っていたけど、
他のスレにも顔を出すようになったのでなんとなくはちみつ餃子になった。
およそ意味不明な組合せにしたつもりだったんだけど、
実際にある料理だとは後になってから知った。
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 これをやりたい!!
2019/04/19(金) 21:13:17.21ID:UQpKfTQY
エピ…いや何でもない
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<>。
2019/04/19(金) 22:49:42.25ID:DWxUZ3pl
wandboxで試したらclangでもgccでもc++11 -pedanticで通ったけど?
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
全てのバグを絶滅せよ。
「今日は死に日和」好評発売中。
2019/04/20(土) 11:08:43.59ID:3kBWifqd
C++11や14を使ってる人、コンパイラは何ですか。
2019/04/20(土) 11:25:30.96ID:m+a2EYsq
ゲームエンジン作ってる人いますか
351デフォルトの名無しさん
垢版 |
2019/04/20(土) 11:30:38.02ID:5oa1AZjP
clとgcc。
2019/04/20(土) 13:20:15.93ID:lwVpLCzw
c+11以降はバージョン違うと全く別のコンパイラ
2019/04/20(土) 13:23:19.12ID:8Vh3F1FF
Twitchでプログラミングしてるやつの中でゲームエンジンも居たような
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"}});
}
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"}});

というように型を明記してもかまわないけど、使う側でいちいちこんなこと書きたいわけじゃないだろ?
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"}});
}
2019/04/21(日) 08:19:35.76ID:jJhiZdMc
>>354-356
ありがとうございます、その手を使わせていただきます
状況によって推定ルールが変わるのはやめて欲しいなってちょっと思ったんですけど。
2019/04/22(月) 23:55:58.01ID:uyfay/gq
メンバアクセスにthis->つける?
2019/04/23(火) 00:01:58.24ID:cW1os5L0
エディタの補完機能使いたいときにたまにそうやって補完して最後に消す。
が、たまに忘れる。
2019/04/23(火) 00:02:35.52ID:BSgCsXpz
IDEの都合で付ける事が良くある
付けないと補完候補多すぎて
2019/04/23(火) 00:09:08.10ID:JKfCESEZ
ああなるほど
補完候補を絞るのには便利ですね
362デフォルトの名無しさん
垢版 |
2019/04/23(火) 18:16:01.64ID:Wx+D+gzo
メンバであるという保証ができるので付ける
2019/04/23(火) 19:39:28.32ID:cE0Yu4R7
メンバ名は頭にm_付けろみたいなクソルールよりずっといいと思うので付けるべき
2019/04/23(火) 19:42:38.83ID:JKfCESEZ
仮引数と別の名前つけるのだるいからm_は別に良いと思う
2019/04/23(火) 20:02:01.86ID:8XemHsTC
メンバ変数に専用の色付けたらいいじゃん
2019/04/23(火) 20:13:43.06ID:sktjqElV
引数そのままメンバに入れるなら引数に_つけてvar(_var)って初期化してるわ
2019/04/23(火) 20:16:13.74ID:JSYnwir1
>>366
それって var(var) でも問題ないんですよ…
2019/04/23(火) 21:18:06.78ID:DAl4rXky
バーバー
2019/04/23(火) 21:32:08.36ID:BSgCsXpz
>>367
綴り間違えたら悲惨なことになった
370デフォルトの名無しさん
垢版 |
2019/04/23(火) 21:34:08.78ID:3k1+3l7a
ハンガリアン記法は、入力補完のないエディタ上での可読性を高めるのに役立ってるでしょ。今でも。
2019/04/23(火) 21:35:06.30ID:8XemHsTC
ゴミ使ってる奴のことなんか知らん
2019/04/23(火) 21:36:10.37ID:BSgCsXpz
あれ可読性落ちるだろ
2019/04/23(火) 21:39:11.30ID:lLaZpSEH
定期的にunsignedとsigned混在させてハマるアホをみるとハンガリアン必要だと思うわ
2019/04/23(火) 21:40:37.34ID:lAbUfbw7
C#で入力補完のないエディタがどうとかさすがにナンセンスでは
だってvisual studio使うじゃん
2019/04/23(火) 21:41:16.53ID:ZkNEZW45
どっちでもいいわ。
大抵の場合そんなとこに気を使わんといかんコードになってることのが問題。
2019/04/23(火) 21:45:47.89ID:lLaZpSEH
>>375
こういうやつがそのうちハマって丸1日つぶしたりするんだよなw
2019/04/23(火) 21:51:11.17ID:8XemHsTC
>>373
関係なくて草
2019/04/23(火) 21:55:03.06ID:lLaZpSEH
関係あることわかってなくて草
2019/04/23(火) 21:55:54.04ID:8XemHsTC
黙ってろゴミw
2019/04/23(火) 21:59:25.62ID:ZkNEZW45
>>376
だから人を嵌めるようなコード書くなつってんだよばか。
2019/04/23(火) 22:06:36.15ID:lLaZpSEH
>>380
コードの問題じゃなくて言語仕様の問題だから
こういうえらそうなくせに何もわかってないカスが一番始末に困る
2019/04/23(火) 22:53:19.60ID:ZkNEZW45
いつの間にかハンガリアンが言語仕様になってた。。
2019/04/23(火) 23:10:13.77ID:lLaZpSEH
ハンガリアンも防御的なプログラミングと考えたら悪くないよ
成り立ち調べてみな
でも基本型とポインタだけだな
クラスには無用だと思う
2019/04/23(火) 23:27:23.37ID:8XemHsTC
てめーらはまともなIDEかエディタ使ってねえのかよ
2019/04/23(火) 23:37:57.35ID:JKfCESEZ
むしろVSがないと何も書けない
386デフォルトの名無しさん
垢版 |
2019/04/23(火) 23:55:15.96ID:UPBQPhwq
VSがあっても何も書けない。
2019/04/23(火) 23:55:30.60ID:ZkNEZW45
c++みたいに型情報ありがデフォルトの言語でハンガリアンとか二重メンテもいいとこだわ。
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
}
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のデストラクタを直接呼び出すようなコードが無い
2019/04/24(水) 18:54:26.06ID:pnt3hUol
>>389
解説ありがとう
2019/04/26(金) 01:05:34.79ID:UW94aXeh
うーんC++プライマー8500円かぁ。本家のプログラミング言語C++第4版はもっとするし
情報量からすると安いが本一冊にポンと出すにはお高い……日本語である程度網羅的な本となるとこの2冊くらいよね
2019/04/26(金) 19:40:01.51ID:aJMYFNVy
set<double> って int のときと同様にちゃんとソートされるんですか?
2019/04/26(金) 20:34:04.97ID:Fns+A8Ou
NaNが無ければ大丈夫NaNじゃね
2019/04/26(金) 20:34:22.70ID:Fns+A8Ou
NaNが無ければ大丈夫NaNじゃね
2019/04/26(金) 22:17:06.30ID:PbDaLlJb
のちに永久保存される平成最後のスベり
2019/04/26(金) 23:59:20.16ID:LBUDtqYL
たしかにそうだな・・いよいよ平成最後なんだな
みなさん、>>393-394 みたいな事にならないよう、気をひきしめましょう
2019/04/27(土) 00:20:06.56ID:nrL5Mhiq
平成最後っていう言い回し使われすぎて嫌いになってきた
2019/04/27(土) 00:23:11.48ID:v7q7vgVx
イテレータの参照を次に移すときってなんでitr++ではなく++itrなの?
2019/04/27(土) 00:33:20.40ID:nrL5Mhiq
ヤフーでぐぐれ
2019/04/27(土) 01:04:24.73ID:oB7jkl++
素直な実装だとitr++より++itrのほうが速いんじゃないかなあ、となんとなくみんなが思っているから
2019/04/27(土) 01:07:57.61ID:v7q7vgVx
速度に差が出るのか
知らなかった
2019/04/27(土) 01:35:51.19ID:KjSesqKI
インクリメント後のイテレーターの値を返す処理の実装を考えると
先の場合はインクリメントしてそのまま渡せばいいけど
後の場合はインクリメント前の値を保存しといてそれを渡さないといけないので一手間かかるから
・・なんだけど諸々の最適化とか色んな条件とか考えたらそこまで差がでるかどうかはよくわからん
2019/04/27(土) 01:38:33.58ID:EJ6OYH9I
it++だと、戻り値をコピーしてとっておいてから、ポインタなりを進めた後にreturnする必要があるが、
++itだと、ポインタを進めた後に参照を返すだけでするからな。
2019/04/27(土) 01:39:08.58ID:EJ6OYH9I
被ったw
2019/04/27(土) 11:13:20.29ID:qp4sR6Ay
>>398
ite++と++iteなんて気持ちの問題
てか範囲for文使えばいい
406デフォルトの名無しさん
垢版 |
2019/04/27(土) 11:46:20.51ID:Tan1PMrG
>>402-405
cppcheck にかけたらちゃんと警告出るね。
2019/04/27(土) 14:06:33.77ID:dwPa57iA
どうせ戻り値捨てるんだったら++itを選んでおいて損はない
無駄にit++を使うのは時期尚早な最不適化って奴だ
2019/04/27(土) 19:31:57.61ID:Ht8C3PIL
C++で書くんだから後置インクリメントの方がメインに決まってんじゃん
前置は異端だ
2019/04/27(土) 19:37:22.12ID:nrL5Mhiq
殺せ
2019/04/27(土) 20:12:28.01ID:uerCNQ9f
++C
2019/04/27(土) 20:53:36.82ID:hHA0b+W+
C++でいいんだよ。
規格は一歩進むけど、使ってるやつはbetter Cばかりってな
2019/04/27(土) 20:55:05.03ID:nrL5Mhiq
++C++まだかよ
2019/04/27(土) 22:37:09.45ID:Czz6ceI0
>>411
vectorとかstringとか使わんの?
2019/04/28(日) 03:35:47.43ID:c2OY2Ben
CArrayとCStringだぞ
コピコンは定義されてないから自分で作るぞ
415デフォルトの名無しさん
垢版 |
2019/04/28(日) 11:01:20.49ID:DJV+PGkd
CArrayは、<algorithm>ヘッダーで定義された信頼性の高いユーティリティ関数を使えないのがね・・・。
2019/04/28(日) 13:46:52.13ID:nadmD8id
>>413
この思考がbetter C
2019/04/28(日) 14:25:38.47ID:n1RanWws
>>416
わけわからん
2019/04/28(日) 14:29:28.69ID:c2OY2Ben
俺がBest Cだ
2019/04/28(日) 14:56:12.05ID:mA4VukHK
>>415
イテレータをうまいこと定義すれば使えるやつも結構あるんじゃね?
そうでもない?
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の型不一致の制限緩和されいるはずだよな?
原因わかる方いますか?
2019/04/28(日) 15:49:39.60ID:4R543R/q
>>415
GetData()とGetData()+GetSize()を渡せば、とりあえず動くんじゃね?
2019/04/28(日) 16:05:30.47ID:n1RanWws
>>420 比較演算子定義されてないとか?
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
}

は何故か通らない
2019/04/28(日) 16:41:14.97ID:n1RanWws
範囲for文のconst autoをconst auto&かauto&&に変えるとどうなる?
2019/04/28(日) 16:43:13.35ID:UbqPSgHc
>>424
auto&&にした時のみエラーが増えます
cannot bind rvalue reference of type ‘const long unsigned int&&’ to lvalue of type
2019/04/28(日) 16:54:13.46ID:/ZzCGjK1
beginとendのシグニチャは?
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) {
}
2019/04/28(日) 17:28:42.95ID:UbqPSgHc
>>428
動かないです
2019/04/28(日) 18:12:40.94ID:/ZzCGjK1
MYIteratorの実体がunsigned longみたいだけど
vector<int>::iteratorの実体がポインタだったらoperator!=の定義できなくない?
2019/04/28(日) 18:13:25.64ID:7uO4eV2c
>>420
wandboxで再現コード作って出直すか、それができないんならエスパーに頼んだほうがいいんじゃないかな。
https://mevius.2ch.net/test/read.cgi/tech/1187922645/
2019/04/28(日) 20:53:07.97ID:B+3vkW9O
>>423
bool operator != (〜) const ← これ付け忘れてないか?
2019/04/28(日) 20:57:20.67ID:HwAGJ3yN
constつけ忘れは時々はまる
2019/04/28(日) 23:15:17.87ID:UbqPSgHc
>>427
自己解決
const iteratorとconst_iteratorが一緒だと勘違いしていた
const my_iteratorではなくmy_const_iteratorを実装して返り値とすべきでした
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でないと継承元のメンバーが見えないのは仕様?
2019/04/29(月) 10:32:33.68ID:ytpB6N2f
仕様
一寸前までのmsvcではなぜか通っていたけど
2019/04/29(月) 11:47:53.29ID:atpu4K08
>>436
なんでそんな仕様になってるんだろう…
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などの大きな数を扱うにはどうすれば良いですか?
変数をいくつかつなげて大きな数を表現できないかと思っているのですが、やり方が分りません。
ご存知の方いらっしゃいましたら教えて頂けると嬉しいです。
440439
垢版 |
2019/04/30(火) 10:20:33.67ID:5viqjSMx
補足させて下さい。
足し算、引き算は出来るようにしたいです。
可能でしたら、掛け算や割り算もできると助かります。
2019/04/30(火) 10:25:07.05ID:l5C1eDEl
多倍長演算で検索
2019/04/30(火) 10:45:28.19ID:Cm5pFeJF
>>438
> だいたいTAが特殊化される可能性があるだろ
なるほどそりゃそうか、サンクス
2019/04/30(火) 11:43:40.55ID:iYYZTFZo
>>439-440
https://mevius.5ch.net/test/read.cgi/tech/1434079972/51
近々、委譲をやめて継承に戻すつもりです
あと掛け算はkaratsubaを適用できる目処がたちました
x64 に特化してインラインアセンブラ化することも考えています
2019/04/30(火) 12:03:49.54ID:MGpUBTsC
karatsuba はかなり桁数が多いときじゃないと効果がないとも聞くけど
2019/04/30(火) 12:09:22.58ID:iYYZTFZo
>>444
多分それは乗算FFTのことかと
2019/04/30(火) 12:28:54.66ID:44LYo/LT
>>439
stdint.h で int_least32_t とか使えるのでは?
2019/04/30(火) 13:43:58.68ID:iYYZTFZo
>>446
8bit/16bit CPU で int_least32_t とかはそもそも存在しないのでは?
2019/04/30(火) 14:19:40.82ID:44LYo/LT
>>447
「8bitや16bitのintしか使えない」を見て long や long long はもっと大きいんじゃないの?と思ったんだよ。
「整数型」の意味で"int"って書いてたんなら、確かに存在しない環境のことを言ってるのかもしれない。
その場合は ISO C/C++ の LONG_MAX の最低絶対値の要求に準拠できないってことになるんだけど。
2019/04/30(火) 14:19:47.17ID:gDkH0fQs
8bit pic用XCでもlongは32bitなのに
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固定でしょ。何言ってんの?
2019/04/30(火) 16:18:35.89ID:coQMvXAj
>>451
いや、お前こそ何を言ってるんだ?
2019/04/30(火) 16:37:10.66ID:iYYZTFZo
>>451
残念でした、short も long もインプリメンターが好きに実装していいのですっ!きりっ!
2019/04/30(火) 16:45:08.36ID:lzNlO/OB
>>451
64-bit Linux でsizeof(long) が8だった。移植がある場合は<cstdint>使わんとあかん
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
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
2019/04/30(火) 20:34:29.38ID:4LCMFhXh
厳密なbit長が必要なときにintだのlongだの使っちゃ駄目よ
2019/04/30(火) 20:56:09.36ID:ba2OmOyM
じゃあ何を使えばいいの?
2019/04/30(火) 20:59:46.66ID:jq/I62+g
int_leastシリーズでは?
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+(){
//以下、延々とオペレータオーバーロードが続く
}

};
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に対する認識の誤りを指摘される恥辱を味わった。
何言ってるかわからねーと思うが(以下略
2019/04/30(火) 21:08:35.71ID:QYmLdpSV
なんかもうビットという表現すら無くそうとしてるんじゃなかった?
2019/04/30(火) 21:19:14.38ID:l5C1eDEl
制限された環境で使える多倍長整数のライブラリくらいいくらでもありそうだけど
2019/04/30(火) 21:42:28.23ID:ba2OmOyM
>>462
なるほど、cstdint ですか!
教えてくださりありがとうございます
2019/04/30(火) 23:24:19.16ID:xHYWEb3z
ビット数を付けるのは、MISRA-C で決まっているだろ

int8, 16, 32
uint8, 16, 32
2019/05/01(水) 00:05:54.61ID:rGIFhODV
C++の規格上はintは16 bit以上(ターゲットのアーキテクチャで一番自然なサイズ
、longは32 bit以上
だったと思った
2019/05/01(水) 06:23:13.87ID:EdGuPz7E
class ClassA
class ClassB: public ClassA
class ClassA::ClassC

のときに、ClassBはClassAのサブクラスと言いますがClassCはなんと呼ぶものですか?
2019/05/01(水) 06:32:09.33ID:JcO9/TOD
>>469
>class ClassA::ClassC
この意味はなんですか?
2019/05/01(水) 06:32:44.82ID:TS5dpT59
基底クラス
スーパークラス
親クラス
ベースクラス
2019/05/01(水) 06:56:41.43ID:q4ZM9Khf
細かいことを言えば、規格準拠の処理系でも
int32_t (ピッタリ32bit) が定義されるとは限らないのね。
int_fast32_t, int_least32_t なら定義される。

8bit単位じゃないCPUへの配慮らしいから、
普通の(この表現も危険だけど)コンピュータを使う分には
int32_t があると仮定して書いてもたいがい大丈夫だろうけど。
コンパイルエラーが出るから出たら対処、で十分かと。
2019/05/01(水) 07:06:00.95ID:EdGuPz7E
>>470
クラス内で定義したクラスです

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

class ClassA::ClassC {
...
}
の場合class ClassA::ClassC からClassA::を取るとコンパイルが通りません
2019/05/01(水) 07:25:40.44ID:shCLaGGL
「プログラミング言語C++」だと、入れ子クラス(nested class)とか
メンバクラス(member class)とか呼んでるみたい。
2019/05/01(水) 07:36:13.31ID:EdGuPz7E
おお、なるほど
ありがとうございます
2019/05/01(水) 09:29:42.19ID:HwrGV3PF
内部クラス(inner class)もよく聞くけど調べたらJava用語っぽいな
2019/05/01(水) 10:28:09.06ID:imZnb7dZ
Inner Class、Java用語なのか。そう呼んじゃってたわ
2019/05/01(水) 17:22:15.78ID:Ul5/0sra
今よみがえる構造体ネストの悪夢
2019/05/01(水) 17:31:05.65ID:Gk4iJJA0
>>473-474
nested class は仕様にあるので、
これが公式な用語と思って良いみたいだね。
480デフォルトの名無しさん
垢版 |
2019/05/01(水) 19:23:34.42ID:DLNQH846
以前、「完全さを求めるあまり今存在する良い物を犠牲にしてはならない」という趣旨のことわざをBBCハードトークで仄聞したのだが、原典はなんだろうか?
2019/05/01(水) 19:59:09.50ID:JcO9/TOD
>>480
ググってヒットしたもののうち、これについてめぐらせています(ことわざとは関係ありません…)
http://www.kt.rim.or.jp/~hisashim/gabriel/WIB.ja.html
この人(原著者)、最後まで間違ったままでいるような気がしてなりませんが、実際のところどうでしょうか
2019/05/01(水) 22:03:28.27ID:EdGuPz7E
>>479
ありがとう
2019/05/04(土) 17:19:13.49ID:x8LtSB02
>>480 https://en.wikipedia.org/wiki/Perfect_is_the_enemy_of_good
484デフォルトの名無しさん
垢版 |
2019/05/06(月) 08:44:53.70ID:Omhj+R8I
ストリームの遅さは凄い凄すぎる。
ほとんどの場合、遅くても問題ないということはわかる。
でもあそこ迄遅くする必要があったのだろうか。
2019/05/06(月) 10:41:12.07ID:ZJRraXBB
突然何?
2019/05/06(月) 12:17:09.96ID:jqdyfBGc
3.5  ストリーム
ttps://sicp.iijlab.net/fulltext/x350.html

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

なのでC++では他のどの言語も真似してない<<や>>がある
逆に言うとストリーム・プログラミングが主流になったらC++が主流の座に返り咲く
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みたいに引数を番号で指定できる書式じゃないとダメでしょ。
2019/05/06(月) 15:30:05.12ID:HRNpJ9Fc
ストリームの精神はrangeに受け継がれて生き残るよ
だから書式はそろそろ負けを認めよう
2019/05/06(月) 16:03:09.57ID:ZJRraXBB
どうしてprintf使わないの?
2019/05/06(月) 16:28:48.00ID:YSlWnmwv
オーバーロードできないから
2019/05/06(月) 16:36:53.99ID:oGUqqIoM
<<には<<なりの良さがあると思うので、ストリームというより、stringがoperator <<をサポートすれば良いと思う。
2019/05/06(月) 16:40:04.95ID:DF3zK1Xx
文字列操作するためのインターフェイスとしては最悪だよ。
考えた奴は自分では絶対使わないで人に使わせるだけのタイプだろうな。
2019/05/06(月) 16:45:40.32ID:Yv9FD/Sb
そもそもだけど、なんで文字って表示されるのに
<< とか %s とかこういうのが必要なの?
どの言語でもprint(a);だけで表示させればよくない?aが文字列でも整数でも小数でもさ。
引数で判断してくれよ。
2019/05/06(月) 16:51:17.77ID:oGUqqIoM
>>493
え、そう?
文字列を連結する時に、+=と+を使い分けるより<<だけですむ方が楽だし、連結する順番も自明だし結構良くない?
std::string str;
str << "hoge" << 123 << ".txt";
みたいな。
2019/05/06(月) 17:27:51.75ID:vu8V8zIe
>>492
それは私も考えていました、cerr に都度吐いているメッセージを、もう一度プログラムの最後にまとめて吐きなおす、とかをやってみたいんです…
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;
2019/05/06(月) 17:42:30.68ID:B4KNKrTg
別にstringstreamで良いじゃない
2019/05/06(月) 17:42:46.83ID:B4KNKrTg
別にstringstreamで良いじゃない
501デフォルトの名無しさん
垢版 |
2019/05/06(月) 18:13:11.14ID:L6nFhRY+
iostreamの<<はC++の黒歴史の一つだね
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。
2019/05/06(月) 18:58:24.90ID:oGUqqIoM
>>502
をを、なるほど、これは素晴らしいw
2019/05/06(月) 21:02:54.05ID:ZJRraXBB
>>492
stringstream・・・
2019/05/07(火) 19:51:10.38ID:FbrTB0S1
basic_ostream使えよっていつも思う
なんで決め打ちするのかわからない
507デフォルトの名無しさん
垢版 |
2019/05/08(水) 21:52:50.27ID:iQQm+nuQ
to_charsというものをみつけました。
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]
これが死ぬほど気持ち悪いんだけど
2019/05/09(木) 18:18:44.76ID:JXKWFyOS
そんな気色悪い書き方しなくてもこれでいいよ
a.insert(a.end(), std::begin(b), std::end(b));
2019/05/09(木) 18:25:51.81ID:PdPEbd3c
なるほど!ありがとう
2019/05/09(木) 18:44:16.05ID:IVoLxnXn
>>508-509
std::copy に back_inserter を渡す方が効率的という豆知識。
2019/05/09(木) 18:53:31.44ID:vbHvKAwn
>>511
insertのが速いんでね?
resizeしてmemcpyになるはず
2019/05/09(木) 23:40:45.34ID:q7ofaYCv
アルゴリズムよりvector::insertのほうが実装による最適化の余地は大きそうだな
2019/05/10(金) 00:47:30.50ID:5C678nxv
ポインタがイテレータとして渡された時点で相手が連続バッファだってわかるからね
2019/05/10(金) 11:00:01.95ID:KAkBQh2y
&b[sizeof b]でもstd::end(b)でもやってることは変わらないんだけどな
見映えは重要だな
2019/05/10(金) 11:08:59.15ID:pPfi71KH
sizeof bじゃcharでしか使えないんで、そういう意味でもイケてないかも
2019/05/10(金) 12:01:59.87ID:g2QrvVju
>>515
見栄えというか、名前が付いているってのはそれだけで単純にわかりやすいな。
(名前が妥当であれば。)
2019/05/10(金) 19:02:43.61ID:UhKi+qPE
嫌儲で、東京五輪チケットのソースコードが出てるけど
C++使ってるお前らなら、こんなソースコードじゃないよね?
https://gogotsu.com/wp-content/uploads/2019/05/01-9.jpg
2019/05/10(金) 19:05:10.83ID:curN/h5M
>>518
サーバーサイドあまりやってないけどこんな泥臭い書き方するのか
2019/05/10(金) 19:05:16.55ID:TAwz/zT/
javascriptやん
2019/05/10(金) 19:36:57.50ID:tfYAY6pz
こんなもんだろ
SIerが間違ってコンシューマ系のWeb制作を請けてしまうとこんな感じになる
2019/05/10(金) 21:47:05.61ID:oOPMkjEw
てかこんなもの韓国に出すのね
安くなさそう
ってもしや北の方?
2019/05/10(金) 21:53:19.07ID:oOPMkjEw
parseInt(Num).lengthって動かなそう
2019/05/10(金) 21:57:58.16ID:TAwz/zT/
ほんまやw桁でも返ってくるのかと思ったがundefinedじゃんかw
2019/05/10(金) 22:59:11.84ID:HK1/2Yro
型に無駄にこだわった結末がstreamと知っとくのは重要。
あの間違いを覚えとけ。
2019/05/10(金) 23:25:31.58ID:u3uVdMgu
ゲームのシーンを管理するクラスとシーンクラスがあり、管理するクラスはシーンクラスを保持しています
シーンクラスから管理クラスのシーンチェンジを行う関数を呼び出したいのですがどうやったらいいでしょうか
シーンクラスが管理クラスのインスタンスを持ちたくありません
2019/05/10(金) 23:30:31.35ID:0WVRNDv3
>>518
webにあげるなら難読化まではしないにしても最低限圧縮するよね
2019/05/10(金) 23:55:31.69ID:tshfuAdx
>>526
シーンクラスに管理クラスへの参照(ポインタ)を持たせればいいんじゃないのか
2019/05/11(土) 03:16:15.93ID:xsmcwCcm
早速情報漏洩やらかしたの?
2019/05/11(土) 10:30:07.92ID:f5HniSEP
>a.insert(a.begin(),&b[0],&b[sizeof b]);


これ、添字オーバーしてるけどメモリエラーとかにならないの?
2019/05/11(土) 10:54:36.87ID:RjxICFG6
>>530
イテレータ範囲のendは配列の場合最後の要素の次のアドレス
それは普通の実装ではアクセスされることはない
規格的にも最後の次の要素へのポインタだけは未定義じゃない
2019/05/11(土) 11:55:52.83ID:Y1ZlGg0p
>>530
アクセスしてるからダメそう
2019/05/11(土) 12:40:07.82ID:3XjGQ6E0
[]はただのアドレス計算じゃん
534デフォルトの名無しさん
垢版 |
2019/05/11(土) 12:42:52.29ID:DVWj7ai3
&p[N]はp + Nと同じって規格にあったっけ?
2019/05/11(土) 12:44:31.45ID:RjxICFG6
確かに&b[sizeof b]はデリファレンスしてるわ
これはあかんそう
2019/05/11(土) 12:56:49.51ID:FaKAPAIh
>>533
a[i]は a+i ではなく *{a+i}
2019/05/11(土) 13:12:17.25ID:2v2BzL6t
経験上出来るプログラマーは言語オタクが多いイメージ?(ただし浅い)
2019/05/11(土) 18:44:16.82ID:fU686pnk
&*pはデリファレンスなしで単にpと評価するってどっかで特別に決められてなかったっけ?
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 の先頭に挿入されちゃうね。
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);
無難にこれの方がいいですかね?
2019/05/12(日) 11:19:05.13ID:k8bUqGvO
>>539
>int *p = &a[5];
これは多分だめで、ポインタ値としての存在なら許される
int *p = a+5;
2019/05/12(日) 11:53:09.39ID:nuZIUjqi
ややこしいからoperator <<を定義しようw
2019/05/12(日) 15:25:00.10ID:8/5ODvoI
VC++だと
std::vector<T> a; &a[a.size()]はoperator[]のassertionに引っかかるね
2019/05/12(日) 22:25:11.86ID:yr8YjJOU
std::transformって並列処理されてますか?
2019/05/12(日) 23:20:05.82ID:jFoQmc6B
c++17のparallel版使えば並列実行されるかもしれない
2019/05/13(月) 01:24:36.27ID:RKe/NLvg
visual studioでC++17にしたけどいまいち並列版の使い方が分からなかった
普通にfor回すのと、OpenMP使ってfor並列化するのと、transform(非並列)使うの比較したら
OpenMP>普通にfor≧transform だった
2019/05/13(月) 20:49:38.54ID:YS57w6Jq
おとなしくpthead使えよ。
2019/05/13(月) 20:56:12.40ID:WUu3P+2G
非並列使ったならそりゃそうなるだろ
2019/05/16(木) 02:02:33.17ID:1v50lv4I
struct AとAを継承したstruct Bがあって
Aの内容をBの共通部分にコピーする方法ってないですか?
A a;
B b = a;
みたいにしたいんですけど親を派生先にキャストはできないので困ってます
2019/05/16(木) 02:06:57.91ID:mZDDPYlt
struct B : public A
{
B* operator=(const A& a){ this->hoge = a.hoge;}
};
これ初期時にも使えるんかな
2019/05/16(木) 02:25:05.62ID:1v50lv4I
コピーコンストラクタが実装できたとしてメンバ変数は1個ずつコピーするしかないですかね
2019/05/16(木) 02:28:08.55ID:mZDDPYlt
スライシングをさせるとか?
安全に?スライシング起こす方法ってあったっけな?
なんか危ういからやろうともしなかったが
2019/05/16(木) 06:25:17.13ID:/dAesd8e
cloneメソッド用意するとか
2019/05/16(木) 06:31:42.80ID:ebJ8HHSX
>>549
初期化時は普通にコンストラクタ初期化リストで A(a) って書けるでしょ。残りのメンバをどうするのか知らんけど。
代入なら static_cast<A&>(b) = a か b.A::operator=(a) で済みそう。
2019/05/16(木) 06:33:37.60ID:C3C4SHXA
普通にコンストラクタかオペレーター作ればいいんじゃね
B::B(const &A)
B::operator =(const &A)
A::operator B()
雑なキャストでよければdynamic_cast<A>でおk
2019/05/16(木) 06:38:27.18ID:C3C4SHXA
↑dynamic_cast<B>の間違い
B b = dynamic_cast<B>(a);
2019/05/16(木) 11:40:14.21ID:74mGoL8y
>>551
sturctでまとめればデフォルトコピーコンストラクタが使えるけどね。
あとはintとかPODオブジェクトだけだったらmemcpyしちゃうとかも、俺はたまにやるなw
2019/05/16(木) 17:20:00.24ID:PgzYowjZ
549です
解決しましたありがとうございます

以下のように書いたら思っていたことが出来ました
(派生先のコンストラクタで親のデフォルトコピーコンストラクタ呼べるの知りませんでした)
代入は現状使う予定がないので大丈夫です
B::B(const &A a) : A(a) {}
2019/05/16(木) 18:17:29.46ID:mr2QiBZl
その内容だったら=defaultでいいよ
2019/05/16(木) 21:32:58.41ID:/aEDSlbd
引数付きコンストラクタって、=default使えるの?
2019/05/16(木) 22:09:55.18ID:jJO9F8Je
使えないよね
うかうかっと読み過ごしてたわw
562デフォルトの名無しさん
垢版 |
2019/05/18(土) 13:00:29.63ID:M54jyEoh
大本営がおるで!!!
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使ってたんだけどなんかかっこわるいから専用のキーワードが出来たってことさ
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と電池を使って計算する
これが実行時評価
2019/05/19(日) 22:27:31.23ID:c0f8nIXT
const int n = 5;
const int m = n * 100;

要するにこうするとmを計算してくれる
2019/05/19(日) 22:31:08.95ID:tquD1oX1
別にビルド構成に組み込めば済む話じゃね?くだらないな。
2019/05/19(日) 22:51:01.09ID:HuWon3wi
そんなことしなくてもソースコード中に普通のコードと一緒に書けるから
2019/05/19(日) 23:25:27.63ID:L0Ufwo4O
constexprはtemplateと組み合わせたときに真価を発揮する。
templateを実体化するときに、型や非型引数に加えて、変数や関数なども活用して複雑な条件をつけ、
実体化するコードをカスタマイズできるようになるからね。
2019/05/19(日) 23:34:14.21ID:+2TJ1Pbf
それなんかわかりやすい具体例コード出来ます?
2019/05/19(日) 23:36:46.24ID:oSFlthhy
constexpre定数って配列の要素数に出来るということ以外に本質的な意味ってあるの?
そのへんがよくわからない
2019/05/19(日) 23:37:52.41ID:yh9Mbv1R
「constexpr 中3女子」でぐぐると変態コードがたくさん出てくるよ
2019/05/19(日) 23:38:23.88ID:oSFlthhy
配列の要素数と非型テンプレートパラメータね
2019/05/19(日) 23:38:52.26ID:L0Ufwo4O
分かりやすいかどうかは知らないが、以前ここ?で誰かが紹介していたnameofライブラリとか?
https://qiita.com/ta_dragon/items/1828ceb16bc8733526e1
c++17で導入されたstring_viewを使った文字列操作で、enum定義を文字列化してしまうってやつ。
2019/05/19(日) 23:41:56.16ID:yh9Mbv1R
constexpr int f();

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

違いってこれだけでしょ
2019/05/19(日) 23:42:38.19ID:yh9Mbv1R
あれ?違うわ
無視して
2019/05/19(日) 23:56:10.59ID:vshkspmO
変態じみたものとしてはコンパイル時cコンパイルがあるな。
http://kw-udon.hatenablog.com/entry/2016/12/03/201722
2019/05/20(月) 00:13:59.34ID:osDMULGu
constexpr以前でも定数伝搬とか意識して書いてたところはあったはず、でもそれが本当に定数になっているのかはアセンブリ見ないと分からない
constexpr導入によってconstexpr変数の初期化は確実にコンパイル時に実行される、できなければエラー
同様の理由でconstexpr関数(コンパイル時にも実行可能な関数)が導入される
2019/05/20(月) 00:26:47.75ID:TOLwHecl
アセンブリ見なくても生成コード見ればよくね
2019/05/20(月) 00:36:37.94ID:osDMULGu
コンパイラのAST見るって事?
より困難では
2019/05/20(月) 03:36:27.47ID:68OGLTNB
単なる#define定数の代わりとしても名前空間が使える分価値はあるし
例えばconstexprでCRCを計算すれば文字列switchが可能になるとか難しいけど便利ではある
2019/05/20(月) 08:10:49.52ID:lEqHTAQ5
それ普通にヘッダーファイル生成コードでも書いた方がいいだろ。。
そっちのが明らかに可読性、デバッグのしやすさ上だし。
こんなもんありがたがってるのはどうせmakeもまともに書けない連中だろう。
2019/05/20(月) 11:52:26.23ID:mpvIl0KS
そうやって何十万ものヘッダファイルを生み出した例を知ってる。
2019/05/20(月) 12:32:04.02ID:Eu4SldXI
>>583
c++の規格内で完結するのと、make等の外部ツールを使うのとでは移植性が全然違うよ。
2019/05/20(月) 12:47:56.71ID:DC309puZ
同じ記述でソースコード内に式が書け関数が使えるメリットは可読性に大きく影響するだろうに
2019/05/20(月) 16:29:52.79ID:MZiC0WHg
外部ツール使えばいいはさすがに草
588デフォルトの名無しさん
垢版 |
2019/05/20(月) 18:36:37.69ID:a9u60dH4
configure なんて外部ツールを使ったソースファイルやヘッダーファイルを生成しまくりですが、新しい車輪の再発明ですか?
2019/05/20(月) 19:28:03.54ID:MZiC0WHg
configureできる純粋なWindowsはよ
2019/05/20(月) 19:31:01.36ID:m/UtbRiI
configureは古い。GitHubやるならCMake一択。
591デフォルトの名無しさん
垢版 |
2019/05/20(月) 19:35:30.06ID:ZjVO7Mes
CMake使ってるけど、いろいろ使いにくい。
2019/05/20(月) 19:47:55.36ID:MZiC0WHg
configureより100億倍マシだとは思うけど
それはそうとしてwindowsでpkgconfig使わせて
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ファイルにて)

【質問】
お互いにクラス定義を必要とする場合、
★具体的に★どのような実装をすれば良いのでしょうか?
2019/05/20(月) 21:26:14.46ID:lEqHTAQ5
本当に複雑な計算が必要な定数なんてそんな多くないだろうに。。
やっぱバカしかいねーのな。。
2019/05/20(月) 21:28:50.53ID:TjPZT1E7
具体的には実装回答しないけど前方宣言
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だと通らない。
なんやねんこれ。
2019/05/21(火) 00:42:44.99ID:R14wVX0G
ソースなりエラーメッセージなり出せや
2019/05/21(火) 00:53:39.04ID:qC5qbLDj
どうせそのクソ構造体コピーもムーブも出来ないんだろ
定義貼ってみ
2019/05/21(火) 01:07:06.57ID:XM845/F7
wandboxの8系統でもダメなん?
2019/05/21(火) 09:38:36.10ID:0u73mqpq
deleteした後のポインタに0やnullを入れることを「仕様」にしないのは何か理由があるんですかね?
2019/05/21(火) 09:42:27.71ID:BlBHQ5S4
たとえばポインタのコンテナを扱ってる場合、
deleteしたポインタをコンテナから消そうと思ったら
その仕様だと逆に不便じゃね
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。
2019/05/21(火) 10:26:36.33ID:wU6Ws5fl
>・今どきもうユーザーコード内に new, delete は出てこないから
こういう決めつけはどうかと思うんだよなぁ
とか言ったらまた荒れるんだろうな・・

というか理由は単にゼロオーバーヘッドだろ
2019/05/21(火) 10:58:39.79ID:9RXBRo+g
>>592
configureのが楽
2019/05/21(火) 11:47:39.94ID:2HB0EGuO
>>608
出てこないのが理想なんだから>>604のような機能は逆行
ってことだろ
2019/05/21(火) 12:08:41.91ID:om3WDsPR
ポインタを一時変数に代入していた時点で意味無くなるし
void*とかで持っていたらどうするつもりなんだか
2019/05/21(火) 17:11:33.15ID:OTKORriw
スマポでdeleteは排除できてもnewはいるだろ
2019/05/21(火) 18:14:30.34ID:m8UBXeEG
make_sharedに渡すのってT()がいいのかnew T()がいいのか分からない
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という名前がダメらしくて、アンダースコア一本付け足すだけで通るんだよ。
2019/05/22(水) 00:51:52.15ID:wNVmTKK9
その環境の標準ヘッダを書き換えたバカがいるとかじゃね
2019/05/22(水) 06:17:49.28ID:t1pLQv56
>>617
>>601
2019/05/22(水) 11:05:25.06ID:bpe9UG2z
>>613
コンストラクタのパラメータ渡すもんやろ
2019/05/22(水) 17:38:02.73ID:754wR9Ar
WindowsのSleep関数みたいな変態マクロが実装されてるとか
2019/05/22(水) 19:05:38.03ID:HXP4tOE0
さっさと元ソースとgcc -Eとgcc -dM -Eの結果貼るか死ぬかどっちか選べ
2019/05/22(水) 19:07:58.37ID:0oi9wkAH
C++ってゲーム業界以外で使われてるの?
2019/05/22(水) 19:10:27.02ID:wNVmTKK9
使われているだろ
少なくともGoogle、アップル、MSでは主要言語のひとつだよ
2019/05/22(水) 19:22:56.56ID:E7rKivNV
メーカーの募集ページでも見れば?
2019/05/22(水) 19:31:09.11ID:HXP4tOE0
今をときめく人工知能のライブラリのほとんどはPythonの皮+C++のコアっていう構成だぞ
2019/05/22(水) 20:00:24.67ID:KVrYPX3F
>>623
テレビ、宇宙、鉄道路線の最短経路
2019/05/22(水) 20:09:03.46ID:tAHmoj8N
あれだけPython重点だったChainerもmasterにC++の自動微分マージしたしな
2019/05/22(水) 21:03:12.50ID:a23nlY2Z
>それが、indexという名前がダメらしくて、アンダースコア一本付け足すだけで通るんだよ。
心当たりがありすぎるw
これは外には出せんなw
2019/05/22(水) 21:12:32.67ID:omtGQ9bF
>>627
漠然としすぎでよくわからんのだがw
おれの周りだと、重い演算部分だけc/c++でライブラリ化するのはあるけど、
アプリを作るのはないな
c++使える人少ないし
2019/05/22(水) 21:31:18.91ID:G1WjNUUx
>>623
仮想通貨
632デフォルトの名無しさん
垢版 |
2019/05/22(水) 22:42:45.38ID:u7nmxvF3
金毘羅とコンパイラ、どのくらい互換性あるの?
2019/05/23(木) 00:25:21.49ID:uUKvPk1Q
魂斗羅くらいじゃない?
2019/05/23(木) 03:17:45.28ID:tfvbct5D
コンプラの前では何れも塵芥の様なものよ
2019/05/23(木) 10:36:11.44ID:NhdF0b/F
>>497
printfも語順変えられへんで…
2019/05/23(木) 11:31:22.42ID:6zCIietC
>>635
printfはフォーマット文字列を言語ごとに切り替えればいいけど、streamはハードコーディングになってしまう
2019/05/23(木) 11:47:25.42ID:HpI/x5tV
具体的にどんな場面で困るのか例を挙げてもらうと助かる
2019/05/23(木) 12:02:43.15ID:asp3Rd8H
多言語対応とか?
2019/05/23(木) 12:58:07.89ID:NhdF0b/F
>>636
語順変えられへんわ、引数がハードコーディングだわで
printfも変わらんやろっての
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#のような対応が正解。
2019/05/23(木) 14:02:03.14ID:PBFS7PSY
>>640
streamだと文字列リソースが細切れになってもとの文字列が何だったかよく分からず翻訳者にそのまま渡せないって問題はあるかも。

いずれにしても、c++の文字列formattingは更新が必要
2019/05/23(木) 14:25:55.23ID:Y2p7ALG3
string_view、constexpr、templateを使えば、C#風のフォーマットも実現できそうな気はする。
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?
2019/05/23(木) 18:20:07.46ID:NhdF0b/F
>>643
それはコンパイル時に決定してしまうからだめだな。
ロケール設定に合わせて動的に変えられる仕組みではない
2019/05/23(木) 18:37:21.77ID:NhdF0b/F
型指定文字間違えたら簡単に飛ぶscanf系
飛ばないけど書式文字列と書きたい値の型合わせが必要なprintf

まー、ostreamは数値の精度指定とか面倒っちゃー面倒だが
目くじら立てて本質的に駄目って話と違うからなぁ。
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;
}
2019/05/23(木) 18:45:48.03ID:GRcYBCGD
そのコードじゃむしろどのパターンでもダメじゃね
最後がダブって格納される
while(fin>>temp) {
A.push_back(temp);
}
2019/05/23(木) 18:57:16.20ID:9reHFHA1
>>649
そのwhileの条件ってtempにEOFが入ったら抜けるってこと?
double型の変数にEOFを入れたら何になるの?
2019/05/23(木) 19:08:43.60ID:0JW0v20n
istreamのoperator boolはEOFでもtrue返すから無限ループだぞ
2019/05/23(木) 19:20:55.28ID:9reHFHA1
じゃあ

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

は?
2019/05/23(木) 19:42:12.63ID:GRcYBCGD
>>651
いやdoubleの読み込み失敗するからfailになるだろ
空白読み飛ばすだけならeofしか立たないが
2019/05/23(木) 19:43:51.77ID:fqmO3Q5/
any や、Automaticallyで、機械にやらせてる。
2019/05/23(木) 22:36:29.02ID:9reHFHA1
>>653
> そのwhileの条件ってtempにEOFが入ったら抜けるってこと?

ではなくて、doubleが読み込めなかったら false になるのですね
ありがとうございます
2019/05/24(金) 00:15:40.41ID:oGkYW18h
質問です。
単純なforループ処理の途中でエンターキーを押したらストップ、もう一度押すとスタートみたいなことをするにはどうしたらいいですか?
2019/05/24(金) 01:06:43.34ID:Ph/OCthx
対象がコンソールか、ウィンドウかで違う。

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

コルーチンは言ったら、少し楽になる予定??
2019/05/24(金) 04:01:03.95ID:qG9wsGG5
>>656
fiber使うとか?
APIが環境によって違うのが難点だがコルーチンより融通効くし。
2019/05/24(金) 09:10:37.78ID:oGkYW18h
>>657
コンソールです
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;
}
2019/05/24(金) 10:26:55.58ID:Ph/OCthx
あ、そうだった。空白が整形されるの忘れてた。
2019/05/24(金) 10:52:12.22ID:Ph/OCthx
>>660
スレッドスリープするかもと思って、threadのヘッダーはいってるけど。使わなかったのを忘れていた。
2019/05/24(金) 14:04:30.69ID:ff7E+a9X
独自定義したクラスAのlistに、プッシュした場合、新しいインスタンスが作られる?それともアドレスの代入??

list<A> List=new.....;
A a();
List.push(a);
2019/05/24(金) 14:08:18.47ID:G1wpIN0H
インスタンス
2019/05/24(金) 14:30:44.82ID:h/Cubnb+
>>649,653,655
俺は個数指定して読み込むということしかやったことないんだが、この方法って他の型でも使えるの?
int だったら
> doubleが読み込めなかったら false になる
というのが成立しないように思えるのだが
2019/05/24(金) 14:38:19.15ID:QfLs460A
ユーザー定義型なら演算子をオーバーロードするんやで
2019/05/24(金) 14:42:16.00ID:FKmlSCsi
>>665
doubleじゃなかったら、じゃなくてEOFを読んだらfalseになるんだろ
こういうのお洒落なやり方だと思うがなんとなく怖いから俺も個数決めてやってるよ
スタンスの問題
2019/05/24(金) 15:28:08.39ID:YkjJvwKv
まあテキストファイルと言っても普通はフォーマットがもっと厳密に決まっているから、一行読み込んでパースしてって感じでやるな
エラー起こったときにこれじゃ行数すら出せないし
2019/05/24(金) 15:34:20.96ID:YkjJvwKv
その場合でもgetlineをwhileの中にいれておけば期待した動作になる

最後の行に改行があろうが無かろうがうまくいく
2019/05/24(金) 20:38:16.34ID:0N6+tWvP
>>663
A のコピコンが走りますよ!
2019/05/29(水) 18:18:13.81ID:hag6qvkh
mainより上で

struct test{int x=0};
struct test obj;
obj.x=99;

ってやると三行目がエラーなんだけどなんでダメなん?
技術的になんでダメなのか教えてください
2019/05/29(水) 18:41:42.94ID:8RGCI467
>>671
関数の外で
a = 2;
とか
a = a + 1;
は書けません
2019/05/29(水) 19:12:40.01ID:hag6qvkh
ありがとございます
674デフォルトの名無しさん
垢版 |
2019/05/29(水) 19:17:03.50ID:Rr995jUT
DOUBLEのSACHIKO。
2019/05/30(木) 21:51:31.71ID:z7Zp5hm5
戻り値だけのオーバーロードしたいんだけど、むり?
2019/05/30(木) 21:57:39.88ID:WLaiWVCj
無理です
2019/05/30(木) 22:06:45.23ID:rhzd9E8p
天婦羅
2019/05/30(木) 22:27:06.43ID:rl6Tun4v
どうやって使うつもりなのかな
2019/05/30(木) 22:59:49.76ID:aiZ1ZVIC
T f();
auto a = f<Type>();
2019/05/30(木) 23:10:37.32ID:rl6Tun4v
>>679
これはよくやる
2019/05/30(木) 23:12:17.72ID:rl6Tun4v
auto a=std::make_shared<A>();
みたいな感じで
2019/05/30(木) 23:16:18.93ID:z7aQRPDh
実数と複素数のジェネリックプログラミングってどうやるの

実パラメータの数が違うから、結局ほとんどの機能を特殊化してるんだが
2019/05/30(木) 23:19:08.26ID:rhzd9E8p
>>682
std::complexとテンプレートを
2019/05/30(木) 23:19:32.75ID:s4B+etfT
複素数と実数をジェネリクスでまとめると大抵死ぬぞ。
行列ライブラリなんかも基本別関数だから。
2019/05/30(木) 23:40:09.00ID:z7aQRPDh
>>684
やらないのが正解ってことで良いですか?
686デフォルトの名無しさん
垢版 |
2019/05/31(金) 19:07:02.02ID:5tY3IGQl
ジェネリック医薬品。
2019/05/31(金) 20:46:39.86ID:SYuh0ZxQ
>>685
そう。やらないのが正解。
2019/05/31(金) 22:32:45.09ID:YZ9ZViZw
なんでよ 理由を教えてくれ
2019/05/31(金) 22:41:35.25ID:8uAssd9+
理由?やる理由がないからだよ
できるからというだけの理由で無駄な汎用性を持たせようとして無駄に複雑で使いづらい糞が生み出されて結局使われないパターンを嫌というほど見てきたわ
2019/05/31(金) 22:51:46.17ID:YZ9ZViZw
うーんそういうもんかね

ある型について定義したジェネリック関数群全てを特殊化するはめになって
もうこれ型パラメータの意味ほぼねぇな
ってなったことはあったけど
691デフォルトの名無しさん
垢版 |
2019/06/01(土) 01:01:06.10ID:jOO/UBvi
パワー系がいて、通り過ぎる人が眼鏡をかけていれば「メガネ、メガネ」、胸の大きい女性なら「オッパイ、オッパイ」と特徴を呟いていたんです。
私は「ヒゲ」と言われたのですが、ひげ生やしていないんですよね。
誰かこの暗号解ける?
2019/06/01(土) 01:21:48.47ID:amrEPTXm
>>690
今の複素数の例がそれそのものじゃん
2019/06/01(土) 01:28:26.64ID:vdsZQvk5
>>692
一応関数インターフェースの統一ができるから…
2019/06/01(土) 01:34:23.92ID:5ncHXmxx
std::complex使えばおおよその計算はdoubleその他と共通化できない?
虚部実部を見に行かない範囲ならなんとか
2019/06/01(土) 07:39:23.04ID:gFsX3PNG
そこまで無理に場合分けして共通化させるなら初めから
独立に定義したほうがいい。
しっかり勉強してきた奴ほど無理やり継承ツリーでまとめようとする傾向にある。
それが行き過ぎると無駄なジェネリックの登場となる。
2019/06/01(土) 08:15:26.41ID:uvuK6mvN
まあ一度はそういう経験しておいた方がいいな
2019/06/01(土) 08:43:52.63ID:QzRnFnM6
コルモゴロフ複雑性は計算不能なのだから
プログラムのあるべきコンパクトさについて一般論は存在しない
この点プログラムの記述方法の選択はまさに個々人のセンスに依存したartであり
真に人間らしい営みであると言える
2019/06/01(土) 09:38:35.51ID:zEOJGQ26
仮に実数と複素数を継承関係にさせるとして、どっちを親にすべきかで広い合意は取れないからな
円楕円問題と同じ
2019/06/01(土) 11:24:10.29ID:x6StDmNU
たとえすべての関数を特殊化することになったとしても、大部分のifを共通化できるはずで、他のクラスのテンプレ引数として区別なく使えるようになるからそれなりに意味はあるでしょ。
2019/06/01(土) 13:24:21.51ID:ws//1RZ4
意味はないよ
そもそも複素数なんて仮にそれを多用する分野のタスクだったとしても実数に比べて使用頻度は低いんだから、
タスクで本当に必要なものだけを実装すればよい
701デフォルトの名無しさん
垢版 |
2019/06/01(土) 14:00:28.34ID:jOO/UBvi
いや、実数が使えたためしがないから、俺の爺ちゃんが量子を考案したのだが。
2019/06/01(土) 14:17:26.49ID:eS53UGey
お前のじーちゃんシュレーディンガーかよ
703デフォルトの名無しさん
垢版 |
2019/06/01(土) 14:38:11.54ID:jOO/UBvi
高校のとき、心のお兄ちゃんとか心の妹とか流行ってたな。
2019/06/01(土) 15:52:18.02ID:gFsX3PNG
29=(5+2i)(5-2i)
こんな風に因数分解して欲しくケースなんてほとんどないだろ。
変にポリモルフィックにやるべきじゃない。
2019/06/01(土) 16:12:58.52ID:vdsZQvk5
おじちゃん今継承とか動的多態の話しはしてないよ?
2019/06/01(土) 16:28:52.97ID:gFsX3PNG
は?c++でジェネリクスやろうとすればデフォルトで使うことになるだろ?
ボケちゃったのかな?
2019/06/01(土) 16:40:59.16ID:vdsZQvk5
えっそうなの?
C++でジェネリクスてtemplate使うから継承とか関係なくね
例えば実数と虚数に対応するplus関数を作るとしてどういう実装を想定してんの
2019/06/01(土) 18:04:51.32ID:ws//1RZ4
>>707
テンプレートによるstructual subtypingはポリモーフィズムの実装の一種だよ
2019/06/01(土) 18:35:49.34ID:y869pNJN
conceptはともかく現行のc++のそれを構造的部分型とは言いたくない気持ちがあるのは分からないではない
2019/06/01(土) 20:21:39.08ID:HfNJIaau
マルチエージェントシミュレーションをしたいんですけど、環境と個々のエージェントのクラスはどういった関係で持てばいいんでしょうか
現在はエージェント・環境の全部のインスタンスを進行を行うクラスに持たせています
しかし個々のエージェントが相互の情報を知りたいときに相互にアクセスできるようにするにはどうしたらいいでしょうか?

全てのエージェントが全てのエージェントの参照を手にするのはどこで書き換えが起こるか分からなくなるのでしたくありません
2019/06/01(土) 20:32:54.41ID:ws//1RZ4
>>710
お前は街にいる人間全員のパンツの柄を知っているのか?
意味のあるシミュレーションをやるからにはエージェントが知ることのできる情報の範囲や内容は明確に定義されていなければならないはずだろう
その定義に従った情報を取得する手段がエージェントに提供されていればよい
2019/06/01(土) 20:55:47.81ID:HfNJIaau
例えば互いの距離を知りたい場合どうすればいいですか?
2019/06/01(土) 21:01:47.55ID:O6/ikTFN
GPSで二つの位置を測定して、その差を求める。
2019/06/01(土) 21:14:48.00ID:QKlis6p8
二人の心の距離は測れますか
2019/06/01(土) 21:14:55.91ID:wq+pItFK
>>712
神クラスが更新対象のエージェントと周囲の各エージェントとの距離を予め計算し、更新対象のエージェントに計算結果のセットを渡す
そして更新対象エージェントはその結果セットの内容のみに従った行動をするだけ
それをエージェント毎、ステップ毎に繰り返す
実際に必要とされるまで計算を遅延する等、効率化のための実装の工夫は必要だろうけどね
2019/06/01(土) 23:30:04.77ID:vdsZQvk5
あらゆる数値型二つを引数にとるdistance関数を定義しろ
あとは二人の心の位置を表す型で特殊化しろ
2019/06/02(日) 10:02:04.84ID:+QRUS/U1
STGの当たり判定やガンパレの頭から伸びるラインだろ
神のような仲介者mediatorを置けばいい
2019/06/02(日) 11:00:43.72ID:JfX2j2vB
>互いの距離
<<質問の意味不明。再入力せよ>>
2019/06/02(日) 11:44:35.03ID:JfX2j2vB
神クラスが全エージェント間の距離を計算し続けるのはエージェントN個の完全グラフの枝
N*(N-1)/2個の長さを更新し続けるということであっていかにも無駄が大きい少なくともエー
ジェントが置かれる環境のデータ表現と「互い」とは何かが定義されねばならないありがちな
環境表現としては二次元座標のリストとか正方形や六角形のセル表現とかがありがちで「
互い」というのは普通はエージェントの感覚器と環境(遮蔽物とか)とのインタラクションで規
定されるように作るからそういったブツもシミュレートせよ
2019/06/02(日) 14:25:56.91ID:RszfEHjQ
>>714
まずは心の距離を定義するところからはじめよう
2019/06/02(日) 15:22:27.64ID:aSoefH8n
質問よろしいでしょうか?CORBAってもう古いですか?

CORBAのサンプルをこねくり回して送受信するオブジェクトを2つと一時停止や終了をコントロールする
オブジェクトを作ったのですが、お互いに送受信すると思ったら片方が送信しまくって受信が検出できな
いようで困ってます。送信を止めると前に送ったものを受信します。
送信する時に少しsleepを入れると遅いですが思った通りの動きになります。
出来ればsleepなしで動いてほしいのですが、omniORBって同時に送受信できないのでしょうか?
2019/06/02(日) 21:49:55.34ID:a7zvk5vs
CORBAの動きはよく分からんあれ本当にまともに動くのか
2019/06/03(月) 21:34:05.54ID:76rl+S7D
d1の実部 d1の虚部
d2の実部 d2の虚部
...



d1
d2
...

というフォーマットのファイル(の名前)が与えられたときに、前者なら複素数として、後者なら実数として読んで vector に格納する関数ってどう書くべきでしょうか
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;
}
2019/06/04(火) 07:18:40.68ID:mXL6ajVk
>>724
ありがとうございます
紐解いてみます
2019/06/04(火) 11:04:36.97ID:stwnRIgs
【速報】金券五百円分とすかいらーく優侍券をすぐもらえる 
https://pbs.twimg.com/media/D8I_oeBUIAc0a-m.jpg   
   
@ スマホでたいむばんくを入手  
A 会員登録を済ませる   
B マイページへ移動する 
C 招待コード→招待コードを入力する [Rirz Tu](スペース抜き)     
  
今なら更に4日18時までの登録で2倍の600円の紹介金を入手     
クオカードとすかいらーく優待券を両方ゲットできます。   
    
数分で出来ますのでぜひお試し下さい     
2019/06/04(火) 12:18:01.44ID:ZmMHo7YV
valgrindって今も使われてますか?
通信にBoost.MPI、ファイル入出力にHDF5を使う並列プログラムをInfinibandなネットワーク環境で走らせてるんですが
valgrindにかけるとアホみたいにエラーが出てうんざりします。
シコシコSuppression Fileを用意するしかないんですかね
2019/06/04(火) 13:24:01.81ID:iQLgDYhZ
>>726
早速入れた
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かなんてまず問題にならないようなちょっとしたループでも気をつけるべき?気をつけてます?
2019/06/04(火) 16:10:21.98ID:uZb76vTJ
全要素ならrange-based forは便利。
2019/06/04(火) 18:48:19.92ID:Rd1vYitp
男は黙ってfor eachやぞ
2019/06/04(火) 19:03:30.86ID:payOgJqe
for eachは環境依存では
733デフォルトの名無しさん
垢版 |
2019/06/04(火) 19:17:46.45ID:Gdf9cmgA
要素インデックスを表現する変数にはint型を使わずsize_t型を使うようにする、とかかな。
nposによる未検出判定があるから仕方なしにだけど。
2019/06/04(火) 20:55:52.96ID:5jXXyAl7
んなくだらんことで悩むくらいならその外側で監視するコードでも組んだ方が100倍生産的だわ。
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にしとくわ的な感じになってる。
2019/06/04(火) 22:05:00.56ID:sAkXOF3J
size_tは符号ありにすべきだった
と誰か反省してたよな
ホントめんどくさい
2019/06/04(火) 22:10:32.07ID:ZspfbBdH
intが64ビットになる日はいつですか
2019/06/04(火) 22:15:44.59ID:5jXXyAl7
その前にビットサイズ付きintでかかれるケースが増えるだろ。
2019/06/04(火) 22:24:52.24ID:payOgJqe
じゃあ128bit整数はいつですか
2019/06/04(火) 23:51:58.43ID:Q7pPWYoh
なんでお前らの職場って大卒欲しがるの?
2019/06/04(火) 23:57:38.92ID:V/nSGYnK
修士の方が多くね?
2019/06/05(水) 00:02:44.18ID:4AufAgsU
BigInteger書いてるんだけど、補数表現がわけわかめで死にそうになってる。
ウィキペディア頼りで加減算はできたけど、掛け算どうやるねん。

そこで、補数で小学生にもわかるレベルの補数表現の解説プリーズ。
2019/06/05(水) 00:24:44.84ID:oecfF/bP
そのままunsigned同士の掛け算すればいいんじゃね?
で長くなったbit数の結果からMSBから変わる直前まで好きなように切り詰める。
2019/06/05(水) 01:13:53.17ID:UjRB/6p5
>>743
とりあえず4bitで正数、負数を使った四則演算を手で紙に書いて解いてけば理解できないかな
2019/06/05(水) 04:56:49.99ID:y/B41+FI
コピーコンストラクタを避ける目的でswap使うことってありますか?
2019/06/05(水) 09:35:36.43ID:BFsqA4Jd
俺転職するわ
https://i.imgur.com/wzCiTYL.jpg
2019/06/05(水) 10:08:32.94ID:2Gd2m+Lo
会社に行っても仕事しないのに、リモートワークとか無理だわ
2019/06/05(水) 12:06:46.64ID:LHcMHkph
給料は働いた分だけでいいならリモートワークやりたい
2019/06/05(水) 16:43:40.53ID:gnp+gTKs
>>747
インディーゲームデベロッパでリモートワーク・・年収500万から800万・・・
怪しい匂いしかしない・・
2019/06/05(水) 17:11:31.00ID:4AufAgsU
743です。
解説ありがとう。理解できない頭をボンバヘッしたい感じです。
しばらく凍結させるので供養しておきます。

供養:https://dotup.org/uploda/dotup.org1865161.zip
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って&つけるのに。どうなってんでしょ
2019/06/05(水) 17:38:39.24ID:W6wnsWg/
後付けの機能だから考えても仕方ないぞ
2019/06/05(水) 17:58:17.41ID:keYZi/8b
型に互換性があるから。
2019/06/05(水) 18:58:47.42ID:LHcMHkph
>>750
ネコぱらがアホみたいに売れたから気前よくなってる可能性
756デフォルトの名無しさん
垢版 |
2019/06/05(水) 19:47:28.87ID:vfI9OlW2
template <auto N>とかできるんだな。
2019/06/05(水) 23:39:10.84ID:g8AzjXwK
カッコつけずに byref とか予約語作ればよかったんだよ。
同様に関数の後に=0でpure virtualとかバカジャネーノ。
2019/06/05(水) 23:51:08.01ID:Oo3xyqZm
&&でmoveもあるしね
2019/06/05(水) 23:55:20.60ID:PbZwo6fr
参照ってもともと演算子オーバーロードのための機能なので
呼び出し側でなんかさせるわけには行かなかったんだよ
2019/06/06(木) 00:50:27.07ID:owYx3C4X
>>759
参照とオーバーロードにどういう関係がありますのん?
2019/06/06(木) 00:51:47.37ID:vlcJQGqo
専門家が深く考えて議論して決めたことを素人が批判してて草
2019/06/06(木) 01:17:25.71ID:u8n9IUq9
>>752は、operator->()をみたらしぬ
2019/06/06(木) 03:17:03.81ID:BJpCSJfe
=0とか分かりやすすぎ
2019/06/06(木) 06:49:58.29ID:VYs0Fl5K
>>761
= 0 だけならまだしも
= default とかあまり深く考えてなくね?
まあ後付で言うのは容易いよな
って言われたらぐうの根もでないがw
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);
これらは曖昧で解決できない、になってたかも。
2019/06/06(木) 08:16:40.59ID:YZj7S1bc
>>765
ポインタのポインタやキャストのこと考えたら、その例のような暗黙のポインタ変換とか持ち込むとかえって混乱やミスの元になりそうだし、現状の仕様もしかたないものかなと思うよ
2019/06/06(木) 08:40:36.13ID:p2k3Z1kO
>>766
Go使いやすいよ
2019/06/06(木) 10:41:12.25ID:VbLHIWhF
参照引数に結果を代入とかたまに使うけど呼び出す側から分かりやすいようにC#のout修飾子とかほしい
2019/06/06(木) 11:48:51.90ID:CNru8FH6
C#のoutは言われてみれば確かにって感じだけど、そうやって問題提起されるまではそもそも当然すぎて問題だと思われてなかったんだろうね
引数に代入することで呼出元へ値を返すのってfortranとかの時代から続く悪しき伝統だから
2019/06/06(木) 11:53:56.84ID:fZVA+Le5
分配束縛の導入が必要だね

あと、NRVOの義務化
2019/06/06(木) 12:07:43.67ID:bIT6TIHx
仮引数名をoutにしとけばいいだけでは?
2019/06/06(木) 12:09:14.70ID:G/M7SWSB
>>768
それconst付きかどうかで判断すべきと言うか判断するだろ?
2019/06/06(木) 12:26:08.08ID:qi/Zl49P
世の中には引数にconst付けない糞ライブラリがあるんですよ
2019/06/06(木) 13:52:14.20ID:CNru8FH6
>>772
問題はそこじゃない
呼出元のコードだけを見たときにソース上で区別がつかないだろ
C#のoutは呼出元にも付ける必要があるんだよ
C++でも出力引数に参照渡しを使うことは禁止しポインタを使う流派があるが、
あれも呼出元を見たとき書換えの可能性の有無を&の有無だけで判別できるようにするのが目的
2019/06/06(木) 17:27:39.41ID:G/M7SWSB
>>774
それいちいちつけさせられたらメンドイだけのような
どうせIDEで見りゃわかるのに
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で良くない?って思ったんですけど何かメリットってありますか?
2019/06/06(木) 17:45:07.81ID:Yj1l17Nf
基本的には複数の値を戻したいならtuple返すべきだし、オブジェクトの状態を書き換える関数はそのオブジェクトのメンバにするべき
データ構造体を一部書き換えるような処理は、書き換えじゃなくて新しいのを作って返した方が読みやすいし効率的なことも多い
全部が全部そうとは言わないけど、参照引数は書き換え分かりにくいってブーブー言う奴のコードって大体汚いイメージある
2019/06/06(木) 17:49:48.99ID:Yj1l17Nf
>>776
operator=系は組み込み演算子と挙動合わせるために*thisを返すことが多い
今はあんまり推奨されないけどif(a=foo())とか書けるようにね

その例はif(p.set(40))とか書きたいのか、operator=系の話と混同してよく分からずに適当に書いてるか、そのどっちか
2019/06/06(木) 17:52:12.08ID:zzmbMYQ4
>>776
メリットとは言い難いがこんなことが出来る。
a.setx(1).sety(2);

参考書でそれをやるならoperator演算子でやるべきだったな。
2019/06/06(木) 17:57:05.98ID:vlcJQGqo
C++はアドリブ力が要求されるからな
781デフォルトの名無しさん
垢版 |
2019/06/06(木) 18:04:35.29ID:WQTF5R5g
C++の言語仕様にケチつけたところでどうにもならんでしょ。
なにがしたいの。 >>2 にある「すっぱい葡萄」な人?
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));
}
2019/06/06(木) 20:03:44.48ID:cAEvq2fq
やれやれ
2019/06/06(木) 20:12:37.34ID:cbON3Xt8
>>761
専門家の意見は奴がもう少し構文解析勉強してればって意見だがな。
権威だけ気にするバカがほんと増えたね。
2019/06/06(木) 20:55:57.85ID:mQulWN9t
>>776
つbuilder pattern

ここのc++サンプル参照
https://en.m.wikipedia.org/wiki/Builder_pattern
2019/06/06(木) 21:33:19.25ID:9wGcGWUm
>>777-779
ありがとうございました。本は定評のあるC++プライマーなんで多分私が書いた例がなんかおかしいんだと思います
演算子オーバーロードは今やってるところではまだ出てきてないですね。>>779は実際本にも出ていましたがやはりそれがわかりやすいメリットになりますか
2019/06/06(木) 23:08:39.21ID:Qxsak61t
メソッドチェーンか

Ruby, jQuery のマネw
Kotlin も真似してる
2019/06/06(木) 23:21:23.55ID:/EsEj/n2
マネってお前…
2019/06/07(金) 06:54:43.17ID:CBwJTjr/
メソッドチェーンって便利か?
>>779
> a.setx(1).sety(2);

a.setx(1);
a.sety(2);
って書けばいいだけだよね?
2019/06/07(金) 07:43:41.42ID:Pe4fcpYB
>>789
書くのも読むのもだるい
2019/06/07(金) 07:45:42.22ID:51aJPRpO
2個くらいならいいが
10個くらいつなぐやついて長すぎて改行するから結局同じ
2019/06/07(金) 07:52:12.96ID:bSdf4jBS
おっしゃる通り
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));
2019/06/07(金) 07:59:54.93ID:CBwJTjr/
>>790
C++に向いてないからやめたらw
2019/06/07(金) 08:02:27.28ID:CBwJTjr/
>>793
間違えて1つ抜かしたり重複しててもエラーにならない
デメリットの方がでかくね?
2019/06/07(金) 08:09:00.14ID:qUGReS69
>>795
重複したら後の方が優先されるし、抜けた分は初期値を使用するし...

ただし、それだけのためにクラスを作る手間はデメリットだと思う。

あくまで使い方の一例
2019/06/07(金) 08:13:09.29ID:xj9RlcCA
「流れるような」とか言われると笑う
2019/06/07(金) 10:10:37.57ID:CBwJTjr/
>>796
> 重複したら後の方が優先されるし、抜けた分は初期値を使用するし...
だからいいってか?
抜けた部分はともかく重複をエラーにできないのは名前付引数に比べてデメリットでしかないだろ
2019/06/07(金) 10:20:00.95ID:Pe4fcpYB
>>794
行数が増えるのに耐えられるのか?
俺はできない
2019/06/07(金) 10:22:00.36ID:BtT+kizM
range adapter、C++20から使えるよ、メソッドチェーンだよ・・・
2019/06/07(金) 10:34:36.93ID:9H5/9dgd
ようするにラムダ式をチェインさせればいいんだろ
かんたんじゃん
Lispの時代に近づいてるだけだ
2019/06/07(金) 10:35:22.44ID:aX0Y7AKm
>>798
理想的な名前付き引数が存在するなら「名前付引数に比べてデメリット」といえるんだろうけど、
C++には名前付引数ないよね?
2019/06/07(金) 11:29:19.04ID:O2O1gPjv
メソッドチェーンとかいらんわ
リファクタリングしにくいし
Kotlinのapplyがベスト
2019/06/07(金) 11:30:58.83ID:dp7q4wQg
横に長いのがいやなんだよな
多少冗長でも縦の方がいい
特になっがいメソッドチェーンで途中から返り値変わってるやつとか殺意わく
2019/06/07(金) 11:38:12.52ID:Pe4fcpYB
関数の定義は正方形に近いのがいい
2019/06/07(金) 12:23:28.70ID:CBwJTjr/
>>802
そのうち追加されるだろうから待ってなよ
2019/06/07(金) 12:25:28.59ID:CBwJTjr/
>>799
行数増えるのになんの問題があるんだ?
横に長いとか見辛いし差分も取りにくいしメリットないだろ
2019/06/07(金) 14:04:49.95ID:Pe4fcpYB
>>807
縦にも横にもスクロールしたくないだけさ
>>805 に書いた
2019/06/07(金) 14:45:14.80ID:8IyUxlC9
ところで>>776のような return *this; だとコピーが発生しないか?
return this;; として->でメソッドチェーンにするのならわかる
2019/06/07(金) 14:59:30.42ID:KffKHULn
>>809
戻り値の型に&が付いてるから参照だ。
2019/06/07(金) 15:25:18.97ID:adznp1U4
>>810
普通はメソッドチェーンとかいらんけど
GUIのライブラリとかはそっちのほうが使いやすそうな気がする
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に等しい→降順になると思ったんですけど

評価関数ってどう理解したらいいんでしょう?
2019/06/07(金) 16:06:41.20ID:adznp1U4
pred内でprintfデバッグでもしてみたら?
n番目ととn+1番目の要素以外でも比較が発生しているのがわかるから。
815デフォルトの名無しさん
垢版 |
2019/06/07(金) 16:47:23.38ID:StFsiGGy
比較関数の右辺と左辺が入れ替えて比較した結果が矛盾してると、ソートは意図しない挙動になる。当たり前ではあるけど。
2019/06/07(金) 16:52:15.04ID:RgT+kAkp
>>813 俺も理解せずに言葉だけ覚えてるんだけど、
比較関数の性質として「狭義の弱順序」を示さなくちゃいけないのだ。

「狭義の弱順序」でネット検索すれば分かると思うよ。
少なくとも俺の場合「自分には(今のところ)理解できない」ことが分かった。

…て言うか、誰か分かりやすい解説サイトなど紹介してください。
2019/06/07(金) 17:52:26.15ID:9H5/9dgd
群論のマグマやモノイドあたり
2019/06/07(金) 19:55:02.31ID:eP2De+H/
>>793
俺は好きだな。 jQuery みたいでかわいい
2019/06/07(金) 20:05:15.50ID:RHh4qcVs
関数チェイン入るんかいな。
任意のコンテナにチェイン出来るフリー関数を書きたいお年頃なオレ。
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});
は可能だな。
ただし構造体の順番通りじゃないといけないのが欠点(指示をしない場合は初期値を使用)
2019/06/07(金) 20:50:05.58ID:/Ew8uqLj
バカが好きそうなクソシンタックスばっかり入るなw
2019/06/07(金) 21:19:45.80ID:khSrdsPe
cでもあるし妥当だろ
まあ順番は面倒だが
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だったり危険だったりするものでしょうか?
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)の参照カウンタがなくなったので破棄される

普通の挙動では?
2019/06/07(金) 22:10:55.22ID:bSdf4jBS
ムーブするからsp(10)sp(11)sp(13)sp(14)sp(null)か
結論は一緒だけど
2019/06/07(金) 22:12:27.62ID:khSrdsPe
swapじゃなくてmove代入されているんじゃね
2019/06/07(金) 22:21:39.08ID:RHh4qcVs
参照カウンタ増やさない方法で移動されてるのかな??
インプレースだから、扱いが雑な気がする。
2019/06/07(金) 22:25:21.08ID:bSdf4jBS
まあremoveの外側はunspecifiedだからどうするかは実装の勝手
雑に扱われてても文句は言えない
830824
垢版 |
2019/06/07(金) 22:34:00.62ID:PFCjrauz
各位、どうも
なんとなく分かってきました
cpprefjpでも「有効だが未規定な値」とのこと
実装依存で参照カウントが減ってゼロになるときもあるよ、そういうmoveもされ得るよ
ということですね

とりあえず返却されたイテレータが示す範囲は正常だと思うので
erase()はそのまま使う方向でいってみようと思います
2019/06/07(金) 22:56:05.74ID:khSrdsPe
雑とかそう言う話ではなく
remove_ifの実装でremove後の空きshared_ptr部分に後の要素をどうやって詰めているかだけの話
swapじゃないなら、代入にせよmove代入にせよ、その場で参照カウント減ってデストラクタが呼ばれるよ
2019/06/07(金) 23:01:56.95ID:RHh4qcVs
実装がとある一つなのだから、変数に持ち直してやるのもオーバヘッドがーという場合もある。
コンテナ上の空き領域の作り方も幾つかあって、
今回は疑似ポインタだからコピーが軽いけど、実態をいじるときは涙目になるきがす。

実装を定義してないはずだから言いようはいくつかあるけど、
インプレースでやるときは面倒だということだけ知っておけばよい気がする。
2019/06/08(土) 01:15:29.93ID:B4mMYyrz
整数の事情って結局どうするのが正しいの?
powは遅いだの何だの以前にdoubleとの間で一々キャストするのが姿勢として正しいように思えない

マクロでやってる人が多い?
2019/06/08(土) 01:33:51.17ID:f9OaJysQ
powの整数型引数のがあるんじゃない?
2019/06/08(土) 06:52:32.97ID:81RPqzS0
std::powにはないから自分で書くしかない
2019/06/08(土) 08:59:01.58ID:JxaHk6L1
>>833
整数値で指数みたいな物を扱う場合、簡単にオーバーフローが起きるので
本気でやるとしたらだいぶ恣意的なサイズ区切りを入れることになる。
そんなことやるくらいなら浮動小数からのキャストのがだいぶ楽だし実装も安定する。
2019/06/08(土) 10:35:16.88ID:uBDMoQSs
負の数が指数に与えられたら結果は少数になるけどそれでもいいなら
2019/06/08(土) 10:47:03.88ID:Yv0NxNrw
二乗だろ?
何悩んでんだよ
2019/06/08(土) 11:17:40.81ID:CfSNJA7X
>>833 整数でも問題なさそう
https://qiita.com/SaitoAtsushi/items/c729f73f7f5603910b6b
2019/06/08(土) 11:37:29.71ID:6OYPkGQi
二乗なんて直接掛け算で書き込んでもいいくらい
2019/06/08(土) 12:05:54.87ID:hw2i/19C
底が2でない3乗以上の累乗なんか整数でやろうと思ったことないな
2019/06/08(土) 18:23:48.07ID:81RPqzS0
整数の冪は速度云々よりオーバーフローが気になる
100を5乗しただけであっという間にuint32_tをぶっちぎるんだぞこえーよ
2019/06/08(土) 20:11:59.83ID:KGab8pqO
n乗してオーバーフローする整数は予め求められるんだからn乗する前に判定するだけだろ
2019/06/08(土) 20:14:05.51ID:f9OaJysQ
やっぱlog表現にすべきやな
2019/06/08(土) 20:18:41.89ID:16S9+5P1
メモリを無限に使えばええ
2019/06/08(土) 20:36:16.78ID:JxaHk6L1
>>843
判定のためにdoubleにキャストして、みたいな?
2019/06/08(土) 20:37:46.29ID:KGab8pqO
>>846
100がオーバーフローする最大値なら100と予め整数比較するだけだろ
2019/06/08(土) 20:39:53.83ID:JxaHk6L1
なるほど n=100くらいまで全て持っていればいいと。
まあそうかもな。
2019/06/09(日) 02:20:42.24ID:49FyDaAW
C++知らないことが多すぎてちょっと勉強するだけでもあーあそここれ使って書いてればよかったーってなることばっかりだわ
しばらく前に書いたコード見直したくねぇ
2019/06/09(日) 02:37:22.98ID:bDrC2N4p
そのうちこれわざわざこれ使って書く必要なかったなになるゾ
2019/06/09(日) 02:55:27.45ID:5fLgSAOM
そしてC言語が正解だったことに気づく
2019/06/09(日) 02:57:41.57ID:bDrC2N4p
それはない
コンテナはやっぱり便利
動的ポリモーフィズムは必要ねえなぁ
テンプレートで十分
2019/06/09(日) 03:16:06.77ID:/cpSAd8E
>>836
modpowは自分のライブラリとして持ってるので、それ使うことにすれば良いですかね
機能過多な感じもしますが


>>837

普通の挙動ですよね?


>>839
ありがとうございます。読んでみます
結果によっては素直にpowを使うことにします


>>840
今はマクロでそうしてます
2019/06/09(日) 09:31:54.10ID:/FZVYwra
テンプレートもそろそろガンだってことが普通に認識されるようになるだろうな。
標準のテンプレートだけ使ってりゃいいんだよ(それでも使いこなせないだろうが。)
バカの作るテンプレートライブラリほどひどいものはない。
2019/06/09(日) 10:15:07.88ID:Gi1Jt9cY
そりゃ堂々巡りの言い方だろ
酷い奴の作るテンプレートライブラリは酷い。そりゃそうだ
テンプレートライブラリが酷けりゃ作ったヤツは酷い。こうなるわな
2019/06/09(日) 10:55:06.08ID:jMWe1oeX
>>852
>動的ポリモーフィズムは必要ねえなぁ
データの通りにオブジェクト作るような設計一切出来ないぞ
2019/06/09(日) 10:55:18.69ID:g07iT4nf
>>854
どこが癌なのか教えてください。
2019/06/09(日) 12:52:56.51ID:Oof3fMf0
いやテンプレート「ライブラリ」ともなれば十分な機能と性能と使いやすさを全立させるには必要スキルがダンチになる印象

そうではなくて問題に特化した形でテンプレートを使ってコードの記述量を激減させることは常人のもできる
ただし他人に理解してもらうのが困難になるからそういのうはモジュール内に囲ってテンプレートそのものを外に出さなければ宜しい

もし使いにくいとか理解しがたいだけでなく動作品質に問題があるなら、
その場合は問題のある人物が取り替えられる方向へと管理者のソーシャルスキルの発動の時間である
2019/06/09(日) 13:05:27.14ID:bDrC2N4p
>>858
それが言いたかったんだよ、うん
2019/06/09(日) 15:35:10.73ID:oBKk3YD0
正直アプリレイヤーでテンプレートを駆使したライブラリを作ることはあんまない
使う側からすれば便利な仕組みだわ

これがライブラリを提供する側になると途端に言語仕様と環境との闘いが始まる
2019/06/09(日) 15:42:19.87ID:5fLgSAOM
何回同じ話するの?
障害あるの?
2019/06/09(日) 15:46:33.89ID:S7l1hTT6
いいからお前はC言語使ってろよ
2019/06/09(日) 15:46:44.77ID:aCcbeNVM
>>859
嘘つけ
864デフォルトの名無しさん
垢版 |
2019/06/09(日) 16:02:49.06ID:P23LzvOV
テンプレートは、コンパイラのエラーや警告が意味不明なのが玉にキズ。
2019/06/09(日) 16:08:45.43ID:5fLgSAOM
同じ話を2回する奴はガイジ死ね
2019/06/09(日) 16:17:48.67ID:Q5Gsequk
>>861>>865 は文面は異なれど、意図として
同一の内容を繰り返してるような気がするんだが。
「同じ話を何度も投稿する人に対する敵意」ってくくり。

これは単なる感想(自己言及的で面白い)だけどね。
発言に対しての賛同でも否定でもなく。
2019/06/09(日) 16:40:22.23ID:/FZVYwra
クソライブラリ作るやつが絶滅するまで。
2019/06/09(日) 17:20:43.24ID:g07iT4nf
そのくそライブラリを使わないといけないの?
2019/06/09(日) 19:35:59.29ID:5fLgSAOM
だったら無駄なことしてないで直接乗り込んで二度とライブラリを作れないようにしてこいやゴミ
2019/06/09(日) 20:34:56.29ID:Oof3fMf0
1. より優れたライブラリを提供すれば良い

2. 労力の関係で0スタートで新規作成は無理ということであれば
  糞ライブラリをうまくwrapしてせめて使いやすい形にして見せれば良い

3. 2の場合も中身は追って作り直すこと
2019/06/09(日) 21:12:37.07ID:Gi1Jt9cY
4. 自身の頭脳がへっぽこだと、高度すぎるライブラリは全く理解できない。
 自分が使いこなせないものはダメである。
 わたしの頭のレヴェルに合わせろ。
2019/06/09(日) 21:22:41.55ID:/FZVYwra
俺なら使いこなせるって持ってきたやつが一番使えてないパターンなんだが。。
2019/06/09(日) 21:28:31.78ID:5fLgSAOM
持ってくるwww
2ちゃんガイジのくせに偉くなったと錯覚してて草
874デフォルトの名無しさん
垢版 |
2019/06/10(月) 00:33:49.15ID:3V4oen/z
エモーショナルエンジン搭載。
その日の気分で結果が変わります。
2019/06/10(月) 00:36:48.31ID:jI97QXDl
それが!

PS2!?
2019/06/10(月) 08:57:25.07ID:SLwWwvWV
仕事で無駄に時間かけてテンプレート使ったライブラリ(という名のほぼ何もしないクソコード)書かれたら殺意も湧くだろうな、ネットでもそういうのはたまに見かける

熟練者が長年かけて作った、良くできたフリーのライブラリしか知らんアマチュアの人にはわからんかもしれんが
2019/06/10(月) 09:53:37.04ID:5SR5C4JK
そんなもん飼ってる上司の責任だろ
糞ができるまで放置してたのか?
2019/06/10(月) 13:21:16.85ID:SLwWwvWV
俺は仕事でそんなの見たことないけど>>854の肩を持ったまでだよ
>>854以降の流れを読んでからほざけ
2019/06/10(月) 14:24:51.11ID:MigAkPcZ
テンプレートってそんな身構えるようなものかな?
外部ツールとマクロで武装した旧黒魔術系のコードに比べたら、なんぼかましな気がするがw
2019/06/10(月) 14:45:47.43ID:SLwWwvWV
もちろん便利にはなったけど、STL以来むやみにテンプレートを持ち上げる風潮が・・・
初心者が上級者を気取りたくてテンプレート持て囃し、それだけに留まらずオブジェクト指向や昔ながらのテクニックをこき下ろしてるのを良く見かける

実行時、コンパイル時、プリプロセス時でそれぞれメリットデメリットあるんだけどなぁ
2019/06/10(月) 15:05:36.77ID:psqZaESW
プロ(仕事)の話と初心者の話が一緒になっちゃってるな
2019/06/10(月) 15:44:38.79ID:EWMjDPPL
初心者を指導せずほったらかしにしてる上司がいるらしい
2019/06/10(月) 16:11:30.07ID:psqZaESW
>>854は「普通に」って書いてるけど、
バカがテンプレートライブラリを書いてそれが仕事に害悪をもたらすなんてことが
普通にあるわけがないだろ。
仕事なら出来る奴に書かせるし、趣味なら仕事には無害。
2019/06/10(月) 17:43:59.55ID:sRT+YLgZ
できる奴が書いたテンプレートライブラリを使いこなせない奴が、グダグダ文句言っているだけだろ。

言っている奴ができる奴なら文句言う前に修正しているわ
2019/06/10(月) 18:56:35.92ID:OlE51f/u
まあマクロとかテンプレートとかみんな一度はやり過ぎるぐらい作り込んだことあるだろ
多分>>854をそれを経験した直後ぐらいなんだろ
2019/06/10(月) 19:08:07.57ID:YayWwtn2
無職がおしごとごっこでつか?w
以下、職業プログラマじゃない者は書き込み禁止
2019/06/10(月) 19:10:51.22ID:ZJKeta/Q
マ板でやれ
2019/06/10(月) 19:16:09.39ID:EWMjDPPL
労働厨とかいう下級国民
2019/06/10(月) 19:22:32.34ID:5SR5C4JK
お前らautoとdecltype(auto)の違いとか言語仕様の話しで盛り上がれよ
2019/06/10(月) 19:22:55.85ID:SLwWwvWV
>>885
>>852もそれ以前の段階だろ
2019/06/10(月) 19:27:55.90ID:EWMjDPPL
イテレータを受け入れる関数もオーバーロードで書いてるんですか?
2019/06/10(月) 20:00:14.92ID:J/wxl4Rl
>>886
逆だろ
プロがこんなとこに来て語ってる方が異常だわ
2019/06/10(月) 20:34:00.20ID:0NZRWrrl
auto int i =0;

K&Rはこれでいけたんだがのう
2019/06/10(月) 20:37:49.85ID:W52LT1uh
int不要とかそういう話?
2019/06/10(月) 20:48:57.81ID:9ReisgX6
decltype(auto)はあまり使わないなぁ
長いし
面倒だからauto&&で受けちゃうし
戻り値推論もauto&とかで済ましちゃう
2019/06/10(月) 21:07:56.06ID:Ii7tq5Jr
>>884
こういうクソな思想が広まってるからクソライブラリがあとを絶たないわけだ。
2019/06/10(月) 21:35:34.30ID:9ReisgX6
クソクソ言うだけで、何がどう悪いとすら具体的に例を上げないのだからもうね
2019/06/10(月) 21:36:31.46ID:YayWwtn2
>>892
(´・∀・`)ヘー
アマチュアさんはそう考えるんだね
2019/06/10(月) 21:55:37.04ID:EWMjDPPL
>>898
え?お前だけだぞこんな底辺まで来てるの
もう少し世間体とか気にしようよ
2019/06/10(月) 22:04:08.27ID:irHYgLSK
utf8の文字定数って実質ASCIIしか使えないのかコレ
2019/06/10(月) 22:42:42.99ID:J/wxl4Rl
>>898
アマチュアをからかうプロwww
エンジニアがそんなんじゃ日本の将来は暗いわ
2019/06/10(月) 23:08:47.95ID:j+S7HtNV
ていうかテンプレートが絡むととたんに問題解決できなくなるプロ
2019/06/10(月) 23:51:39.69ID:Ii7tq5Jr
テンプレートの問題なんてもう語り尽くしたわ。
それでもバカがあと立たないのもずっと見てきた。。
2019/06/11(火) 00:19:02.01ID:QaZP7mkq
テンプレートの問題について何も聞いてないし、その状態で語り尽くしたというなら何も問題はないな。
2019/06/11(火) 00:19:41.89ID:kvB4pOtR
新規参入者がいるってことだから恐悦至極なのではないか
2019/06/11(火) 00:25:55.32ID:PO+d8+1v
(果たして彼にとってはテンプレートのみが例外的に特殊な問題であって
 テンプレート以外については十分なスキルを有しているのであろうか…
907デフォルトの名無しさん
垢版 |
2019/06/11(火) 00:53:07.47ID:7MvjruKl
コンパイル時に発見できるような問題はそもそもたいして深刻な問題ではない。
2019/06/11(火) 01:02:03.28ID:TJ/Njjhl
>>907
コンパイル時にわかる程度の問題でも、ランタイムでエラー吐かれたらデバッグ大変だよ
Pythonの型違いで嫌と言うほど思い知った
909デフォルトの名無しさん
垢版 |
2019/06/11(火) 01:13:48.45ID:7MvjruKl
>>908
私は、ランタイムエラーを解決することの困難さに比べればコンパイルエラーなんて大したことない、という意味で言ったんだが。
あなた、読解力がないって遠まわしに指摘されること多くない?
2019/06/11(火) 01:26:55.77ID:TJ/Njjhl
そもそも文脈不明な中でそれだけ書かれてもなぁ
コンパイル時の分かるような問題かどうかではなく、エラーをコンパイル時に吐いてくれるとデバッグが捗るみたいに書けば良いのに
実際、assertやstatic_assert
SFINAE使ってのなるべく上位レイヤーでエラー発生させるのは重要でしょ
2019/06/11(火) 01:51:30.87ID:GDgSrcmQ
テンプレート駆使したライブラリ使うと最適化ありなしで速度かなり変わるの困る
デバッグビルドだとくそおっそくてデバッグがままならん
なんか良い解決法ないですかね?
2019/06/11(火) 02:00:33.22ID:TJ/Njjhl
適当なところで切る
処理の定義を別ヘッダに分けて、特定のソースファイルで定義ヘッダを読み、デバッグが必要ないところは最適化Onで明示的インスタンス化をする
913デフォルトの名無しさん
垢版 |
2019/06/11(火) 02:07:42.02ID:7MvjruKl
>>911,912
> 処理の定義を別ヘッダに分けて、特定のソースファイルで定義ヘッダを読み

自前の切り替え処理自体が不具合の原因になりかねない。
素直にprintf()するのが一番確実でしょう。
2019/06/11(火) 02:12:17.79ID:bsFR+Nzy
C++14以降でテンプレートのデザインパターンの参考書って無い?
2019/06/11(火) 02:42:42.36ID:Pe41E3Zb
テンプレート完全ガイドの2版が出てたけど、英語
2019/06/11(火) 22:59:30.61ID:GDgSrcmQ
>>912
ソースファイルごとに最適化変えるのって簡単にできます?
VSプロジェクトかCMakeで
2019/06/12(水) 00:12:16.75ID:EuvWtF/E
VSならプロジェクトじゃなくソースのプロパティ選んで最適化変えればそこだけ反映される
まあ、それ用の構成作っておくのが安全

CMakeはわからん
makeなら簡単だけど
2019/06/12(水) 09:35:50.45ID:eCiQ25Tx
c++の場合、このコンパイラでは通るけどこっちのコンパイラでは通らないとかが
普通にある方が問題。
静的だとか動的かとかそういう問題とはまた違う。
2019/06/12(水) 09:39:04.87ID:dM+mHpC4
>>917
あ、ホントだ
ありがとうございます
2019/06/12(水) 12:59:45.38ID:pwRz5TOC
>>918
コンパイラごとに違う言語なんだから当然では?
むしろコンパイラが1つしかない言語以外でそういう問題が発生しない言語ある?
2019/06/12(水) 16:21:34.99ID:7KGE0Knu
Java、C#は「コンパイラが1つしかない言語」に含む?
どのみち比較の対象が少ないね。
2019/06/12(水) 16:22:16.09ID:7cC3bFV5
普通はコンパイラは何種類もない
2019/06/12(水) 16:24:55.92ID:EuvWtF/E
そこら辺もバージョン違いで色々あるよね
2019/06/12(水) 16:31:31.49ID:7cC3bFV5
そんなの当たり前だろ
2019/06/12(水) 16:40:28.14ID:7KGE0Knu
「コンパイラが通らない問題を解消するためにビルドツールをご用意いたしました。」
で、configureやらcmakeやらantやらといった車輪の再発明が続々生まれてくる。
2019/06/12(水) 17:19:03.04ID:79FLB/Pn
ブラウザ戦争に近いものがあるな
2019/06/12(水) 18:48:39.87ID:eqhLCWed
モダンなC++を学ぶべく右辺値参照について勉強しているのですがさっぱりわかりません
本に右辺値参照は実際は左辺値でstd::moveは実際は何もmoveしない
と書いてありましたが本当に意味がわからない
言葉遊びはいいからわかりやすく教えてくれ
2019/06/12(水) 19:07:22.06ID:iR6eT4Op
>>927
正確に言うと右辺値参照が左辺値なんじゃなくて右辺値を参照している「変数」が左辺値なのさ。
それ自体ひとつの変数なんだから当然のことだろう?
2019/06/12(水) 19:12:10.36ID:KzwP9Gzw
>>927
誤解を恐れずに言うと、std::moveを付けると、&&が付いた特殊な型になる。その型のことを右辺値参照という。ムーヴコンストラクターやムーヴ代入などは、その特殊な型に対して行われる。
2019/06/12(水) 19:17:22.52ID:KzwP9Gzw
&&が付いた引数は、中身の所有権を他の場所に譲り渡すことができる。
例えば、文字列クラスだったら、ポインタが指し示す文字列の所有権だ。所有権をコピーせずに、移動するだけなら、処理コストが低くて済む。
2019/06/12(水) 19:33:55.80ID:1cw0Fvdf
>>930
所有権って何ですか?
私は一つの関数で new/malloc() した領域を、別の関数に渡し、さらに別の関数で delete/free() してますが、効率よくそういうことをする場合には所有権という架空のフレームは邪魔だと思います
2019/06/12(水) 19:36:15.70ID:qnyyQkgz
>>931
まさにそれをする為のフレームやん。
2019/06/12(水) 19:38:15.23ID:eqhLCWed
>>928
あーなるほど確かに変数に代入してる時点でそうですね
右辺値参照を保持する左辺値ということですね
納得です

>>929
std::moveに渡す型も&&ですよね
&&をもらってさらに特殊な&&を返すんでしょうか?
remove_referenceとかその辺がさっぱりです
なぜこれが必要なのか
さらにその型で所有権が移るというのもよくわからず
2019/06/12(水) 19:45:51.10ID:qnyyQkgz
右辺値というのはほっといたら消える。

どうせ消えるんだったら右辺値が確保してるメモリ、こっちでちゃんと解放するからもらうね→所有権の移動

もちろん所有権移動したので右辺値でメモリ解放しちゃダメよ。
2019/06/12(水) 19:47:37.87ID:GZDxeRSP
>>933
所有権が移るというか...
T&& x を引数に持つ関数(コンストラクタが多い)は右辺値を受け取るけど、
そこで x の所有するリソースを
分捕っていいという「慣習」「イディオム」があるというだけなんだよ。
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は、テンプレートに慣れないと使いどころが分からないだろう。
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);
2019/06/12(水) 20:34:03.21ID:0iE+TYdc
右辺値参照で挫折したら、Rustに進むがいい。
C++を完全に理解した人間は1%も居ない。
2019/06/12(水) 20:39:57.61ID:W9DAWVrH
蟻人間は行列理解からだな
2019/06/12(水) 21:02:08.90ID:KzwP9Gzw
あほですみません。。。
2019/06/12(水) 21:03:19.70ID:wMzR7R80
難しいというよりただ複雑
概念的にそれほど難しいわけではない
942デフォルトの名無しさん
垢版 |
2019/06/12(水) 21:07:19.74ID:JHNh+ipy
ムーブセマンティクスは今世紀最大の発明と言われてるからね。
2019/06/12(水) 21:11:21.95ID:7TWmWXJk
最近は標準ライブラリも文法も分かりやすくなったなと思ったら
initializer_list絡みの初期化がこのやろう
2019/06/12(水) 21:17:48.45ID:hxuK959+
・仮引数が右辺値参照&&なら、そこに渡した変数はぶっ壊される(そのかわり速いかもしれない)
・ただし安全のために使い捨ての一時変数か、std::moveを付けて「壊していいよ」と明示したものしか渡せないようになってる

これだけ理解してればだいたいOK
2019/06/12(水) 21:27:52.71ID:7cC3bFV5
ややこしいとか言う奴に限ってパターンの一覧表作っていつでも参照できるようにしないよな
2019/06/12(水) 21:52:10.38ID:eqhLCWed
このスレを読んだらだんだんわかってきました

>>937
なるほど
この例で使い方は何となく理解できたかもしれないです
abc123を一切コピーすることなく引き渡しているということですね
コンストラクタに右辺値が渡された時は自動的に&&のコンストラクタがよばれ(これはコンパイラが自動で判断してくれる)
コピーでは明示的に右辺値参照にしないとダメなのでstd::moveを使うと
2019/06/12(水) 21:59:50.66ID:eCiQ25Tx
右辺値判定はコンパイラ側も困ってそう
2019/06/12(水) 22:03:44.51ID:hxuK959+
厳密に決まってるから困らないぞ
949デフォルトの名無しさん
垢版 |
2019/06/12(水) 22:42:16.79ID:JHNh+ipy
【 constexpr の掟】
「ブッ殺す」と心の中で思ったならッ!その時スデに行動は終わっているんだッ!
2019/06/12(水) 23:19:39.59ID:zt+60oVn
>>931
所有権というのは権利を連想させるようないかにもお得な感じを醸し出しているネーミングだが
その実体はオブジェクトの開放を最後の一人だけがやる「義務」に他ならない

で、「最後の一人だけに開放させる」というのを>>931のように
>別の関数に渡し、さらに別の関数で delete/free()
というのは大悪手に他ならない
なぜなら呼び出し先で最後かどうかなど(所有権やレキシカルな手法では)管理し切れない
所有権は呼び出し元ががっちり掴んでおくもの
2019/06/12(水) 23:36:10.29ID:dKzVqNYa
moveしたあとの変数を使おうとしたらエラー出してくれるの?
2019/06/12(水) 23:44:04.96ID:vc+7745/
まさか
2019/06/12(水) 23:51:54.31ID:EuvWtF/E
元の内容について所有権を失っているだけで普通は使える様になっている
スマポならnull相当
vectorみたいなのならemptyもしくは何らかのごみが入っているのでclearか新たに代入すればおk
2019/06/13(木) 00:01:02.92ID:GxcaYm6A
>>953
>元の内容について所有権を失っているだけで普通は使える様になっている
moveしたあとの変数について述べているのなら完璧な間違いだ
藻前のプログラムはバグだらけだな
2019/06/13(木) 00:16:54.69ID:VunnpS2y
合ってるだろ
ムーブ後のオブジェクトは内容は未規定だけど有効な状態だぞ、少なくとも組み込み型と標準ライブラリはな
褒められたプログラミングスタイルかはともかく、再利用すること自体が即間違いとは言えない
2019/06/13(木) 00:26:16.00ID:/TtN03F/
>>951
ムーブコンストラクタを書いて自分で処理するんだよw
2019/06/13(木) 00:26:51.45ID:scxOg7Fk
コンパイル時に既に顧客の要求を満たしてるとかマジカッコいい
2019/06/13(木) 01:25:50.43ID:bj2tv0KH
少なくとも標準ライブラリでこれが出来ないと、メンバ変数の内容一つmoveしただけで親のオブジェクトまで使えなくなる。
メンバ変数再利用する術が無いってことだからね
2019/06/13(木) 01:41:54.12ID:/Ra8Vlso
>>957
未初期化の変数をコンパイル時に検出できるんだからmoveした後かどうかも判定できるはずでしょ
2019/06/13(木) 02:03:22.10ID:/TtN03F/
>>958
メンバ変数1つムーブって、どういうこと?
普通メンバ変数は右辺値にならないでしょ。
2019/06/13(木) 03:03:13.46ID:bj2tv0KH
2分木で子のスマポ所有しているような場合、付け替えとかで所有権の移動するときshared_ptrならコピーでokだけど、unique_ptrみたいなのだとmoveする事になるが、メンバ変数で持っていた子の内容をmoveしたあとその変数が再利用可能じゃないと困るだろ
2019/06/13(木) 03:21:55.87ID:/TtN03F/
>>961
c++11で導入されたmoveはいわゆる所有権の移動とは違うもなので、その場合はmoveは使えないと思う。
2019/06/13(木) 03:33:01.74ID:fPdkPYzy
>>962
unique_ptrのmoveが所有権の移動じゃないと言うなら一体何なら「所有権の移動」だと言うのか。
2019/06/13(木) 03:46:23.77ID:/TtN03F/
もともと右辺値参照とmoveセマンティクスの話じゃなかったっけ?
2019/06/13(木) 04:35:02.91ID:qBl/BLKs
ループの中で int a なる整数を使うとき、ループ内で毎回宣言するのとループの外で宣言して使い回すのどっちが結局速いの?
2019/06/13(木) 09:17:30.68ID:wJ3u1v7j
自分で計ればいいじゃん
2019/06/13(木) 11:30:46.72ID:eqzI8P56
ループの外に出せるものは可能な限りすべて出せ
2019/06/13(木) 12:09:07.93ID:Br82W2pC
範囲for文を使ってそんなどうでもいいことは忘れろ
2019/06/13(木) 13:18:06.43ID:XHz4etUG
>>967
逆じゃないか?
インスタンスの生成にコストがかかるときはトレードオフだが、そうでないなら可能な限りスコープを狭くなるように変数を宣言した方が良いと思う
2019/06/13(木) 13:33:35.83ID:eqzI8P56
スコープ気にするならループ関係の部分だけでスコープ区切ればいいじゃん
2019/06/13(木) 15:27:33.99ID:P5difHG2
>>970
お前は何を言ってるんだよ…
2019/06/13(木) 15:28:06.57ID:PncfQdvG
cppcheckやVisual Studioのような静的コード解析にかけると「スコープを小さくできるよ?」みたいなアドバイスが出るよね。
実際のところ、どうなんだろうね。typoしにくくなったりスタックサイズが小さくなる利点があるとは思うけど。
2019/06/13(木) 16:20:20.51ID:fzRArnQO
さすがにこの流れは草
2019/06/13(木) 16:22:08.63ID:jHLKLHUC
ちょうど今朝cppcheckかけたら
style: The scope of the variable 'c' can be reduced.
「変数 c のスコープを縮小できますよ」って出たわ。
つまり「スコープを狭くできるなら狭くすべき」っていう方針を、
(少なくともcppcheckを作ってる人は)採用してるんだろうな。

どっちが速いかについては、ちょっと最適化オプションつければ
結局同じマシン語になっちゃうんじゃないかしら。
2019/06/13(木) 16:29:14.63ID:gMp0DWLA
>>967
セオリーだからって鵜呑みにするの良くないよ
(というか文面だけ覚えても意味ない
2019/06/13(木) 16:30:01.81ID:57+ky1er
スコープ広いほうが良いなら最終的に全部グローバルにしろやになるやんけ
2019/06/13(木) 17:32:58.81ID:fC2jn4Im
オブジェクト指向って実はprivate変数のスコープをかなり広く取ってるセミグローバル指向だと思う
2019/06/13(木) 17:37:28.56ID:wJ3u1v7j
おれは思わないな
2019/06/13(木) 18:39:42.63ID:XHz4etUG
>>977
それってクラスを大きくしすぎているだけじゃないか?
2019/06/13(木) 19:54:06.23ID:fmTPRROb
この流れは関数切り出しをまともにやってない連中が多いってことだな。。
2019/06/13(木) 23:39:11.49ID:ktOVSBzy
そろそろ次スレ。わっちょい。
2019/06/15(土) 13:52:11.56ID:DKQ0QQLH
次スレ
C++相談室 part143
https://mevius.5ch.net/test/read.cgi/tech/1560574313/
2019/06/15(土) 18:36:57.85ID:YCpCWY7o
最近馬鹿の一つ覚えが多いな
>>982 乙乙
2019/06/15(土) 19:13:31.09ID:wEtwZJzN
覚えてるだけまし。
2019/06/15(土) 19:37:22.36ID:y49ayDRp
グローバル変数と言っているのはオブジェクト指向スレを荒らしてるバカだろ
986デフォルトの名無しさん
垢版 |
2019/06/16(日) 15:07:40.82ID:TXhOXCMI
任意の型に対応する整数を返すメタ関数ってC++11の標準であったりします?

intなら1
stringなら2
みたいな
上記の技法をなんと呼ぶかわからないので検索ワードも思い付かず…
2019/06/16(日) 15:52:45.94ID:eI7bdJXk
なんでワッチョイついてんの?
スレ立てミスだろ
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
2019/06/16(日) 19:19:35.33ID:PFinGY+5
質問ですがC++のクラスのメソッドは、大別すると、
コンストラクタとデストラクタとsetterとgetterと何になるの?
2019/06/16(日) 19:22:19.26ID:NJ2skO19
move? be?
ステートチェンジしていくのだから、動作になるのか?
2019/06/16(日) 19:31:47.13ID:Va3vueK+
setterとgetterって何?
Javaじゃあるまいしそんなの言語要素としては用意してないよ
2019/06/16(日) 21:57:17.90ID:PFinGY+5
>>991
setterとgetterが何かについてはググった方が良い

Javaは詳しくは知らないが、ググった限りにおいて
Javaでもsetter/getterを定義する専用の言語要素など用意されていない印象
2019/06/16(日) 22:03:52.19ID:PFinGY+5
で、C++/Javaどっちも
 { setter } ∪ { getter } ⊂ { メソッド }
であることは明らかだが、では
 Q1. { メソッド } - ( { setter } ∪ { getter } )には何か専用の名前は無いのか?、
というのが>>909の質問の主旨。

ついでに言うと
 Q2. { setter } や{ getter }というのは本当に確定した集合なのか?
と、
 Q3. 「操作」と言ったときそれは{ メソッド }を指すのか { メソッド } - ( { setter } ∪ { getter } ) を指すのかどっちなんじゃ、
とかも知りたい
2019/06/16(日) 22:04:40.86ID:fCIbdDP9
>>989
シグナルとスロット(Qt脳)
2019/06/16(日) 22:54:20.07ID:PFinGY+5
>>994
シグナルとスロットというのはGUI操作を処理する目的のブツなので、
実行時の時間コストがゼロコストに近いことを気体されているハズ、
よって { メソッド } - ( { setter } ∪ { getter } ) の全て(この中には実行時の時間コストが青天井のブツも含まれる)を
包含しはしないのではないか、

まあここまで書いてオモタが、 { setter } ∪ { getter } こそ実行時時間コスト0を期待されるから、
setterやgetterは次の定義で良いのではないかという気がしてきた…

- 属性を取得する目的の操作であり、かつ実行時時間コスト≒0の実装が今現在も保たれているのがgetter

- 属性を変更する目的の操作であり、かつ実行時時間コスト≒0の実装が今現在も保たれているのがsetter
2019/06/16(日) 22:56:35.57ID:PFinGY+5
後ろ2行訂正orz、
正:
- 属性を取得する目的で設けられた操作であり、かつ実行時時間コスト≒0の実装が今現在も保たれているのがgetter

- 属性を変更する目的で設けられた操作であり、かつ実行時時間コスト≒0の実装が今現在も保たれているのがsetter
2019/06/16(日) 23:24:38.97ID:PFinGY+5
補足すると、「属性を取得する目的」や「属性を変更する目的」というのは、
インターフェースをクラスの主要な機能とは独立に変更できることを暗に言っている

例えばクラスFooのsetBar()が真にsetterならば、
属性をsetterでセットするのをやめて(Foo::setBar()を廃止して)ファイルから
直接読み込むメソッドFoo::readFromFile()に置き換えても、
クラスの主要な機能Foo::mainFunc()は変更せずに済むハズ

getterについても同様
2019/06/16(日) 23:56:38.00ID:WOfC/Ugn
operator=がsetterでoperator()がgetterにならない?
2019/06/17(月) 00:00:50.16ID:x+yzwFNm
c++かどうかなんて関係ない、オレオレ分類しているだけだろ
2019/06/17(月) 00:01:28.14ID:7HzfXopw
ずれてるのを承知で書くけど、直接読み込むメソッドってやつも含め setter なんてない方がいいよ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 76日 1時間 44分 23秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況