TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
C++相談室 part144
Swiftアンチスレ part1
Rust Part6
mallocの後にfree不要と言うバカいるの?Part2
本当に必要ものは人工知能ではなくて検索エンジン
【node.js】サーバサイドjavascript 5【Nashorn】
プログラミングを勉強したいのだが
Boost総合スレ part10
C言語なら俺に聞け 154
スレ立てるまでもない質問はここで 148匹目

C++相談室 part142


1 :2019/04/01 〜 最終レス :2019/05/23
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

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

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

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.2ch.sc/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 :
すっぱい葡萄
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" があるが、これは「負け惜しみ」を意味する。

3 :
前スレの
やりたいことはこうかな
メンバ関数をバインドするときは&クラス名::関数名と変数を放り込むこと
https://wandbox.org/permlink/gDWEXupOcEbbhBzs

4 :
c言語でclassって使えるの?

5 :
>>4
変数名として使える。

6 :
柴山昌彦
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
(deleted an unsolicited ad)

7 :
>>4
オブジェクト指向の何たるかをきちんと理解していれば、概念として使えなくはない。
もっとも、C 言語に限った話ではないけど。

8 :
>>4
原則、C言語ではclassは使えない。
そもそも、CをOOPの概念に対応させようとして、
classの概念(classというキーワードも)を追加したところから
始まったのがC++。

9 :
vcでCString使えるよ

10 :
>>4
Win32API?
C++以前から(純粋OOPLな)smalltalk的な価値観をC言語に押し付けた結果。

11 :
はあ?

12 :
テンプレートをテンプレートクラスで特殊化したい場合ってどうするの?

13 :
>>12
普通にテンプレートにすればいい

14 :
次スレから>>2に登場人物を列挙してはどうでしょうか?

15 :
VS2019来てるじゃん
まともなメモリ使用量になってる奇跡だ

16 :
C++erはVS毛嫌いする人も多いけどVS2017あたりからC++対応もマジでかなり良くなってる

17 :
一番使えるIDEなのに毛嫌いする人はいないと思います。

18 :
標準ライブラリの実装がいい加減だから使いたくない

19 :
4/2を選んだのはエイプリルフールを避けたからかな。

20 :
>>16
そう言う輩はプログラマーではなく言語オタか、最新規格対応の入門書売って糧を得てる様な奴だけ。

21 :
最近はCMakeに優しいけど標準的なビルドシステムに優しくない
clのオプションが独特すぎる
Linuxで動かない
Windows上でのライブラリの取り回しが悪すぎる

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

22 :
VS2017以前よりもコンパイルが速くなっている気がする。
色々細かい不満は出てくるかもしれないが、完全に乗り換える価値は十分ある。
私はVS2017をアンインストールして退路を断った。

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

24 :
Qt VS toolsの対応待ち

25 :
QtはCMakeでよくない?

26 :
つか、プラットホームに依存しないような
プログラミングをかける奴なんてほとんどいないだろ

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

27 :
hppファイルに実装を書いてることがたまにあって、すごく違和感があるんですけどどういうメリットがあるんですかね?

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

などなど・・・

29 :
そもそもhppファイルは実装書くためのファイルじゃないの?
templateとかで、分割コンパイルできない場合の

30 :
もしかしてhppをhとcppの間の子みたいに思ってる?
Cのヘッダと区別するためにhppにしてる人がいるだけでただのヘッダ拡張子だぞ
VCだとヘッダはhになるけど

31 :
いや、そう言う流儀もあるよ

32 :
流儀なんか10年もしたらガラっとかわるから拡張子なんか好きにやれ
c++ではじめの頃の昔はたまにソースを .c++ で書いてるやつもいた

33 :
ファイルパスにプラス記号使うのは、文字コード自動判定でUTF-7と誤認されやすくなるからさけたほうがいいね。

34 :
前スレのenumから文字列についてこんなのあったよ
https://qiita.com/ta_dragon/items/1828ceb16bc8733526e1

35 :
>>28
無理やりテンプレート使ってビルドを腐らせる典型的アンチパターンじゃねーか。

36 :
>>28
配布出来るようなコードかけるの?
誰もお前さんのなんて欲しがらないだろ

37 :
.C ならC++ なんてのも黎明期にはあったのう

38 :
>>34
ほう、すごいね、そんな方法があったんだ。
これなら、enumの定義から自動的にunorderd_mapに登録して逆変換テーブルを作るとかもできるかもね。

39 :
なんで何でもライブラリでできるんだよ

40 :
.hは宣言だけ、.hppは実装ありって使い分けてたこともあったけどやめた
includeする方はそんなの知ったこっちゃないし、いちいちhかhppか判断させられるのが無駄だとわかった

41 :
>>40
>hppは実装あり
それは悪手なのでは?

42 :
別に全部入りって意味じゃないよ
テンプレートとかinlineとか、処理の実装も書いてますよーっていうこと

43 :
暗黙の了解でもそんなのないだろ
hppなら少なくともC言語ではないというくらいしかない

44 :
そもそもユーザーがincludeする部分は拡張子書いてないライブラリもある

45 :
だから意味ないからやめたって言ってるじゃん
意味ないし有害だよやめた方がいいよ

46 :
そもそも素人が書いたテンプレートを用いたものなんて使い物にならん

47 :
じゃあ玄人が書いたモンは形式だけで分かるのか?

48 :
実装隠しても公開しても同じだぞ

49 :
むしろプロの方がゴミみたいなコード書いてる人多いよね

50 :
>>47
boostみたいなのをかけるのか?

51 :
小規模なライブラリに6ヶ月かけていいなら書けるよ

52 :
boostで開発効率上がるとか信じてるバカが世の中にはまだいるのな。

53 :
boostのどれだよ

54 :
実際上がるだろ
ライブラリ使えばコーディング量減るのは当然

55 :
コーディング量を減らしたいならC++使うのやめるべき

56 :
速くてコンパクトなソフト作るのに最適だろ。
慣れてりゃ開発速度も同じようなのLLで作るのと大差ないし

57 :
言語によって作業量が増えるとか無いから
目的に合ったフレームワークがあるかどうかが重要

58 :
>>57
残念ながらあるんだよね

59 :
そっか

60 :
どうせお前らなんて、数十行程度の小さなもばっか書いて、あーでもないこーでもない言ってるだけだろ

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

61 :
そっかそっか

62 :
仕事してるより細かいとこ突き詰めてる方が楽しいんだ、ごめんね

63 :
>>60
ドワンゴで働いてるのか?

64 :
ドワンゴ今やばいしあの人も首が涼しくなってそう

65 :
ドワンゴでコード書いてて江添みたいなバカに
しょうもないアドバイスされたらそらキレるだろうな。

66 :
あの手の連中って小さなサンプルしか書いたことないんだろ
実際の数百万行あるようなプロジェクトなんかには
参加したことないんだろうな

67 :
弁理士みたいなもんだろ。
自分じゃモノ作らないけど複雑なルールに精通してて「それじゃ通らないよ」とアドバイスする。

68 :
数百万ってOSとかミドルウエアでも作ってるのか?

69 :
>>68
c++なんかでosなんか作れるかよ
遅すぎる

70 :
>>69
じゃあ何作ってるの?

71 :
>>70
ia32

72 :
>>67
作らないじゃなくて、作れないんだろ
標準ライブラリの使い方を示す小さなものは作れるけど、現実的に使用するアプリケーションはかけないんだろう

73 :
>>71
Intelの奴隷

74 :
>>72
で数百万行で何を参加して、そのうち何行書いたの?

75 :
>>74
自動機が約1000台あるCAMで40%は書いてるよ

76 :
>>75
じゃあこのスレで一番C++に詳しい人は君ね

77 :
どうせその数百万行のコードで意味があるのは数万行から十数万行とかだろ

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

78 :
>>72
弁理士の喩えで言えば、弁理士自身が発明できなくても別によくね?って話なんだが。

79 :
どうせ納期に追われて妥協に妥協を加えたやっつけのコードを○行書きましたwとか言われても自慢にもならん

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

81 :
ビャーネなんて、ロクなの作ってないよなw
数十行程度のものをあーでもないこーでもない言ってるだけだろ

82 :
せやなw
建築物の工法の研究者なんかろくに家も建てたこともない雑魚w
ネイルガンの一つも使えないくせに机上でああでもないこうでもないって言ってるだけw

83 :
>>80
>立法の経験が無いとダメ
つまり議員の経験が無いとだめってことか

84 :
STLの美しさは時代を超越してるし、オーパーツに認定してもいいのではないか。

85 :
直交性とか説明しても誰にも通じなかった

86 :
ラムダ式使えない馬鹿「今まで書いたソースの行数は?」
そんなの気にしねえwwws

87 :
なるほどラムダ式が嫌いな奴は書く行数が減ってコードの生産量()が減るのが嫌なんだな
ボイラープレートコードを書き殴ってれば仕事したフリができる人たちは気楽っすなあ

88 :
まあ実際クヌースなんかもtexプログラム作ってプログラムの大変さに気づいた
的なことは言っているしな。
偉い人でもその辺実際に作ってみると感覚が違うってのはあるんだろう

89 :
コンセプト来い。
コンセプトはよう来い。

90 :
>>68, >>77
こいつらみたいな世間知らずの根拠のない自信はどっから来てるんだろう

91 :
>>90
そもそも世間知らずほど自信にあふれがちではある
初心者ほど偉そうだったりもする

92 :
クソライブラリやクソ開発メソッドを持ち込む怪しいコンサルと一緒なんだよな。
それが押し通ることが結構あるから怖い世の中なんだが。

93 :
>>90
元号もろくに変えられない癖に何が自信だあほ

94 :
自分より劣る存在を想定してホルホルしててもお前の実力は上がらんよ

95 :
コードを書くしか能が無いというのでは
業界に名が通った有名人クラスにならない限り
コンサルに勝つのは難しい

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

97 :
>>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

98 :
そんなインタビュー集までチェックするのか普通とか言われてもなぁ

99 :
>>98
自分は知らないからソースくれとだけ言えばいいところを、想像で要らんことをいうから反論されるのでは?

100 :
>>99
根拠書いてあるんだから反論したいなら根拠に反論したら?

101 :
なるべく高級な言語でちっさいOS作ろうと思うんだがよい言語ないかな?

102 :
ハードウェアによるのでは

103 :
armかrisc vの64bit
32bitでもいいです
比較対象のためにc/c++でも作る予定

104 :
そもそも高級言語で小さいOS作れる言語ってC言語一択じゃね?

105 :
>>103
rust

106 :
rustでqemuでhelloworldして満足した(´・ω・`)

107 :
haskell

108 :
>>105
rustぐらいですかね?
全然違うパラダイムの言語で作れないもんかと
アセンブラとの相性考えたら結局cっぽい言語しか選択肢ないのかな

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

110 :
>>100
事実でもなんでもない勝手な想像を根拠とか言われても反論できんわ。

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

112 :
ソースがわからん…

113 :
ソース出せと言った人が、ソースが出てきたら、ソース出すのは反則と言い出したって流れかな。

114 :
どうやったらそんな頓珍漢な解釈ができるのか…

115 :
>>113
ソース出せと言った人が(>>96)、ソースが出てきたら(>>97)、ソースじゃなくて根拠(?)に反論しろと言い出した(>>98,>>100,>>111)って流れかな。

116 :
クソどうでもいい話にこだわるな

117 :
引っ込みつかなくなってるんだろww
話の内容変わってるし

118 :
>>109
ブラウザの仮想環境とは何?
osなのでcpuが見えてて欲しいのだけど
ひとまずqemuで始めるつもりです

119 :
ビャーネストロヴストルップ先生のプログラミング入門買ったんだけど、読破した人っている?

120 :
いないんじゃあないの
本当に読破したと言える人間は日本人で20人しかいないと聞いた

121 :
>>120
毎日30分読むことにした
C++は仕事で使ったことない

122 :
>>108
まずベアメタルに対応してる必要があることを考えると、選択肢はそうないのでは?

123 :
>>119
もはやそれは「国語辞典」読破した奴おる?ってのに近い。

124 :
ストラウストラップの『プログラミング入門』って
日本語版で1100ページもあるんか。

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

125 :
実は愛読書が辞書という人はそれなりに居たりするw
https://togetter.com/li/1119810

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

127 :
この界隈では「入門」といいながらどうみてもマニア向けの本が多いよね

128 :
自分が読んだ本は全て入門書扱いする人多いよね

129 :
上級者の評価が高い入門書ってのは本質や精神を理解し免許皆伝まで至るような道の第一歩であるものだもの
素人が何も理解しないままこうすればこうなるでおいしいとこだけいきなり得ようとするようなハウツー本とは違う

130 :
「本質」を語るやつは大抵アホ

131 :
結論のでないどうてもいい話題に食い付くやつはアホ

132 :
同価格帯のXeonとThreadripperではどっちの方がコンパイル速いか知ってる人いますか?

133 :
C++はF35にも使われている戦争の兵器
C++erを見たら悪魔の手先と思え!

134 :
それかCかC++のソースコードのコンパイルのベンチマークをCPU別で取っているサイトがあれば教えてほしいです

135 :
effective c++読めるくらいになればまあその先に薦める本や文献なんかは結構あるが、
そこまでにどういう本勧めればいいかは相当難しい。
とりあえずcからとか言いたいとこだがそれからeffective c++までの間に読む本としては何が良いのだろうか。

136 :
https://www.anandtech.com/bench/CPU/1858
こんなページがあるけど。
https://www.reddit.com/r/cpp/comments/6kncnu/compile_speed_or_recent_cpusryzen_surprisingly_bad/
マイクロソフトが悪い、すべてマイクロソフトのせいだという意見も出てるね。

137 :
タイムマシンって何言語で、書かれてるの?
やっぱりc++

138 :
Objective-Cだろjk

139 :
>>136
ありがとう最新のはこれだった
https://www.anandtech.com/bench/CPU-2019/2223

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

140 :
>>135
独習→acceleratedとプレC++11STL(ハーバードシルト)→テンプレート本、くらいを私は歩いてきました…

141 :
>>135
どの言語でも、言語を学ぶ順番は、
1. 入門書
2. Effective 何々
3. 逆引き・レシピ本
4. (必要なら) メタプログラミング

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

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

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

142 :
このご時世に本読んでプログラミング勉強するってあほだろ

143 :
1周回ってきて本になるんだよなあ

144 :
Effective系以上は本でもいいと思う

145 :
少なくともeffective系統読んでもわけわからんレベルの人はまずはしっかりした本を読むべきと思う。
しかしc++は勧めたい本がない。。「独習c++」かな。。いいとは言いずらいがしかしほかに勧めたい本もない。

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

147 :
外人が書いた「Effective 何々」には、良い本が多い

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

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

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

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

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

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

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

148 :
ネットで学ぶのがアホってドワンゴ社員のあいつの主張繰り返すのかよ
誰が仕様書読むんだあほ

149 :
日本語でおk

150 :
>>141,147
消えろ

151 :
>>146
例の医療関係のページビュー稼ぎ対策の影響で個人が細々とやってる良質なサイトが引っ掛かりにくくなってる
って新聞に書いてあったな

152 :
具体的にC++でいいサイトはどこ

153 :
cpprefjp

154 :
>>146
お前のいうネットってqiitaとかだろ?
だからダメなんだよお前はw

155 :
cpprefjp一択。

156 :
リファレンスだけ並べたクソサイトじゃねーかw

157 :
この手のランキングは本当に十人十色だな。
人気言語ランキングC++3位
https://www.tiobe.com/tiobe-index/

158 :
リファレンスがあれば十分だわ
応用は頭使え

159 :
話にならん。。

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

160 :
cpprefjpは仕様の成り立ちから使用例まで載ってる

161 :
cppreference.comの方が好き

162 :
cpprefjpは左の文字が小さすぎるのをなんとかしてほしい

163 :
Ctrl+ホイールで画面拡大縮小

164 :
それはおかしい

165 :
>>145
独習の後は同じくハーバートシルトの stl 本(ただしC++11じゃない) でしょうけれども…

166 :
【小説】ストリームの悪魔

167 :
>>157
でも、C++17だと圏外かも。

168 :
C++の人気はだいたいWindowsと同期してて、XPで盛り上がり、その後下降して、Windows10発売後ちょっと盛り上がり、その後下降し始め、WSLでまたちょっと盛り上がり、みたいな感じで上下する。

169 :
>>165
ビャーネストロヴストルップのプログラミング入門はどうですか?

170 :
>>165
◆QZaw55cn4c さんはプログラマーですか?

171 :
STLを解説した本として最も優れてるのどれ?

172 :
解説するほどのものか?

173 :
cpprefjpかcppreference.com眺めるのが一番いいのでは

174 :
>>171
C++標準テンプレートライブラリがおすすめ

175 :
https://cppmap.github.io/
個人的にはこっちもおすすめ

176 :
C++ coding standards が、入門書と effective C++の間という感じで良かったのですが、今新品で買いやすい和書の中で同じくらい良い本ありますか

177 :
>>173
それでコードを書けるようになるとは全く思わん。

178 :
「ロベールのC++入門講座」を勧める

179 :
コード書くために勉強したことが無い人間とコード書くために勉強した人間に分かれるな

180 :
RPGのバトルシステムがいつまでたっても出来ない
どうなってんだコレ

181 :
>>180
ドラクエの技術を解説した本を買えば

182 :
そこでレポート プログラム ジェネレータを思い出さないと
文句はユニシスに言っとくれ

183 :
RPGなつかしいなw
知人でそれの専門で仕事やってるやついたが
今ごろどうしているだろうか・・

184 :
>>180
自分が具体的に何を作るのか見えていないとか、自分が何が分からないかがわかっていないとか。

185 :
std::rpgの登場が待たれる

186 :
>>179
どういう分類か興味がありますね…

187 :
これもSFINAE???

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

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

188 :
SFINAEを理解してないな?
templateでわざと失敗させるんだぞ

189 :
それは関数のオーバーロード(オーバーロード関数)
SFINAEはテンプレートに関わる話

190 :
SFINAE ていう単語みるたびになぜか
ソフバンの白犬が低い声で「スフィ姉ーーー」て言ってる映像が頭にうかぶ

191 :
>>188
最初のplusで失敗して、次のオーバーロードを探しに行ってんじゃん。
もし最初でコンパイルエラーなら、このプログラムはコンパイルされないが、SFINAEのおかげでコンパイルエラーが出ない

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

193 :
せやな
なぜそこでロベール!?とか思ったけど、なんか納得した

194 :
rvalue・lvalueの見分け方について、=の左に書けないならrvalueって考えで良いですかね?

195 :
>>194 確かダメじゃないかな。
C の例でアレだけど、配列名 int a[5]; の a は
左辺値だけど代入の左辺に置けない、
「代入不可能な左辺値」というカテゴリになる。

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

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

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

197 :
てかリファレンスだけ必要な奴はここにそういうことを聞きには来ないだろ。
なんかその辺の感覚がすでにずれてるように思うが。

198 :
>>195
「代入できない」って視点で言えば194で合ってるんでは?
確かに a[0] =5 なんかはできるけど、 a = b みたいにポインタそのものは代入できないわけだし。

199 :
>>196
右結合なんだから b は左辺値、 b = 1 が右辺値でいいんでは?

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

201 :
>>200
C++の部分はネイティブなのでOSに依存する

202 :
スマン。CPU毎にバイナリは必要で、
clangに -macrh=xxx-xxx-xxx オプションを指定して CPUやOSを
指定してコンパイルしておくことを想定していた。
ただし、複数のCPU/OS向けのバイナリを1つのAPKにパッケージして、
使用時に自動選択する事が出来るらしい。

203 :
わざわざjavaを使わなきゃいけないのが気にくわない
その場合、javaだけで書くこと以上のメリットある?

204 :
速度が速い。

205 :
てかそれってjavaのアプリ作っているだけじゃ

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

207 :
>>205
基本的な描画系と入力系をライブラリ化しておけば、メインロジック部分は
C++で書けると思うよ。

208 :
さっき、AdoptOpenJDK なるものをインストールしてみたら、
java と javac コマンドが起動することを確認した。
多分このJDKは、Oracle フリーで無料でクローズド商用利用できると思う。

209 :
jniはjavaのプラットフォームにc++での開発成果物を持ち込むためのもので、そうでないならわざわざそんなもの使う意味は薄い

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

210 :
>>208
でもいつ訴えられるかわからないから怖いですう。

211 :
そもそも、Androidアプリにとってのシステムコール(API)とは、Javaの関数だと
思うので、この構造自体は Android における「最も高速なアプリ」になっている
と思う。

212 :
>>210
一般アプリ作者は大丈夫だと思うな。一番危ないのは、オイラみたいに、
ToolKit作って儲けようなんて思ってる人なのさ。(^_^;)

213 :
>>209
それらはサイズが大きい。

214 :
糞デカイ上に更新面倒なjavaのruntime入れさせるほうが害悪だろ

flashより糞度が高い

215 :
AndroidはJREはプリインストール済みなんじゃないの?
オイラは実機持ってないので全く分からないんだな。

216 :
androidで実質c++でのアプリ開発する仕組みなら既にある
jniそのまま使うよりは大分マシ

217 :
>>216
どうやるの?

218 :
何でグラフィックをわざわざJavaに?


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

219 :
Qt は、内部的に Backend で Java を使ってるのかな。

220 :
なんかJavaを間違って理解してるっぽい。

221 :
>>219
もういい加減スレ違いだから消えてくれ

222 :
vector に格納されてる値から添え字の番号を取得するための最も手軽な方法はなんでしょうか

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

223 :
格納してる値にインデックスの手がかりがないんだったら
findで探して結果のイテレータから取得するしかないな

224 :
>>222
findしてdistance

225 :
>>223-224
ありがとうございます
格納する値の範囲もサイズも小さいvectorなので、今回は辞書を作って対応しようと思います

226 :
>>225
そんな単純な検索なら3行くらいなんだから作ればいいのに

227 :
奇遇なことに辞書も三行くらいです

228 :
そら奇遇ですな。

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

230 :
もうJavaのことは忘れて生きろ

231 :
JavaとC++に共通インターフェースを作るのは反対。
車輪の再発明にしかならない。自由を奪うだけの愚策。

232 :
>>231
強要するのではなく、オプション(選択肢)として提供するのはどうでしょうか?

233 :
>>232
共通ライブラリを使う側にとってはオプションであることは当然。
共通ライブラリを作る側の話をすべき。共通ライブラリの規格決定権者が増えすぎること自体が好ましくない。
これはEU諸国がトルコがEU参加することを拒否する感覚に近い。

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

235 :
まだC++98しか知らないと、取り残されますか。

236 :
まずは、Javaと瓜二つな C#、.NET、C++/CLIが今どうなっているか考えてみては。

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

238 :
>>237
もう時代はすっかり html/css/js ですね…
VSCode も Electron ですし…

239 :
質問を変えてみよう。
C++11やC++14のコードは、職場で取り入れられてますか。

240 :
>>239
ガンガン取りいれてるよ。

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

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

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

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

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

241 :
>>240
>char16_t/char32_tも結構ありがたい

確かに
char16_t と u"" がなければ win32api W 系とか途方に暮れていたとおもいます… https://mevius.2ch.sc/test/read.cgi/tech/1434079972/53

242 :
ガンガン最新を追うべきとまでは思わないけど、
C++11 は最低限度じゃないかなぁ。

243 :
17便利すぎ
variant,visit,lambda,if constexpr
のコンボで捗る

244 :
つーか今はもうC++11の機能は使わずにC++で書け!といわれても
やりきる自信がなくなった・・

245 :
古い環境だと最近のサンプルがビルドできなくて困る

246 :
c++11とか名乗るから誤解されるんだよ。
c++++とかのがイメージ的に正しい。

247 :
C#ってことか。

248 :
repeat文って入らないの?

249 :
>>248
どんな機能?

250 :
>>249
repeat(int i; n) で for(int i; i<n; i++) と同じ意味な機能

251 :
>>250
そんなどうでも良いもののために予約語追加する意味って
その文法じゃ初期値すら変えられない

252 :
初期値はi=0とかすればいいのか
でもそうなるとi=1にした場合何回ループするのか混乱しそう

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

254 :
>>253
Java の人も C# の人も c++ の人も python も ruby も一緒の名前で一緒の機能が使えたら,コストの中でも一番高くつく勉強コストを減らせるのではないでしょうか

255 :
>>251
Linuxのカーネルにrepeatマクロ大量にあるもん

256 :
>>255
ならマクロでいいじゃねぇか。

257 :
こんなので十分だろ
https://ideone.com/I6e8NZ

258 :
>>254
wxでもQtでもメジャー言語のbinding位あるだろ

259 :
>>254
うん。
それはまさにそうで、だからQt,Gtk,wxあたりのメジャー所は色んな言語にラッパーがある。

260 :
webプログラマーなんですが、右辺値、fowardっていつ使うのか気になります
というかなんでそこまで、厳密に分ける必要があるのか 
業務で使ってる方、使用例を教えてください

261 :
右辺値というかムーブ関数の定義といらなくなるオブジェクトにstd::move付けとくのは絶対損にはならないからとりあえずやっとく
forwardはテンプレートライブラリ作るなら必須だけど自分では使ったことないなあ

262 :
コピーにコストがかかる場合は、std::swapやstd::moveのが早い場合があるからね。ムーヴはコピーじゃなくて引っ越しだから。

263 :
まあ理論上はね。。そういう実装になってるかどうかはコード見ないとわからんけどね。

264 :
基本的には高速化が目的でmove使わなくてもなんとかなるが、
所有権絡むとmoveは必須になる

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

265 :
ちょっと実際にやってみようか。コピーコンストラクタで十秒待つコードを書く。ムーヴコンストラクタとムーヴ代入でなにもしない。
この状態でstd::moveを使わないで代入すると十秒かかる。

266 :
訂正。「コピー代入で十秒待つコードを追加」

267 :
>>264
>所有権絡むとmoveは必須
必須とまでは言えない
 T::T(const T& obj)
という通常のコピコンを定義して、コピコンの中でconst剥がししたら
とりあえず所有権の移動もmove無しでRる

268 :
>>260
高速化のために出来るのは、アルゴリズムのレベルでの工夫を別にすれば、出来ることはショートカットだ。
高速化とは近道なんだよ。

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

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

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

269 :
とわいえmoveコンストラクタの方が意図が明確なコードが書けるから良い。
moveコンストラクタがふさわしい例っていやーつぎごケース。
class BarWithBigData {
  Foo* m_pBigData;
  BarWithBigData() : m_pBigData(new Foo[1000000000000] { }
  ~BarWithBigData() { delete[] m_pBigData; }
  BarWithBigData(BarWithBigData&& rhs) { m_pBigData = rhs.m_pBigData; rhs.m_pBigData = NULL; }
  Foo* refBigData() { return m_pBigData; }
};

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

270 :
訂正orz、

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

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

271 :
コピコンの中でconst剥がしってちょっと何言ってるか分からない

272 :
十秒待つ待つコードはWindowsなら#include <windows.h>してSleep(10*1000);であり、
Linuxなら#include <unistd.h>してsleep(10);だ。
C++11ならstd::chronoに待つ関数があったはず。

273 :
const_castだろ。jk

274 :
>>271 「move無しで(未定義動作に)Rる」ってことでしょ。

275 :
>>271
こうじゃわ;
BarWithBigData::BarWithBigData(const BarWithBigData& rhs) { m_pBigData = rhs.m_pBigData; const_cast<BarWithBigData&>(rhs).m_pBigData = NULL; }

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

276 :
まあ実際にはそんなムーブをゴリゴリ書くことはなくて
m_pBigDataをunique_ptr<array<Foo, 1000000000000>>にしてムーブctor、ムーブop=、デストラクタを=defaultにするけどな

277 :
auto_ptrよりヤバイ奴
const_castでconst外した後実際に書き換えてしまうとかw

278 :
>>277
ちなconst T&で渡されたブツを関数内でconst_castして書き換えることはそれ自体は合法
ROM上のオブジェクトを渡して死ぬことは有り得るがしたら呼び出し側の違反
また最適化にしくるとしたらそれはコンパイラーのバグ

279 :
>>278
ROM上になくても const T 型で構築されたオブジェクトを書き換えたら未定義動作になるから、
値が変わらない前提の最適化は許されてるよ。

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

280 :
質問: c🐴++のrust相対の優位性はなんですか?

281 :
>>280
正しくないコードをコンパイル出来る。
C++ はプログラマを信頼するのだ。

282 :
>>278
未定義じゃないか
c++03 5.2.11の7にはこんなことが書いてある
[Note: Depending on the type of the object, a write operation through the pointer, lvalue or pointer to data
member resulting from a const_cast that casts away a const-qualifier68) may produce undefined behav-
ior (7.1.5.1). ]

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

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

284 :
>>283
関数内では const& であることを根拠に最適化に使えないのは合ってる。
でもだからといって const& で受け取ったものを書き換えてもよいとは言えない。

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

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

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

285 :
規格が云々言わなくても、9割のプログラマの意図に反してるで終わる話
頼むからそんなコードは頭の中にしまっといてほしい

286 :
つまりはそれ自体は問題ないが、constとして生成したオブジェクトを渡した瞬間にダメになると言うことか
で、渡すこと自体は制限できないから
プログラム中に罠を仕掛ける事が出来るわけだ。

287 :
てか、mutable付けとけば問題なくなるな。

288 :
const_castも要らないし良いことずくめじゃないかw

289 :
>>285
わかりたそうする。>>275のケースは素直にムーブコンストラクタを使えば良い。または↓でもだいたいおk
BarWithBigData::BarWithBigData(BarWithBigData& rhs) { m_pBigData = rhs.m_pBigData; rhs.m_pBigData = NULL; }

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

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

290 :
>>289
その x の型は const じゃないから return x は最適化できないよ。

291 :
>>281
わからないです。それはメリット?

292 :
ラムダに11個の引数を参照で渡すのと、キャプチャするの、どっちが速いかな?

293 :
測ればいいだろ

294 :
>>291
メリットのときもデメリットのときもあるだろう。

295 :
参照渡しな時点でその場で呼び出すのだろ。
最適化かければ結局同じようなアセンブリになるよ。

296 :
それはわからんだろ
ブロック待ちするかもしれないわけで

297 :
引数で渡すとスタックに積まれる可能性があるけど、キャプチャするとそうならないのでは。

298 :
いや、形式上は無名クラスにキャプチャを変数としてぶちこんだもののインスタンス作ってメンバ関数のoperator()呼ぶのだから、スタックは使うだろ。

299 :
C言語じゃダメなんですか!

300 :
いいよ

301 :
無駄に複雑にしとるな。

302 :
>>298
じゃあ、引数で渡すとスタックに積まれない可能性があるので、速い場合もあるのでは?

303 :
海外だと、Javaに負けて、Rustに圧倒的実力で追いやられるC++

304 :
>>303
https://insights.stackoverflow.com/survey/2019#technology-_-what-languages-are-associated-with-the-highest-salaries-worldwide

305 :
本当に、コンパイル時に何かしたいならRustだけどね

306 :
>>304
Java圧倒的な強さだな。

307 :
全部足すと500%位になりそうだから、複数の言語を使う人が多いんだろね。

308 :
江添が転職できずに困っとるw
まあこいつがクソなだけでc++の問題ってわけじゃないんだがイメージは悪いわな。

309 :
こうしてみるとホッシーの全タクシー移動ってのは理に適ってるな
バカな公害に捕まる心配が減る

310 :
なんか私怨でもあるんかいな

311 :
喫煙者が目に入った途端癇癪起こして殴り掛りかかる狂犬なんだっけ?

312 :
知らね
よく人を招いているようだし揉めたことがある人も少なくはないんじゃいか

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

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

314 :
恨みというかまともにコード書かない奴がクソ意見で現場荒らすって事自体がクソだと思うわけで、
まあその反動で現場で働くことができないって事になればザマァって思う。

315 :
現場を荒らしてる?

316 :
どのプロジェクトにも参加してないと認識してたけど乗り込んでケチつけてたりするのかな
まあ俺ドワンゴとは縁が無いからどこで何してようが関係ないけど

317 :
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の存在感が
強くなってきている。

318 :
>>317
何回だからみんな何回もググってるんだよ

319 :
俺が検索しまくったからだろうな。

320 :
今もしインターネットが完全にシャットダウンされると
プログラム書けなくなるプログラマけっこう数いるだろうな

321 :
>>320
cpprefjp はとりあえず手元にダウンロードしてあるけど。

322 :
どうやってダウンロードしたの?
巡集じゃできなかった…

323 :
githubじゃない?

324 :
そうなんだ、ありがとう

325 :
どういたしまして。

326 :
江添は職質裁判でも、不当判決が出たので控訴するみたい

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

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

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

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

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

327 :
ありゃ普通に対応してりゃ済む話だと思うがね。

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

328 :
>>326
Rubyバカの人か。相変わらず思い込みが激しく、言っていることが滅茶苦茶だな。

329 :
どんだけ江添好きなの?w

330 :
日本でC++真剣にやってるのって彼だけだし

331 :
だけ、というのは言い過ぎだと思うが、
日本語で最新の C++ の事情を本にしているのは江添くらいしかいないからなぁ。

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

332 :
つまり他の日本人は竹刀とか木刀ってことか。

333 :
江添個人の裁判は完全にスレチなんだよなあ
仮に違法な取り締まりだと判断されても警察のやり方が改まるわけもないだろうし

334 :
江添すなわちC++なのだから
江添の話題は全てC++の話題だょ

335 :
宗教の話はよそでやってくれないか

336 :
もう少しc++の話をしてくれと思う事もある

337 :
はちみつさんも真剣にやってると思います。

338 :
こんな事言うと勘違いされそうだが、はちみつ餃子はちゃんとしてると思うよ
C++に関しておかしなことは言っていない
ていうか、はちみつ餃子ってものすごい不味そうなんだがそんなの本当にあるのだろうか・・?

339 :
肉料理にはちみつを入れること自体はわりと普通
量の問題

340 :
いや明らかに開発してねーだろって感覚じゃねーか。
まあここならそれでもいいんだろうけれど。

341 :
>>338
ググればわかるけどはちみつ餃子はそこそこありふれた料理だよ。

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

342 :
initializer_listを引数に取るオブジェクトを引数に取る関数で
下記のケースでUniversal Initializationが効かないのですが
何かいい手はないでしょうか

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

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

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

343 :
エピ…いや何でもない

344 :
すみません、訂正です
× void f(const KVPCollectionType&& kvps = {});
○ void f(const KVPCollectionType& kvps = {});

345 :
アークエンジェルに搭載されてるstd::variant<>。

346 :
wandboxで試したらclangでもgccでもc++11 -pedanticで通ったけど?

347 :
ごめんなさい、ごめんなさい。本当にごめんなさい。
勝手に脳内で要約したのが間違えまくってました

正確には以下の通りです。
#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 :
全てのバグを絶滅せよ。
「今日は死に日和」好評発売中。

349 :
C++11や14を使ってる人、コンパイラは何ですか。

350 :
ゲームエンジン作ってる人いますか

351 :
clとgcc。

352 :
c+11以降はバージョン違うと全く別のコンパイラ

353 :
Twitchでプログラミングしてるやつの中でゲームエンジンも居たような

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

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

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

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

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

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

355 :
>>347 >>354
呼出す側で

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

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

356 :
>>347
ちゃんと考えたら >>354 はいらんことしとるな……
これで充分か

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

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

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

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

357 :
>>354-356
ありがとうございます、その手を使わせていただきます
状況によって推定ルールが変わるのはやめて欲しいなってちょっと思ったんですけど。

358 :
メンバアクセスにthis->つける?

359 :
エディタの補完機能使いたいときにたまにそうやって補完して最後に消す。
が、たまに忘れる。

360 :
IDEの都合で付ける事が良くある
付けないと補完候補多すぎて

361 :
ああなるほど
補完候補を絞るのには便利ですね

362 :
メンバであるという保証ができるので付ける

363 :
メンバ名は頭にm_付けろみたいなクソルールよりずっといいと思うので付けるべき

364 :
仮引数と別の名前つけるのだるいからm_は別に良いと思う

365 :
メンバ変数に専用の色付けたらいいじゃん

366 :
引数そのままメンバに入れるなら引数に_つけてvar(_var)って初期化してるわ

367 :
>>366
それって var(var) でも問題ないんですよ…

368 :
バーバー

369 :
>>367
綴り間違えたら悲惨なことになった

370 :
ハンガリアン記法は、入力補完のないエディタ上での可読性を高めるのに役立ってるでしょ。今でも。

371 :
ゴミ使ってる奴のことなんか知らん

372 :
あれ可読性落ちるだろ

373 :
定期的にunsignedとsigned混在させてハマるアホをみるとハンガリアン必要だと思うわ

374 :
C#で入力補完のないエディタがどうとかさすがにナンセンスでは
だってvisual studio使うじゃん

375 :
どっちでもいいわ。
大抵の場合そんなとこに気を使わんといかんコードになってることのが問題。

376 :
>>375
こういうやつがそのうちハマって丸1日つぶしたりするんだよなw

377 :
>>373
関係なくて草

378 :
関係あることわかってなくて草

379 :
黙ってろゴミw

380 :
>>376
だから人を嵌めるようなコード書くなつってんだよばか。

381 :
>>380
コードの問題じゃなくて言語仕様の問題だから
こういうえらそうなくせに何もわかってないカスが一番始末に困る

382 :
いつの間にかハンガリアンが言語仕様になってた。。

383 :
ハンガリアンも防御的なプログラミングと考えたら悪くないよ
成り立ち調べてみな
でも基本型とポインタだけだな
クラスには無用だと思う

384 :
てめーらはまともなIDEかエディタ使ってねえのかよ

385 :
むしろVSがないと何も書けない

386 :
VSがあっても何も書けない。

387 :
c++みたいに型情報ありがデフォルトの言語でハンガリアンとか二重メンテもいいとこだわ。

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

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

---

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

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

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

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

390 :
>>389
解説ありがとう

391 :
うーんC++プライマー8500円かぁ。本家のプログラミング言語C++第4版はもっとするし
情報量からすると安いが本一冊にポンと出すにはお高い……日本語である程度網羅的な本となるとこの2冊くらいよね

392 :
set<double> って int のときと同様にちゃんとソートされるんですか?

393 :
NaNが無ければ大丈夫NaNじゃね

394 :
NaNが無ければ大丈夫NaNじゃね

395 :
のちに永久保存される平成最後のスベり

396 :
たしかにそうだな・・いよいよ平成最後なんだな
みなさん、>>393-394 みたいな事にならないよう、気をひきしめましょう

397 :
平成最後っていう言い回し使われすぎて嫌いになってきた

398 :
イテレータの参照を次に移すときってなんでitr++ではなく++itrなの?

399 :
ヤフーでぐぐれ

400 :
素直な実装だとitr++より++itrのほうが速いんじゃないかなあ、となんとなくみんなが思っているから

401 :
速度に差が出るのか
知らなかった

402 :
インクリメント後のイテレーターの値を返す処理の実装を考えると
先の場合はインクリメントしてそのまま渡せばいいけど
後の場合はインクリメント前の値を保存しといてそれを渡さないといけないので一手間かかるから
・・なんだけど諸々の最適化とか色んな条件とか考えたらそこまで差がでるかどうかはよくわからん

403 :
it++だと、戻り値をコピーしてとっておいてから、ポインタなりを進めた後にreturnする必要があるが、
++itだと、ポインタを進めた後に参照を返すだけでするからな。

404 :
被ったw

405 :
>>398
ite++と++iteなんて気持ちの問題
てか範囲for文使えばいい

406 :
>>402-405
cppcheck にかけたらちゃんと警告出るね。

407 :
どうせ戻り値捨てるんだったら++itを選んでおいて損はない
無駄にit++を使うのは時期尚早な最不適化って奴だ

408 :
C++で書くんだから後置インクリメントの方がメインに決まってんじゃん
前置は異端だ

409 :
殺せ

410 :
++C

411 :
C++でいいんだよ。
規格は一歩進むけど、使ってるやつはbetter Cばかりってな

412 :
++C++まだかよ

413 :
>>411
vectorとかstringとか使わんの?

414 :
CArrayとCStringだぞ
コピコンは定義されてないから自分で作るぞ

415 :
CArrayは、<algorithm>ヘッダーで定義された信頼性の高いユーティリティ関数を使えないのがね・・・。

416 :
>>413
この思考がbetter C

417 :
>>416
わけわからん

418 :
俺がBest Cだ

419 :
>>415
イテレータをうまいこと定義すれば使えるやつも結構あるんじゃね?
そうでもない?

420 :
inconsistent begin/end types in range-based ‘for’ statement

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

421 :
>>415
GetData()とGetData()+GetSize()を渡せば、とりあえず動くんじゃね?

422 :
>>420 比較演算子定義されてないとか?

423 :
>>422
int _n = 0;
auto __begin = _container.begin();
auto __end = _container.end();
for (; __begin != __end; ++__begin) {
_n = *__begin;
}
比較演算子はちゃんと定義してるし
上のコードは何故かコンパイル通る
だけど
for (const auto _n : _container) {
//hoge
}

は何故か通らない

424 :
範囲for文のconst autoをconst auto&かauto&&に変えるとどうなる?

425 :
>>424
auto&&にした時のみエラーが増えます
cannot bind rvalue reference of type ‘const long unsigned int&&’ to lvalue of type

426 :
beginとendのシグニチャは?

427 :
>>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 :
これで動かん?
for (auto&& _n : _container) {
}

429 :
>>428
動かないです

430 :
MYIteratorの実体がunsigned longみたいだけど
vector<int>::iteratorの実体がポインタだったらoperator!=の定義できなくない?

431 :
>>420
wandboxで再現コード作って出直すか、それができないんならエスパーに頼んだほうがいいんじゃないかな。
https://mevius.2ch.sc/test/read.cgi/tech/1187922645/

432 :
>>423
bool operator != (〜) const ← これ付け忘れてないか?

433 :
constつけ忘れは時々はまる

434 :
>>427
自己解決
const iteratorとconst_iteratorが一緒だと勘違いしていた
const my_iteratorではなくmy_const_iteratorを実装して返り値とすべきでした

435 :
struct A{
int member;
};
struct B: A{
void run(){member = 0;}//ok
};

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

436 :
仕様
一寸前までのmsvcではなぜか通っていたけど

437 :
>>436
なんでそんな仕様になってるんだろう…

438 :
>>437
2phase lookupだから
最初のTB解釈時にはTAが型引数一つのtemplate classであるという情報以外使わない
だいたいTAが特殊化される可能性があるだろ

439 :
8bitや16bitのintしか使えない環境で、
32bitなどの大きな数を扱うにはどうすれば良いですか?
変数をいくつかつなげて大きな数を表現できないかと思っているのですが、やり方が分りません。
ご存知の方いらっしゃいましたら教えて頂けると嬉しいです。

440 :
補足させて下さい。
足し算、引き算は出来るようにしたいです。
可能でしたら、掛け算や割り算もできると助かります。

441 :
多倍長演算で検索

442 :
>>438
> だいたいTAが特殊化される可能性があるだろ
なるほどそりゃそうか、サンクス

443 :
>>439-440
https://mevius.2ch.sc/test/read.cgi/tech/1434079972/51
近々、委譲をやめて継承に戻すつもりです
あと掛け算はkaratsubaを適用できる目処がたちました
x64 に特化してインラインアセンブラ化することも考えています

444 :
karatsuba はかなり桁数が多いときじゃないと効果がないとも聞くけど

445 :
>>444
多分それは乗算FFTのことかと

446 :
>>439
stdint.h で int_least32_t とか使えるのでは?

447 :
>>446
8bit/16bit CPU で int_least32_t とかはそもそも存在しないのでは?

448 :
>>447
「8bitや16bitのintしか使えない」を見て long や long long はもっと大きいんじゃないの?と思ったんだよ。
「整数型」の意味で"int"って書いてたんなら、確かに存在しない環境のことを言ってるのかもしれない。
その場合は ISO C/C++ の LONG_MAX の最低絶対値の要求に準拠できないってことになるんだけど。

449 :
8bit pic用XCでもlongは32bitなのに

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

451 :
shortは16bit固定でlongは32bit固定でしょ。何言ってんの?

452 :
>>451
いや、お前こそ何を言ってるんだ?

453 :
>>451
残念でした、short も long もインプリメンターが好きに実装していいのですっ!きりっ!

454 :
>>451
64-bit Linux でsizeof(long) が8だった。移植がある場合は<cstdint>使わんとあかん

455 :
intが16bitならISOの規格は満たしてることになるかな。

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

456 :
>>451
うろ覚えだが
VC Win32bit: int 32bit long 32bit pointer 32bit
gcc Linux32bit: int 32bit long 32bit pointer 32bit -ここまでは同じ

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

457 :
既にLP64とかLLP64とかの呼び方が存在するんだから、そっちを使おうよ
https://ja.wikipedia.org/wiki/64%E3%83%93%E3%83%83%E3%83%88#64%E3%83%93%E3%83%83%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF%E3%83%A2%E3%83%87%E3%83%AB

458 :
厳密なbit長が必要なときにintだのlongだの使っちゃ駄目よ

459 :
じゃあ何を使えばいいの?

460 :
int_leastシリーズでは?

461 :
intの配列のラッパーのようなものから再発明すりゃーいい

class Bignumber{
int number[4];

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

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

};

462 :
>>459
int64_t とか int32_t とか cstdint の面々を使うしかないでしょうね…私もデフォでそうするようになりました

463 :
あ…ありのまま 今 起こった事を話すぜ。
平成の終わりにいろんな奴からshort/longに対する認識の誤りを指摘される恥辱を味わった。
何言ってるかわからねーと思うが(以下略

464 :
なんかもうビットという表現すら無くそうとしてるんじゃなかった?

465 :
制限された環境で使える多倍長整数のライブラリくらいいくらでもありそうだけど

466 :
>>462
なるほど、cstdint ですか!
教えてくださりありがとうございます

467 :
ビット数を付けるのは、MISRA-C で決まっているだろ

int8, 16, 32
uint8, 16, 32

468 :
C++の規格上はintは16 bit以上(ターゲットのアーキテクチャで一番自然なサイズ
、longは32 bit以上
だったと思った

469 :
class ClassA
class ClassB: public ClassA
class ClassA::ClassC

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

470 :
>>469
>class ClassA::ClassC
この意味はなんですか?

471 :
基底クラス
スーパークラス
親クラス
ベースクラス

472 :
細かいことを言えば、規格準拠の処理系でも
int32_t (ピッタリ32bit) が定義されるとは限らないのね。
int_fast32_t, int_least32_t なら定義される。

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

473 :
>>470
クラス内で定義したクラスです

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

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

474 :
「プログラミング言語C++」だと、入れ子クラス(nested class)とか
メンバクラス(member class)とか呼んでるみたい。

475 :
おお、なるほど
ありがとうございます

476 :
内部クラス(inner class)もよく聞くけど調べたらJava用語っぽいな

477 :
Inner Class、Java用語なのか。そう呼んじゃってたわ

478 :
今よみがえる構造体ネストの悪夢

479 :
>>473-474
nested class は仕様にあるので、
これが公式な用語と思って良いみたいだね。

480 :
以前、「完全さを求めるあまり今存在する良い物を犠牲にしてはならない」という趣旨のことわざをBBCハードトークで仄聞したのだが、原典はなんだろうか?

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

482 :
>>479
ありがとう

483 :
>>480 https://en.wikipedia.org/wiki/Perfect_is_the_enemy_of_good

484 :
ストリームの遅さは凄い凄すぎる。
ほとんどの場合、遅くても問題ないということはわかる。
でもあそこ迄遅くする必要があったのだろうか。

485 :
突然何?

486 :
3.5  ストリーム
ttps://sicp.iijlab.net/fulltext/x350.html

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

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

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

488 :
多言語対応するためにはC#みたいに %1, %2みたいに引数を番号で指定できる書式じゃないとダメでしょ。

489 :
ストリームの精神はrangeに受け継がれて生き残るよ
だから書式はそろそろ負けを認めよう

490 :
どうしてprintf使わないの?

491 :
オーバーロードできないから

492 :
<<には<<なりの良さがあると思うので、ストリームというより、stringがoperator <<をサポートすれば良いと思う。

493 :
文字列操作するためのインターフェイスとしては最悪だよ。
考えた奴は自分では絶対使わないで人に使わせるだけのタイプだろうな。

494 :
そもそもだけど、なんで文字って表示されるのに
<< とか %s とかこういうのが必要なの?
どの言語でもprint(a);だけで表示させればよくない?aが文字列でも整数でも小数でもさ。
引数で判断してくれよ。

495 :
>>493
え、そう?
文字列を連結する時に、+=と+を使い分けるより<<だけですむ方が楽だし、連結する順番も自明だし結構良くない?
std::string str;
str << "hoge" << 123 << ".txt";
みたいな。

496 :
>>492
それは私も考えていました、cerr に都度吐いているメッセージを、もう一度プログラムの最後にまとめて吐きなおす、とかをやってみたいんです…

497 :
>>495
そのやり方は引数の順序を変えられないから語順が違う言語間での翻訳で困る

498 :
コンストラクタの引数に出力先stringインスタンスを渡すostream派生クラスを作ればいいじゃない。
string str;
hogestream sstr(str);
sstr << "hoge" << 128;

499 :
別にstringstreamで良いじゃない

500 :
別にstringstreamで良いじゃない

501 :
iostreamの<<はC++の黒歴史の一つだね

502 :
stream の機能はいらんからとにかく文字列に差し込むだけ出来ればいいってのなら
単に operator<< を定義すれば出来るけど……。

https://wandbox.org/permlink/dIkEh0LDZEixGoiF

503 :
>>499,500,501
ostream派生クラスじゃなくて独自のクラスのほうが軽量でいい。
stringインスタンスへのポインタのほかに、数値書き込み時の進数設定(oct,dec,hexを覚えておく)などをメンバ変数に持てばOK。

504 :
>>502
をを、なるほど、これは素晴らしいw

505 :
>>492
stringstream・・・

506 :
basic_ostream使えよっていつも思う
なんで決め打ちするのかわからない

507 :
to_charsというものをみつけました。

508 :
b配列全てをa配列のケツにコピーするとき

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

これでいいの?

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

509 :
そんな気色悪い書き方しなくてもこれでいいよ
a.insert(a.end(), std::begin(b), std::end(b));

510 :
なるほど!ありがとう

511 :
>>508-509
std::copy に back_inserter を渡す方が効率的という豆知識。

512 :
>>511
insertのが速いんでね?
resizeしてmemcpyになるはず

513 :
アルゴリズムよりvector::insertのほうが実装による最適化の余地は大きそうだな

514 :
ポインタがイテレータとして渡された時点で相手が連続バッファだってわかるからね

515 :
&b[sizeof b]でもstd::end(b)でもやってることは変わらないんだけどな
見映えは重要だな

516 :
sizeof bじゃcharでしか使えないんで、そういう意味でもイケてないかも

517 :
>>515
見栄えというか、名前が付いているってのはそれだけで単純にわかりやすいな。
(名前が妥当であれば。)

518 :
嫌儲で、東京五輪チケットのソースコードが出てるけど
C++使ってるお前らなら、こんなソースコードじゃないよね?
https://gogotsu.com/wp-content/uploads/2019/05/01-9.jpg

519 :
>>518
サーバーサイドあまりやってないけどこんな泥臭い書き方するのか

520 :
javascriptやん

521 :
こんなもんだろ
SIerが間違ってコンシューマ系のWeb制作を請けてしまうとこんな感じになる

522 :
てかこんなもの韓国に出すのね
安くなさそう
ってもしや北の方?

523 :
parseInt(Num).lengthって動かなそう

524 :
ほんまやw桁でも返ってくるのかと思ったがundefinedじゃんかw

525 :
型に無駄にこだわった結末がstreamと知っとくのは重要。
あの間違いを覚えとけ。

526 :
ゲームのシーンを管理するクラスとシーンクラスがあり、管理するクラスはシーンクラスを保持しています
シーンクラスから管理クラスのシーンチェンジを行う関数を呼び出したいのですがどうやったらいいでしょうか
シーンクラスが管理クラスのインスタンスを持ちたくありません

527 :
>>518
webにあげるなら難読化まではしないにしても最低限圧縮するよね

528 :
>>526
シーンクラスに管理クラスへの参照(ポインタ)を持たせればいいんじゃないのか

529 :
早速情報漏洩やらかしたの?

530 :
>a.insert(a.begin(),&b[0],&b[sizeof b]);


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

531 :
>>530
イテレータ範囲のendは配列の場合最後の要素の次のアドレス
それは普通の実装ではアクセスされることはない
規格的にも最後の次の要素へのポインタだけは未定義じゃない

532 :
>>530
アクセスしてるからダメそう

533 :
[]はただのアドレス計算じゃん

534 :
&p[N]はp + Nと同じって規格にあったっけ?

535 :
確かに&b[sizeof b]はデリファレンスしてるわ
これはあかんそう

536 :
>>533
a[i]は a+i ではなく *{a+i}

537 :
経験上出来るプログラマーは言語オタクが多いイメージ?(ただし浅い)

538 :
&*pはデリファレンスなしで単にpと評価するってどっかで特別に決められてなかったっけ?

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

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

540 :
>>530
>>a.insert(a.begin(),&b[0],&b[sizeof b]);
>>

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

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

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

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

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

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

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

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

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

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

541 :
>>539
>int *p = &a[5];
これは多分だめで、ポインタ値としての存在なら許される
int *p = a+5;

542 :
ややこしいからoperator <<を定義しようw

543 :
VC++だと
std::vector<T> a; &a[a.size()]はoperator[]のassertionに引っかかるね

544 :
std::transformって並列処理されてますか?

545 :
c++17のparallel版使えば並列実行されるかもしれない

546 :
visual studioでC++17にしたけどいまいち並列版の使い方が分からなかった
普通にfor回すのと、OpenMP使ってfor並列化するのと、transform(非並列)使うの比較したら
OpenMP>普通にfor≧transform だった

547 :
おとなしくpthead使えよ。

548 :
非並列使ったならそりゃそうなるだろ

549 :
struct AとAを継承したstruct Bがあって
Aの内容をBの共通部分にコピーする方法ってないですか?
A a;
B b = a;
みたいにしたいんですけど親を派生先にキャストはできないので困ってます

550 :
struct B : public A
{
B* operator=(const A& a){ this->hoge = a.hoge;}
};
これ初期時にも使えるんかな

551 :
コピーコンストラクタが実装できたとしてメンバ変数は1個ずつコピーするしかないですかね

552 :
スライシングをさせるとか?
安全に?スライシング起こす方法ってあったっけな?
なんか危ういからやろうともしなかったが

553 :
cloneメソッド用意するとか

554 :
>>549
初期化時は普通にコンストラクタ初期化リストで A(a) って書けるでしょ。残りのメンバをどうするのか知らんけど。
代入なら static_cast<A&>(b) = a か b.A::operator=(a) で済みそう。

555 :
普通にコンストラクタかオペレーター作ればいいんじゃね
B::B(const &A)
B::operator =(const &A)
A::operator B()
雑なキャストでよければdynamic_cast<A>でおk

556 :
↑dynamic_cast<B>の間違い
B b = dynamic_cast<B>(a);

557 :
>>551
sturctでまとめればデフォルトコピーコンストラクタが使えるけどね。
あとはintとかPODオブジェクトだけだったらmemcpyしちゃうとかも、俺はたまにやるなw

558 :
549です
解決しましたありがとうございます

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

559 :
その内容だったら=defaultでいいよ

560 :
引数付きコンストラクタって、=default使えるの?

561 :
使えないよね
うかうかっと読み過ごしてたわw

562 :
大本営がおるで!!!

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

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

564 :
>>563
評価=機械語による演算。
コンパイル時評価とは、コンパイラ(PCなど)が演算してその結果を成果物に出力すること。
実行時評価とは実行機(スマホなど)でプログラム実行時に演算して利用すること。

565 :
constexprってのは#defineの置き換えのために生まれたんだよ
C++11以前はenum使ってたんだけどなんかかっこわるいから専用のキーワードが出来たってことさ

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

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

567 :
const int n = 5;
const int m = n * 100;

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

568 :
別にビルド構成に組み込めば済む話じゃね?くだらないな。

569 :
そんなことしなくてもソースコード中に普通のコードと一緒に書けるから

570 :
constexprはtemplateと組み合わせたときに真価を発揮する。
templateを実体化するときに、型や非型引数に加えて、変数や関数なども活用して複雑な条件をつけ、
実体化するコードをカスタマイズできるようになるからね。

571 :
それなんかわかりやすい具体例コード出来ます?

572 :
constexpre定数って配列の要素数に出来るということ以外に本質的な意味ってあるの?
そのへんがよくわからない

573 :
「constexpr 中3女子」でぐぐると変態コードがたくさん出てくるよ

574 :
配列の要素数と非型テンプレートパラメータね

575 :
分かりやすいかどうかは知らないが、以前ここ?で誰かが紹介していたnameofライブラリとか?
https://qiita.com/ta_dragon/items/1828ceb16bc8733526e1
c++17で導入されたstring_viewを使った文字列操作で、enum定義を文字列化してしまうってやつ。

576 :
constexpr int f();

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

違いってこれだけでしょ

577 :
あれ?違うわ
無視して

578 :
変態じみたものとしてはコンパイル時cコンパイルがあるな。
http://kw-udon.hatenablog.com/entry/2016/12/03/201722

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

580 :
アセンブリ見なくても生成コード見ればよくね

581 :
コンパイラのAST見るって事?
より困難では

582 :
単なる#define定数の代わりとしても名前空間が使える分価値はあるし
例えばconstexprでCRCを計算すれば文字列switchが可能になるとか難しいけど便利ではある

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

584 :
そうやって何十万ものヘッダファイルを生み出した例を知ってる。

585 :
>>583
c++の規格内で完結するのと、make等の外部ツールを使うのとでは移植性が全然違うよ。

586 :
同じ記述でソースコード内に式が書け関数が使えるメリットは可読性に大きく影響するだろうに

587 :
外部ツール使えばいいはさすがに草

588 :
configure なんて外部ツールを使ったソースファイルやヘッダーファイルを生成しまくりですが、新しい車輪の再発明ですか?

589 :
configureできる純粋なWindowsはよ

590 :
configureは古い。GitHubやるならCMake一択。

591 :
CMake使ってるけど、いろいろ使いにくい。

592 :
configureより100億倍マシだとは思うけど
それはそうとしてwindowsでpkgconfig使わせて

593 :
CMakeって使いづらいよね
ターゲットの属性指定するのに
属性が先にくるんだもの

594 :
Visual Studio(C#)のプログラミングに関する質問です。

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

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

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

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

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

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

595 :
本当に複雑な計算が必要な定数なんてそんな多くないだろうに。。
やっぱバカしかいねーのな。。

596 :
具体的には実装回答しないけど前方宣言

597 :
>>594
C#?

598 :
>>596
前方宣言ありがとうございます。猛烈に調べてみます。

599 :
indexという構造体を作ってstd::vectorにぶち込んだらgcc8でエラーになるのだが。
ダメなん?

600 :
ideoneでやってみると通るんだけどな。
そのままコピペしてもgcc8だと通らない。
なんやねんこれ。

601 :
ソースなりエラーメッセージなり出せや

602 :
どうせそのクソ構造体コピーもムーブも出来ないんだろ
定義貼ってみ

603 :
wandboxの8系統でもダメなん?

604 :
deleteした後のポインタに0やnullを入れることを「仕様」にしないのは何か理由があるんですかね?

605 :
たとえばポインタのコンテナを扱ってる場合、
deleteしたポインタをコンテナから消そうと思ったら
その仕様だと逆に不便じゃね

606 :
>>604
・ポインタが右辺値だったら意味ないから
・今どきもうユーザーコード内に new, delete は出てこないから

607 :
>>604,606
そんな貴方にスマポ。具体的には unique_ptr, shared_ptr。

608 :
>・今どきもうユーザーコード内に new, delete は出てこないから
こういう決めつけはどうかと思うんだよなぁ
とか言ったらまた荒れるんだろうな・・

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

609 :
>>592
configureのが楽

610 :
>>608
出てこないのが理想なんだから>>604のような機能は逆行
ってことだろ

611 :
ポインタを一時変数に代入していた時点で意味無くなるし
void*とかで持っていたらどうするつもりなんだか

612 :
スマポでdeleteは排除できてもnewはいるだろ

613 :
make_sharedに渡すのってT()がいいのかnew T()がいいのか分からない

614 :
どっちも普通は渡さないだろ?

615 :
マ的にはナマポは生ポインタです?

616 :
ヌルーポ

617 :
>>602
それが、indexという名前がダメらしくて、アンダースコア一本付け足すだけで通るんだよ。

618 :
その環境の標準ヘッダを書き換えたバカがいるとかじゃね

619 :
>>617
>>601

620 :
>>613
コンストラクタのパラメータ渡すもんやろ

621 :
WindowsのSleep関数みたいな変態マクロが実装されてるとか

622 :
さっさと元ソースとgcc -Eとgcc -dM -Eの結果貼るか死ぬかどっちか選べ

623 :
C++ってゲーム業界以外で使われてるの?

624 :
使われているだろ
少なくともGoogle、アップル、MSでは主要言語のひとつだよ

625 :
メーカーの募集ページでも見れば?

626 :
今をときめく人工知能のライブラリのほとんどはPythonの皮+C++のコアっていう構成だぞ

627 :
>>623
テレビ、宇宙、鉄道路線の最短経路

628 :
あれだけPython重点だったChainerもmasterにC++の自動微分マージしたしな

629 :
>それが、indexという名前がダメらしくて、アンダースコア一本付け足すだけで通るんだよ。
心当たりがありすぎるw
これは外には出せんなw

630 :
>>627
漠然としすぎでよくわからんのだがw
おれの周りだと、重い演算部分だけc/c++でライブラリ化するのはあるけど、
アプリを作るのはないな
c++使える人少ないし

631 :
>>623
仮想通貨

632 :
金毘羅とコンパイラ、どのくらい互換性あるの?

633 :
魂斗羅くらいじゃない?

634 :
コンプラの前では何れも塵芥の様なものよ

635 :
>>497
printfも語順変えられへんで…

636 :
>>635
printfはフォーマット文字列を言語ごとに切り替えればいいけど、streamはハードコーディングになってしまう

637 :
具体的にどんな場面で困るのか例を挙げてもらうと助かる

638 :
多言語対応とか?

639 :
>>636
語順変えられへんわ、引数がハードコーディングだわで
printfも変わらんやろっての

640 :
>>638
streamでも文字列をリソース使えばいいだけやで

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

642 :
>>640
streamだと文字列リソースが細切れになってもとの文字列が何だったかよく分からず翻訳者にそのまま渡せないって問題はあるかも。

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

643 :
string_view、constexpr、templateを使えば、C#風のフォーマットも実現できそうな気はする。

644 :
とうとうstreamへの何癖もここまで頭おかしくなったか

645 :2019/05/23
Do you C B that A owns?

【統計分析】機械学習・データマイニング20
【漏れは】猫でもわかる質問スレ【猫以下です】
【分散型バージョン管理】 Mercurial 2【hg】
インデントを強制しても綺麗なコードにはなりません
HSP総合スレ【part 10】
2ちゃんねる互換P2P匿名掲示板の実装を考える 1
【マック】Macintoshプログラミング質問箱
文字コード総合スレ Part11
CVS導入スレ〜 Rev.3
なあ、再帰関数好きな人いる? パート3
--------------------
楽天リワード25
【BS日テレ専用】ボクヒ姉さん
【SUBARU】WRX STI/S4 (VA) Part146
辛斤 シ冩  糸冬  単戈
【ネトウヨ】 沢村直樹23【童貞】
∈(・ω・)∋ダムー
チビは恥 生きる価値無し 自決しろ (by 曰本国政府)
【バーガーキング】フライドポテトだけを挟んだ「フライドポテト・バーガー」に賛否両論 NZで新発売
東大阪のネジ会社について語ろう
【悲報】山で自撮りをしていた美人大学生が転落死
【C】東京メトロ千代田線・JR常磐緩行線スレ45【JL】
消えた機関区
ジオストーム GEOSTORM【SFアクション】衛星2機目
ぶ〜ちゃんって本当にPS4もってないの??
好きな物を食べよう飲もう
堀江貴文氏が幻冬舎騒動に言及「作家って実売部数公表されたくらいで折れちゃう豆腐メンタルなの?笑」★3
クラウンモデル part5
【岐阜】少年が執拗に追い回す姿、防犯カメラに ホームレス殺人 [どどん★]
騒音主への仕返し・嫌がらせ
【初音ミク・GUMI】VOCALOID総合1347【東北ずん子・VY1 他】
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼