2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

C++相談室 part146

1 :デフォルトの名無しさん:2019/11/07(木) 11:35:36.76 ID:4wggfTwe.net
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part145
http://mevius.5ch.net/test/read.cgi/tech/1568362404/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/

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

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

2 :デフォルトの名無しさん:2019/11/07(木) 11:36:06.80 ID:4wggfTwe.net
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

---- テンプレ ここまで ----

3 :デフォルトの名無しさん:2019/11/07(木) 12:30:45.15 ID:BpK/Hm+b.net
今更だけどこのテンプレ何が面白いの?

4 :デフォルトの名無しさん:2019/11/07(木) 13:14:32.06 ID:S+DlaQTT.net
本人か?w

5 :デフォルトの名無しさん:2019/11/07(木) 18:24:51.04 ID:BQL6Knhs.net
https://ideone.com/Al0exx
これ通ったんだけど、三項演算子ってどういう挙動なの?
プリプロセッサ的に選択したモノに式を置き換えるのか?

6 :デフォルトの名無しさん:2019/11/07(木) 18:28:59.01 ID:N9TqrKuA.net
他の演算子と何も変わらんよ

7 :デフォルトの名無しさん:2019/11/07(木) 18:37:13.58 ID:lzcXDdMi.net
三項演算子は簡易的なif-else文

8 :デフォルトの名無しさん:2019/11/07(木) 18:54:15.36 ID:N9TqrKuA.net
>>7
文と式は区別しよう

9 :デフォルトの名無しさん:2019/11/07(木) 19:12:41.49 ID:BQL6Knhs.net
え?
三項演算子は参照返してるの?
〜〜?lvalue:rvalue;はどうあつかうんや?

10 :デフォルトの名無しさん:2019/11/07(木) 19:42:30.16 ID:N9TqrKuA.net
何を混乱してるのか知らんけど、四則演算や比較など他の演算子が返すものと性質は何も変わらんて

11 :デフォルトの名無しさん:2019/11/07(木) 20:01:08.25 ID:3d5Ufx/F.net
たぶん三項演算子で分岐後の型が異なっている場合の事を気にしているのでは?

三項演算子は変数セレクタ(変な表現だけど)ではないのだが
そういう使い方もできるだけ

12 :デフォルトの名無しさん:2019/11/07(木) 20:04:20.83 ID:BQL6Knhs.net
>>11
なるほど。了解です。

13 :デフォルトの名無しさん:2019/11/07(木) 20:52:33.57 ID:f0rTnBPE.net
上級者のvoid君によると、初心者避けのおまじないらしい

14 :はちみつ餃子 :2019/11/08(金) 14:37:15.05 ID:qQX8Hix+.net
条件演算子のことを三項演算子と呼ぶのは初心者。

15 :デフォルトの名無しさん:2019/11/08(金) 15:36:38.98 ID:D1bzmSlR.net
二択条件演算子を条件演算子と言うやつは
CとC++の区別がついていないやつ

16 :デフォルトの名無しさん:2019/11/08(金) 22:59:43.71 ID:ggDD69r9.net
はて、ISO/IEC 14882:2017もISO/IEC 9899:2011もConditional operatorなのだが
JIS信者が崇拝する廃れたJISには二択条件演算子などというマヌケな用語が書かれていたのだろうか

17 :デフォルトの名無しさん:2019/11/09(土) 01:06:14.38 ID:UqQZQ0MX.net
それでは引き続きpimpl論争をお楽しみ下さい

18 :デフォルトの名無しさん:2019/11/09(土) 03:18:51 ID:HyuDdIlK.net
>>16
話を逸らすな
ドヤってるやつ自身の言葉遣いがおかしいのを正している
おまえ個人がJISをどう思っているかなどハエのクソほどの価値もない

19 :デフォルトの名無しさん:2019/11/09(土) 03:52:08 ID:/c1qnHHd.net
ハエのクソほどの価値もない
これはなかなか良い煽り表現、メモしとこう

20 :デフォルトの名無しさん:2019/11/09(土) 11:52:01.08 ID:YsXITINs.net
ふむふむ確かにJIS X 3010:2003は「条件演算子」、JIS X 3014:2003には「二択条件演算子」とあるな
Conditional operatorは正しいが「条件演算子が誤り」と言われても致し方ない
勉強になった

21 :デフォルトの名無しさん:2019/11/09(土) 15:27:24.52 ID:HP/LflWX.net
『プログラミング言語C++』第4版の第2章のエピグラフには
シェイクスピアから引用されてるね。
「まず行うべきは、言語の法律家を皆殺しにすることだ。」

22 :デフォルトの名無しさん:2019/11/09(土) 16:40:09.54 ID:UqQZQ0MX.net
JISwww
まぁ英語読めない人はそっち読んでればw

23 :デフォルトの名無しさん:2019/11/09(土) 16:54:05.74 ID:W5m3k6zs.net
JIS信者ってコンストラクタとデストラクタを生成子とか消去子とか呼んでるの?
話したくねえな

24 :デフォルトの名無しさん:2019/11/09(土) 17:53:12.69 ID:HyuDdIlK.net
フレンドを随伴はさすがにやだな

25 :デフォルトの名無しさん:2019/11/09(土) 19:31:08.91 ID:7XYNyApp.net
友達よりはいいと思う

26 :デフォルトの名無しさん:2019/11/10(日) 10:04:18.86 ID:2HW6YGp5.net
随伴と言う言葉は、実は数学や物理で別の意味で使われているのでちょっと
抵抗を感じるのは否めない。量子力学でのエルミート共役や、リーマン幾何学
で使われることがある。数学の「双対」の概念とも関係していて、随伴に対して
もう一度随伴操作を行うと元に戻る性質がある場合もある。

27 :デフォルトの名無しさん:2019/11/10(日) 10:10:28.39 ID:jbBoRETA.net
friendというか奴隷宣言だよね

28 :デフォルトの名無しさん:2019/11/10(日) 10:53:53.52 ID:T+oiajnu.net
class 満州国

29 :デフォルトの名無しさん:2019/11/10(日) 10:54:30.16 ID:T+oiajnu.net
class 満州国 {
 friend 大日本帝国
};

30 :デフォルトの名無しさん:2019/11/10(日) 11:29:20.79 ID:wGUp3v12.net
従属宣言

31 :デフォルトの名無しさん:2019/11/10(日) 11:41:08.02 ID:T+oiajnu.net
class 明 : public 元;
class 清 : public 金, 元;

class 李氏朝鮮 {
 friend 明;
 friend 清;
};

32 :デフォルトの名無しさん:2019/11/11(月) 22:41:26.04 ID:X/f1urlF.net
なんで元をprivate継承してんだ?

33 :デフォルトの名無しさん:2019/11/15(金) 07:53:04.32 ID:NNCqRbhA.net
>>32
清は、大モンゴル帝国の正統な後継国だから。
北元がモンゴル高原に持ち帰って保持していた玉璽を、清が引き継いだ。

34 :デフォルトの名無しさん:2019/11/15(金) 08:06:03.04 ID:NNCqRbhA.net
北京は一見すると漢民族の首都のように見えるけどまったく違う。
最初に現在の北京を首都にしたのはモンゴル帝国の元。
北京は、漢人・モンゴル人・満洲人それぞれの活動域の接結点に位置している。
以下の事件では、内モンゴルから来た2人の患者が北京の病院で肺ペストと診断されている。

中国で2人が肺ペストに感染、危険性高い劇症型
https://www.cnn.co.jp/world/35145373.html
2019.11.14 Thu posted at 10:04 JST

35 :デフォルトの名無しさん:2019/11/15(金) 09:44:31.26 ID:IxoIS27H.net
しかし継承ってほんと駄目な語だよな
インターフェースに対する実装感が無い

36 :デフォルトの名無しさん:2019/11/15(金) 09:56:13.83 ID:CeuK/dHL.net
お前の国語力もダメだな

37 :デフォルトの名無しさん:2019/11/15(金) 23:57:33.98 ID:/yBuhf/V.net
じゃあ遺伝にすればいいのでは。

38 :デフォルトの名無しさん:2019/11/16(土) 09:31:39.67 ID:N74GdtKe.net
inheritを継承と訳したバカが悪い

39 :デフォルトの名無しさん:2019/11/16(土) 09:55:02.91 ID:fbhJUidB.net
禿1の日本語版で始めて見た

40 :デフォルトの名無しさん:2019/11/16(土) 10:09:43.47 ID:Xo/j5+tn.net
じゃあinheritって言えば?
それで何が解決するのか知らんが

41 :デフォルトの名無しさん:2019/11/16(土) 12:17:41.91 ID:N74GdtKe.net
inheritには立場や役目をそのまま成り代わって継続する意味合いがある
そういう意味合い抜きで単に引き継ぐだけ(あとは後任の勝手)ならsucceedな
王位とか家督とかの相続はinherit
単に財産を相続するとか、社長なり議員なりの後任を単に務めるだけならsucceed
(ただし後任の社長が前任の右腕で忠実に同じやり方を継続していく意向、みたいなのはinheritでもいい)

「継承」は原語のinheritの含みがスッポリ抜け落ちてんだよ
派生クラスが基底クラスの完全な代替として振る舞う(べき)っていうニュアンスが消えてるから初心者が誤解する

42 :デフォルトの名無しさん:2019/11/16(土) 13:30:15.21 ID:c+ki5LNV.net
センスある和訳を教えてくれ

43 :デフォルトの名無しさん:2019/11/16(土) 13:32:33.19 ID:x87RiFEK.net
> 「継承」は原語のinheritの含みがスッポリ抜け落ちてんだよ

落ちてない
https://dictionary.goo.ne.jp/word/%E7%B6%99%E6%89%BF/

44 :デフォルトの名無しさん:2019/11/16(土) 15:00:50.64 ID:Xo/j5+tn.net
しょせんメタファーなんだから単語だけで正しく理解できるわけないだろ
あほちゃうか

45 :デフォルトの名無しさん:2019/11/16(土) 16:15:31.56 ID:fjjXSMO9.net
「継承」は老舗のお店や古典芸能の家系なんかの気持ちだったのかね。
先代の商売のやり方を引き継ぎながらも新しい世にも…みたいな。

「相続」は悪くない訳な気がするけどね。
祖先の遺産を使って苦労なく好きにアレコレできるとか、
変な具合にいじってお家断絶しちゃうとか。

46 :デフォルトの名無しさん:2019/11/16(土) 17:16:10.53 ID:jURkcZzd.net
>>42
俺も聞きたい
バカとか言っちゃう人がどんな崇高な訳をお考えなのか拝聴したい
ここんとこしばらく腹を抱えて笑うという健康法をしてないしな

47 :デフォルトの名無しさん:2019/11/16(土) 17:23:28.15 ID:rW7Vu2CL.net
英語が曖昧すぎるからよほどぴったりじゃないと英語そのままのがいいでしょ

48 :デフォルトの名無しさん:2019/11/16(土) 17:49:29.54 ID:0kRbSQZl.net
こんなしょーもないことをいちいち気にしてたらプログラムなんてできんだろ。
まあいまだに「オブジェクト指向とは」みたいなしょーもない禅問答やってるバカもいるけど。

49 :デフォルトの名無しさん:2019/11/16(土) 19:38:23.83 ID:gk1O1Pjk.net
むしろ継承にただ引き継ぐだけなんていう暗黙的意味があるなんて今知った

50 :デフォルトの名無しさん:2019/11/16(土) 19:41:00.20 ID:x87RiFEK.net
単に継承という言葉の意味を知らない馬鹿が発狂してただけという

51 :デフォルトの名無しさん:2019/11/16(土) 19:45:39.83 ID:gk1O1Pjk.net
伝承なんて伝言ゲームになりそうだな

52 :デフォルトの名無しさん:2019/11/17(日) 03:14:32 ID:unI7PN4C.net
2019年になってなお、訳文でもめるのかよ
もう全部英文で良くね?

53 :デフォルトの名無しさん:2019/11/17(日) 03:30:27 ID:/PPR+DNS.net
実際そうしてるでしょ
スマートポインタ、ムーブ、ラムダ、constexpr、noexcept、コンセプト、モジュール、
誰もゴミみたいな訳語当てたりせずに英語そのまま使ってるしそれが正しい

54 :デフォルトの名無しさん:2019/11/17(日) 11:14:17.63 ID:4jNKOHdS.net
訳でもめてるというより
ひとりだけ継承という訳にダメ出ししてる状況
一般論として訳や命名は軽視してはならないけど、
これに関してはかなりどうでもいい

55 :デフォルトの名無しさん:2019/11/17(日) 11:52:02.68 ID:ADq5wcSz.net
和訳とか関係なく、術語が一般用語としての意味と必ずしも一致しないなんてのはあたりまえなのにね。
数学なんかそんなのばっかり。

56 :デフォルトの名無しさん:2019/11/17(日) 12:31:55.03 ID:JfnSUNsN.net
4人くらいいるだろう
ま、訳以前にそもそも継承という概念が役立たずだからな

57 :デフォルトの名無しさん:2019/11/17(日) 14:14:53.18 ID:0+nTbBo+.net
こうゆう機能、性質を○○と呼ぼうって順番なのに
○○って名前なのにこうゆう機能が無いのはおかしい!って言うのがアホ

58 :デフォルトの名無しさん:2019/11/17(日) 14:33:49.67 ID:cZKVuoHK.net
prvalueを純右辺値というだけで
ひっ絡んでくんの、このチンピラ?

59 :デフォルトの名無しさん:2019/11/17(日) 15:03:16.97 ID:Mp5WsRX6.net
おまいら暇だな

60 :はちみつ餃子 :2019/11/17(日) 18:41:21.48 ID:zYX+B2Mq.net
そんなの程度問題だろ。

61 :デフォルトの名無しさん:2019/11/17(日) 19:00:44.78 ID:4jNKOHdS.net
はいクソ正論でました

62 :はちみつ餃子 :2019/11/17(日) 23:37:51.82 ID:zYX+B2Mq.net
仕様内で定義のある用語はその言葉の一般的な意味がどうあれ定義通りに理解すべきではあるんだが、
そもそもある語がテクニカルタームであることがわかりにくい場合ってのはイケてないと思う。
継承という言葉があったらどこかで定義されてるだろって思うけど、
右辺値って書いてあったら右辺にあるやつかなって思われても仕方がない感じがする。

63 :デフォルトの名無しさん:2019/11/18(月) 05:59:05.21 ID:mhcN03Rw.net
defaultとかexecuteとかの英単語は、それ自体にいろんな意味あるじゃない。

64 :デフォルトの名無しさん:2019/11/18(月) 06:04:42.98 ID:oSLwFt1+.net
債務不履行に処刑かw

65 :デフォルトの名無しさん:2019/11/18(月) 09:06:04.16 ID:skAn5Z6m.net
ドスとかスワップとかコンピュータ用語って昔から怪し杉

66 :デフォルトの名無しさん:2019/11/18(月) 09:42:03.87 ID:/QuV8J26.net
だいたい元の英語のままでも日常語としてみたらなんじゃそら、みたいなのが
ちょいちょいあるのがコンピューター用語
バグ(虫)とか

67 :デフォルトの名無しさん:2019/11/18(月) 10:14:16.18 ID:sZ0WVu3/.net
別にコンピューター用語に限らんけど

68 :デフォルトの名無しさん:2019/11/19(火) 18:45:04.24 ID:TjvO49h7.net
https://ideone.com/CMbxJf
ちょっと聞いてくださいよ。
ファクトリーメソッドのサンプル書いたんですよ。サンプル。
そしたら、子クラスのthisで親クラスのメソッド呼んだら、子クラスが記憶喪失になるんですよ。
おかしいじゃないですかこれ・・・。

あー、もどかしい。

69 :デフォルトの名無しさん:2019/11/19(火) 18:45:47.67 ID:TjvO49h7.net
コンパイルタイムに固定してしまうのか???

70 :デフォルトの名無しさん:2019/11/19(火) 20:24:26.48 ID:tvEitVpd.net
スマポのポリモはよくわかんないから触らないことにしてる

71 :デフォルトの名無しさん:2019/11/19(火) 20:31:26.40 ID:GNY4BPsd.net
DupってCreateのことだと思うんだけど
FactoryMethodなら呼び出し時にクラスのIdを指定しないといかんよ
この例だとDupの返す内容はIFactoryに固定されてしまうので
もともとIFactoryに存在していないXを表示させるのは鼻から悪魔

72 :デフォルトの名無しさん:2019/11/19(火) 20:37:26.15 ID:TjvO49h7.net
やっぱそうですかー。んー。
回答ありがとう。

73 :デフォルトの名無しさん:2019/11/19(火) 20:39:16.34 ID:GNY4BPsd.net
で、もしIFactoryにXを持たせてもこうなる

https://ideone.com/s9beHs

IFactoryとAのメモリレイアウトが違うんだろう
あくまでもDupは生成時にmake_sharedするべき

74 :デフォルトの名無しさん:2019/11/19(火) 21:14:56.35 ID:hdRGMNcQ.net
キャストじゃなくて、インスタンス作るとこでディスパッチがないとな

75 :デフォルトの名無しさん:2019/11/19(火) 21:51:12.33 ID:8p0qWsch.net
ファクトリで思い出したけど
文字列をクラス名とみなしてインスタンス化するにはどーすりゃいいの
他言語のevalみたいなの

76 :デフォルトの名無しさん:2019/11/19(火) 22:01:23.12 ID:JHNr41O8.net
リフレ

77 :デフォルトの名無しさん:2019/11/19(火) 22:06:20.10 ID:+Lo3ALxa.net
>>74
んだね
C++ならif文を重ねるしかない
仮想関数の動きに惑わされず基本を押さえないとな

C++でデザパタやるとどうしても多少の泥臭さは我慢する必要がある
decltypeなんか使ったらコンパイル時に型が固定されちゃうよ

78 :デフォルトの名無しさん:2019/11/19(火) 22:10:34.14 ID:+Lo3ALxa.net
createProduct()は仮想関数にできるね
これでかなりすっきりするのではないかと
んでIfactoryのcreateProduct()は純粋仮想関数にしておく

79 :デフォルトの名無しさん:2019/11/20(水) 12:38:11.71 ID:V2Bfpb/x.net
IFactory内でdecltype(*this)取ってもIFactoryにしかならんよ、コンパイル時の型情報しか取れないんだから
そういうのは(すでに言われてるけど)仮想関数でごにょごにょすべき
仮想関数と共変使えばif文を排除できる

80 :デフォルトの名無しさん:2019/11/20(水) 12:48:17.01 ID:V2Bfpb/x.net
すまん間違えた、共変使ってもIFactory内だとだめだな
make_sharedまでを派生でやらせればいける

81 :デフォルトの名無しさん:2019/11/20(水) 13:12:40.35 ID:tR9fBnD5.net
インスタンス作るとこの振り分けは愚直に書くのが保守性が高くなる気がしてる。

82 :デフォルトの名無しさん:2019/11/20(水) 20:46:41.13 ID:9SkvYyRu.net
"Java言語で学ぶデザインパターン入門"のソースにならって
愚直に書いてみた
突っ込み歓迎

https://ideone.com/uUbAfy

83 :デフォルトの名無しさん:2019/11/21(木) 14:19:11.68 ID:+h+7QjsO.net
ストラウストラップのプログラミング言語C++Vol3以降、
ひさびさにできるだけ新しい仕様に準拠した日本語のC++本買おうと探したんだが
ほとんどまともな日本語本ってないのね
επιστημη、 高橋航平の独習C++
https://www.%61mazon.co.jp/dp/4798150231
表題だけみたけどマルチスレッドとか一切ふれてないのコレ?
とりあえずプログラム実装するならテンプレートなんかよりマルチスレッド/マルチコアプログラムのほうがよっぽど重要だと思うけど?
だれか買った人居ない?
レビューよろしく

84 :デフォルトの名無しさん:2019/11/21(木) 14:23:43.46 ID:Gb3w6aC2.net
江添の本
無料

85 :デフォルトの名無しさん:2019/11/21(木) 15:19:32.83 ID:jw+Pn83o.net
何で禿4があるのに禿3なんかみてるの?
髪薄いから?

86 :はちみつ餃子 :2019/11/21(木) 15:37:56.04 ID:1M+TYUu+.net
>>68
親クラスとか子クラスとか言わないでくれ

87 :デフォルトの名無しさん:2019/11/21(木) 15:57:37.16 ID:SOJnuxsg.net
ペアレントクラス、チャイルドクラス

88 :デフォルトの名無しさん:2019/11/21(木) 16:06:01.43 ID:wEG3pGFv.net
>>86
なんで?

89 :デフォルトの名無しさん:2019/11/21(木) 18:44:56.94 ID:+h+7QjsO.net
>>85
日本語のC++本はVol3の時に買っただけで久しく入手してないという意味ね
Vol4は英語版のebookを持ってるが、ひさびさにできるだけ新しい仕様の日本語で書かれたC++が欲しいと言ってるんだよ。おつむの弱いお前
だいたい、C++-11で止まってるVol4今頃見てどーするつもりだおつむの弱いお前www

90 :デフォルトの名無しさん:2019/11/21(木) 18:46:35.73 ID:+h+7QjsO.net
>>94
江添のような異常者の文章は読まないことにしてる

91 :デフォルトの名無しさん:2019/11/21(木) 18:57:32.20 ID:+dTDqVIf.net
標準委員会の人なのに・・・。

92 :デフォルトの名無しさん:2019/11/21(木) 19:01:45.16 ID:f5ecgBgu.net
なに勧めてもケチ付けるだろうから規格書をお勧めするよ

93 :デフォルトの名無しさん:2019/11/21(木) 19:05:37.07 ID:Ju9cDeqK.net
英語読めないのも知能異常では?

94 :デフォルトの名無しさん:2019/11/21(木) 19:24:07.38 ID:SB5I0OPT.net
>>85
あー、おまえ禿4の日本語版あるの知らねえウルトラ情弱かw
英語が苦手でググりスキルも家畜以下じゃ
C++に限ったことじゃねえよな
それはそれはステキな人生送ってそうだな
同業者として失笑が止まらんわw

内容くらい読んでからご託ぬかせよ
おまえみたいに物を知らんやつには
間違いなく勉強になるから
C++11がどういう位置付けかも知らず
営業呼称の数字がでかいの探してるだけだろ

う す ら ハ ゲ

95 :デフォルトの名無しさん:2019/11/21(木) 19:24:50.50 ID:SB5I0OPT.net
85じゃねえ89だ

96 :デフォルトの名無しさん:2019/11/21(木) 19:25:54.77 ID:qpXpGc2Y.net
ハ ゲ っ て 言 う な ! ! !

97 :デフォルトの名無しさん:2019/11/21(木) 19:44:16.65 ID:HPhky9Ev.net
江添ってひとははげてるの?

98 :デフォルトの名無しさん:2019/11/21(木) 19:59:03.17 ID:wlMAy4t9.net
無駄な抵抗はやめて丸刈りにすることだな。

99 :デフォルトの名無しさん:2019/11/21(木) 20:15:37.46 ID:+h+7QjsO.net
>> ID:SB5I0OPT

あほはアンカーのひとつもまともに入れられないってかウスノロ
原書持ってるのに11どまりの今頃Vol.4の日本語訳入手してどーするつもりだ低能


あほは死ねや
ご希望とあらば、ぶち殺してやってもいいぜwww

100 :デフォルトの名無しさん:2019/11/21(木) 20:30:56.20 ID:+h+7QjsO.net
>>94
>C++11がどういう位置付けかも知らず

シングルスレッドのお前は11で止まっとけよ低能
お前のオツムじゃ並列思考は到底無理だろうからよwww
あきらめて下請け土方でもやっとれ。あほ

101 :デフォルトの名無しさん:2019/11/21(木) 20:32:12.70 ID:Ju9cDeqK.net
頭の程度がよくわかる
そりゃ英語も読めないさ

102 :デフォルトの名無しさん:2019/11/21(木) 20:32:45.47 ID:JfgYWeJZ.net
>>100
だから内容くらい読んでから御託ぬかせっての
シングルスレッドと11がどうつながるんだよ
職安通いのおまえのクビみたいなもんだろうが

103 :デフォルトの名無しさん:2019/11/21(木) 20:46:13.11 ID:JfgYWeJZ.net
シングル毛根のくせに11やっても毛が2本に増えたりゃせんぞ

 お ハ ゲ の 旧 太 郎 が

104 :デフォルトの名無しさん:2019/11/21(木) 20:56:51.29 ID:JfgYWeJZ.net
アンカー滑っちゃってすまんな
おまえもせめてアデランスが滑らないように気をつけな

105 :デフォルトの名無しさん:2019/11/21(木) 21:02:49.63 ID:JfgYWeJZ.net
あ、よく見たらこいつC++-11だってw
禿本持っててこれじゃ英語白痴が絶望的なステージなんだな
なあbaldって意味わかる?

106 :デフォルトの名無しさん:2019/11/21(木) 21:04:47.25 ID:JfgYWeJZ.net
あれ? 寝ちゃったのかな
それとも自分の頭から滑落死したか?

107 :デフォルトの名無しさん:2019/11/21(木) 22:25:07.54 ID:+3OggeIY.net
ハゲ:規格と乖離した妄想言語をコンパイル確認せずにドヤ顔で披露する老害。頭頂部に髪が無いのが特徴的
添:ハゲを医者の不養生と揶揄しつつ自分もコンパイル通らないコードをドヤ顔で披露する委員会メンバ。頭髪を剃っているのが特徴的

108 :デフォルトの名無しさん:2019/11/21(木) 22:42:30.25 ID:JfgYWeJZ.net
禿はcfrontの実装者だが

109 :デフォルトの名無しさん:2019/11/22(金) 01:23:48.58 ID:9tWBQCxn.net
ひさしぶりに見たらなにかよくわからないハゲのスレッドになってた

110 :デフォルトの名無しさん:2019/11/22(金) 15:37:51.30 ID:h7twVaF1.net
俺たちがどれだけ頑張ってもC++でハゲには勝てない

111 :デフォルトの名無しさん:2019/11/22(金) 17:31:12.40 ID:31qO4/Al.net
このスレではじめてC++についてまったく非のうちどころのない正しい意見が書きこまれた

112 :デフォルトの名無しさん:2019/11/22(金) 23:28:36.47 ID:4cuBkj+o.net
まずハゲをスレッド生成します

113 :デフォルトの名無しさん:2019/11/22(金) 23:47:27.76 ID:Y24HLISL.net
糸を生成できるなら禿やってない

114 :デフォルトの名無しさん:2019/11/23(土) 02:47:31 ID:dFQ8RRrN.net
C++はすぐ深刻なエラーになるからコーディングに注意を要しストレスで禿げる

115 :デフォルトの名無しさん:2019/11/23(土) 04:59:27 ID:jWWyBC4d.net
それはあながち否定はできない
まあ俺は禿げていないが

116 :デフォルトの名無しさん:2019/11/23(土) 08:18:19.78 ID:FPHze3FN.net
プログラミング言語好きの人たちが集まるネットコミュニティの
雰囲気にあてられてハゲるんと違うか?
C++界隈は他の言語に比べて攻撃的な物言いをする人が多い気がするぞ。
皆がトーバルズ氏になりたがってる、みたいな。

ハゲ先生の本を(和訳本で)読むと穏やかな人格者っぽい感じなのに。

117 :デフォルトの名無しさん:2019/11/23(土) 09:13:47.22 ID:ugNYcsZK.net
C言語使ってる日本人を想像しろ

118 :デフォルトの名無しさん:2019/11/23(土) 11:19:54.13 ID:ZGOtfnpM.net
C++はもうC#の後追いやってるだけだからなww
テンプレートにうつつ抜かしてる間に生産性以外でもC#に劣る言語仕様に成り下がった

119 :デフォルトの名無しさん:2019/11/23(土) 11:54:18.05 ID:EBCdzxcY.net
C#がC++に勝る点って何?

120 :デフォルトの名無しさん:2019/11/23(土) 12:37:43.36 ID:MxAA5A1q.net
>>116
void君とか頭おかしい連中が目立ってるからだろ

>>110
c++で創薬したるわ

121 :デフォルトの名無しさん:2019/11/23(土) 13:16:56.60 ID:iYvqsLVH.net
今はやりのpythonを使う人はpybind11とかでpython用のC++プラグイン作るだろうから、これからもC++は色んな所で使われ続ける。

122 :デフォルトの名無しさん:2019/11/23(土) 13:20:40.03 ID:jA/F562D.net
後追いというか、C++を最も使い込んでいるのはMSなんだからC#に似てくるのは当然

123 :デフォルトの名無しさん:2019/11/23(土) 13:38:45.00 ID:ZGOtfnpM.net
何寝言逝ってる
C#で新たな規格が決まって
だいぶ遅れて、C++がそれ取り込んでという順番がつづいてるだろうがwww

124 ::2019/11/23(土) 14:42:35.65 ID:bse8qODO.net
>>123
具体例を

125 :デフォルトの名無しさん:2019/11/23(土) 15:03:58.13 ID:BDEOs2uu.net
分かるところだとコルーチン

126 :デフォルトの名無しさん:2019/11/23(土) 15:06:16.23 ID:BDEOs2uu.net
C++/cli経由だけどenum classもそうじゃないかな

127 :デフォルトの名無しさん:2019/11/23(土) 16:14:47.04 ID:KvoIJqUR.net
ハーブシッターいるからね。委員会。

128 :デフォルトの名無しさん:2019/11/23(土) 16:18:17.70 ID:pbrffxke.net
中間言語型のC#はC++の競合にはならない

129 :デフォルトの名無しさん:2019/11/23(土) 16:25:19.22 ID:6kdTmmEk.net
yieldは40年前からある技術だけどな。
cライクの言語に取り入れたという意味ではエポックメイキングだったんだろう。
その2つくらい?

130 :デフォルトの名無しさん:2019/11/23(土) 16:35:44.52 ID:U8iKLMmJ.net
>>127
Herb Sutter
のことですかね。

131 :デフォルトの名無しさん:2019/11/23(土) 16:37:27.45 ID:KvoIJqUR.net
>>130
そこらへん。

132 ::2019/11/23(土) 16:46:36.89 ID:bse8qODO.net
>>128
中間言語や VM の存在は C# の本質ではないと思います
マイクロソフトもいずれネイティブコードを吐く C# コンパイラを出してくるでしょう、私には VM なんてなんの腹の足しにもならない無駄な機構にしかみえません

133 :デフォルトの名無しさん:2019/11/23(土) 16:49:37.49 ID:KvoIJqUR.net
PGのVM設計するときに参照するのがx86だったりとかで、結局ロックインしちゃってる気がする。
複数の未知のCPUにJITできるように組んでないような気がする。

134 :デフォルトの名無しさん:2019/11/23(土) 17:12:01.03 ID:3WxMvOwa.net
wintelの目指すトコロはCPUアーキテクチャと専用高級言語の囲い込みでしょ
C++を潰すには、みたいな第二次ハロウィン怪文書を思案中だよきっと

135 :デフォルトの名無しさん:2019/11/23(土) 17:37:47.06 ID:CZ47p2RQ.net
言語で囲い込みとかないない

136 :デフォルトの名無しさん:2019/11/23(土) 18:11:45.72 ID:U8iKLMmJ.net
>>132
今でも .NET の中間コードは、native コード化できます。

137 :デフォルトの名無しさん:2019/11/23(土) 18:14:16.80 ID:U8iKLMmJ.net
>>136
できますが、結局、GCを使うので、C++並の速度にはなりません。
GCが動いた場合、処理時間のオーダーが違うので、CPUがどんなに速くなっても
どんなに最適化を施しても無理です。

138 :デフォルトの名無しさん:2019/11/23(土) 18:31:11.69 ID:D2JmV2eo.net
GC無効化すればいいのか?

139 :デフォルトの名無しさん:2019/11/23(土) 18:34:17.97 ID:pbrffxke.net
deleteないのに

140 :デフォルトの名無しさん:2019/11/23(土) 20:26:44.43 ID:pwNFgn+1.net
GC洗脳にかかったやつを正気に戻すのは大変だぞ

141 :デフォルトの名無しさん:2019/11/23(土) 20:59:39.93 ID:W1wK9gMe.net
ビジネス用途を想定しているC#と基礎技術を支えるC++が競合してると思ってるのが面白い

142 :デフォルトの名無しさん:2019/11/23(土) 21:20:13.50 ID:fygFNKSM.net
GC で止まるのが嫌なら、GCの無い、Rust を使え!

その代わり、かなり注意深くプログラミングしないといけないw

143 :デフォルトの名無しさん:2019/11/23(土) 21:24:45.73 ID:W1wK9gMe.net
注意深くプログラミングしなくていい言語なんてあるのか

144 :デフォルトの名無しさん:2019/11/23(土) 21:28:04.03 ID:ItEg5azI.net
昔は1日の業務の終わりにGCを走らせてから帰宅したもんだ。翌朝までにGCが完了してればそれで充分だった。
いまは物理メモリが広いので速度クリティカルな部分ではGCを無効化するのもありかもしれない。
それだとしてもC#はC++を置き換えられないよ。思想が違うもの。

145 :デフォルトの名無しさん:2019/11/23(土) 21:35:18.52 ID:fY6FJFDb.net
やっぱ今衝突とか爆発しそうなその瞬間に寄りによってGC走ったら悔やんでも悔やみきれないからな
GCなし言語には生き残ってもらわないと

146 :デフォルトの名無しさん:2019/11/23(土) 21:57:34.36 ID:jA/F562D.net
>>145
それはRTOS使わないといけない
C++でも割り込みで予期せず遅れることはある

147 :デフォルトの名無しさん:2019/11/23(土) 22:48:42.12 ID:fY6FJFDb.net
詳しい情報サンクス

148 :デフォルトの名無しさん:2019/11/23(土) 23:09:28.20 ID:rsD80hR9.net
>>145
えっ?

149 :デフォルトの名無しさん:2019/11/23(土) 23:10:31.11 ID:rsD80hR9.net
>>146
えっ?

こっちだった

150 :デフォルトの名無しさん:2019/11/24(日) 15:08:37.94 ID:FJ6sVzWZ.net
Rustはコンパイルが通った時点で(メモリ管理に関しては)注意深くプログラミングし終えたことになる、
抜け穴がないわけではないが普段気にするほどではない

151 :デフォルトの名無しさん:2019/11/24(日) 15:14:02.85 ID:FJ6sVzWZ.net
GCとプログラムの実行速度の姦計は、
GCが極力動かないようにプログラマの側で工夫する余地があるから必ずしも打つ手が無いわけでは…
(GCが動き出したらワーストケースの見積りが吹っ飛ぶというのはあるが

とゆーわけでC++に比べてC#がいまいち遅いのはGCが主犯というわけではなく、
オブジェクトに参照経由で毎回間接アクセスする言語仕様なのと
JITでマルチプラットフォーム対応可能なことと引き換えに最適化があんま利かせられていないせいだと思う
あとネイティブコードを呼び出す最にマーシャリングもするし、
ジャヴァのサンドボックス思想をパクるために仕方なかった側面、

152 :デフォルトの名無しさん:2019/11/24(日) 15:29:19.64 ID:FJ6sVzWZ.net
ユーザーコードがバックグラウンドタスク(応答時間非規定で可)でGCを使うだけなら
GCとリアルタイム性は両立しないわけでは無い

まあGC有りのプログラミング言語でプログラムする状況で
GCが使われる状況がバックグラウンドタスクのみに限定されるというのは
非現実的な想定かもしれんが

153 :デフォルトの名無しさん:2019/11/24(日) 16:02:47.84 ID:s1tpy+px.net
>>151
姦計とか、どんな文脈で使ってたんだよw

154 :はちみつ餃子 :2019/11/24(日) 17:46:57.62 ID:FzCW75Pg.net
今時のよくできた GC (の実装) はインクリメンタル化されてるから、
良い感じに暇なときを見つけて動いてくれるっしょ

155 :デフォルトの名無しさん:2019/11/24(日) 18:07:45.83 ID:lsOVnPbd.net
技術職としての適性を著しく欠いた発言だな

156 :デフォルトの名無しさん:2019/11/24(日) 18:49:08.07 ID:np+ynBzF.net
あれ?この人職業プログラマなの?
趣味でお気楽にやってるだけの人だと持ってた

157 :デフォルトの名無しさん:2019/11/24(日) 18:50:48.11 ID:lsOVnPbd.net
どうりでな

158 :デフォルトの名無しさん:2019/11/24(日) 19:43:00.54 ID:aq7LfmWh.net
わたくしが「現代現象」と呼称する一連の悲劇的な出来事は
なんの変哲もない日常がいきなり変貌を遂げるものであり
その猶予は0.1秒もない

スイスチーズモデルを天文学的数字ですり抜けたそれら現代現象への対処時間は大抵は1秒未満になる
なので未来になればなるほど思いもよらない意味不明で突発的で素早い破壊事象が起こる

これを踏まえて車載映像の事故映像を見てみると猶予が本当に少ないことが分かる
なので自動運転では各種の重い処理はマーフィーの法則によれば衝突する0.1秒前の「暇な時」に動き出す
これを超克するには未来予知が必要になる

159 ::2019/11/24(日) 19:55:00.69 ID:oHJXyQoT.net
>>155
はちみつさんは lisp-er ですから、lisp-er 的な視点で現在のプログラミング環境をみれば、
やっと時代が lisp に追いついてきた、という感慨が発生するのも自然だと思いますよ
GC も lisp の産物ですから

「適正に欠く」と判断する推論内容は理解できませんね

160 :デフォルトの名無しさん:2019/11/24(日) 20:23:39.32 ID:lsOVnPbd.net
>>159
それは、おまえも適性を欠いているということだ
形容詞に比較をつけないとか、定量的でないとか、
魔法的にアレしてくれるだろうとか
おまえの頭ん中も同じだとここで露呈して今どんな気持ち?

161 ::2019/11/24(日) 21:42:37.16 ID:oHJXyQoT.net
>>160
私に適性がないのはそのとおりなのでしょうが、いちいち定量的に条件を明示して話をしなければならないわけでもないでしょう
魔法的にアレするレイヤーの話は別途規定する前提で、今は特に大局観を語りたいときにはね

あなたは、戦術レベルの話はできても戦略レベルの話は理解できない大局観に欠いた狭量な、例えば java 屋さんに見えますね

162 :デフォルトの名無しさん:2019/11/24(日) 22:00:07.13 ID:lsOVnPbd.net
>>161
主張に説得力がないって指摘がおまえまだわからないのか?
あいた口が塞がらんわ

163 :デフォルトの名無しさん:2019/11/24(日) 22:15:54.73 ID:zs+LjqkQ.net
ほんと攻撃的なやつが多いな
これだからC++界隈は

164 :デフォルトの名無しさん:2019/11/24(日) 22:23:01.28 ID:gOHxLuuk.net
>>132
>いずれネイティブコードを吐く C# コンパイラを出してくる
すでに出とるが
いつの時代の話しだ

165 :デフォルトの名無しさん:2019/11/24(日) 23:26:27.29 ID:O9JrjuKo.net
C++erは献血してから書き込めよ

166 :はちみつ餃子 :2019/11/25(月) 00:55:16.50 ID:a5DfrA3a.net
>>159
ワイは Scheme 使いでもあるし日常的には Scheme の方をよく使ってはいるが、
長いことバイナリマンだったし、 LISP の思想にそんな強い思い入れはないわ。

ただ、評価とかごちゃごちゃ言ってないで手早く書いて実測しろってのは LISP 的かもね。
今では他の言語でも書きながら速いサイクルで回して改善するスタイルって一般的じゃね?
書き始めは楽観的にやってるよ。

なるべく楽して必要になってから手間かけりゃいいんだよ。
そんでもってゆるふわに富豪的プログラミングしてても割と足りてしまう経験の方がおおいなぁ。

>>156
俺は趣味人やで。

167 :デフォルトの名無しさん:2019/11/25(月) 07:22:11.28 ID:Nb9YSlRo.net
> 富豪的プログラミング

相手してはいかんやつだったコイツ

168 :デフォルトの名無しさん:2019/11/25(月) 10:37:33.23 ID:fJS33Jzt.net
>>163
これだけ広いスパン使われて、いろいろな書き方がある言語なのに
ユーザーは多様性に非寛容というのはなかなか興味深い現象。

169 :デフォルトの名無しさん:2019/11/25(月) 10:43:38.75 ID:Nb9YSlRo.net
いや多様な使い方を求めるからこそ
GC厨の矮小な発想範囲を危惧するんだ

170 :デフォルトの名無しさん:2019/11/25(月) 16:07:54.78 ID:biP2ABGV.net
この板にまともなやつ少ないだけじゃないの

171 :デフォルトの名無しさん:2019/11/25(月) 17:10:10.70 ID:N1T6mRww.net
>>170
じつは、きみが正解

172 :デフォルトの名無しさん:2019/11/25(月) 17:43:35.94 ID:iOqWCNFx.net
>>170
お前はいつも正しい

173 ::2019/11/25(月) 19:52:15.88 ID:2aQAGKkK.net
>>170
説得力のあるご意見ですね…

174 :デフォルトの名無しさん:2019/11/25(月) 20:35:32.15 ID:0R6sv3EZ.net
>>170
じゃあ俺もアンカつけとくか

175 :デフォルトの名無しさん:2019/11/25(月) 20:50:09.52 ID:X/XdXIky.net
>>173
竹島はどこの国の領土ですか?

176 ::2019/11/25(月) 20:53:20.18 ID:2aQAGKkK.net
>>175
日本だと思っていますが?

177 :デフォルトの名無しさん:2019/11/25(月) 20:59:20.98 ID:jiZC6v9k.net
>>170
この板で唯一まともな僕も赤くしておこう

178 :デフォルトの名無しさん:2019/11/25(月) 21:40:59.01 ID:p8s7YmVo.net
C#って、これ以上の普及はもう無理だろ。WindowsのUIアプリでしか存在価値はない。
MonoはイマイチでJavaはなくならんし、WebもAIもスクリプト言語系でOK。
タイムクリティカルなエンジン部をC++で書いて、スクリプト言語(Python含めて)
使うのが主流化してる。C#を使う場面が無い。

179 :デフォルトの名無しさん:2019/11/25(月) 21:58:00.63 ID:YppxgWfG.net
Unity

180 :デフォルトの名無しさん:2019/11/25(月) 21:58:44.19 ID:K0cOW7SD.net
会社の上層部がMSの営業に騙されてAzureの導入を決めてしまった場合、
マネージドサービスの利用のためにはC#を使用せざるを得ない
他の言語では事実上使い物にならない

181 :デフォルトの名無しさん:2019/11/26(火) 00:48:28 ID:jE+AmQNT.net
Windowsのデスクトップアプリを手っ取り早く作るにはC#以外の選択肢が無い

182 :デフォルトの名無しさん:2019/11/26(火) 00:49:10 ID:FjVBoEgv.net
保守的な経営者とそこそこの技術力の社員でも使えるんだからAzureというのは大したもんだな

183 :デフォルトの名無しさん:2019/11/26(火) 03:32:39 ID:PQgL7aAd.net
windowsに関わってる限りC#とC++/CLIからは逃れられない

184 :デフォルトの名無しさん:2019/11/26(火) 03:38:53 ID:jE+AmQNT.net
C++/CLIと関わったことがない

185 :デフォルトの名無しさん:2019/11/26(火) 05:29:20 ID:PYT33B53.net
>>132
制限付きながら、既にネイティブコードは吐ける

186 :デフォルトの名無しさん:2019/11/26(火) 05:54:06 ID:PYT33B53.net
>タイムクリティカルなエンジン部をC++で書いて、スクリプト言語(Python含めて)
>使うのが主流化してる。C#を使う場面が無い。

主流て、そんなもん昔からほぼこういう書き方してるだろwww
そこで、スクリプト言語を使ってどれだけ実行時間に影響与えてるか正しく認識してないのが多い。
ここでC#使ってこんなに違うのかと初めて気づく。
そして、単に実行速度ってことならエンジンにC++使わずともC#でもそこそこ勝負できるってことも認識するのが情弱。

タイムクリティカルな用途ならそれこそOSからしてラウンドロビンなんか使わない。
RTOSでわざわざ、メモリプール設定してるのに、new/delete繰り返すようなC++流の書き方はそもそもよろしくない。
C++で非推奨の限りなくpure Cに近い書き方してるのはもはやC++とはいわんだろ。

187 :デフォルトの名無しさん:2019/11/26(火) 07:33:35 ID:auNO4ARl.net
> RTOSでわざわざ(中略)C++流

そう思い込んでる迷惑なのがいるんだよ
おまえみたいな

188 :デフォルトの名無しさん:2019/11/26(火) 08:07:38.46 ID:uPJEEVDZ.net
タイムクリティカルもいろんなレベルがあるから

ハード実装
FPGA
OSレスのフルアセンブラ
RTOS + C
....
クラウド

189 :デフォルトの名無しさん:2019/11/26(火) 08:12:14.93 ID:uPJEEVDZ.net
> C++で非推奨の限りなくpure Cに近い書き方してるのはもはやC++とはいわんだろ。

テンプレート、ラムダ、...を使いまくるコーディングだけがC++じゃない
小規模組み込みでnewすら使わない泥臭いC++もC++

190 :デフォルトの名無しさん:2019/11/26(火) 08:51:30.13 ID:auNO4ARl.net
禿も必要な機能だけを使え、無理に全機能を使おうとするなって言ってるね

191 :デフォルトの名無しさん:2019/11/26(火) 10:50:10.03 ID:6Teht3Z8.net
クラスにupdateという関数があってそれが何回もメイン関数にあるインスタンスから呼び出されるのですが
update内で変数宣言を書いている場合、領域の確保は呼び出される度に行われますか?

192 :デフォルトの名無しさん:2019/11/26(火) 11:27:29 ID:auNO4ARl.net
うん

193 :デフォルトの名無しさん:2019/11/26(火) 12:08:17 ID:GwsQnBsH.net
その宣言にstaticがついてなければ毎回領域確保が行われる

194 :デフォルトの名無しさん:2019/11/26(火) 12:56:56.77 ID:BYZ9sIOZ.net
変数の宣言と定義、用語の違いを利用した罠かも知れん。

195 :デフォルトの名無しさん:2019/11/26(火) 13:01:29.72 ID:njyF587z.net
変数自体はスタック(またはレジスタ)に割り当てられるから
確保解放のコストは気にするな

変数の内部(コンストラクタ他)でのメモリ確保解放や初期化処のコストは当然気にしよう
パフォーマンスの問題であればクラス変数にする等

196 :デフォルトの名無しさん:2019/11/26(火) 13:05:09.36 ID:auNO4ARl.net
関数を使おうってときに
関数内変数をデータメンバに改造するアホが
うちの若いのにいたら焼きだ

197 :デフォルトの名無しさん:2019/11/26(火) 13:11:02 ID:njyF587z.net
パフォーマンスに問題があるならやるしかない

198 :デフォルトの名無しさん:2019/11/26(火) 13:14:44 ID:njyF587z.net
バッファをあらかじめ確保しておくなんて
ごく当たり前のことだと思ってたけど
そうじゃないのか?

updateなんていう、
クラスの内部に直結してそうな関数ならなおさら

199 :デフォルトの名無しさん:2019/11/26(火) 13:16:07 ID:XO/gVUyI.net
とか抜かすやつに限って計測もせずに片っ端から最適化と称した難読化をしやがる

200 :デフォルトの名無しさん:2019/11/26(火) 13:18:32 ID:njyF587z.net
パフォーマンスの問題であれば
パフォーマンスに問題があるなら

201 :デフォルトの名無しさん:2019/11/26(火) 13:20:23 ID:XO/gVUyI.net
>>200
パフォーマンスの問題であるなら、まずは計測する
そして最適化厨が必死に難読化を施しているその箇所は、殆どの場合パフォーマンスに全く影響しない

202 :デフォルトの名無しさん:2019/11/26(火) 13:23:10 ID:njyF587z.net
パフォーマンスを考えなくていいプログラムなら
そもそもC++を選ぶのが間違い

203 :デフォルトの名無しさん:2019/11/26(火) 13:24:09 ID:njyF587z.net
少なくとも質問者は気にしている

204 :デフォルトの名無しさん:2019/11/26(火) 13:25:28 ID:njyF587z.net
パフォーマンスなのかフラグメントなのか使用リソースなのか
何を気にしてるのかはわからないけど

205 :デフォルトの名無しさん:2019/11/26(火) 13:35:02 ID:XO/gVUyI.net
再入やマルチスレッドで死ぬ恐れもあるから、このレベルの初心者にバッファの事前確保が当然だなどという阿呆な考えを植え付けることはテロ行為に等しい

206 :デフォルトの名無しさん:2019/11/26(火) 14:14:31 ID:jE+AmQNT.net
内部でnewを使ってるクラスの変数かも知れない

207 :デフォルトの名無しさん:2019/11/26(火) 15:17:34 ID:GwsQnBsH.net
>>191はstaticがついてなければyesで終わる話
それに勝手な前提つけたしていらん押し付けをするからお前らは駄目なんだぞ

208 :デフォルトの名無しさん:2019/11/26(火) 15:28:32 ID:FGS0cB19.net
>>207
会話するのが嫌いならわざわざ書き込まなくて良いんだよ

209 :デフォルトの名無しさん:2019/11/26(火) 15:51:04 ID:jE+AmQNT.net
ゴミみたいな会話するな

210 :デフォルトの名無しさん:2019/11/26(火) 16:11:06 ID:FF/Zqwz/.net
https://ideone.com/kprgQF
ちょっと暇だったので、
昔のビットシフトの掛け算と割り算って、
今の技術使ったら爆速になるんじゃないかと思ったのですよ。
で、書いてみたのだけど、知識不足で到達しないんだ。
なんでだろう??

211 :デフォルトの名無しさん:2019/11/26(火) 16:15:11.65 ID:fUnM+X7O.net
>>202
そのプログラム全体が速度が要求される訳でもなかろう。必要なところだけ必要なぶんだけ高速化しろよ。
速度が要求されない部分も別にわざわざ別の言語で作るメリットがなければC++のままで構わないわけだし。

212 :デフォルトの名無しさん:2019/11/26(火) 16:18:03.80 ID:fUnM+X7O.net
>>208
質問者にとっては混乱させられるだけの余分な情報だし、知っている人からすれば当たり前で価値のない情報だし、実のない議論したいだけの無意味な付け足しは要らんよ。

213 :デフォルトの名無しさん:2019/11/26(火) 16:46:50 ID:FF/Zqwz/.net
俺が言いたいのは一つだ。
C言語は超高等言語なので、その前にC++使うのだ!

214 :デフォルトの名無しさん:2019/11/26(火) 17:39:44.76 ID:M+fYb0eE.net
>>211
>>203

215 :デフォルトの名無しさん:2019/11/26(火) 17:59:37.88 ID:yLsU10sd.net
いやそもそも>>195の前半で解答は終わってるだろ
>>195の後半は余計

216 :デフォルトの名無しさん:2019/11/26(火) 18:06:10.26 ID:M+fYb0eE.net
>>210
普通の型なら普通にC++で書いた方が良い
定数ならコンパイラが工夫する

普通じゃない型、例えば多倍長でも
1ビットずつシフトして速くなることは無いと思って良い

217 :デフォルトの名無しさん:2019/11/26(火) 18:06:14.04 ID:Wuw5jSRm.net
>>210
>今の技術使ったら爆速に
ならねーよw

218 :デフォルトの名無しさん:2019/11/26(火) 18:52:42.91 ID:FF/Zqwz/.net
>>217
ならないかー。
コンパイルタイム時に置き換えるから、1サイクルに落ちるものだと・・・。

219 :デフォルトの名無しさん:2019/11/26(火) 19:27:14.09 ID:Kb2Sko2q.net
爆速にならなくても1サイクルだろうよ

220 :デフォルトの名無しさん:2019/11/26(火) 19:41:24.45 ID:78UVTJ0X.net
1サイクルじゃシフトしか出来ない

221 :デフォルトの名無しさん:2019/11/26(火) 19:48:34.46 ID:2UYQ/Noe.net
なんか根本的にconstexprを勘違いしてる初心者がよくそういうこと言うけど
定数同士の計算の省略なんか大昔からある最適化だぞ
C++03以前を偉そうにデイスってる奴(>>210は別として)最近多いけど、そういうのに限ってこういう基礎が全くわかってない

222 :デフォルトの名無しさん:2019/11/26(火) 19:57:12.90 ID:dLX9Z9/K.net
constexprの利点はtemplateとif constexprの組み合わせがおすすめだと思うの。

223 ::2019/11/26(火) 20:04:28.16 ID:eitz3RWA.net
>>210
https://mevius.5ch.net/test/read.cgi/tech/1434079972/51
多桁長演算の乗算・除算もやってみたかったので書いたものです

224 :デフォルトの名無しさん:2019/11/26(火) 20:23:56.31 ID:78UVTJ0X.net
>>218を読まずに>>220を書いた
コンパイル時に解決するなら0サイクルだ

225 :デフォルトの名無しさん:2019/11/26(火) 20:29:02.34 ID:78UVTJ0X.net
よく分からない多倍長ライブラリを使うのであれば
当然コンパイル時に解決出来るとは限らない

226 :デフォルトの名無しさん:2019/11/26(火) 20:32:56.90 ID:sE/nea3J.net
>>223
多倍長の乗算は筆算の要領で出来るの算数程度の数学で足りるが、
多倍長の除算は、CPUが持っている除算命令を使って行おうとすると
数学的な考える力が必要になる。アルゴリズムは既に有ることはあるはずだが、
丁寧に解説されているわけではないので自分の力で証明できるくらいの
人で無いと難しいと思う。

227 :デフォルトの名無しさん:2019/11/26(火) 20:35:31.27 ID:78UVTJ0X.net
>>226
素人が適当な事を言わない方が良いかと

228 :デフォルトの名無しさん:2019/11/26(火) 20:39:17.37 ID:78UVTJ0X.net
多倍長の乗算は、
非常に桁数が少ないときのみ筆算方式
もうちょっと大きいとカラツバ
もっと大きいとフーリエ変換

除算はニュートン法が一般的かと

もちろん、
特殊な形だと特殊な方法があったりする

229 ::2019/11/26(火) 20:47:20.16 ID:eitz3RWA.net
>>226
それは乗算と除算が逆なのでは?
除算は筆算流しか手はありません、乗算はいろいろなやりかた(カラツバ・FFT)があるようです

230 ::2019/11/26(火) 20:48:04.78 ID:eitz3RWA.net
>>228
>除算はニュートン法が一般的かと
ニュートン法で剰余を求めることはできますか?

231 :デフォルトの名無しさん:2019/11/26(火) 20:49:49.76 ID:78UVTJ0X.net
>>230
そりゃ当然出来ますよ

桁数が大きいときは、
除算は乗算の3倍程度の時間で出来ます

232 :デフォルトの名無しさん:2019/11/26(火) 20:51:56.72 ID:78UVTJ0X.net
除算を筆算方式なんかでやってたら日がくれる

233 :デフォルトの名無しさん:2019/11/26(火) 20:54:28.73 ID:78UVTJ0X.net
分子の桁数が大きくて分母の桁数が非常に小さい場合のみ筆算方式が有効

この場合も、
非常に遅い割り算命令なんかは使いませんが

234 :デフォルトの名無しさん:2019/11/26(火) 20:56:28.50 ID:sE/nea3J.net
>>229
>除算は筆算流しか手はありません
そうではありません。除算をCPUにある除算命令を使った筆算で行うには、x/y の
xのBIT数を増やすのは容易ですが、yの方のBIT数を増やすのは非常に難しいのです。
不可能では有りませんが、非常に数学的な注意が必要となります。
私は数学マニアみたいなものなので、自分なりのアルゴリズムを作ったことが
ありますが、個人的には、それをするためにはテーラー展開の剰余項や解析学的な
知識が必要だと思っています。
考えもしませんでしたが、他にも除算は、ニュートン方を使う流儀もあるそうです。

235 :デフォルトの名無しさん:2019/11/26(火) 20:58:37.06 ID:sE/nea3J.net
>>233
いえ、そうでもありません。テーラー展開の剰余項を注意深く扱うと、
CPUがもつdiv命令を使った筆算の場合でも、x/y の y の方のBIT数を
増やすアルゴリズムがありえます。何度も書いてますが、それは数学的に
とても慎重さを必要とします。

236 :デフォルトの名無しさん:2019/11/26(火) 21:00:22.71 ID:sE/nea3J.net
>>235
ただし、ニュートン法を使う方法については考えたことがなかったので、
どっちが効率が良いかは分かりません。

237 :デフォルトの名無しさん:2019/11/26(火) 21:03:02.62 ID:78UVTJ0X.net
>>235
普通のPCのDIV命令は30サイクル近くもかかる
乗算は1〜4サイクル
スーパーコンピューターでも除算は非常に遅い

>>233の条件では
除算命令などは使わない方が速い
除算は乗算に置き換えるのが普通

238 :デフォルトの名無しさん:2019/11/26(火) 21:04:44.09 ID:78UVTJ0X.net
分母、分子それぞれの桁数によって
最適な方法は変わる

だからそういった条件をセットで語らないと意味がない

239 :デフォルトの名無しさん:2019/11/26(火) 21:06:41.35 ID:78UVTJ0X.net
巨大な桁数同士だとニュートン法が速い
乗算の3倍ほどの時間で出来る

割り算を組み合わせたらそんな時間では計算出来ない

240 ::2019/11/26(火) 21:15:26.74 ID:eitz3RWA.net
>>231
ニュートン法(にゅーとんらぷそん)って、曲線で与えられる関数の根の一つを求める方法でしょ?
いわゆる実数の根を求める方法であって、整数の剰余を求めることはニュートン法では無理なのでは?

何がどうなって「当然」なんですか?

241 :デフォルトの名無しさん:2019/11/26(火) 21:19:25.20 ID:78UVTJ0X.net
除算が出来るんだから剰余も当然求められる

242 ::2019/11/26(火) 21:22:34.40 ID:eitz3RWA.net
>>241
で、その剰余はどうやって求めるのですか?
まさか、求めた商に除数をかけて被除数から引くのですか?それって遅くないですか?

243 :デフォルトの名無しさん:2019/11/26(火) 21:23:39.77 ID:78UVTJ0X.net
遅くないです

244 ::2019/11/26(火) 21:25:15.97 ID:eitz3RWA.net
>>243
本当ですか?わざわざ、あらためて掛け算をするんですよ?私には馬鹿みたいな方法にみえますが?

245 :デフォルトの名無しさん:2019/11/26(火) 21:26:45.06 ID:78UVTJ0X.net
馬鹿みたいな方法にみえるのはあなたが馬鹿だからです

246 :デフォルトの名無しさん:2019/11/26(火) 21:29:07.44 ID:sE/nea3J.net
>>242
ニュートン法なので、
z = b / a の z を求めたい場合、直線 y = a * x - b と x 軸(y=0) との交点の
x を求めることによって行う。その際、x0, x1, ・・・, xn のように x を
漸化的に交点に近づけていく。数学的直感だと、その途中で剰余も求められ
るように出来そうな気がする。

247 :デフォルトの名無しさん:2019/11/26(火) 21:43:45.68 ID:sE/nea3J.net
>>246
色々なやり方はあると思うけど、2^m <= a < 2^(m+1) の場合、
x_{k+1} = x_k - (y_k << m);
y_{k+1} = a * x_{k+1} - b;
の漸化式でいけるかも知れない。
間違っていたらゴメンなさい。

248 :デフォルトの名無しさん:2019/11/26(火) 21:44:43.61 ID:78UVTJ0X.net
>>246
その方法で乗算の3倍の時間で除算が出来ますか?
無理ですよね?

249 :デフォルトの名無しさん:2019/11/26(火) 21:49:53.94 ID:sE/nea3J.net
>>248
漸化式が三回くらい行ったら正しい答えに到達するのであれば、
乗算の三倍程度の時間で済むと思う。
何回で到達するかは、まだ考えて無いのでわからない。

250 :デフォルトの名無しさん:2019/11/26(火) 21:53:39.27 ID:sE/nea3J.net
>>247
ここで、0<= y_k < x_k が満たされれば、x_k が商、y_k が余りだと思う。
初期条件は、
x_0 = 1;
y_0 = a * x_0 - b;
とすればよいはず。
途中、y_k が負の値になることが有るが、問題ない。

251 :デフォルトの名無しさん:2019/11/26(火) 21:55:42.20 ID:78UVTJ0X.net
前提は分母も分子も巨大な桁数で良いんだよね?

252 :デフォルトの名無しさん:2019/11/26(火) 21:56:38.32 ID:78UVTJ0X.net
分母の桁数があまり大きくないならテーラー展開も有効だよ

253 :デフォルトの名無しさん:2019/11/26(火) 21:57:23.51 ID:sE/nea3J.net
>>251
一般的な場合を取り扱うのであれば、その条件が、もっともらしいと思います。

254 :デフォルトの名無しさん:2019/11/26(火) 21:57:37.73 ID:78UVTJ0X.net
いずれにしろ、
除算命令を多用することは無い

255 :デフォルトの名無しさん:2019/11/26(火) 21:58:41.68 ID:sE/nea3J.net
ニュートン法を使うのは初めて聞きました。
とても勉強になります。

256 :デフォルトの名無しさん:2019/11/26(火) 21:59:47.69 ID:78UVTJ0X.net
>>253
それで漸化式3回なんてことはあり得ないかと

257 :デフォルトの名無しさん:2019/11/26(火) 22:01:24.02 ID:sE/nea3J.net
○<< m とせずに ○<< (m+1) としておけば、y_k は負の数にならないかも
知れない。ただ、数学的直感的に、収束速度は、前者の方が速い気がする。

258 :デフォルトの名無しさん:2019/11/26(火) 22:03:05.27 ID:78UVTJ0X.net
>>240
数年前にも「にゅーとんらぷそん」とか書いてた糞コテがいたんですが
もしかして本人?
文のレベルも頭の悪さもそれっぽい

259 :デフォルトの名無しさん:2019/11/26(火) 22:07:18.12 ID:78UVTJ0X.net
八木アンテナを八木宇田アンテナと書かないのと同程度に
ニュートンラプソン法とは書かないと思っているので
印象に残ってます

260 ::2019/11/26(火) 22:08:38.03 ID:eitz3RWA.net
>>258
raphson の ph を摩擦音で読むか、有気破裂音で読むかは、選択可能かと思っていましたが

261 :デフォルトの名無しさん:2019/11/26(火) 22:10:11.81 ID:sE/nea3J.net
>>247
まず、シフトの向きが右で、正しくは、○>>○ でした。

262 :デフォルトの名無しさん:2019/11/26(火) 22:16:30.64 ID:78UVTJ0X.net
>>260
何を指摘されてるのかわかってないwww

263 :デフォルトの名無しさん:2019/11/26(火) 22:19:47.56 ID:sE/nea3J.net
>>256
では、BIT SHIFT ではなく、浮動小数点演算にして、以下の様にすれば速くなるかもしれません。

(i) 初期条件
η = 1/a;  // 多倍長の浮動小数点
x_0 = 1;
y_0 = a * x_0 - b;

(ii) 漸化式
x_{k+1} = x_k - (int_N)(y_k * η);
y_{k+1} = a * x_{k+1} - b;

但し、int_N は、多倍長の浮動小数点を多倍長整数に直す cast。

264 :デフォルトの名無しさん:2019/11/26(火) 22:34:50.59 ID:FauhtWma.net
#include <iostream>
using namespace std;

int main() {
string str = "abc";
cout << &str << endl;
cout << str << endl;
cout << str.c_str() << endl;
return 0;
}

VisualStudio2019のdebugとreleaseとで&strのメモリダンプ内容が異なるのはなぜでしょうか?
debug : 78 f7 b6 00 61 62 63 00
release : 61 62 63 00

265 :デフォルトの名無しさん:2019/11/26(火) 22:34:54.21 ID:78UVTJ0X.net
1/a が求まれば
あとは乗算2回(と軽い演算)で剰余が求まるでしょ
漸化式にするまでもなく

266 :デフォルトの名無しさん:2019/11/26(火) 22:36:37.97 ID:78UVTJ0X.net
>>264
デバッグ情報とか破壊検出用データとかじゃ?

267 :デフォルトの名無しさん:2019/11/26(火) 22:37:41.67 ID:sE/nea3J.net
>>265
細部までは分かりませんが、直感でなんとなく分かります。
aが32BITの場合なら、一度にほぼ、32BIT分計算が終わる気がします。

268 :デフォルトの名無しさん:2019/11/26(火) 22:42:23.06 ID:FauhtWma.net
>>266
ありがとうございます。
ということはdebug版の呼び出し元(exe)とrelease版の呼び出し先(dll)
間ではstring型を関数の引数にするとバグりますね。

269 :デフォルトの名無しさん:2019/11/26(火) 22:44:29.12 ID:78UVTJ0X.net
>>267
>>251の前提はどこに?

270 :デフォルトの名無しさん:2019/11/26(火) 22:45:06.01 ID:sE/nea3J.net
>>268
そうなりますね。
malloc() や new なども、Debug 版と Release 版ではライブラリに互換性が
有りません。Debug 版では、まさに、破壊検出用の埋め草のような物が入っていたり、
new を行った行番号情報が入っていたりします。

271 :デフォルトの名無しさん:2019/11/26(火) 22:46:50.29 ID:FauhtWma.net
>>270
多謝!!!
しりませんでした。

272 :デフォルトの名無しさん:2019/11/26(火) 22:49:29.81 ID:sE/nea3J.net
>>269
私は特に仮定はしていませんが、四倍浮動小数点型などに興味があり、
それを整数演算に置き換えて実装してみようかと思っていたりするので、
割る数も割られる数も同じくらいのBIT数の整数の場合に興味があります。

前に調べたところ、倍精度浮動小数点演算を用いて、四倍精度浮動小数点
の乗算、除算まで実装する方法があるようですね。ただし、その場合、
Intelの内部拡張倍精度(80BIT)方式をONにしていると駄目なんだそうですが。

273 :デフォルトの名無しさん:2019/11/26(火) 22:57:18.80 ID:78UVTJ0X.net
>>272
4倍弱精度なら
Haswell以降で使えるFMA命令がとても約に立ちます

274 :デフォルトの名無しさん:2019/11/26(火) 22:58:49.33 ID:YRq1zw3m.net
>>264
こっちで試した限りだと、debugとreleaseでコンソール表示の長さは変わらんかったぞ
x86とx64なら差が出たが

275 :デフォルトの名無しさん:2019/11/26(火) 22:59:27.13 ID:sE/nea3J.net
>>265
aがN BIT の場合、例えば、1/a を、64BIT 程度で求めた場合は、
(N / 64) (回) 程度の乗算が必要になりそうです。
1/a を高速に N BIT まで求めるアルゴリズムがありますでしょうか?

276 :デフォルトの名無しさん:2019/11/26(火) 22:59:32.53 ID:78UVTJ0X.net
それ以前の普通の乗算でも出来るけど

AVXでSIMD化出来るのでたくさん計算するならぜひ

277 :デフォルトの名無しさん:2019/11/26(火) 23:01:27.32 ID:sE/nea3J.net
>>273
興味深いです。教えていただければ幸いです。

278 :デフォルトの名無しさん:2019/11/26(火) 23:02:58.56 ID:YRq1zw3m.net
>>274
メモリダンプという言葉をみおとしていた
スレ汚しすまぬ

279 :デフォルトの名無しさん:2019/11/26(火) 23:05:02.93 ID:78UVTJ0X.net
>>275
私が何度か除算は乗算の3倍の時間と書いたのは
例えば100万桁同士の除算は100万桁同士の乗算の3倍な時間という意味
乗算命令の回数ではなくて

aが100万桁で1/aを100万桁精度で求めるのは
100万桁同士の乗算の2倍くらいの時間で出来る

280 :デフォルトの名無しさん:2019/11/26(火) 23:10:41.35 ID:sE/nea3J.net
例えば、割り算部分をテーラー展開ですか。

281 :デフォルトの名無しさん:2019/11/26(火) 23:17:37.02 ID:78UVTJ0X.net
>>277
{a_hi, a_lo} と {b_hi, b_lo} の乗算で
a_hi * b_hi を求めてから、
本当の a_hi * b_hi との誤差を求めるところ

c_hi = a_hi * b_hi とやってから
a_hi * b_hi - c_hi
をFMAでやれば誤差が簡単に求まる

282 :デフォルトの名無しさん:2019/11/26(火) 23:19:37.46 ID:78UVTJ0X.net
fusedな3個の足し算命令とかもあると
加減算も簡単になるんだけど
そんな命令は(他のCPU含めて)見たことがない

283 :デフォルトの名無しさん:2019/11/26(火) 23:24:07.48 ID:sE/nea3J.net
a=1+q の時:
y/a=y/(1+q)
=y*{1 - q + q^2 - q^3 + ... }
=y*(1-q*(1-q*(1-q...))}

284 :デフォルトの名無しさん:2019/11/26(火) 23:30:51.74 ID:sE/nea3J.net
>>283
この式は、|q|<1の場合にだけ正しいので、
aをa=u*2^n (u = 1.0 + q)の形式に直してから
1/a = 1/(u*2^n)=1/(1+q)*2^(-n)
  = (1-q*(1-q*(1-q...)))*2^(-n)
とするのですかね。
なるほど、qの精度を考えれば、乗算の回数は2個くらいまで
で済みそうですね。

285 :デフォルトの名無しさん:2019/11/26(火) 23:36:41.80 ID:sE/nea3J.net
>>284
すみません、これだと二回では精度が足りなさそうですね。

286 :デフォルトの名無しさん:2019/11/26(火) 23:37:21.85 ID:78UVTJ0X.net
多倍長の1/aの話なら
テーラー展開は遅すぎて使いませんよ

4倍弱精度の話であれば
除算命令やテーラー展開は使いますが

どれの話をしてるのかわかるようにかいてくれませんか?

>>238 の通りなので

287 :デフォルトの名無しさん:2019/11/26(火) 23:49:53.60 ID:sE/nea3J.net
>>286
多倍長の 1/a はどうやって求めたら効率が良いのでしょうか?

288 :デフォルトの名無しさん:2019/11/26(火) 23:53:50.60 ID:78UVTJ0X.net
>>228

289 :デフォルトの名無しさん:2019/11/27(水) 00:00:48.09 ID:T7KqQ5kC.net
>>288
もしかすると、
y = 1/(a*x) - 1

y = 0
の交点をニュートン法で求めるのでしょうか。

290 :デフォルトの名無しさん:2019/11/27(水) 00:02:25.36 ID:T7KqQ5kC.net
>>289
すみません、違いますね。

291 :デフォルトの名無しさん:2019/11/27(水) 00:27:57.72 ID:tKRTExPe.net
初歩的な質問ですみません
2つのdouble型実数xとyを引数とし、x/yとy/xの大きい方を返却する関数を作成せよ。xあるいはyのときは0を返却するとする。という問題でコード書いてみたんですがうまくいきません どこが間違っているのでしょうか

#include<stdio.h>
double func(double,double); /*プロトタイプ宣言*/

int main(void)
{
double a,b;
printf("実数をスペースで区切って入力してください\n");
scanf("%d %d",&a,&b);
printf("%d",func(a,b)); /*呼び出し*/
return 0;
}

double func(double x,double y)
{
if(x/y > y/x) return x/y;
if(y/x > x/y) return y/x;
if(x==0) return 0;
if(y==0) return 0;
}

292 :デフォルトの名無しさん:2019/11/27(水) 00:33:48.17 ID:ynQDuheL.net
%dのところがおかしい
それは整数用

293 :デフォルトの名無しさん:2019/11/27(水) 00:42:47.79 ID:tKRTExPe.net
ありがとうございます 1時間くらい悩んでたのが馬鹿みたいだ

294 :デフォルトの名無しさん:2019/11/27(水) 00:53:21 ID:ynQDuheL.net
入力に0を含めてテストするように

295 :デフォルトの名無しさん:2019/11/27(水) 01:11:14 ID:tKRTExPe.net
ifの順番変えたら完成しました

296 :デフォルトの名無しさん:2019/11/27(水) 02:13:53.15 ID:XGkmLsxS.net
QZは馬鹿

297 :デフォルトの名無しさん:2019/11/27(水) 02:41:24 ID:Q9FMbuzn.net
xとyが等しいケースは書いたんじゃろうか

298 :デフォルトの名無しさん:2019/11/27(水) 11:43:48.59 ID:g3LmaZYt.net
世にある仕事の数でいうと
java:C#:C++が5:3:1くらいだな。

299 :デフォルトの名無しさん:2019/11/27(水) 12:16:41.56 ID:zdI/1sLa.net
このスレ過疎かと思ったら話題でた途端に加速するな

300 :デフォルトの名無しさん:2019/11/27(水) 13:47:03 ID:KtqS+hCI.net
const は要らない子

301 :デフォルトの名無しさん:2019/11/27(水) 14:58:41.90 ID:vSkP4LPU.net
本当はね・・・constの逆が欲しいのさ
デフォが書き込み禁止で許可を明示だったらと

キャプチャのmutableみたいな

302 :デフォルトの名無しさん:2019/11/27(水) 15:05:41.36 ID:Yu9S3/3Y.net
めんどくさいだけ

303 :デフォルトの名無しさん:2019/11/27(水) 15:08:54.83 ID:lAIqGT0K.net
Pointという点を表すクラスがあって、2点間の距離を取得する関数を追加したいのですが、
double Point::GetDistance(const Point &p) const
にすべきか、ただのCの関数で
double GetDistance(const Point &p1, const Point &p2)
にしたほうがいいのか迷っています。
設計的にいいのはどっちなんでしょうか?

304 :デフォルトの名無しさん:2019/11/27(水) 15:13:19.55 ID:zdI/1sLa.net
>>303

Pointに必要以上の機能を作らない

305 :デフォルトの名無しさん:2019/11/27(水) 15:32:27 ID:FMRbYBnJ.net
下に1票。同じ理由

306 :デフォルトの名無しさん:2019/11/27(水) 15:33:34 ID:vYtjQlD0.net
下だな
なんでもかんでもインスタンスに生やすのは厨臭くてダサいし、対称な操作は対象に見えるべき

307 :デフォルトの名無しさん:2019/11/27(水) 15:34:48 ID:lAIqGT0K.net
>>304
ありがとうございます。
ですよね。前者の考えでいくと、いくらでもメンバ関数が増えそうな気がしていました。

308 :デフォルトの名無しさん:2019/11/27(水) 15:43:43.07 ID:PahKH909.net
下の方が、スカラー値等の既存型や配列向けの特殊化をし易いメリットもあるかもねー

309 :デフォルトの名無しさん:2019/11/27(水) 15:55:14.01 ID:xImtWZAs.net
ベクトルの引き算を定義してやるのはありでは

310 :デフォルトの名無しさん:2019/11/27(水) 16:11:06 ID:KtqS+hCI.net
下を造っておいて
operator - で下のを利用 >>309 と同じ
どちらも inline

311 :デフォルトの名無しさん:2019/11/27(水) 16:12:16 ID:KtqS+hCI.net
ああ同じではないわ
ベクトルの引き算はスカラーじゃなくてベクトル
ベクトルの絶対値を定義する

312 :デフォルトの名無しさん:2019/11/27(水) 16:29:07.34 ID:MN5dlGGA.net
abs(a-b)

313 :デフォルトの名無しさん:2019/11/27(水) 18:11:30.16 ID:p98u22dC.net
ベクトルの加減算や符号は紛れが無いのでオペレータで実装

乗算は内積、外積と要素ごとの積の3種類あるので
関数にする

3次元ベクトルも作る可能性があるなら
2次元ベクトルだとわかる名前にしておく
可能性が無いならそのままで

絶対値やノルム、象限などをグローバルにするかメンバ関数にするかは一長一短
設計ポリシー次第

314 ::2019/11/27(水) 19:16:22.98 ID:N9ggbkQ1.net
>>303
私も下
>double GetDistance(const Point &p1, const Point &p2)
を friend 関数にします、大事にするのは対照であること、です

315 :デフォルトの名無しさん:2019/11/27(水) 19:21:07.28 ID:fyVQDs9d.net
>>187
メモリフラグメントを起こさないようにわざわざメモリプール切ってるのに
new/delete繰り返すオマエみたいなアホがいるからまともな製品ができねぇんだろww

316 :デフォルトの名無しさん:2019/11/27(水) 19:29:28.78 ID:vSkP4LPU.net
>>315
ほーう?
メモリプールでフラグメントが防げるのかww

317 :デフォルトの名無しさん:2019/11/27(水) 19:31:20.95 ID:nSz8Pwyp.net
>>314
オペレータだとメンバ関数な実装多いよね
なんでだろう

318 :デフォルトの名無しさん:2019/11/27(水) 19:40:34.02 ID:nSz8Pwyp.net
RTOSを使うような小規模環境だと
ヒープをしなかったりアロケートのみにしたりする
そんな環境でもC++は便利なので使えるなら使いたい

319 :デフォルトの名無しさん:2019/11/27(水) 19:40:48.50 ID:nSz8Pwyp.net
ヒープを搭載しなかったり

320 :デフォルトの名無しさん:2019/11/27(水) 19:48:12.34 ID:nSz8Pwyp.net
OSレスでもC++が使えるなら使う
実際それで製品出した

321 :デフォルトの名無しさん:2019/11/27(水) 19:52:22.88 ID:q8B3tEUN.net
対称が大事なのって、交換法則が成り立つ計算だから?

322 :デフォルトの名無しさん:2019/11/27(水) 19:54:03.88 ID:nSz8Pwyp.net
引き算の立場は?

323 :デフォルトの名無しさん:2019/11/27(水) 19:57:18.53 ID:nSz8Pwyp.net
主役がはっきりしてる場合はメンバ
同等な重要度の時は非メンバ

私の場合はだいたいこんな感じ

324 :デフォルトの名無しさん:2019/11/27(水) 19:58:30.31 ID:nSz8Pwyp.net
対称かどうかはあまり関係ない

325 :デフォルトの名無しさん:2019/11/27(水) 20:25:32.56 ID:vYtjQlD0.net
対称性が特に問題になるのはオペランドの型が異なるケースだな
対称な演算a.op(b)をaのクラスに実装したらbのクラスにも同じものをコピペするのか?
C#の演算子オーバーロードがstaticなのはそのへんが理由だとか
Pythonなどのスクリプト言語では基本的にインスタンスメソッドとして演算子を実装するけど、
それは動的型故に事前に実装を解決できないからだね

326 :デフォルトの名無しさん:2019/11/27(水) 20:29:53.87 ID:EGeQZX97.net
>>317
かつて非メンバ関数のオペレータを名前空間の外から呼び出そうとするととても残念な気持ちになるからじゃね

327 :デフォルトの名無しさん:2019/11/27(水) 20:44:42.44 ID:0U9h+SK3.net
オペレータオーバーロードを使うとカッコイイ気分にひたれるからだろ
それ以外の理由なんてあるのか?

328 :デフォルトの名無しさん:2019/11/27(水) 20:45:44.57 ID:E2H9effp.net
private変数の書き換えを伴うものだけメンバだな
Pointが座標値しか持ってないようなのならコンストラクタ以外は持たせない

329 :デフォルトの名無しさん:2019/11/28(Thu) 01:38:08 ID:PoPpbfsh.net
代入は普通メンバだろ

=
+=
-=
*=
/=

[ ]も

330 :デフォルトの名無しさん:2019/11/28(Thu) 01:44:12 ID:PoPpbfsh.net
当然符号も

331 :はちみつ餃子 ◆8X2XSCHEME :2019/11/28(Thu) 02:14:28 ID:+45JwpRI.net
>>303
これは後者が良い場合が多い。
型変換の対称性が絡むんだよ。

たとえば std::tuple<double, double> から Point への変換コンストラクタが用意されているようなとき、
メンバ関数として実装されていると左辺ではこの型変換が考慮されず、右辺では考慮されるということになる。

332 :デフォルトの名無しさん:2019/11/28(木) 02:50:39.48 ID:4GnG2KNj.net
>>329
代入系と添字はそもそもメンバとしてしか書けない

333 :デフォルトの名無しさん:2019/11/28(木) 06:43:27.57 ID:PoPpbfsh.net
>>332
>>328に言って

>>331
対称性は関係ないって
Point * double
だって型変換された方が都合が良いなら非メンバだろうに

334 :デフォルトの名無しさん:2019/11/28(木) 08:02:30.92 ID:A3g54Di2.net
>>316
ほーう?
そんなことすら知らないのかww

335 :デフォルトの名無しさん:2019/11/28(木) 08:09:05.07 ID:YpOyjZW5.net
>>334
ハッタリしかできることねえようだな
まあ、そうだろう

336 :デフォルトの名無しさん:2019/11/28(木) 08:20:32.24 ID:PoPpbfsh.net
フラグメントが問題になるならアロケート専用で解放出来ないようにするとかそもそもアロケート出来ないようにするとか
固定サイズを頻繁になら独立させておけばフラグメントしない

337 :デフォルトの名無しさん:2019/11/28(木) 08:21:42.93 ID:PoPpbfsh.net
ヒープはヒープで1個の研究分野になるくらい
いろんな技術、方法がある

338 :はちみつ餃子 :2019/11/28(木) 17:46:42.56 ID:+45JwpRI.net
>>333
???
理解できないのでもうちょっとくやしく

339 :デフォルトの名無しさん:2019/11/28(木) 18:11:40.54 ID:PoPpbfsh.net
>>338
今回たまたま対称であったというだけで
対称性が理由じゃないってこと

ベクトル※ベクトル
ベクトル※スカラー
ベクトル※行列
ベクトル※矩形

なんであれ型変換された方が良いなら非メンバ

340 :はちみつ餃子 :2019/11/28(木) 18:23:49.08 ID:+45JwpRI.net
>>339
なるほど、一般化した場合の話になってるわけね。

341 :デフォルトの名無しさん:2019/11/28(木) 19:15:35.47 ID:nxFPf5Ar.net
begin()とend()があればRangeなんですか?

342 :デフォルトの名無しさん:2019/11/28(木) 23:41:46.98 ID:iCLeSa8c.net
だいたいそうよ

343 :デフォルトの名無しさん:2019/11/29(金) 04:19:50 ID:KHTBF+uC.net
そうですか。
どうもありがとうございます。

344 :デフォルトの名無しさん:2019/11/29(金) 08:06:17 ID:R3LtoROu.net
新明解C++買ったけどなにもしてない

345 :デフォルトの名無しさん:2019/11/29(金) 08:29:36 ID:KHTBF+uC.net
std::uint8_tってstd名前空間にあるけど、名前空間で修飾しなくても使えるのは何故ですか?

346 :蟻人間 ◆T6xkBnTXz7B0 :2019/11/29(金) 08:53:08 ID:7m3ynrwG.net
>>345
usingを使っているから。

347 :デフォルトの名無しさん:2019/11/29(金) 09:06:38 ID:KHTBF+uC.net
>>346
自分でusingしてなくても大丈夫ですか?

348 :デフォルトの名無しさん:2019/11/29(金) 09:34:32 ID:N/f9f1S7.net
a[i] = b;
みたいなのき
a に対して a.setitem(i, b); するのと
a.getitem(i) が参照を返す様にしておいて a.getitem(i) = b; するのと
どっちが正解?

349 :デフォルトの名無しさん:2019/11/29(金) 09:41:11.46 ID:B0LTR+GE.net
JavaのArrayListは a.get(i) = b; になってるので長いもんには巻かれろと思考停止で真似るだけ

350 :デフォルトの名無しさん:2019/11/29(金) 11:40:28.80 ID:oVgX/GuB.net
>>345
#include <cstdint>は
#include <stdint.h>
つまりCのライブラリだからだ

typedef unsigned char uint8_t;

#ifdef __cplusplus
namespace std {
using ::uint8_t;
}
#endif

こうなっているだけだ

351 :デフォルトの名無しさん:2019/11/29(金) 11:53:00.94 ID:Ml/gOmNO.net
さすがに整数型にまでstdつけるのはうざい
なのでcのヘッダーを使ってる

352 :デフォルトの名無しさん:2019/11/29(金) 12:40:38.17 ID:pYMGuCeV.net
stdを省略する方がウザい

353 :デフォルトの名無しさん:2019/11/29(金) 12:45:20.21 ID:gmGtMFq3.net
何の情報も増えないし紛れも何もない

意味の無い情報に5文字も余分に使いたくない
画面も入力の手間も

354 :デフォルトの名無しさん:2019/11/29(金) 12:47:51.78 ID:gmGtMFq3.net
int8_t がcharで、std::int8_t がsigned char とか?
それは御愁傷様

355 :デフォルトの名無しさん:2019/11/29(金) 12:52:13.51 ID:lef7gBlN.net
STL使ってスタティックビルドしてるコンソールプログラムあるけど、
ファイルサイズ 400KBぐらいだな。圧縮した状態で200KB
これが20KBぐらいに減るのかー、でも誰も喜ばないだろうな。

356 :デフォルトの名無しさん:2019/11/29(金) 13:01:25.99 ID:0dBBAnUQ.net
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

357 :はちみつ餃子 :2019/11/29(金) 14:15:39.12 ID:J8eB3+F9.net
>>350 >>350
cstdint 内の名前はマクロを除いて std に入るはず。
グローバル名前空間でも定義されるかどうかは処理系定義じゃなかったっけ?

逆に stdint.h 内の定義はグローバル名前空間でアクセスできるけど、
std 内でも定義されるかどうかは未規定だったように記憶してる。

仕様を読み返すのが面倒なので誰か調査よろ。

358 :デフォルトの名無しさん:2019/11/29(金) 14:21:40.41 ID:Tp6caFY5.net
変数名をメモリやオーバーヘッド無しでエイリアスつける方法ありますか?
メンバ変数に shared_ptr<Data> m_data; みたいなのがあるとして
using text = this->m_data->member.text;
みたいに使いたい変数だけ別名で取り出したい

359 :デフォルトの名無しさん:2019/11/29(金) 14:30:09.62 ID:oVgX/GuB.net
現実問題としてCのライブラリをstdに入れるということ自体が馬鹿げた話だ
今の流れはuint8_tの話だが、extern "C"の関数は装飾名に名前空間が含まれない

360 :デフォルトの名無しさん:2019/11/29(金) 14:35:12.66 ID:yQ0DwMtc.net
>>358
一番簡単なのは、
auto &text = this->m_data->member.text;
とすることです。

361 :デフォルトの名無しさん:2019/11/29(金) 14:37:49.63 ID:Tp6caFY5.net
>>360
現状それでやってますが、コンパイル時に確定できるのなら他に方法があるのかと思いました

362 :はちみつ餃子 :2019/11/29(金) 14:45:49.13 ID:J8eB3+F9.net
>>361
そういう簡単なケースだと最適化でちゃんと消えてくれるんじゃね?

363 :デフォルトの名無しさん:2019/11/29(金) 14:56:28.90 ID:KzrCIvE1.net
参照解決のコストすら嫌なら
#define text this->m_data->member.text

364 :デフォルトの名無しさん:2019/11/29(金) 14:56:51.37 ID:GB3X2IZU.net
コンパイル時に確定してるじゃん

365 :デフォルトの名無しさん:2019/11/29(金) 15:07:19.89 ID:M3WjIH4t.net
むしろもとの書き方だと2度参照解決して3度足し算しているような…

366 :デフォルトの名無しさん:2019/11/29(金) 15:21:18.81 ID:YkvT9y9m.net
textに実行時にアクセスするなら
いずれにしろアドレス計算は必須になる

>>360のようにすれば
最適化がうんこで複数回計算されるのを防ぐ可能性すらある

アクセスしないならおそらく最適化によってアドレス計算コードは生成されない

367 :デフォルトの名無しさん:2019/11/29(金) 15:50:36.19 ID:N/f9f1S7.net
inline付けるとかえって損か

368 :デフォルトの名無しさん:2019/11/29(金) 17:45:51.93 ID:/RbGsSZk.net
m_data の型が shared_ptr<Data> なことを気にしてるのかな。
shared_ptr の指す先のメンバを参照変数でバインドするのは無作法か、とか。

と言うか、上の話は俺の疑問でもあるんだけど。

369 :デフォルトの名無しさん:2019/11/29(金) 18:15:50.93 ID:4DEcYZGM.net
->
に副作用があるならそりゃ話は別だ

370 :デフォルトの名無しさん:2019/11/29(金) 18:44:49.74 ID:xP2G2+ZO.net
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
え?リリースするときスタティックリンクして配布するのかって?
ダイナミックリンクするけど?

371 :デフォルトの名無しさん:2019/11/29(金) 18:46:27.54 ID:xP2G2+ZO.net
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
え?リリースするときスタティックリンクして配布するのかって?
ダイナミックリンクするけど?
え?なんで俺が笑われてるの?

372 :デフォルトの名無しさん:2019/11/29(金) 20:21:36.93 ID:KHTBF+uC.net
どうもありがとうございます。

373 :デフォルトの名無しさん:2019/11/30(土) 16:27:23.28 ID:4Yq6PogE.net
constexpr定数とconst定数って結局何が違うの?

374 :デフォルトの名無しさん:2019/11/30(土) 16:40:26.74 ID:WebQyLi7.net
コンパイラに対する単なるヒント
優れたコンパイラでも糞コンパイラでも動きほ同じ
中途半端なコンパイラだと最適化のレベルがもしかしたら違うかも
コンパイル単位にもよる

375 :デフォルトの名無しさん:2019/11/30(土) 17:34:29.84 ID:sGzVq6Pz.net
constexpr定数はコンパイル時に値が確定することが保証されている

376 :デフォルトの名無しさん:2019/11/30(土) 17:35:37.90 ID:iKPiHg5H.net
>>373
constexpr定数はconstexprな文脈を作る。つまり、
constexpr int a = func()
とするとfunc()はコンパイル時に実行される。当然constexpr関数でなければならない

一方、const定数はconstexprな文脈は作らない
const int a = func()
とした時、func()は実行時に処理される。constexpr関数である必要はない

377 :デフォルトの名無しさん:2019/11/30(土) 17:40:18.51 ID:4Yq6PogE.net
ああ、初期化に関数を使うと違いが出るんですね
それにconstexprの場合は初期化が保証されていると
ありがとうございました

378 :デフォルトの名無しさん:2019/12/01(日) 01:46:51.73 ID:j3uX5vWG.net
constexprの強みは、配列のサイズみたいな定数を要求される文脈で使えるってこと。
const変数だとこれができないから、昔はマクロで定数定義するしかなかった。

379 :デフォルトの名無しさん:2019/12/01(日) 01:49:20.00 ID:Hj4I5N6m.net
>>378 C++ではconst変数も一部定数式扱いになってたでしょ。だから>>373みたいな疑問が出る。

380 :デフォルトの名無しさん:2019/12/01(日) 01:54:44.83 ID:Nfz3Rlxp.net
sizeofと何が違うんだ

381 :デフォルトの名無しさん:2019/12/01(日) 08:35:44.43 ID:7fh/nHBZ.net
constは設計ミスが多いな

382 :デフォルトの名無しさん:2019/12/01(日) 08:36:58.95 ID:7fh/nHBZ.net
とても神リッチーが作ったように見えない

383 :デフォルトの名無しさん:2019/12/01(日) 10:24:23.58 ID:gHT6E7kc.net
STLにはなぜ木が無いのですか。

384 :デフォルトの名無しさん:2019/12/01(日) 10:27:51.87 ID:sKSeAmO2.net
大昔のC言語時代に考えた物だから
関数を使った初期化が出来ない時代の

385 :デフォルトの名無しさん:2019/12/01(日) 10:31:53.72 ID:sKSeAmO2.net
>>383
std::set とか、内部は木じゃね?

汎用的な木?
ポインタのvectorで良くない?

386 :デフォルトの名無しさん:2019/12/01(日) 10:56:13.36 ID:SqfEoEmM.net
Javaでも.NETでも標準ライブラリに木は無いだろ
木はメモリへのシリアライズの仕方を工夫せずに素直にノード毎にnewしてたら殆どあらゆるケースにおいてクッソ非効率なデータ構造なので、
標準ライブラリとして提供する意義が薄い
誤った選択肢を提供することで余計にパフォーマンスを低下させることになるだけだ

387 :デフォルトの名無しさん:2019/12/01(日) 11:03:00.54 ID:sKSeAmO2.net
listもsetもノードごとにnewしてるけど

388 :デフォルトの名無しさん:2019/12/01(日) 11:15:38.03 ID:gHT6E7kc.net
ダブルアレイを変形させて木を表現できないでしょうか。
子は親のIDを知っていれば良く、親は子の個数を知っていれば良いので、出来そうな気がするのですが。

389 :デフォルトの名無しさん:2019/12/01(日) 11:16:42.54 ID:SqfEoEmM.net
>>387
うん。だから遅いよ。

390 :デフォルトの名無しさん:2019/12/01(日) 11:29:39.61 ID:7fh/nHBZ.net
だから形容詞には比較や数値をつけろってば
それじゃ健康産業で不安を煽る悪徳業者そっくりだろうが

391 :デフォルトの名無しさん:2019/12/01(日) 11:50:38.89 ID:p3Z7Nr0h.net
遅いlistやsetがstlに入っていて使われ続けてるんだから
stlに入れない理由にはならないってことだよあほ

392 :デフォルトの名無しさん:2019/12/01(日) 11:53:33.72 ID:rKmqg7A0.net
いやそんなもん使うやつらがそもそもc++使う必要がねーって話だわ

393 :デフォルトの名無しさん:2019/12/01(日) 11:55:51.88 ID:YWi4MX0G.net
それはお前の個人的な意見?
それとも何かデータでもあるの?

394 :デフォルトの名無しさん:2019/12/01(日) 12:11:13.07 ID:p3Z7Nr0h.net
listやsetが適した用途があるから存在してるんだけどね
使いどころ間違ってるんじゃない?

395 :デフォルトの名無しさん:2019/12/01(日) 12:14:27.64 ID:p3Z7Nr0h.net
同じ用途なら
newやdeleteを使わなかったとしても
結局ノード作成時に空きエリアを探すことになるわけで

396 :デフォルトの名無しさん:2019/12/01(日) 12:17:14.00 ID:p3Z7Nr0h.net
ノード追加専用のスペシャルlistやsetなら速くなるけど
それはもはやlistやsetじゃない

397 :デフォルトの名無しさん:2019/12/01(日) 12:21:44.69 ID:vEIKl7N1.net
プログラムのすべての部分で最速の選択をする必要なんて全く無いのに>>392みたいなことを言うやつはCかFortranで書けばいいんじゃないかな

398 :デフォルトの名無しさん:2019/12/01(日) 12:29:30.42 ID:SqfEoEmM.net
>>394
残念ながら、setはともかくlistが適しているシーンは実際にはほとんどない
途中への少数の要素の挿入削除が頻繁にあって事前にその位置が分かっている状況などどれほどあるというのか

399 :デフォルトの名無しさん:2019/12/01(日) 12:32:06.35 ID:p3Z7Nr0h.net
>>398
使いどころがわからないなら無理して使わなくて良いんだよ

400 :デフォルトの名無しさん:2019/12/01(日) 12:33:53.83 ID:SqfEoEmM.net
>>399
具体例を示そうね

401 :デフォルトの名無しさん:2019/12/01(日) 12:34:14.31 ID:p3Z7Nr0h.net
>>397
10%の高速化なら無視すればいいけど
1000倍とかなら考えるだろ?
vectorとlistとsetの選択を間違えると
そのくらいの差が出る
データ数が多ければ

402 :デフォルトの名無しさん:2019/12/01(日) 12:41:44.01 ID:IheeS71f.net
ソートが早い

403 :デフォルトの名無しさん:2019/12/01(日) 12:47:37.78 ID:gHT6E7kc.net
イテレータの安定性が。

404 :デフォルトの名無しさん:2019/12/01(日) 12:53:47.75 ID:ZEhocPVE.net
>>397
最速のものを使う必要はないがそもそもアルゴリズムオーダーが間違ってるようなものを
使うってのは頭悪すぎるし、なぜc++使ってんの?バカなの?ファッション?
って気にしかならん。

405 :デフォルトの名無しさん:2019/12/01(日) 12:57:04.85 ID:7fh/nHBZ.net
「そんなもん使う」なんて全面否定しといて
今さらアルゴリズムオーダーとか言い出すのは見苦しい

406 :デフォルトの名無しさん:2019/12/01(日) 12:58:17.95 ID:gHT6E7kc.net
木とグラフが足りないと思います。

407 :デフォルトの名無しさん:2019/12/01(日) 12:58:25.43 ID:n5DjgtsH.net
イニシャルコストとランニングコストがあるだろ
数か月〜数年間止まらないようなソフトウェアだと初回起動時のデータ読み込み10億件・数分程度は誤差で済む

408 :デフォルトの名無しさん:2019/12/01(日) 13:00:02.95 ID:IheeS71f.net
現存するあらゆるコンテナを実装してくれ

409 :デフォルトの名無しさん:2019/12/01(日) 13:00:34.69 ID:YWi4MX0G.net
>>401
> 1000倍とかなら考えるだろ?

いや? 0.0001ミリ秒が0.1ミリ秒になったところで
大した問題じゃないからね

410 :デフォルトの名無しさん:2019/12/01(日) 13:02:56.20 ID:7fh/nHBZ.net
実害が出るかどうかはケースによるのに
全てお見通しの仏様か何かになったつもりのやつが変なことぬかすんだよな

411 :デフォルトの名無しさん:2019/12/01(日) 13:08:14.41 ID:p3Z7Nr0h.net
>>409
1分と1000分なら大違い
トータル0.1ミリ秒なら何でも良いよ気にするな

データが多い時の話
オーダーが効いてくる

newの時間なんてオーダーの差に比べれば誤差
毎回newだから遅いとかトンチンカン

412 :デフォルトの名無しさん:2019/12/01(日) 13:09:03.33 ID:gHT6E7kc.net
Boostにイテレータが安定なvectorがありますが、速度はlistに劣る場合があると但し書きがありますよ。

413 :デフォルトの名無しさん:2019/12/01(日) 13:16:11.26 ID:p3Z7Nr0h.net
データ構造は
list, set, リニア(vectorやdeque) で揃ってる
これでオーダー的には大抵は問題ない

微妙な高速化が必要なら専用を自作すれば良いが
組み込みでもなければ必要となることはあまりない

複雑なデータ構造は、
標準のデータ構造を組み合わせて作る
複雑なリンク構造はSLAMの世界だとよく使う

414 :デフォルトの名無しさん:2019/12/01(日) 13:20:19.28 ID:ZEhocPVE.net
いや明らかにsetのオーダーに問題あるだろ。

415 :デフォルトの名無しさん:2019/12/01(日) 13:23:43.76 ID:p3Z7Nr0h.net
えっ?

416 :デフォルトの名無しさん:2019/12/01(日) 13:25:41.03 ID:ZEhocPVE.net
思考停止してないでこれくらいは読んでくれよ。。
https://cpprefjp.github.io/reference/set/set.html

417 :デフォルトの名無しさん:2019/12/01(日) 13:31:07.65 ID:gHT6E7kc.net
読みました。

418 :デフォルトの名無しさん:2019/12/01(日) 13:31:36.80 ID:B2zYeZ5e.net
メモリの再配置が起こると都合が(あるいは効率が)悪いオブジェクトを比較的頻繁にnew/deleteしつつ、
一覧を保持しておく用途にはlistが適していると思う。
あ、でも、本体をdequeに、ポインタをvectorに入れて管理する方が速いかな? バグりそうで恐いけどw

419 ::2019/12/01(日) 13:51:31.01 ID:mRJ420VP.net
>>386
木をそこまで悪くいう人を初めて見かけました、大概のデータ構造は木だと思うのですけど…

420 :デフォルトの名無しさん:2019/12/01(日) 13:56:38.18 ID:p3Z7Nr0h.net
下手くそが巨体な木を作るとひどいって話だろ
下手に作らなきゃ良いだけ

421 :デフォルトの名無しさん:2019/12/01(日) 14:14:45.54 ID:YC7h427T.net
>>414
問題にならない用途、条件のもとで使う分には問題ない。

422 :デフォルトの名無しさん:2019/12/01(日) 14:32:23.94 ID:9nkP+L/s.net
きみはあれか
「ライトバンはセダンにくらべると速度も遅いし馬力もないしとてもあんなもの使えない!」
とかいっちゃうタイプ?

423 :デフォルトの名無しさん:2019/12/01(日) 14:47:10.92 ID:HFxN8/oH.net
>>419
お前は頭が悪いけどな

424 :デフォルトの名無しさん:2019/12/01(日) 15:33:24.99 ID:zRxwjdrk.net
一般的には、適切な二分木等で実装されたSetは、メモリ効率が悪いことはあっても速度のオーダーがひどいってことは無いだろ

425 :蟻人間 :2019/12/01(日) 15:40:09.97 ID:CG2Vs9XU.net
C++11のstd::unordered_setに負けてる。

426 :デフォルトの名無しさん:2019/12/01(日) 15:45:18.33 ID:7fh/nHBZ.net
それはまた別な話だ

427 :デフォルトの名無しさん:2019/12/01(日) 16:25:31.35 ID:BhgcTKiH.net
二分木がSTLにない理由は簡単。冗長だから。

428 :デフォルトの名無しさん:2019/12/01(日) 16:26:58.04 ID:p3Z7Nr0h.net
setは内部2分木だって言ってるのに

429 :デフォルトの名無しさん:2019/12/01(日) 17:09:51.64 ID:7fh/nHBZ.net
>>422
うまい喩えだなw

430 :デフォルトの名無しさん:2019/12/01(日) 17:18:14.34 ID:BhgcTKiH.net
>>428
もしかして二分探索と二分木を混同してる?

431 :デフォルトの名無しさん:2019/12/01(日) 17:33:23.47 ID:YHuSOkLJ.net
木の枝を回廊にしたらグラフになります。
グラフはスパコンのベンチマークにされるくらいにメジャーな構造です。

432 :デフォルトの名無しさん:2019/12/01(日) 17:36:46.35 ID:YWi4MX0G.net
>>411
自分で言ってるやん?

データが少ないときなら気にする必要はないので、
データが少ないとき用のアルゴリズムとして
「遅いけど便利」はあったほうが良いだろ

433 :デフォルトの名無しさん:2019/12/01(日) 18:14:48.13 ID:XkMP/E25.net
普通ハッシュ使うよね?とかそういう発想が皆無なのが、
ここは馬鹿しかいないってことを示してるよな。。

434 :デフォルトの名無しさん:2019/12/01(日) 18:19:34.55 ID:Enyr5Fgf.net
>>430
多分混同してるのはお前だけかと

435 :デフォルトの名無しさん:2019/12/01(日) 18:22:27.22 ID:Enyr5Fgf.net
>>433
バカはお前

set は一般的に、二分木として実装される。
https://cpprefjp.github.io/reference/set/set.html

436 :デフォルトの名無しさん:2019/12/01(日) 18:36:45.84 ID:n5DjgtsH.net
ハッシュを使うんじゃねえな
ハッシュをどう作るか?になる

perl5/hv.h at blead ・ Perl/perl5 ・ GitHub
https://github.com/Perl/perl5/blob/blead/hv.h

cpython/dict-common.h at master ・ python/cpython ・ GitHub
https://github.com/python/cpython/blob/master/Objects/dict-common.h

437 :デフォルトの名無しさん:2019/12/01(日) 18:53:22.71 ID:ManO1ilk.net
木やグラフがほしいって言ってる人が、ハッシュマップや内部実装だけが木構造のコレクションなんていらんだろ。。

438 :デフォルトの名無しさん:2019/12/01(日) 19:11:19.73 ID:IheeS71f.net
うんち

439 :デフォルトの名無しさん:2019/12/01(日) 19:20:12.56 ID:fP4CRSrQ.net
「木が欲しい」という要件に対して確認もなく二分木渡すような奴はダメ
ディレクトリ構造表したい奴に二分木渡してどうすんだ

440 :デフォルトの名無しさん:2019/12/01(日) 19:25:06.56 ID:WB/GHlzr.net
二分木って規格で決めてるの?

441 :デフォルトの名無しさん:2019/12/01(日) 19:36:32.68 ID:IheeS71f.net
うんち

442 :デフォルトの名無しさん:2019/12/01(日) 20:13:00.99 ID:p3Z7Nr0h.net
「木が欲しい」なんていう人には
とりあえず何でもいいから木を渡しておけばいいんだよ

443 :デフォルトの名無しさん:2019/12/01(日) 20:31:05.42 ID:p3Z7Nr0h.net
木は用途や使い方次第で適する作り方が異なるので
標準コンテナを組み合わせたカスタムで良いと思うよ

444 :デフォルトの名無しさん:2019/12/01(日) 20:51:16.81 ID:YHuSOkLJ.net
https://ideone.com/u8DxeY
ほら〜。あそこに見えるのがN分木のさんぷるだよ〜。
デバッグしてないから酒の肴にぴったりだよ〜。

445 :デフォルトの名無しさん:2019/12/01(日) 21:01:15.36 ID:BhgcTKiH.net
C++11以降なら子ノードをweak_ptrの配列で持つとか?

446 :デフォルトの名無しさん:2019/12/01(日) 21:09:55.37 ID:YHuSOkLJ.net
>>444
言い忘れていたが、このスレから取得したN分木のコード(>>444)はMITライセンスです。
改造して変な構造を作ろう!

447 :デフォルトの名無しさん:2019/12/01(日) 21:31:39.82 ID:vEIKl7N1.net
著作権表示なしにMITライセンスにできたっけ

448 :デフォルトの名無しさん:2019/12/01(日) 22:14:07.56 ID:9WgCOaQB.net
サンプルとかライセンスとか頭沸いてんのかこいつ
下痢便を神棚に飾って人に配るような所業

449 :デフォルトの名無しさん:2019/12/01(日) 22:32:33.44 ID:YHuSOkLJ.net
著作権表示は、

2019 Yakitori

が必要なら使って。

450 :デフォルトの名無しさん:2019/12/01(日) 22:32:48.31 ID:YHuSOkLJ.net
>>449
日本語不自由だな

451 :デフォルトの名無しさん:2019/12/01(日) 22:38:20.61 ID:vEIKl7N1.net


452 :デフォルトの名無しさん:2019/12/01(日) 22:41:32.80 ID:IheeS71f.net
うんち漏れそう

453 :デフォルトの名無しさん:2019/12/02(月) 00:33:17 ID:RIgVO6ZZ.net
>>448
だな

454 :デフォルトの名無しさん:2019/12/02(月) 02:45:23.23 ID:btxUm/V/.net
オランダのTIOBEの調査でも、C#よりJavaやC/C++が人気で、
他の会社による日本での求人数もJavaやC/C++の方がC#より上だそうだ。
JavaScript、PythonやRubyは、求人数では大したことが無いらしい。
Webページを製作している人がネットでは多いので、JS、Python、Ruby
などが人気であるかのように見えるだけかもしれない。

455 :デフォルトの名無しさん:2019/12/02(月) 03:22:15 ID:Lvay36w9.net
>>454
すまん。日本での求人数は、
Java, PHP, Ruby, C#, JS, Python, Objective-C/Swift, C/C++,
HTML, Android, Unity, VB.NET, Scala
だそうだ。ただし、C#から、C/C++ までは横並びでどれが上とも
いえない僅差。そして、Java, Python, Ruby は伸びているが、
PHP, C#, JS, HTML は減っている。
ところが、プログラマ側からの「希望言語」としては、JSがTOP
らしい。アメリカでの今後学びたい言語としては、Java, Pyhtho,
C++ は上位に来るが、C#, Ruby はかなり下の方。

456 :デフォルトの名無しさん:2019/12/02(月) 03:29:10.52 ID:Lvay36w9.net
>>455
個人的見解としては、VS code が 5ch で評価が高かったのは、言語が
TypeScript や JavaScript と HTML で記述されているので、JSで
プログラムすることを希望するプログラマが、JSの求人を増やすために
JS製の成果物を高く評価していたからかもしれない。
また、Javaの伸び率はかなり高い。Rubyの求人は日本では多いようだが、
アメリカでは少ない。C#の人気は、ある時期までは延びたが、今は停滞期
に入ったようだ。しかも今後学びたい言語としては、C よりも低い。

457 :デフォルトの名無しさん:2019/12/02(月) 03:36:47.51 ID:Lvay36w9.net
TIOBEの調査では、Java と Cの人気が同列で高く、Python がそれに続く。
また、CとC++を合計すると、Javaよりもだいぶ高い人気となる。

Java 16.2% (-0.50)
C 16.0% (+1.64)
Python 9.84% (+2.16)
C++ 5.60% (-2.68)
C# 4.31% (+0.36)
VB.NET 4.22% (-2.26)
JS 1.93% (-0.73)
PHP 1.72% (-0.66)
SQL 1.69% (-.15)
Swift 1.65% (+0.20)
Ruby 1.26% (+0.17)
Objective-C 1.20% (-0.28)
・・・
D 0.927% (-0.64)
Go 0.853% (-0.64)

458 :デフォルトの名無しさん:2019/12/02(月) 03:57:59.67 ID:qRRc8YVo.net
CとC++とC#の区別ができる営業いないんだよな

459 :デフォルトの名無しさん:2019/12/02(月) 04:06:59 ID:3lD7gpLY.net
営業って年取った技術者がやるもんだろ

460 :デフォルトの名無しさん:2019/12/02(月) 06:49:53 ID:MoZo3p1s.net
今はもう戦力外技術者なんて即解雇だよ
そもそも大手だと営業と技術者は別会社

461 :デフォルトの名無しさん:2019/12/02(月) 07:41:42.15 ID:tW9RdYoY.net
なんで大手条件が勝手に加わるのか

462 :デフォルトの名無しさん:2019/12/02(月) 08:23:03 ID:mQVkXZA1.net
零細中小なんて誰も興味ない

463 :デフォルトの名無しさん:2019/12/02(月) 08:42:45.44 ID:GldGaTIn.net
比較するもんじゃないだろ
C++は好きだが、在庫管理システムをC++で書けと言われたら全力で拒否してC#を推すぞ俺は

464 :デフォルトの名無しさん:2019/12/02(月) 11:06:47 ID:5u9Q6RC4.net
ほんとそれだな
きみらはいつになったらライトバンとセダンの使い分けができるようになるのか・・

465 :デフォルトの名無しさん:2019/12/02(月) 11:42:23.75 ID:L9XsPrRa.net
>>464
君「ら」?
お前のことだろ

466 :デフォルトの名無しさん:2019/12/02(月) 13:15:55 ID:/N45p/D+.net
でもJavaはベンチとると速いんだけど、実際は遅い。
これ、リソースを食いすぎるのが原因なので、本当はサーバーよりクライアントに向いているんじゃないのかな。

467 :デフォルトの名無しさん:2019/12/02(月) 13:16:09 ID:xJykAg3Z.net
ライトバンとセダン?

スリッパと自転車と乗用車と飛行機とロケット
くらい使い分けないとダメ

468 :デフォルトの名無しさん:2019/12/02(月) 13:19:02 ID:/N45p/D+.net
C++はメモリーの分断化があるので、長時間起動し続けるサーバーには向いていないと言われてるんだけど、実際にやってみたら全く問題なかった。
考えてみると、JavaプログラムをホストするシステムがC/C++で書かれてるんだから、本当に問題になるなら、Javaも無理なはず。

469 :デフォルトの名無しさん:2019/12/02(月) 13:20:28 ID:/N45p/D+.net
Androidは特に不満もなく動くので、Javaはクライアントでこそ力を発揮するような気がします。

470 :デフォルトの名無しさん:2019/12/02(月) 13:21:19 ID:xJykAg3Z.net
メモリは潤沢にあるし
アドレス変換もあるので
よほど下手に作らなければ
PCでフラグメントは問題にはならない
そんな事を心配する時代じゃない

組み込みだと話は別

471 :デフォルトの名無しさん:2019/12/02(月) 13:21:57 ID:/N45p/D+.net
機種ごとの差を言語が吸収してくれるなら、こんな楽なことないし。
一方、サーバーは、サービス提供側が機種を自由に選べるのでJavaである必要が無いと思う。

472 :デフォルトの名無しさん:2019/12/02(月) 13:23:17 ID:xJykAg3Z.net
>>469
比較的最近追加された
リアルタイム系オーディオAPIは
C/C++での提供ですね

用途によってはいまだにC/C++が必要

473 :デフォルトの名無しさん:2019/12/02(月) 13:23:19 ID:/N45p/D+.net
>>470
でも、フラグメントが・・・と言われると、なるほどと思うじゃないですか。
僕もいずれ別の言語で書き換えるつもりだった。
でも問題なかった。

474 :デフォルトの名無しさん:2019/12/02(月) 13:30:11 ID:wB1a1keO.net
>>468
それは完全に理解不足
Javaや.NETのVMはC++で静的に確保した大きなメモリ領域をヒープと呼んでいる
でアプリ内でnewするとオブジェクトとしてその中の領域が割り当てられ、ハンドル(生ポではない!)をアプリがオブジェクト参照として受け取る
C++のオブジェクトとの大きな違いはオブジェクトを再配置できることであり、
GCが必要に応じてヒープ上のオブジェクトを移動して詰めるため断片化が生じにくい
C++でも生ポを使わなければ再配置できるんだけどね

475 :デフォルトの名無しさん:2019/12/02(月) 13:31:49 ID:az4xQt0G.net
メモリ激増のお陰じゃねえの

476 :デフォルトの名無しさん:2019/12/02(月) 13:41:55 ID:qRRc8YVo.net
その辺はOSの仕事であるべきやと思うわ

477 :デフォルトの名無しさん:2019/12/02(月) 13:49:06 ID:az4xQt0G.net
やってることがさほど変わらず100MB確保から1GB確保にするだけで
断片化率が1/10になる

プログラミングの技量が全く変化しないのにも関わらず安全性が10倍になる
つまりマシンの搭載メモリが1GBから10GBになるだけで安全係数が10倍になる
これぞ大富豪プログラミング

478 :デフォルトの名無しさん:2019/12/02(月) 15:06:09.31 ID:rcvN6dfE.net
>>474
windows3.1のGlobalAllocみたいのを今さらドヤられても…

479 :デフォルトの名無しさん:2019/12/02(月) 15:20:31.50 ID:Vo2mhncO.net
>>468
実はかなり古くから、C/C++ の malloc(), new のヒープメモリから確保したメモリの
断片化は、実際に問題になるようなことはとても少ないといわれています。
というのは、断片化というのは、確保したメモリを開放したときに出来た
「隙間にある空きメモリ」が再利用されにくい場合に起きるものなんですが、
実際には、再利用されることが多いためです。なぜなら、おなじサイズの
オブジェクトを new することが多いためです。この場合、完全に再利用されるので
断片化の問題と言うものは全く起きないと言っても過言では有りません。
それから、通常、1つのオブジェクトのサイズは小さく、それが多数集まって
データをなしていることが多いのです。このことから、異なるサイズのオブジェクト
であっても、1つ1つのオブジェクトのサイズが小さいため、断片化したとしても、
再利用される確率が高いのです。まず、同じサイズのオブジェクトであれば再利用されます。
異なるサイズであっても、昔開放されたオブジェクトよりも、小さいサイズのオブジェクトを
新しく確保する場合であれば再利用されます。
このようなことから現実の例では、断片化しても、使われないメモリの量はある程度の比率
に収まると言われており、それは GarbageCollection を行うためのオーバーヘッドの
メモリのサイズと比べても余り大きいものではないのです。

ゲームはメモリー効率も求められますが、それでも C/C++ が使われているのは、
メモリー断片化の量が一定比率より多くなら無い事が経験的に知られているためです。

480 :デフォルトの名無しさん:2019/12/02(月) 15:28:19.20 ID:/N45p/D+.net
フェイスブックがPHPのコードを翻訳機でC++コードに変換して配備してるそうですが。
そんなことするなら最初からC++で書けばいいのに。

481 :デフォルトの名無しさん:2019/12/02(月) 15:33:38.42 ID:Vo2mhncO.net
>>474
C/C++ では、配列ではなくリンクリストを積極的に使うようにすることに
よって、メモリーが断片化しても再利用される確率を高くすることができます。
というのは、データの基本となっている要素のオブジェクトのサイズが
小さいため、さまざまなサイズのデータを new しても、結果的に、
断片化された空きメモリも高い確率で再利用されるためです。
new、delete するオブジェクトのサイズがランダムな場合で、
断片化空きメモリが残っている場合、確率論的には、おおよそ 2回に1回は
断片化空きメモリが再利用されることになるでしょう。もちろん、
delete された回数が少な過ぎる場合、そもそも断片化空きメモリの個数が少なすぎる
ので、再利用できる確率は低くなります。それは、初期化時やファイルからデータ
読み込み時などにどんどんメモリを new していくよう場合ですので、そもそも
断片化が起きる余地も有りません。

なお、ポインタとリンクリストを組み合わせると、よくある場合には、他の
集合アルゴリズムよりも、効率が高くなりやすいことが知られています。
ただし、文字を集合させて文字列を作るような場合は例外です。

482 :デフォルトの名無しさん:2019/12/02(月) 15:39:04.52 ID:Vo2mhncO.net
>>481
配列の場合、delete するとメモリー上に大きな空き領域が出来ますが、
それより大きなサイズの配列を new しようとすると、そこが再利用できません。
なぜなら、配列の場合、連続したメモリ領域が固まって必要になるため、
要素の個数が N だとすると、N 個全てが一度にまとまって入りきる領域を探す
必要になるためです。

ところが、リンクリストの場合、要素数 N が大きくなっても、バラバラな
領域に分散して格納することが出来ます。すると、とても高い確率で、
分断化された空きメモリが再利用されることになります。

483 :デフォルトの名無しさん:2019/12/02(月) 15:50:07.84 ID:Vo2mhncO.net
>>481
「2回に1回」と書きましたが、実際にはもっと確率は高いです。
リンクリストを使っている場合、要素を全部 delete したような場合は、開放された
空きブロックは、余り断片化せずに、比較的高い確率で結合され、大きな空きブロックに
なるためです。空きメモリは、元の要素のサイズの複数個分以上になっている確率が
高くなります(複雑ですが、管理領域のサイズもこれに加わります。)。
この性質があるため、現実には、小さいサイズのオブジェクトを要素とする集合
が多種類有った場合、それを好きに new, delete した場合、50% よりずっと高い確率で
断片化空きメモリーは再利用されます。

484 :デフォルトの名無しさん:2019/12/02(月) 16:10:33.93 ID:Vo2mhncO.net
>>483
誤解無きように細くしておくと、「50% より大きい」というのは、
「断片化された空き領域が再利用される確率」
のことで、「断片化率」ではありません、。断片化率はもっと
小さな値になり、条件によりますが、例えば、数%〜10%程度
が目安になります。最悪のケースだともっと大きいのですが、
ケースバイケースで適切なデータ構造(集合アルゴリズム)を
使っているとこの程度に収まります。また、適切なデータ構造を
選択することはそんなに難しいわけではありません、。

485 :デフォルトの名無しさん:2019/12/02(月) 16:15:53.26 ID:Vo2mhncO.net
>>475
既に、Windows95くらいの時期のメモリ容量で、C/C++のメモリ断片化は
問題が無い程度になっていました。実際には、MS-DOSの時代でも既に
問題なかったのですが。

とにかく、今の若い人の目線で言えば、古代ともいえるくらい古い時代に
既に C/C++ のメモリー断片化問題は問題が無い程度にハードウェアが
発達済みなのです。PC-8801 の 8BIT 時代には問題があったので、
N88-BASIC を筆頭に、GarbageCollection 方式をとっていましたが、
それは、若い人には「超古代文明」時代でしょう。

486 :デフォルトの名無しさん:2019/12/02(月) 16:34:28.08 ID:Vo2mhncO.net
>>485
また誤解が入りそうなので細くしておきます。
N88-BASIC などが GarbageCollection を使っていたのは、本当に
マシンのメモリが少ないのでデータをぎゅーぎゅー詰めに隙間無く
入れることが重要だったためです。
一方、JavaやC#がGarbageCollection を使っているのは、どちらかと
いうと、「メモリー開放の自動化」のためです。参照カウンタだけで
は、循環参照問題が生じるため、時々、広い範囲のメモリブロックを
巡回して、循環参照していても本当に使って無い場合を厳密に見つけ出して、
徹底的に開放することを行います。
そのため、メモリーの断片化問題とはまた違う意味で、メモリー開放の
自動化には、GarbageCollection が必要となっています。

N88-BASIC 時代と、現在の Java, C# とでは、同じ GarbageCollection
でも主な役割が違うと考えられます。もちろん、断片化を防ぐ役割も同時に
果たしてくれますが。

487 :デフォルトの名無しさん:2019/12/02(月) 16:40:43.00 ID:Vo2mhncO.net
>>486
誤字訂正: 細く ---> 補足

・BASIC言語にはポインタが無かったので、循環参照問題は有りませんでした。
・BASIC言語における GarbageCollection は、主に文字列領域の開放のためです。
 A$="HELLO WORLD" と入れた後、A$="" とした時、元の文字列に使っていた
 領域は、しばらく経った後に GarbageCollection で開放される仕組みでした。
 ですので、文字列を余り使わなければ GarbageCollection も余りおきませんでした。
 なお、DIM A(100) のように確保した配列は、余り開放することは有りませんでしたが、
 開放した場合も、しばらく後に GarbageCollection の対象になっていたと思われます。

488 :デフォルトの名無しさん:2019/12/02(月) 17:06:01.34 ID:wB1a1keO.net
リンクリストってシーケンシャルアクセスで毎回キャッシュミスするから、
配列の代わりに全面的に使ったりしたら断片化とか最早どうでもいいレベルでパフォーマンス低下するぞ

489 :デフォルトの名無しさん:2019/12/02(月) 17:15:40.51 ID:Vo2mhncO.net
>>488
リンクリストでシーケンシャルアクセスする場合、キャッシュ以前に
ポインタをたどるようにアクセスしないといけないのですが、
最近、配列と同じような通し番号方式でアクセスしようとする人が
多くなっています。ライブラリなどは、以前にアクセスした番号が
k の場合、そのポインタを覚えておいて、プログラマが k + 1 の番号
をアクセスしようとした場合、後続のノードへのポインタをたどる
ことで高速化している場合があるので、特に問題が無い場合がありますが、
それを深く理解せずに、本当に先頭のノードからたどってしまった場合、
本来なら O(N)で済むところが、O(N^2) になってしまいます。

490 :デフォルトの名無しさん:2019/12/02(月) 17:16:14.80 ID:/N45p/D+.net
>>487
ヌルポ。

491 :デフォルトの名無しさん:2019/12/02(月) 17:18:32.46 ID:Vo2mhncO.net
>>489
C/C++ でのリンクリストは、場所を覚えるのは通し番号ではなく、ポインタ
で行うことが基本です。ところが、最近、通し番号で覚えてしまうプログラムを
書く人が増えているように感じます。それは、キャッシュのために遅くなっているの
ではなく、計算オーダーが完全に違ってくるために遅くなるため、ただごとではない
遅さを招きます。

492 :デフォルトの名無しさん:2019/12/02(月) 20:46:52.56 ID:rSqEF7g8.net
ネトウヨ東大特任准教授、謝罪するも言い訳「AIの過学習によるもの」
https://medaka.5ch.net/test/read.cgi/jsaloon/1575275488/

493 :デフォルトの名無しさん:2019/12/02(月) 20:59:09.09 ID:RyZvLJkF.net
>>487
循環参照問題の有無はポインタ(アドレス)とは関係ないでしょ。

494 :デフォルトの名無しさん:2019/12/02(月) 21:16:13.89 ID:6AEGHd3a.net
TIOBEってなんて読めばいいの?
ちおべ?

495 :デフォルトの名無しさん:2019/12/02(月) 22:59:36.28 ID:OlcC/UBE.net
ハッシュテーブルで要素Xが既存要素Yと衝突した場合でもXを格納したい場合は
リハッシュかリストになる
キモス

リハッシュで容量をちゃんと使い切るには相当にハッシュ関数を考えねばならない上に
衝突データを取り出すのに何回リハッシュしたかを見ながら要素をたどっていく必要があり、
ハッシュの検索性を帳消しにしてしまいかねない

よってリストのが圧倒的に簡単で速い

496 :デフォルトの名無しさん:2019/12/02(月) 23:15:49.08 ID:OlcC/UBE.net
>>493
ある
ガベージコレクト対象データでもって他のガベージコレクト対象データを指し示すような
再帰構造が表現不可能なら循環参照は当然起きない
N88-BASICの文字列はキャラクターの集まりであって他の文字列を指し示したりできないから、
相当の無能か悪意を伴って設計しない限り、文字列メモリのガベージコレクションで
循環参照は起こしようが無い(やるべきことは素のmalloc/freeに他ならない

497 :デフォルトの名無しさん:2019/12/02(月) 23:29:11.52 ID:VdJ0qliF.net
>>496
>>487で自分で書いているように配列がガーベジコレクションの対象になっているなら、循環参照は起こり得るんでないの?

498 :デフォルトの名無しさん:2019/12/02(月) 23:30:20.73 ID:VdJ0qliF.net
すまん>>497はまちがい

499 :デフォルトの名無しさん:2019/12/03(火) 04:41:05.52 ID:LCf1R81a.net
まだやってたのか
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち

500 :デフォルトの名無しさん:2019/12/03(火) 06:45:35 ID:Ocr+v9UU.net
C++20あたりになるともうついていけそうにないな。

501 :デフォルトの名無しさん:2019/12/03(火) 07:20:16 ID:k7viogN8.net
conceptの仕上がり次第だろうな
Cのrestrictもそうであるように
うるさすぎると嫌気がさすやつが続出する

502 :デフォルトの名無しさん:2019/12/03(火) 14:10:18.28 ID:LOAssVxZ.net
実際にコードを書いてないやつほど仕様を知っててアホみたいなこだわりを見せる
ってことが常態化してる。
そろそろロクでもない結末を迎える。

503 :デフォルトの名無しさん:2019/12/03(火) 14:24:39.60 ID:jKB+EPlO.net
並列処理じゃないですかねこれからは
マルチなコアをもりもり使えないと

504 :デフォルトの名無しさん:2019/12/03(火) 14:38:06.74 ID:g2sdmHcp.net
>>502
仕様を知ってるのは良いけど
コードを書いてない人は気にするところがズレてる

505 :デフォルトの名無しさん:2019/12/03(火) 15:33:28 ID:+wDBcAl/.net
コンパイラやパーサーを作っているか、本を書こうとしている人だとすれば
隅々まで仕様を知る必要があるから、単なる自己満足の言語ヲタクとは
限らない。

506 :デフォルトの名無しさん:2019/12/03(火) 15:40:53 ID:LOAssVxZ.net
コンパイラやパーサを作ってる人よりも
本やブログを書くだけの馬鹿のが変な仕様にこだわってるのが問題。
後者は単なる自己満足の言語ヲタクと変わらん。
端的にカスでいなくなった方がいい存在と思う。

507 :デフォルトの名無しさん:2019/12/03(火) 15:46:11 ID:+wDBcAl/.net
>>506
自慢するために言語ヲタクになっている人は困るけど、本やブログを書く人は
貴重なので、情報収集のため5chでもなんでも使ってもいいと思うんだよ。

508 :デフォルトの名無しさん:2019/12/03(火) 16:08:25 ID:fg+LqIKK.net
現場でガリガリ書いてる奴らが本を書かないのが悪いんだろ
えっ、ブラック労働環境で疲弊してて書く余裕がないって?w

509 :デフォルトの名無しさん:2019/12/03(火) 16:50:33.73 ID:lE3mHjqg.net
ブログはともかく5chの情報を元に本を書くとか
勘弁してくれ

510 :デフォルトの名無しさん:2019/12/03(火) 16:52:53.84 ID:lE3mHjqg.net
>>508
解説本みたいなのは読まんな

規格書、データシート、仕様書、リファレンスマニュアル
こんなのは5chを参考にするはずがない

511 :デフォルトの名無しさん:2019/12/03(火) 16:59:39.64 ID:+wDBcAl/.net
>>509
全く知識が足りて無い場合、知ってる人に聞くと大幅な時間短縮になる事がある。

512 :デフォルトの名無しさん:2019/12/03(火) 17:42:58.95 ID:PvjGA/Sr.net
>>508
現場でガリガリって、コンパイラ開発してるとこのか?
そうでなければ普通言語の仕様なんか気にしてねーんだよ
むしろ仕様というか規格に詳しくないと使えない言語とか実用性無いわ

513 :デフォルトの名無しさん:2019/12/03(火) 17:45:16.73 ID:PvjGA/Sr.net
>>508
あとお前が知らんだけで、各分野の経験豊富な人がいくらでもその分野のコードを書くための本出してる
言語オタクには気付かんだろうけど

514 :デフォルトの名無しさん:2019/12/03(火) 17:50:23.07 ID:Ht46Ytqh.net
>>911
全く知識が無い人が本を書く????
何の本?
アンカーミス?

515 :デフォルトの名無しさん:2019/12/03(火) 18:43:45.39 ID:0IYpewor.net
未来へのアンカー

516 :デフォルトの名無しさん:2019/12/03(火) 19:20:43.49 ID:+wDBcAl/.net
>>514
考えてみれば、本を書く人はここでは聞かないかも。

517 :デフォルトの名無しさん:2019/12/03(火) 19:21:46.86 ID:+wDBcAl/.net
Stroustrap の本とか高いし、cpprefemceは分かりにくいし、誰かに
聞いてみたくなる気持ちは分かるがな。

518 :デフォルトの名無しさん:2019/12/03(火) 19:22:03.63 ID:90Sp73uq.net
>>513
C++のコンパイラ分野でいいので2~3冊あげてみ

519 :デフォルトの名無しさん:2019/12/03(火) 19:22:10.56 ID:k7viogN8.net
けっ 言語についていけねえうえに
ろくな業績も出せてねえ真性ゴミクズが
書いたコードの量が多いんだと
精一杯のブラフで自我を保とうと必死こく
究極にくだらねえ茶番だろうが

520 :デフォルトの名無しさん:2019/12/03(火) 19:25:02.10 ID:A/ggV3OU.net
コードを書けないのがコンプレックス?

521 :デフォルトの名無しさん:2019/12/03(火) 19:26:01.05 ID:cEtr/lck.net
禿4はわかりやすかったけど、もう少し突っ込んだ話が読みたかったな。

522 :デフォルトの名無しさん:2019/12/03(火) 19:26:43.98 ID:cEtr/lck.net
禿4はキンドルのセールに出ることあるよ。

523 :デフォルトの名無しさん:2019/12/03(火) 19:43:50.04 ID:LOAssVxZ.net
禿4は量が少ないわけではないがc++を今からやるとしたら最低限ああなるだろ。
あれ以下に減らすのは実際無理。

524 :デフォルトの名無しさん:2019/12/03(火) 19:55:41.70 ID:PvjGA/Sr.net
>>518
そういう意味で言ったんじゃないんだが

>>519
>けっ 言語についていけねえうえに
>ろくな業績も出せてねえ
こういう前提はどっから来てんのかね
>>502,506 ,512みたいなことを言われるとそういう過剰反応するやつよく見かけるけど
>精一杯のブラフで自我を保とうと必死こく
>究極にくだらねえ茶番だろうが
鏡見た方がいいよ

525 :デフォルトの名無しさん:2019/12/03(火) 21:01:44.02 ID:z2MNOJTT.net
>>524
違うんなら証拠出してみろよ
言ってることが薄っぺらくてゴミクズにしか見えねえが
そういう俺にお見それしましたと言わしめる内容がおまえにあるか?

身バレするようなことでなくて結構だ
話している内容に深みを感じるかどうかだ
もう一度言う、おまえの言葉にはそれがまるでない

526 :デフォルトの名無しさん:2019/12/03(火) 21:24:21.32 ID:qY14OTyg.net
>>524
> そういう意味で言ったんじゃないんだが
意味わからん
本を出してるって言うなら具体的に挙げられるよね?

527 :デフォルトの名無しさん:2019/12/03(火) 21:26:06.12 ID:A/ggV3OU.net
おまいらスレタイ

528 :デフォルトの名無しさん:2019/12/03(火) 21:30:25.58 ID:3WzRY7Z3.net
実にC++erらしいこのスレにぴったりの会話だな

529 :デフォルトの名無しさん:2019/12/03(火) 21:58:21.97 ID:c+vMaKjo.net
>>525
お前も感情的に攻撃的に相手を罵ってるだけで、中身空っぽに見えるぞ。
お前の自己評価はもっと高いのかもしれないけど端から見たらただのバカだよ。

530 :デフォルトの名無しさん:2019/12/03(火) 22:13:59.08 ID:z2MNOJTT.net
>>529
おまえ誰?

531 :デフォルトの名無しさん:2019/12/03(火) 22:43:52.58 ID:Tjb84Rtt.net
「現場でガリガリ」って可愛い表現だなw
アマチュア精神がにじみ出てる

532 :デフォルトの名無しさん:2019/12/03(火) 23:17:48.08 ID:jKB+EPlO.net
禿禿言うなよ
気にしてるらしいぞ

533 :デフォルトの名無しさん:2019/12/03(火) 23:39:54.64 ID:l6CFXVtO.net
お前らがC++高等テクニックww持ってるのは分かったから
まずまともな設計上げてこいやww

534 :デフォルトの名無しさん:2019/12/03(火) 23:42:10.99 ID:3WzRY7Z3.net
経験マウント vs 知識マウント

実に人格障害のC++erらしいスレだ

535 :デフォルトの名無しさん:2019/12/04(水) 01:05:50 ID:FhHmXOPx.net
知識も経験も豊富な奴おらんのか?

536 :デフォルトの名無しさん:2019/12/04(水) 01:18:20 ID:MnUOTj8y.net
>>535
多分、C++の仕様が異常なほど膨れ上がってること、JavaScriptやWebGL、
AjaxやC#なども勉強しなくてはならない事が多くなったことなどもあって、
プログラムを沢山しながら仕様にも詳しい人は壊滅状態であることは想像に難くない。

537 :デフォルトの名無しさん:2019/12/04(水) 01:23:07.75 ID:MnUOTj8y.net
>>536
というか、普通にプログラムしていても、HTML、CSS、HTTP などの仕様はもちろん
のこと、Androidやるなら、Java、Kotlin、NDK、iOSやるならSwift、
それに加えて、C#なら、WinFoms、WPFなどもあり、さらに、WSL、
PowerShellにbashやApacheの設定方法、ライセンス各種の勉強などなど、
やることが多くなってきている。本当は、React、Blazor、Vue.js、node.js
Electron、flutter、wxWidget、Qt、GTK。別に全部やる必要はないが、
予備知識として知ってないと技術資料も理解しにくいことが多くなってきた。

538 :デフォルトの名無しさん:2019/12/04(水) 01:25:21.34 ID:FhHmXOPx.net
自分の得意分野以外は浅く予習しておいて使うときになって覚えて使わなくなったら忘れてる

539 :デフォルトの名無しさん:2019/12/04(水) 01:26:04.91 ID:MnUOTj8y.net
>>537
Python、Rust、Lua、curl、ant、gradle、git、github、wget なども知ってない
と話が理解できないことも多くなっている。

540 :デフォルトの名無しさん:2019/12/04(水) 01:31:31.51 ID:gHx24DkE.net
今時コードだけでプログラミングするもんでもあるまい
C++使いならフロントはばっさり切り捨ててAWSとGCPにスキルを振ったほうが一貫性があり無駄の少ないスキルセットになる

541 :デフォルトの名無しさん:2019/12/04(水) 01:36:36 ID:4dvDh/Ut.net
std::cout での出力フォーマット指定に関して教えてください。

cout.flag( ios::uppercase | ios::hex ) やら cout << setfill('0') とか
cout << scientific << setprecision(10) とかとか
大半の指定が 1回 数値 を出力した後も その状態が保持されたままなのに
cout << setw(24) による出力幅指定は その都度指定しないと忘れてしまう挙動になっています。

その都度指定する必要は他にもあるのか。それと、
http://www.cplusplus.com/reference/iomanip/setw/
みたいな仕様を見て、どう読み取ればそれが正しい挙動であると分かるのか教えてほしいです。
ある個人ブログには setfill も毎回出力する度に指定する必要があるのだと書かれていましたが、
自分の環境では setfill は状態が保持されました。

542 :デフォルトの名無しさん:2019/12/04(水) 01:41:33 ID:9acC9vOn.net
フロントエンドは本当に時間の無駄
ましてC++プログラマならほとんど領域が被らないから単なる二足のわらじ状態で非効率なだけ

543 :デフォルトの名無しさん:2019/12/04(水) 04:32:29 ID:mZNCV5xz.net
>>529
読解力が無いのか>>508と同じく言語オタクだから気づかないのかわからんが
>>508と
>>512-513読み直してくれる?
C++の言語仕様を詳しく解説する本を、コンパイラ”以外の開発に携わってる”人間が書いてくれると
思ってる方がおかしいんだよ
>>508の目には純粋にC++関連の本しか映ってないんだろう
C++を前提としてるがC++そのものでなくその分野の専門的な知識を教えてる技術書がどれだけあると思ってんだ

544 :デフォルトの名無しさん:2019/12/04(水) 04:32:49 ID:mZNCV5xz.net
>>525
>えっ、ブラック労働環境で疲弊してて書く余裕がないって?w
こんな腐りきった発言する思い上がったゴミアマチュアに教えてやることなど何もない
お前が使ってるその箱で動いてるソフトは誰が書いてくれてると思ってんだ

545 :543:2019/12/04(水) 06:39:12 ID:mZNCV5xz.net
安価ミス
X >>529
○ >>526

546 :デフォルトの名無しさん:2019/12/04(水) 07:09:58 ID:Z3kanSY4.net
>>536
うん、想像なら只だもんな

547 :デフォルトの名無しさん:2019/12/04(水) 07:33:04.63 ID:8KgKER1O.net
そもそも現場の奴らは、現場のやり方しか身につける必要ないだろw

548 :デフォルトの名無しさん:2019/12/04(水) 07:54:48 ID:Jd4YzzOQ.net
>>545
各分野にコンパイラ開発は入らんのか?
まあお前の好きな分野でいいから具体的な本の名前挙げてくれ

549 :デフォルトの名無しさん:2019/12/04(水) 08:05:44 ID:mZNCV5xz.net
>>548
挙げたらどうなんの?お前には興味ない内容だと思うけど
「ド素人が言ってんだろ」と思ってるんだろうけど、お前の誤解を晴らすためになんで自分の分野晒さなきゃいけないの?
本の名前挙げたら謝るの?

550 :デフォルトの名無しさん:2019/12/04(水) 08:06:15 ID:mZNCV5xz.net
>>546
実際そうだと思うよ
>>512にも書いたけど、仕事でやってる人もフリーソフト開発者も
規格読んだことある人なんか皆無だと思うよ
他に勉強しなきゃいけないこと山ほどあるし、仕様(新しいのも含め)は必要なときにググって確認するだけ(>>538も言ってるけど)、むしろそうであるべき

それを「言語についていけない」なんて貶せるやつの神経がわからん
>>519とか、ソフト開発もメタプログラミングも出来ないレベルのド素人だろ?
何調子乗ってんの?自分はついていけてんの?w

開発力も無いし言語を活かせてもないのに、実際にC++を実用してる人を貶すとか
頭おかしい真似してるから言語オタクって言われるんだよ
(C++専門のライターも最近そういう傾向あるけど)

>>547
それはそれでどうかと思うけど

551 :デフォルトの名無しさん:2019/12/04(水) 08:07:22 ID:uB21TJa6.net
>>541 直接的な回答でない上に長々しい文章で気が引けるけど…。

『プログラミング言語C++』第4版の38章「入出力ストリーム」で
「width(n)の呼出しは、その直後に行われる<<による出力だけに影響を与える」
と書いてあるね(p. 1094)。
setw() は「次の出力のフィールド幅をn文字とする」(p. 1096 の下の表)
表の説明で“次の出力の”と限定されてるのはsetw()だけ。

で、一般的に書式指定やマニピュレータのうち、
どれが「一度指定したら別の指定をするまで有効」で、
どれが「指定された次の出力だけ有効、その後デフォルト状態に戻る」なのか、
N3337 の 27.5.3.2 周辺を見ても分からなかった。
基本的には ttp://www.cplusplus.com/reference/iomanip/setw/ よりも
少ない記述内容だし、「この指定は直後の一回の出力に限り有効」みたいな
補足の説明も見当たらない。


ISOやJISの規格に詳しい人が「素人め、ここに載ってるんだよ」と
ズバリ指摘してくれるのを期待して、調べた限りを投稿してみた。

552 :デフォルトの名無しさん:2019/12/04(水) 08:21:05.72 ID:Jd4YzzOQ.net
>>549
他の分野の人にどういう説明してるのかを知りたかっただけなんだけどね
まあ>>525が言うように薄っぺらな知ったかが吠えてるだけってわかったからもういいやw

553 :デフォルトの名無しさん:2019/12/04(水) 08:24:57.77 ID:uB21TJa6.net
>>541
setfill() じゃなくて setw() の話だけど、古い本に
「setw()の幅指定は、永続的に有効な実装と、直後の出力1回だけ有効な実装との
両方が存在するので、移植性を考えれば毎回指定する方が安全」とか載ってた。
もしかすると過去には「setfill() は1回だけ有効」な実装が存在したのかも知れん。

その後、規格で挙動が厳密に定められたのか、
今でも実装によって動作が違っても構わない(規格に明記されていない)のか、
肝心なその点は分からん。

554 :549:2019/12/04(水) 08:41:52.15 ID:0MJ4ry5i.net
>>552
言ってる意味がわからんが
煽れば何か教えてもらえると思ってるアホだろ
今までお前に何度も言ったと思うが、邪魔だから出てってくれ

555 :デフォルトの名無しさん:2019/12/04(水) 08:46:18.46 ID:Z3kanSY4.net
>>550
他に勉強しなきゃいけないことって具体的に何だ?
インターフェースだの通信規約だの法務だのを
規格を避けて勉強なんかできるのか?
そういうおまえ自身は本当に勉強してるのか?

556 :デフォルトの名無しさん:2019/12/04(水) 08:48:00.43 ID:6WV7ZyL7.net
>>555
一連の流れ読んでから言えよ
C++の規格や仕様の話だボケ

557 :デフォルトの名無しさん:2019/12/04(水) 09:05:20.91 ID:Z3kanSY4.net
>>556
おまえこそどーに目ぇつけとんのやあんだら
C++以外の規格なら読むんだって話じゃねえだろうがよ

558 :デフォルトの名無しさん:2019/12/04(水) 09:08:12 ID:d8r3fnrq.net
>>557
>C++以外の規格なら読む
誰がそんなこと言った?
他に勉強しなきゃいけないこと、に含まれてるだろうが
自分の勘違い棚に上げるなよ

559 :デフォルトの名無しさん:2019/12/04(水) 09:15:53 ID:Z3kanSY4.net
>>557
550は規格を読んだことがあるやつは皆無と言ったんだよ
それがC++だけにせよ規格全てにせよ
おかしい主張であることに変わりはない

自分の発言を読み返してみな
俺がわざわざ頓珍漢とか言ってやることもない

560 :デフォルトの名無しさん:2019/12/04(水) 09:16:34 ID:Z3kanSY4.net
安価ミスった
558な

561 :554=556=558:2019/12/04(水) 09:32:28 ID:mZNCV5xz.net
お前はC++の標準ライブラリ等の仕様の確認に毎回規格書読んでんの?

562 :デフォルトの名無しさん:2019/12/04(水) 09:53:35 ID:4dvDh/Ut.net
>>551, >>553 ありがとうございます。
今「C++ポケットリファレンス」を見たら

ほかのマニピュレータと異なり、std:setw()は例外的に効果が持続しません。
一度std::setw を指定した出力が行われると効果は解除されます
(std::setw(0)を呼び出した状態になります)。

とありました (p.250)。
それと...
$ man std::setw

The width property of the stream will be reset to zero (meaning "unspecified") if 〜

ちゃんと書いてますね。何より先に man を見るべきでした。
とはいえ setw は "例外的" なのだとちゃんと教えてくれる本は助かるなあと思いました。

563 :デフォルトの名無しさん:2019/12/04(水) 10:10:41 ID:4dvDh/Ut.net
それから man の最後には http://cppreference.com へのリンクがありました。
あまり www.cplusplus.com との違いを意識した事はなかったのですが、
公式仕様として参照するべきなのはそっちのようですね。

同じ内容の日本語版は
https://ja.cppreference.com/w/cpp/io/manip/setw
で見れました。

564 :デフォルトの名無しさん:2019/12/04(水) 10:52:51.16 ID:vhuKISsK.net
規格確認部とかあるんじゃないの。
知らんけど。

565 :デフォルトの名無しさん:2019/12/04(水) 10:57:38.20 ID:Z3kanSY4.net
>>561
え? ・・・そうだけど?
規格票というか、正確にはドラフトな
何かおかしいか?

566 :デフォルトの名無しさん:2019/12/04(水) 11:17:13 ID:mZNCV5xz.net
それ無駄に時間かかってるんじゃないの
よくクビにならないな

567 :デフォルトの名無しさん:2019/12/04(水) 11:19:22 ID:sb3P/SSe.net
1.禿でも判るC++入門
2.判ると禿げるC++入門
3.禿専用C++

568 :デフォルトの名無しさん:2019/12/04(水) 12:23:43.29 ID:Jd4YzzOQ.net
>>554
煽る以前に>>513からはペラッペラの内容しかでてこないことはわかったからお前が出てけよw

569 :デフォルトの名無しさん:2019/12/04(水) 12:29:09.42 ID:Jd4YzzOQ.net
>>561
必要なら読むだろ
流石に毎回じゃないけど
そもそもお前は規格も読まないでテキトーにコード書いてるのか?

570 :デフォルトの名無しさん:2019/12/04(水) 12:36:02.75 ID:mZNCV5xz.net
>>569
>流石に毎回じゃないけど
なら黙ってろ

規格の原文読まない=テキトーにコード書く、なのかお前の中では
思い上がりすぎだろ

571 :デフォルトの名無しさん:2019/12/04(水) 12:48:55.97 ID:Z3kanSY4.net
いや、きちんと仕事したくて
伝聞に頼らず一次ソースを確認するんだよ

572 :デフォルトの名無しさん:2019/12/04(水) 12:53:29.05 ID:sb3P/SSe.net
実用コード書くより机上の空仕様書描くのが好きな人なんやろな

573 :デフォルトの名無しさん:2019/12/04(水) 13:03:10.48 ID:Jd4YzzOQ.net
>>570
> 規格読んだことある人なんか皆無だと思うよ
とか言うバカに言われてもなぁ
知識がペラッペラすぎるw

574 :デフォルトの名無しさん:2019/12/04(水) 13:09:39.95 ID:6uL3pMIB.net
おまいらスレタイ

575 :デフォルトの名無しさん:2019/12/04(水) 13:17:06.83 ID:mquXx5f5.net
みんな私のために争って!

576 :デフォルトの名無しさん:2019/12/04(水) 13:19:26.79 ID:mZNCV5xz.net
「きちんと仕事したくて伝聞に頼らず一次ソースを確認」
なんか胡散臭くなってきたな・・・・
「仕事でやってる人もフリーソフト開発者も」のどちらにも当てはまらないのに噛み付いてきたんだろうな
エアプログラマの相手してスレ無駄遣いした、すまんかった

577 :デフォルトの名無しさん:2019/12/04(水) 13:20:38.21 ID:6uL3pMIB.net
ソフトエンジニアでC++の規格書を読む人なんてほとんどいないよ
そんなのを読んでも良い設計にはつながらない

578 :デフォルトの名無しさん:2019/12/04(水) 13:23:39.63 ID:6uL3pMIB.net
規格書で確認しないと書けない/読めないようなコードは
基本的には悪いコード

579 :デフォルトの名無しさん:2019/12/04(水) 13:26:15.79 ID:sb3P/SSe.net
ゴールポスト移動中ですね判ります

580 :デフォルトの名無しさん:2019/12/04(水) 13:27:52.48 ID:Z3kanSY4.net
規格書ではなく規格票な
つまらん齟齬を避けたいのも
規格票を読む目的の1つだ

581 :デフォルトの名無しさん:2019/12/04(水) 13:42:20.48 ID:MnUOTj8y.net
>>578
でも最近、特に海外の方で自分が知っている素朴な C++ とは全く違う
書き方をしている C++ コードを良く見かけるようになったので、
新しい仕様を学ばないと理解できなくなってきた。
STLを深く使うと C++ とは思えないようなコードになるので。

582 :デフォルトの名無しさん:2019/12/04(水) 13:46:18.71 ID:P3QxjggL.net
フロント周りは全くついていけない
コロコロと次から次へ節操なく移り変わって馬鹿じゃねえの、とつい老害的思考に

583 :デフォルトの名無しさん:2019/12/04(水) 13:48:46.17 ID:rFzpkzsp.net
C++20でコンセプトやモジュールやコルーチン記法が入ってきたら、そういう古兵にはもはやC++には見えんだろうなぁw

584 :デフォルトの名無しさん:2019/12/04(水) 13:49:01.49 ID:sb3P/SSe.net
CUIのフロントはTurboC++だったな

585 :デフォルトの名無しさん:2019/12/04(水) 14:25:33.26 ID:33/nOLSe.net
C++で音鳴らせるようになるの?

586 :デフォルトの名無しさん:2019/12/04(水) 15:02:13 ID:vhuKISsK.net
バスブーストですか?

587 :デフォルトの名無しさん:2019/12/04(水) 15:46:25.30 ID:MnUOTj8y.net
「フロント周り」って何のことですか??

588 :デフォルトの名無しさん:2019/12/04(水) 16:29:27.61 ID:vhuKISsK.net
フロント企業が一般消費者と直接取引する会社で、バックが暴力団じゃなかったっけ。

589 :デフォルトの名無しさん:2019/12/04(水) 19:40:12.56 ID:FhHmXOPx.net
つまんな

590 :デフォルトの名無しさん:2019/12/04(水) 19:50:18.04 ID:FhHmXOPx.net
企画書を読まないとわからないコードなんかあると思ってるのか?
読むべきはcppreferenceのようなアホにも分かるように優しく解説してくれてる文書
分からないことがあれば必要なキーワードを検索欄にぶち込んだらすぐに分かるようにできている

591 :デフォルトの名無しさん:2019/12/04(水) 20:09:28.90 ID:6yabeJe9.net
アホのサバイバルか
唾棄

592 :デフォルトの名無しさん:2019/12/04(水) 20:33:31.84 ID:ZHZFM6qI.net
プロでもアマチュアでもいいんだよ
初心者でも学生でもいいんだよ
ただし
身の程知らずのド素人が知ったふうな口を利いてるとさすがに叩かれるよ

593 :デフォルトの名無しさん:2019/12/04(水) 20:49:47.75 ID:+udf6Yna.net
>>577
> ソフトエンジニアでC++の規格書を読む人なんてほとんどいないよ
お前の周りはそうなんだろうな

> そんなのを読んでも良い設計にはつながらない
読んだことない奴はそう言うよなw

>>578
お前規格票に何を書いてるのか知らんだろ
まあそのまま沈んどけ

594 :デフォルトの名無しさん:2019/12/04(水) 21:20:21.85 ID:xsMIF6qI.net
ていうかC++のスレでこんな流れが加速するなんて
思ったよりC++erて数いたんだなぁ、というのが素朴な感想

595 :デフォルトの名無しさん:2019/12/04(水) 21:22:48.52 ID:DNIeF7b9.net
アホでも炎上商法はできるってことだ

596 :デフォルトの名無しさん:2019/12/04(水) 21:54:34.88 ID:vhuKISsK.net
じゃあ点呼取ります。
江添クン!

597 :デフォルトの名無しさん:2019/12/04(水) 22:15:09.71 ID:ZHZFM6qI.net
> 思ったよりC++erて数いたんだなぁ、というのが素朴な感想

C++erというよりここは単に無職と学生サンのすくつでしょw

598 :デフォルトの名無しさん:2019/12/04(水) 22:19:24.66 ID:7vpFGLgR.net
とりあえず>>593は無職だと思う

599 :デフォルトの名無しさん:2019/12/04(水) 22:27:51.85 ID:UrCkYA+I.net
c++11以降みたいなああいうコード書きたいなら変な見栄はらずにpythonでもrubyでもやってたらいいんだよ。

600 :デフォルトの名無しさん:2019/12/04(水) 22:31:45.53 ID:QZ1McR0s.net
C++コンパイラやSTL準拠ライブラリを作る仕事に関わってたら規格書を読まないとどうにもならないと思うけど、
そうじゃない人は市販のC++入門で十分じゃないかな。

601 :デフォルトの名無しさん:2019/12/04(水) 22:33:17.56 ID:J7QAHgda.net
>>596
金型の会社に出向いて定期的に講座やってるらしいね
金型の演算ってそんなC++が効くものなんだ
CGALみたいに幾何分野でバリバリ使われるのは知ってるけど、設計の分野も同じなんかな

602 :デフォルトの名無しさん:2019/12/04(水) 22:33:57.92 ID:UrCkYA+I.net
てか規格通りにまともに動くなんてのは例外ってことは
普通にc++を仕事で使ってりゃ分かるもんだがな。
その時点で江添みたいに実際の仕事で使ってないのが丸分かりになる。

603 :デフォルトの名無しさん:2019/12/04(水) 22:58:37.27 ID:CXPVLMHx.net
今時MSVCでも大部分は規格通り動くぞ

604 :デフォルトの名無しさん:2019/12/04(水) 23:08:27.56 ID:7MoywY5f.net
>>598
どこからそんなアホな決めつけしてるんだよ…
もしかして会社からセミナーとかにも行かせてもらえないような底辺なのか?w

605 :デフォルトの名無しさん:2019/12/04(水) 23:22:31.61 ID:vhuKISsK.net
式を教えてもいいけど、理解できるかどうか。

606 :はちみつ餃子 ◆8X2XSCHEME :2019/12/05(Thu) 00:23:37 ID:XYdg44Nt.net
必要なら読むし必要じゃないならないなら読まないってだけのことだろ。
そんなん場合によるっつーつまらん結論しかないと思うが。

607 :デフォルトの名無しさん:2019/12/05(Thu) 00:28:04 ID:wvPvimki.net
はいいつものクソ正論いただきました

608 :デフォルトの名無しさん:2019/12/05(Thu) 00:35:44 ID:dM4mxJ4y.net
実の無い(楽しそうでもない)話をつづけられるよりはクソ正論で鎮火してくれたほうがマシに思う。
件の人たちはそれで鎮火するような人でもないんだろうけど。

609 :デフォルトの名無しさん:2019/12/05(Thu) 00:43:36 ID:2jEFb1Vk.net
互いに見下しあい罵倒しあってこそC++er
ここは不毛なマウント取り合戦の場C++スレ
鎮火する必要なし

610 :デフォルトの名無しさん:2019/12/05(Thu) 01:15:42 ID:+j7BXLrg.net
また髪の話をしてる

611 :デフォルトの名無しさん:2019/12/05(木) 02:59:31.66 ID:9zn59iXI.net
すまんが、レベルの低い人から見ると、レベルの高い人が気軽に話した
内容が「マウントをとられた」と思ってしまうんだと思う。
そういうつもりで言ってなくても。
これは、公立の小学校でよく起きる現象で、問題になっている。

612 :デフォルトの名無しさん:2019/12/05(木) 03:04:36.20 ID:9zn59iXI.net
>>611
蛇足だが、これは欧米諸国でよく知られた現象。
アメリカで記名製掲示板が流行るのは、匿名性掲示板ではどうしても
それが起きてしまうので、それをよく分かった上でやっているのかも
知れない。それだけの理由ではないだろうけど。

613 :デフォルトの名無しさん:2019/12/05(木) 06:18:49.18 ID:eAZGTWY0.net
>>609-610
この流れを評するのに「不毛」って言葉を選ぶのはC++らしいね。
「マウント」も落語「頭山」を想起させる。

614 :デフォルトの名無しさん:2019/12/05(Thu) 08:26:15 ID:V4GZwDuE.net
しかしあれだな、C++ほどハゲがよく似合う言語を知らない

615 :デフォルトの名無しさん:2019/12/05(Thu) 11:35:47 ID:tjjaS4Ug.net
江添亮のC++入門 (webドラフト版? https://ezoeryou.github.io/cpp-intro/#再帰関数 )
を読んでます。

>例えば以下は階乗を計算する再帰で書かれたループだ。
> int factorial( int n ) { ...
> return n * factorial(n-1) ;
> ...
>このコードは末尾再帰になっている。
>末尾再帰は非再帰のループに機械的に変換できる特徴を持っている

これ factorial(n-1) が返ってきたらスタックに積んである n を掛けないといけませんよね。
厳密には末尾再帰とは言えない気がします。
そういうの無しに「直帰でコール元に値を渡せる場合」に末尾再帰と言えるのだと思ってたんですが、
私の理解が間違っているのでしょうか?

まあ今のコンパイラーは賢いので細かい事気にする必要ないのかもしれませんが。

616 :デフォルトの名無しさん:2019/12/05(Thu) 11:37:52 ID:IbmhSLeW.net
>>611
馬鹿ほどそれを気にするよな
判らなかったら調べれば良いのに
調べずに反論し始めるω

617 :デフォルトの名無しさん:2019/12/05(Thu) 12:32:19 ID:RTwQsK8m.net
>>615
末尾再帰じゃないよ

618 :デフォルトの名無しさん:2019/12/05(Thu) 13:51:16 ID:tjjaS4Ug.net
>>617 ですよね。
ちょっと気になってたのでスッキリしました。

619 :デフォルトの名無しさん:2019/12/05(木) 18:12:34.01 ID:5PaJAEA2.net
簡単にループに出来るものはループで記述した方が良いよ
末尾再帰の場合もそうじゃない場合も

実行速度、使用リソース、
デバッグしやすさ、
スタック計算ツールなどツール類の使用、
などなどいろんな要素で

620 :デフォルトの名無しさん:2019/12/05(木) 18:50:53.78 ID:9zn59iXI.net
>>619
本当は、再帰呼び出しだとスタックサイズの制限により呼び出しの深さ(階数)
に制限が付いてしまう。ローカル変数を沢山使っている関数で、
1000万個のオブジェクトを再帰的に処理すると、スタックオーバーフロー
が出てもおかしくない。しかも、最近のマルチスレッド環境だと、
スタックのサイズはどうしても制限が強くなり勝ち。

621 :デフォルトの名無しさん:2019/12/05(木) 18:58:39.27 ID:5PaJAEA2.net
一言で言うと「使用リソース」だね

622 :デフォルトの名無しさん:2019/12/05(木) 19:02:32.74 ID:5PaJAEA2.net
「最近のマルチスレッド環境」はあまり関係ない
固定スタックサイズの組み込みCPUの方がヤバい
PICみたいなハードウェアスタックだともっとヤバい

623 :デフォルトの名無しさん:2019/12/05(木) 19:28:34.51 ID:ZSRmDUxb.net
検討事項が増えるから仕事で再帰は使わんね。
理解できない人も多いし。

624 :デフォルトの名無しさん:2019/12/05(木) 19:42:30.55 ID:9zn59iXI.net
>>622
シングルスレッドだと、スタックは自動伸張することが可能だった。
ところが、32BIT のマルチスレッド環境だと仮想メモリ空間のアドレス
空間自体が不足してしまうので、それは難しい。
ただし、64BIT 環境だと仮想メモリ空間が大きいので余り問題にならない
かも知れない。

625 :デフォルトの名無しさん:2019/12/05(木) 19:54:34.15 ID:5zWy9aB9.net
再帰の例でよくでてくるフィボナッチ数列の計算なら
再帰より for で二変数保持しながら計算した方が性能でも可読性でも上だろうな。

626 :デフォルトの名無しさん:2019/12/05(木) 20:04:07.94 ID:5PaJAEA2.net
>>624
Windowsだとスタックサイズは32bitでも64bitでもデフォルト1MBだぞ

適当な事を言わないように

627 :デフォルトの名無しさん:2019/12/05(木) 20:10:23.46 ID:5PaJAEA2.net
>>625
組み込み型サイズ程度だと普通にexpを使って計算する方が速い

多倍長の巨体な値でも
素直に1個ずつ計算すると非常に遅い
もっとずっと高速な方法がある

628 :デフォルトの名無しさん:2019/12/05(木) 20:16:10.38 ID:5PaJAEA2.net
再帰をループに置き換えるので面倒なのは
いろんな箇所でたくさん分岐するヤツ

まあでも面倒ってだけで、
必ず再帰を使わずに記述出来る

629 :デフォルトの名無しさん:2019/12/05(木) 20:21:10.87 ID:5zWy9aB9.net
treeを辿るコードなんかは再帰のが書きやすいわな。

630 :デフォルトの名無しさん:2019/12/05(木) 20:23:50.71 ID:5PaJAEA2.net
treeをたどるコードは再帰コールするのが1箇所だからまだ楽な方

631 :デフォルトの名無しさん:2019/12/05(木) 20:24:01.37 ID:9zn59iXI.net
>>629
Tree は再帰でやるべきものの一つ。
スタックの制限も、Treeの「段数(階数)」自体が余り深くなりにくいので
問題が生じにくく、再帰でやっても問題ないものの一つでもある。
ただし、親子関係の深さ方向だけを再帰にし、兄弟方向は、単純な
ループを使うべき。

632 :デフォルトの名無しさん:2019/12/05(木) 20:28:30.76 ID:5PaJAEA2.net
再帰にすべきかどうかはものによる
例えばstd::setの検索は普通ループを使う

633 :デフォルトの名無しさん:2019/12/05(木) 20:38:37.36 ID:tjjaS4Ug.net
フィボナッチとかで再帰
末尾再帰を捨てる(性能とスタック無駄遣いに目を瞑る)と可読性はかなりいいと思うんです。
int fibo(int n) {
if (n<=2) return 1;
else return fibo(n-1) + fino(n-2);
}
その場で使い捨てるようなプログラムにはアリだと思います。

でも末尾再帰を目指すと.. . .
int fibo(int n, int a=1, int b=1){
if (n<=2) return b;
else return fibo(n-1, b, a+b);
}
どうなんですかね. . .。Lisp脳だと forループより好まれるかもしれません。
ちゃんと末尾再帰最適化が効けば性能は良いのでしょう。

634 :デフォルトの名無しさん:2019/12/05(木) 20:48:58.05 ID:5PaJAEA2.net
>>633
前半
見やすさはそれが一番だね
記述が定義通りなので

後半
それなら普通のループの方が分かりやすくないか?

635 :デフォルトの名無しさん:2019/12/05(木) 21:03:01.64 ID:tjjaS4Ug.net
あちら(Lisp)の世界ではそうでもないみたいですよ。

636 :デフォルトの名無しさん:2019/12/05(木) 21:09:55.69 ID:5PaJAEA2.net
へ〜

637 :デフォルトの名無しさん:2019/12/05(木) 21:23:00.63 ID:oayOS3nx.net
C++てparallel_forとか未だにないんだな、まぁTBB使えばあるけど標準規格には用意されてない
仕方がないんでPartitionerは自前で作ったが、そんな付け焼き刃用意したところで、
いちいち明示的に各スレッドの終了の待ちあわせせにゃならん。
挙げ句の果てに
mtx.lock()
----
mtx.unlock()
て orz
クリティカルセクションはブロックで囲って
lock(mtx){
}
とでも書かせろや
オートunlockとかしょーもないもんは用意してバカじゃねーのか
しかも、未だにasync/await はなくて、C++20で実装て。
何が必要かわかってないのかC++規格作ってるアホ共
死ね

638 :デフォルトの名無しさん:2019/12/05(木) 21:36:40.64 ID:JlYSK1cQ.net
つstd::lock_guard

639 :デフォルトの名無しさん:2019/12/05(木) 21:51:24.38 ID:u0CioZb2.net
adync awaitなんてネイティブで実装しようとしたら面倒なのわかるだろうに

それでもぶっこんでくるのだからc++11以降は完全にポリシー変更しているよね

640 :デフォルトの名無しさん:2019/12/05(木) 21:57:53.51 ID:dM4mxJ4y.net
>>637 std::for_each(std::execution::par, ...) じゃダメだったの?

641 :デフォルトの名無しさん:2019/12/05(木) 22:07:45.52 ID:q0kDwfyl.net
ツリーの巡回はイテレータにするとスタックとキューを入れ替えるだけで深さ優先と幅優先を切り替えられますよ。
STLのスタックとキューはインターフェースが違うのでひと工夫必要ですが。
algorithmも使えてウマウマです。

642 ::2019/12/05(木) 22:28:33.56 ID:IPfJ90pV.net
>>615
末尾再帰ならこう書くかと
https://ideone.com/GG1x2O

643 :デフォルトの名無しさん:2019/12/05(木) 22:53:24.80 ID:wvPvimki.net
おいおい
そこはcpsで書いてマウント取るところだろ

644 :デフォルトの名無しさん:2019/12/05(木) 23:00:13.77 ID:uXzevjeq.net
>>637
お前のそのクソコードlockとunlockの間で例外投げたらあっという間にデッドロックだぞ
すぐにlock_guardに書き換えるか死ぬかどっちか選べ

645 :デフォルトの名無しさん:2019/12/05(Thu) 23:44:19 ID:JallKI28.net
状況説明:
Visual Studio 2019 Version 16.4.0 で std::exception::what() の戻り値を無視すると以下のようなC4834の警告が出るようになった。
> warning C4834: 'nodiscard' 属性を持つ関数の戻り値を破棄しています

なお、catchスコープでeについて何か書かないと以下の警告が出てしまう。
> warning C4101: 'e': ローカル変数は 1 度も使われていません。

今は以下のように記述して警告C4101が出ないようにしている。
try
{
// do something.
}
catch(std::exception& e)
{
e.what();
}

質問:
C4101とC4834の両方とも出ないようにするにはどうしたらいい?

646 :デフォルトの名無しさん:2019/12/05(Thu) 23:57:51 ID:2jEFb1Vk.net
>>645
(void)e.what();

647 :645:2019/12/05(Thu) 23:58:13 ID:JallKI28.net
自己解決しました。
try
{
// do something.
}
catch(std::exception& e)
{
(void)e;
}

648 :645:2019/12/05(Thu) 23:59:17 ID:JallKI28.net
>>646
回答ありがとうございます。

649 :デフォルトの名無しさん:2019/12/05(Thu) 23:59:36 ID:uXzevjeq.net
catch(std::exception&)
でええやん

650 :デフォルトの名無しさん:2019/12/06(金) 00:01:11 ID:Cd9yyMrn.net
>>645 ほんとうに例外を何も処理せず握りつぶしたいの?どんな状況?

651 :645:2019/12/06(金) 00:12:07 ID:Rpl4CMwP.net
>>650
スレッドの安全な終了。

652 :645:2019/12/06(金) 00:19:17 ID:Rpl4CMwP.net
>>649
マクロ切り替えでeを使うコードも使えるようにしておきたいので無名変数だと都合が悪い、という感じです。

653 :デフォルトの名無しさん:2019/12/06(金) 00:24:27 ID:hYHuFzfT.net
VCは2019から返り値を捨てるコードに警告出すようになって鬱陶しい

654 :デフォルトの名無しさん:2019/12/06(金) 00:27:04 ID:R5wwI9SD.net
[[nodiscard]]を確認せずに捨てる奴が悪い

655 :デフォルトの名無しさん:2019/12/06(金) 00:30:55 ID:Cd9yyMrn.net
>>651
std::exception& で受けると bad_alloc とか関係ない例外もまとめて無視しちゃいそうで、
それは「安全」なのか疑問。

656 :デフォルトの名無しさん:2019/12/06(金) 00:51:39 ID:jImJStBO.net
終了させるにしてもちゃんとやれ

657 :645:2019/12/06(金) 00:54:05 ID:Rpl4CMwP.net
>>655
どうせなにもできない事には変わりないので無視でいいかなと。
スレッド終了時にプログラム固有のリソース解放処理を確実にやりたい目的でのthrow&catchなのでC++標準ライブラリ自身の出す例外は無視、的な。

658 :デフォルトの名無しさん:2019/12/06(金) 01:06:58 ID:jImJStBO.net
ログ出力という大事な仕事があるだろ

659 :デフォルトの名無しさん:2019/12/06(金) 02:04:04 ID:Cd9yyMrn.net
>>657
それだとほんとに何か問題があって例外が飛んでるときに気づけなくて危なさ沿う、という話。
struct thread_exit {} とか専用の例外をthrow&catchしとけば、目的を達成しながら問題検出もできそうな。

660 :デフォルトの名無しさん:2019/12/06(金) 06:39:31.51 ID:pHI2Uem1.net
>>654
正論

661 :デフォルトの名無しさん:2019/12/06(金) 07:31:29.17 ID:zfbHpqVT.net
>>637
for_each(parあんじゃん
いちいち待ち合わせなんて
まだやってんの?

662 :デフォルトの名無しさん:2019/12/06(金) 09:21:05 ID:WVLKHQiQ.net
寒い

http://34vv.net/8d8/

663 :デフォルトの名無しさん:2019/12/06(金) 12:56:29 ID:vJ3416lC.net
>>644
てめえの糞おつむでは未だにlock_guardなんか使ってんのかよww
んな互換性のためだけに残ってるコード人様に勧めてどーするつもりだ。

664 :はちみつ餃子 ◆8X2XSCHEME :2019/12/06(金) 14:04:15 ID:6r3WfMRZ.net
>>635
LISP では再帰で書くなどという俗説を信じるな。

665 :デフォルトの名無しさん:2019/12/06(金) 14:28:22.22 ID:hyokDgJv.net
もしかしてメンバ関数の定義で引数や戻り値に不完全型を使っても許されるようになりましたか?
autoが許されるのだから、許されて良いような気がするのですが。

666 :デフォルトの名無しさん:2019/12/06(金) 14:55:34.36 ID:qwyC8IXX.net
厳密にはわからんけど、クラステンプレートやメンバ関数テンプレートだと
それらが実体化されるより前であれば不完全型は使えるはず(コンパイラによっても変わることあるけど
autoも似たような理屈だと思う、宣言だけして関数定義より前で使うとエラーになるはず

667 :デフォルトの名無しさん:2019/12/06(金) 15:04:26 ID:hyokDgJv.net
https://ja.cppreference.com/w/cpp/language/function
> 関数の引数の型および戻り値の型は、削除された関数を除き (C++11以上)不完全クラス型にできません。 完全性のチェックは関数の本体の文脈で行われます。
これはそういうことを言ってるんですかね。

668 :デフォルトの名無しさん:2019/12/06(金) 15:08:45 ID:hyokDgJv.net
関数本体内のコンテキストで完全型になっていれば良いのであれば、いろいろできるような気がする。
あんなことやこんなことが。

669 :デフォルトの名無しさん:2019/12/06(金) 15:14:03 ID:qwyC8IXX.net
あーそういうことだね
関数定義前なら不完全でもいいってことだと思う
すまんテンプレートには限らないぽいな

670 :デフォルトの名無しさん:2019/12/06(金) 15:29:10 ID:hyokDgJv.net
どうもありがとう。

671 :デフォルトの名無しさん:2019/12/06(金) 15:45:43.96 ID:LIPaYWZD.net
>>661
step =1000000;
for( double r2 = R2 - dev2; r2 < R2 + dev2; r2 += dev2 / step ){
}
こいつを並列化したいんだが、ループカウンタをintに変更するとしても、
2M ノードのvector確保するわけ?
ループカウンタ設定するために並列化要るがなw
単にループ回したいだけなのに巨大なメモリ要るてww
調べてみてもC#やtbbのparallel_for相当がないんだが
これら見ながら企画作ったC++規格策定メンバーってお前と同じパープリンじゃないのか?

672 :デフォルトの名無しさん:2019/12/06(金) 16:13:34 ID:zfbHpqVT.net
>>671
おい、真面目に情報提供している者に対してパープリンとは何だ
俺だけじゃなく640もパープリン呼ばわりか

後出しという自分の落ち度を棚に上げて
そういう発言は5chのフランクさでは済まんぞ

673 :デフォルトの名無しさん:2019/12/06(金) 16:14:35 ID:hYHuFzfT.net
初手人格否定はC++erのセオリー

674 :デフォルトの名無しさん:2019/12/06(金) 16:14:40 ID:jImJStBO.net
>>671
お前が生きてる価値の無いゴミなだけ

675 :デフォルトの名無しさん:2019/12/06(金) 16:39:35.59 ID:qwyC8IXX.net
>>661もたいがい無意味に煽ってる書き込みだと思うがw

676 :デフォルトの名無しさん:2019/12/06(金) 17:15:36 ID:hyokDgJv.net
https://news.livedoor.com/article/detail/17486025/

677 :デフォルトの名無しさん:2019/12/06(金) 18:34:35 ID:PPEOwhLk.net
>>671
OpenMP & SIMD intrinsics

678 :デフォルトの名無しさん:2019/12/06(金) 19:25:13.77 ID:3oohkeAj.net
lock_guard使わずになに使うの?

679 :デフォルトの名無しさん:2019/12/06(金) 19:35:24.69 ID:3J8eqh7h.net
ひのきのぼう と かわのふく

680 :デフォルトの名無しさん:2019/12/06(金) 22:24:12.87 ID:hyokDgJv.net
ヒノキの棒でぶっ叩けば人は死ぬし、皮の服は火焔や刃物を弾く。
どちらかというと上級者向けの装備だと思います。

681 :デフォルトの名無しさん:2019/12/06(金) 23:38:17.10 ID:pm/DYA/c.net
operator[]で読み書きって毎回調べないとできず
set()、val()とか関数で読み書きしてすますことが多いのだが
新文法などで簡単にやる方法わかりますか

682 :デフォルトの名無しさん:2019/12/07(土) 01:06:30 ID:5MyaotCE.net
なにいうとるのかわからん
operator[]をどう実装してどこで使えばいいのか理解できてないという話なのか

683 :デフォルトの名無しさん:2019/12/07(土) 01:08:17 .net
>>615
余再帰だな
江添やっちまったなあ!

684 :デフォルトの名無しさん:2019/12/07(土) 01:59:52 ID:4p8EX4B8.net
>>682
ふつうの実装では、A[n]は参照しかできず
A[n] = の代入ができないという事

685 :デフォルトの名無しさん:2019/12/07(土) 05:36:21.30 ID:UnIspDfI.net
>>684
「参照」を返せばいいだけだが、そういうことではない?
まさか「参照」を知らないと言うわけではないよね。

686 :デフォルトの名無しさん:2019/12/07(土) 06:10:47.12 .net
ちょくちょく初心者質問スレに行った方が良い人までここに堂々と書き込むのが
スレを妙な雰囲気にしてる

687 :デフォルトの名無しさん:2019/12/07(土) 06:56:32.11 ID:C/SdN+6e.net
>>615 >>683
「余再帰」 corecursion って呼ぶのか。勉強になるわ。

江添さんのページを見てみたんだけど、
「このコードは末尾再帰になっている。」の行の前に
最初の return n * factorial(n-1) を返す関数を
末尾再帰に書き換えたコードの引用があるべきなのを
挿入し忘れたように思えるね。

・末尾再帰でないコード例を示す
・末尾再帰にするとこうなる ... コード欠落
・末尾再帰はループに書き換えられるよ
・ループにしたコード例
っていう流れで自然に読めるでしょ。

688 :デフォルトの名無しさん:2019/12/07(土) 09:42:39 ID:fV2E4bDP.net
でもこのシグネチャのfactorialのままだと末尾再帰できなくね?>>642みたいになるかと。

689 :デフォルトの名無しさん:2019/12/07(土) 11:49:45.97 ID:4p8EX4B8.net
>>685
たとえばbitsetを実装しようして、内部では32や64bitの整数へ保存するとして
参照だけではB[i]=1はできないかと

690 :デフォルトの名無しさん:2019/12/07(土) 11:56:48.08 ID:vGCb4aWc.net
最初からそうかけよ

691 :デフォルトの名無しさん:2019/12/07(土) 11:57:37.74 ID:4p8EX4B8.net
これのこと、毎回調べ直さないと作れない


プロキシ
実は、C++ でも、かなり無理やりですが、(見た目だけは)プロパティのようなことができたりします。 とりあえず、百聞は一見にしかずということで、以下の例を見てください。

利用側、すなわち、main の中では、 まるで普通の変数に対する代入・参照であるかのようなコードになっています。

このからくりは、 age の読み書きに、AgeProxy という名前の別のクラスを介することで実現します。 Age は AgeProxy 型の変数です。
AgeProxy の代入演算子(operator =)と int 型へのキャスト(operator int)を通して、 Person クラスの age 変数の読み書きをします。

ちなみに、こういう例のように、いったん別のクラスを通して値を読み書きしたりする方法を、 プロキシ(proxy: 代理)と呼びます。

まあ、このパターンは、利用側の見た目は綺麗になりますが、 実装は面倒ですし、実行効率もあまりよいとはいえません。
さらに言うと、プロパティを virtual 化しようとすると、 この例よりもさらに複雑な実装が必要になります。

こういう感じの話を振り返った上で、 改めて C# の「プロパティ」機能を見ると、 便利な機能だなぁとつくづく思います。
https://ufcpp.net/study/miscprog/accessor.html

692 :デフォルトの名無しさん:2019/12/07(土) 12:00:39.08 ID:vGCb4aWc.net
相談じゃないなら他へ

693 :デフォルトの名無しさん:2019/12/07(土) 12:02:24.40 ID:U9XnFfRh.net
プロパティはコード上でフィールドのように扱えることよりもメンバとしてIDEが認識できるところに意味がある
最近はC#でもデザイナに頼らずに何でもコード上で済ませるスタイルが主流になりつつあり、プロパティの必要性は薄れている
初期化時にパラメータを纏めて渡したりするだけなら生フィールドで十分なわけだしな

694 :デフォルトの名無しさん:2019/12/07(土) 12:11:07.35 ID:JfALL9r7.net
proxyで別に実行効率は下がらんよね
てかstd::vector<bool>は大昔から存在するし

695 :デフォルトの名無しさん:2019/12/07(土) 12:25:43.42 ID:cPeMBqq7.net
C++Builder使えばよいのでは。

696 :デフォルトの名無しさん:2019/12/07(土) 12:42:26.89 ID:JVuyt12v.net
>>684, >>684
他言語での getter/setter メソッド的な事をやりたいのだろうなあと考えてみました。

例えば a[i] と書かれたら、 内部データ(typename T) への参照(T&) を返すのではなく
新たに内部クラス(fields: owner, index)を用意して、そのオブジェクトを作って返すようにします。
これに代入演算子(operator =) と キャスト演算子(operator T()) を実装すれば...
・a[7] = 99; //setter
・cout << a[7]; //getter
こうやって普通にアクセスできます。メソッドを分離したお陰で、
添え字アクセスによるデータベースのupdate / select みたいな事が可能になります。

代入演算子は最低二種類必要で
Inner& operator =(const T& value); // a[i] = value
Inner& operator =(const Inner& rhs); // a[i] = a[j]
二つ目を実装しないと暗黙のコピー代入演算子が作られてしまい
a[i] = a[j]; のような代入操作は実質空文化します。(owner/indexがコピーされるだけ )

素人の思いつきですがサクっと試したら機能しました。
もっとスマートなやりかたもあるでしょう。

697 :デフォルトの名無しさん:2019/12/07(土) 12:55:02.34 ID:vGCb4aWc.net
意味の無い所で無駄にコードサイズを増やさなくても
普通にset/get関数で良いよ

698 :デフォルトの名無しさん:2019/12/07(土) 13:20:15 ID:euj2mOhA.net
setterの戻り値はvoid?this参照?

699 :デフォルトの名無しさん:2019/12/07(土) 13:22:21 ID:cPeMBqq7.net
bitsetは参照返すからset(1).set(2).set(10)などと連鎖できる。

700 :デフォルトの名無しさん:2019/12/07(土) 13:35:21 ID:QAzyzpfC.net
>>672

なんだてめえパープリンの活け造りが
ぶち殺すぞ低脳野郎

ぶち殺し行ってやるから住所さらせや糞野郎

701 :デフォルトの名無しさん:2019/12/07(土) 13:36:49 ID:hSwO/YRY.net
これがC++er流の挨拶です

702 :デフォルトの名無しさん:2019/12/07(土) 13:37:29 ID:QAzyzpfC.net
>>672
真面目に糞情報しか提供できない出来損ないならすっこんでろウスノロ
とにかくぶち殺しに行ってやるから住所晒せや

703 :デフォルトの名無しさん:2019/12/07(土) 13:38:45 ID:QAzyzpfC.net
>>678
今ごろlock_guardて ID:zfbHpqVT 並の情弱かオマエww

704 :デフォルトの名無しさん:2019/12/07(土) 13:44:27 ID:QAzyzpfC.net
パープリンどころかアホの活造り ID:zfbHpqVT

パープリンどころかアホの活造り ID:zfbHpqVT

パープリンどころかアホの活造り ID:zfbHpqVT

パープリンどころかアホの活造り ID:zfbHpqVT

パープリンどころかアホの活造り ID:zfbHpqVT



出てこい知障

705 :デフォルトの名無しさん:2019/12/07(土) 13:49:37 ID:cPeMBqq7.net
そもそも10を代入して値が10にならないなら、意味的に組み込み型の整数とは違うのかもしれない。
整数ではないものを整数で代用したときに起きる問題なのかも。

706 :デフォルトの名無しさん:2019/12/07(土) 14:40:05 ID:gqZSFnI2.net
効いてる効いてるw
弱い犬ほどよく吠えるねえ

707 :デフォルトの名無しさん:2019/12/07(土) 15:57:37 ID:kC4yD5gf.net
>>683
江添なんて前からそんなもんだぞ。
人の間違いには厳しいが自分の間違いには逆ギレするような男だ。

708 :デフォルトの名無しさん:2019/12/07(土) 15:59:46 ID:cPeMBqq7.net
clang-cl結構いいね。

709 :デフォルトの名無しさん:2019/12/07(土) 16:00:40 ID:cPeMBqq7.net
>>707
全方面に厳しいって事?
自分にも他人にも。

710 :デフォルトの名無しさん:2019/12/07(土) 16:33:39.12 ID:C/SdN+6e.net
「自分の間違い(に対する指摘)には逆ギレ」ってことでしょな。

書籍として印刷・発売する前にネット公開して広く意見を求める、
「お前らタダで読ませてやるから品質向上に協力しろや」方式と考えれば
誰にも損のないやり方だと思うけどね。
少なくとも俺にとってはありがたい。

711 :デフォルトの名無しさん:2019/12/07(土) 17:24:58.21 ID:ZsYnLuoj.net
意見を反映させる能力があればな。

712 :デフォルトの名無しさん:2019/12/07(土) 17:31:56.94 ID:xzwyWWlr.net
https://github.com/EzoeRyou/cpp-intro/issues

713 :デフォルトの名無しさん:2019/12/07(土) 20:57:58.81 ID:KRZcErEE.net
なんかうちのVisual Studioだと
iscntrl('\t')
が非0(真)になるんだけど
これって正しい?

714 :デフォルトの名無しさん:2019/12/07(土) 21:22:47.02 ID:F8+HNqgO.net
表示できる文字と空白以外は全部制御文字だね

715 :デフォルトの名無しさん:2019/12/07(土) 22:13:42.05 ID:KRZcErEE.net
isspace('\t')は非0(真)なので'\t'は空白のはずェ、

つかGoogle Testにかけたらこうじゃわ↓↓↓
TEST(stdlibTest, ctype) {
ASSERT_FALSE(isspace('\0'));
ASSERT_TRUE(isspace('\n'));
ASSERT_TRUE(isspace('\r'));
ASSERT_TRUE(isspace('\t'));
ASSERT_TRUE(isspace(' '));

ASSERT_TRUE(iscntrl('\0'));
ASSERT_TRUE(iscntrl('\n'));
ASSERT_TRUE(iscntrl('\r'));
ASSERT_TRUE(iscntrl('\t'));
ASSERT_FALSE(iscntrl(' '));
}

716 :デフォルトの名無しさん:2019/12/07(土) 23:02:18.90 ID:cPeMBqq7.net
盲目の為のロケールがあったら、ベル以外全部制御文字になるんだろか。

717 :デフォルトの名無しさん:2019/12/07(土) 23:12:25.74 ID:fV2E4bDP.net
0x00から0x1fまでは全部制御文字で違和感ないけど。

718 :デフォルトの名無しさん:2019/12/07(土) 23:19:02.06 ID:EVNez7Da.net
printableってのは音声出力も含むのではなかろうか

719 :デフォルトの名無しさん:2019/12/08(日) 02:49:31 ID:C6vow3qq.net
盲人のブログラマーって普通にいるんだな
なんかかっけーな

720 :デフォルトの名無しさん:2019/12/08(日) 08:37:40.25 ID:9eRqVWoa.net
Visual Studio 16.4オンラインアプデしたら
それまで使ってたParallel Studio2019 U5使えなくなった。
Visual C++でコンパイルできるがIntel Compilerはコンパイル失敗してしまう
それと、
プロジェクトのプロパティからIntel Compilerは選択できるんだが、
プルダウンメニューからIntel Compilerを選択できないようになった。
Parallel Studio最インスコしてもコンパイルは失敗する。2019 U5 が16.4に対応してないとかないよね?

721 :デフォルトの名無しさん:2019/12/08(日) 08:39:40.14 ID:drue7Jpy.net
>>713
例によってロケール依存らしいが "C" だと
iscntrl() が真を返す値は 0x00-0x1f, 0x7f みたいね。
これまた例によって unsigned char 範囲と EOF 以外の値については未定義。

つうか、このくらいは5ちゃんねる以外から情報を探す方が
早くて確実じゃないかしら。

722 :デフォルトの名無しさん:2019/12/08(日) 13:11:02.08 ID:hM3Qn2JU.net
C++で作ったブラウザテニスゲーム(PWA仮対応):
https://yutakaaoki.github.io/demo_tennis/
Wasm+PWA+WebGL+"C++"

723 :デフォルトの名無しさん:2019/12/08(日) 14:09:36.54 ID:3pi+cAN/.net
>>722
青木さんは何をしようとしてるんですか?

724 :デフォルトの名無しさん:2019/12/08(日) 14:17:37.03 ID:vN1dzuVf.net
>>722
で、質問は?

725 :デフォルトの名無しさん:2019/12/08(日) 14:36:36.30 ID:3pi+cAN/.net
もっと早くは最速って意味ですか?
それとも速くしたいって意味ですか?

726 :デフォルトの名無しさん:2019/12/08(日) 14:56:59.55 ID:3pi+cAN/.net
インテリコード、ほんとに提案してくるね。
お前は次にこう書く・・・って。

727 :デフォルトの名無しさん:2019/12/08(日) 15:02:14.03 ID:J+6Nu+8f.net
歯垢の妨げにしかならんわ

728 :デフォルトの名無しさん:2019/12/08(日) 17:09:58.86 ID:hM3Qn2JU.net
>>723
C++ Nex という言語とそのIDEを作ってますが、マルチプラットフォームの
ツールキットも同時に作ってます。MacやiOSなどまで native 対応するのは
貧乏なので機材の関係で難しいので、wasm に対応することでひとまずは
凌ごうかと思いました。

ツールキットのソースをBSD/MIT系ライセンスで公開して、C++ Nex も
無料で使えることにして、みなさんのお力をお借りして native対応の
ツールキットに出来ればいいのですが。ひとまず、Windows/Wasm/Android
くらいまでなら対応できる目処は立ってます。iOSについては、swift
言語が出したオブジェクトファイルとリンクすることはWindows上でも
実験できそうなので、その基礎的な部分だけならMakefileなどの開発環境を
用意することはできそうです。

Mac miniがあれば、iOS native 対応も出来そうなんですが。

729 :デフォルトの名無しさん:2019/12/08(日) 17:29:31.80 ID:3pi+cAN/.net
基本的にネイティブ志向なんですね。

730 :デフォルトの名無しさん:2019/12/08(日) 17:29:36.52 ID:oOCB7Yl8.net
>>728
ソースコード見せて

731 :デフォルトの名無しさん:2019/12/08(日) 17:30:50.90 ID:3pi+cAN/.net
ウェブアセンブラは興味あるんだけど、イマイチ情報が。

732 :デフォルトの名無しさん:2019/12/08(日) 17:32:13.08 ID:3pi+cAN/.net
高橋茉奈著やさしいウェブアセンブラが待たれる今日この頃。

733 :デフォルトの名無しさん:2019/12/08(日) 17:37:23.93 ID:hM3Qn2JU.net
>>730
ライセンスは、BSD, MIT, LGPL(静的リンクしてもGPL感染しない例外あり) の
どれかにするか迷っています。

734 :デフォルトの名無しさん:2019/12/08(日) 17:43:51.77 ID:8Jdq2NjK.net
WTFPLライセンスにしようぜ

735 :デフォルトの名無しさん:2019/12/08(日) 23:33:02 ID:Cj3eSjEv.net
>>721
>"C" だと
>iscntrl() が真を返す値は 0x00-0x1f, 0x7f

ほう、そんなことが規格のどこにかいてあるのですか

736 :デフォルトの名無しさん:2019/12/08(日) 23:58:38 .net
>>722
Android 4.4.2 Chromeで動作した

737 :デフォルトの名無しさん:2019/12/09(月) 01:41:27 ID:ExBOPGUm.net
ID無いのは5chの人って事?

738 :デフォルトの名無しさん:2019/12/09(月) 01:45:35 ID:aHmkn8DW.net
有料ユーザーってこと

739 :デフォルトの名無しさん:2019/12/09(月) 01:45:54 ID:dDDj5i4x.net
これ5chじゃなかったの?

740 :デフォルトの名無しさん:2019/12/09(月) 02:33:36.15 ID:ExBOPGUm.net
そうなんだ。

741 :デフォルトの名無しさん:2019/12/09(月) 02:41:32 ID:ExBOPGUm.net
>>739
なかの人はID付かないのかなって。

742 :デフォルトの名無しさん:2019/12/09(月) 08:06:32.09 ID:V5HcCSm8.net
>>735
C++ の規格が引用してる C の規格じゃないかな。

質問のつもりで書いてるなら、あまりに態度が悪い気がするし、
「その投稿の内容は間違ってる」と主張したいなら、
もっと直接的・具体的に間違ってるという根拠を示すべきだと思うよ。

743 :デフォルトの名無しさん:2019/12/09(月) 09:58:16 ID:CUCDgsHX.net
>>736
ありがとう。

744 :デフォルトの名無しさん:2019/12/09(月) 17:54:07.48 ID:c5eP1gUS.net
>>742
デタラメぬかしておいて根拠を求められたら示せないばかりか
オマエこそデタラメである根拠を出せとか、さすがですね

745 :720:2019/12/09(月) 18:35:46.39 ID:ZGVF76Fo.net
自己レスです

Visual Studio 16.4では
Intel Parallel Studio 2019 u5は動かないようです。
16.3に戻せないし
どーしよー

https://software.intel.com/en-us/forums/intel-c-compiler/topic/840467

746 :デフォルトの名無しさん:2019/12/09(月) 19:45:24.14 ID:ExBOPGUm.net
POSIXには明確にCロケールの定義が書かれていた。

747 :デフォルトの名無しさん:2019/12/09(月) 20:19:32.09 ID:B3OID8x5.net
>>745
今のVSの最新版は人柱仕様であり、検証無しでプロダクション用をアップデートしてはいけません
勉強になったねー

748 :デフォルトの名無しさん:2019/12/09(月) 21:02:54.27 ID:HdhKIpY6.net
昔からVSはそんなもんだ。
てかc++コンパイラなんて全部そんなもんだ。

749 :デフォルトの名無しさん:2019/12/09(月) 21:45:50.54 ID:P+A0aO3e.net
>>745
リンク先に回避策があるって書いてあるやん

750 :デフォルトの名無しさん:2019/12/09(月) 21:53:17.84 ID:G+eF5KMH.net
>>746
それはCの規格と必ずしもイコールではないがな。

751 :デフォルトの名無しさん:2019/12/09(月) 22:32:03.14 ID:ExBOPGUm.net
どういうことですか。

752 :デフォルトの名無しさん:2019/12/09(月) 23:24:28.11 ID:qFr59Y2H.net
POSIX には ISO C には無い追加の定めがあり、したがって
POSIX にある定めは必ずしも ISO C 一般に言えることではないということです。

753 :デフォルトの名無しさん:2019/12/09(月) 23:30:20.36 ID:c5Uv/Cv5.net
わかったはもうこれからはstd::isspace()とstd::iscntrl()を使うは

754 :デフォルトの名無しさん:2019/12/09(月) 23:43:16.79 ID:ExBOPGUm.net
メンバ変数にstd::listを使うと移動コンストラクタがnoexceptに出来ないのですが。
こんな時はどうするのでしょう。

755 :デフォルトの名無しさん:2019/12/09(月) 23:58:06.53 ID:aHmkn8DW.net
メンバのstd::listをポインタにする

756 :デフォルトの名無しさん:2019/12/09(月) 23:59:06.89 ID:qFr59Y2H.net
>>754
まず何を見て「出来ない」と言っているのかを明らかにします。

757 :デフォルトの名無しさん:2019/12/10(火) 00:04:16.84 ID:KeuWZv5z.net
https://ja.cppreference.com/w/cpp/container/list/list
僕はいつもここを見ます。

758 :デフォルトの名無しさん:2019/12/10(火) 00:06:34.29 ID:KeuWZv5z.net
std::swapの特殊化がnoexceptです。
これを使いますか。

759 :デフォルトの名無しさん:2019/12/10(火) 00:08:47.32 ID:KeuWZv5z.net
引数無しのコンストラクタがnoexceptじゃないから無理でした。

760 :デフォルトの名無しさん:2019/12/10(火) 00:37:17 ID:OASxW0Hh.net
そもそも noexcept にする必要性が不明だし、呼び出してる関数が
全部 noexcept じゃなくても std::list 実装を限定してよかったり、特定実装での
bad_alloc =即死の不都合が必要性と釣り合うなら noexcept にすることはできるし、
最大限の移植性も bad_alloc の通知も noexcept もすべて本当に必要なら
>755 でポインタって答えも出てるのに。

761 :デフォルトの名無しさん:2019/12/10(火) 00:41:00 ID:2YzAsKi1.net
自動でnoexceptに成らないなら、自分で望みのnoexceptの定義すりゃ良いだろうに
部品が例外投げるなら内部でcatchして適切に処理すればいい

762 :デフォルトの名無しさん:2019/12/10(火) 00:43:28.28 ID:KeuWZv5z.net
https://github.com/isocpp/CppCoreGuidelines
これです。

763 :デフォルトの名無しさん:2019/12/10(火) 07:32:12 ID:Xhvd8FYl.net
>>761
正論

764 :デフォルトの名無しさん:2019/12/10(火) 19:05:35.05 ID:yM6al2d7.net
途中でcコード通るとか何らかの理由があるんだろう。

765 :デフォルトの名無しさん:2019/12/11(水) 13:14:22.35 ID:KfdgnhFC.net
ある一つの変数に対してstd::threadで作成したプロセスは値を更新し続けて、メイン関数の方では値を読み続ける場合は排他処理する必要はありませんか?
メイン関数の方は必要なときだけ値が読めればいいので読みこぼしは無視していいです

766 :デフォルトの名無しさん:2019/12/11(水) 13:19:53.65 ID:iOg65oSz.net
>>765
変数が std::atomic<T> でなければ排他制御の必要があります。

767 :デフォルトの名無しさん:2019/12/11(水) 13:21:20.19 ID:m9WEF2SZ.net
>>765
atomicでないとだめ。プリミティブな型でもあやしい。
りーどらいとろっくするがよい。

768 :デフォルトの名無しさん:2019/12/11(水) 13:23:21.98 ID:/1t9T7AP.net
基本型かつ確実にレジスタでなくメモリに書き出されているならそうだね
std::atomcを使うのが無難
その条件ならmemory_order_relaxedを指定すればバリアのオーバーヘッドは避けられる
面倒だけどね

769 :デフォルトの名無しさん:2019/12/11(水) 13:35:45.33 ID:IATqHbi6.net
質問者じゃないけど
読みこぼしとかタイミングによるズレが問題ないとしても排他制御なしに読み書きする時点で未定義動作だからNG
って認識でおk?

770 :デフォルトの名無しさん:2019/12/11(水) 13:46:34.56 ID:iOg65oSz.net
はい。
https://timsong-cpp.github.io/cppwp/n4659/intro.multithread#intro.races-20
> The execution of a program contains a data race if it contains two
> potentially concurrent conflicting actions, at least one of which is
> not atomic, and neither happens before the other, except for the
> special case for signal handlers described below. Any such data race
> results in undefined behavior.

771 :デフォルトの名無しさん:2019/12/11(水) 14:00:16.36 ID:/1t9T7AP.net
言語仕様はそうだろうけど
x86なら実際は多くの場合バリア不要だったりするから
最終的にどういうinstructionになっているのか知っておくと理解が深まる

772 :デフォルトの名無しさん:2019/12/11(水) 15:24:29 ID:nkoUZIKM.net
x86系CPUで普通のメモリへの読み書きで順番が入れ替わる可能性があるのは write => read だけ

これ以外だったり同期が必要なければ
排他制御は不要

もちろん、
一連のデータリードでデータの一貫性が必要であれば一貫性確認の仕組みなり排他制御なりは当然必要だし、
コンパイラが読み書きを省略する可能性のあるコードであれば
volatileを付けるなど、省略を防ぐ必要はある

ymmレジスタを使えばアトミックな読み書きが出来るので
256bit以内なら一貫性も保てる

マルチコアARMの場合は
DMB命令を入れておけば確実

パフォーマンスに問題が無い箇所であれば、
移植性の為にも、素直にC++の排他制御を入れておこう!

773 :デフォルトの名無しさん:2019/12/11(水) 15:42:23 ID:ax9A/ZTc.net
お前らRustに移行とか考えたりするの?

774 :デフォルトの名無しさん:2019/12/11(水) 17:37:57.91 ID:bM/oaPHs.net
>>773
個人的には絶対に移行したくないと思っている。

775 :デフォルトの名無しさん:2019/12/11(水) 17:42:08.10 ID:/1t9T7AP.net
どっちもやったらええがな

776 :デフォルトの名無しさん:2019/12/11(水) 18:13:18.74 ID:bM/oaPHs.net
>>771
質問されたような簡単な場合であっても、少なくとも、80386系CPUでも、
物理CPUを2つ積んでいるようなマシンだと、色々な配慮が必要。
一つの理由は、CPUキャッシュが外部メモリに反映されていない場合が
あるため。
もう一つは、値の変化のタイミングがコードに書いた通りで無い事があり、
僅かにタイミングがずれることで、「すれ違い」現象の様なことが
おきることがある。これが起きると、変数の値をフラグ的に利用して
厳密に何かをやりたい場合に非常に致命的な問題を生じてしまうことがある。
これを避けるには、80386の設計者は、XOR交換命令を使うことを想定
していたらしい。
2つのスレッドでデータをやり取りする場合には色々と注意が必要で、
普通はデータが準備できたかどうかをCreateEvent(),SetEvent(),
WaitForSingleEvent()などで待機して処理するのが基本。

777 :デフォルトの名無しさん:2019/12/11(水) 18:17:08.59 ID:bM/oaPHs.net
>>776
スマン。XOR交換命令ではなく、xchg命令だった。

778 :デフォルトの名無しさん:2019/12/11(水) 18:20:46.73 ID:NtLrnXCf.net
goよりかはrustの方が全然マシやと思うぞ
最近go案件振られること多いけどC言語触ってるみたいで好きになれんわ〜

779 :デフォルトの名無しさん:2019/12/11(水) 18:30:30.06 ID:/1t9T7AP.net
>>776
xchgはsequential consistencyが必要な場合だよ
今回のように単にatomicにread/writeできればいいだけなら不要
お前さんも含めてよくわからん人は使わないのは正解

780 :デフォルトの名無しさん:2019/12/11(水) 18:36:33.88 ID:bM/oaPHs.net
>>779
正直言って、俺は、lock, xchg, mfence, prefetch,
キャッシュ制御付き(?)mov各種(大量)
に付いてはちゃんと理解出来てないことは認める。

781 :デフォルトの名無しさん:2019/12/11(水) 18:38:56.23 ID:bM/oaPHs.net
MFENCE
PREFETCH
MOVNTDQA
LFENCE(?)
XCHG
LOCK prefix
WC Memory

↑沢山あるけど、よく分からない。
xchgもちゃんと理解できてない。

782 :デフォルトの名無しさん:2019/12/11(水) 18:39:59.12 ID:bM/oaPHs.net
MFENCE, LFENCE, SFENCE。

服のサイズみたいだ。分からん。

783 :デフォルトの名無しさん:2019/12/11(水) 18:46:12.74 ID:bM/oaPHs.net
>>779
xchgは、2つ以上のCPUが1つの事柄に関する lock を同時に獲得しようとした時に
1 CPU だけが lock を獲得できて、他はすべて獲得できないようにするための
ためのようですね。今回とは余り関係ないようです。

784 :デフォルトの名無しさん:2019/12/11(水) 21:50:49.53 ID:10jfhd7e.net
>>777
XORを使った交換テクニックがあったのを思い出した

785 :デフォルトの名無しさん:2019/12/12(木) 00:31:42.87 ID:n5d2iAqE.net
>>765
その場合でも排他制御は基本的には必要。
たとえば読み込んで範囲チェックをした後に値が変わってしまったらまずいでしょ。
別メモリにコピーを取っていてから処理しているつもりでも、最適化が気を利かして削除しちゃうこともあるだろうしね。

786 :デフォルトの名無しさん:2019/12/12(木) 00:36:46.28 ID:n5d2iAqE.net
>>765
あとはアレだな、変数の構造にもよるけど、変数を読み込んでる最中に、上位ワードを読み込んだ後に値が変わって下位ワードだけ新しくなるなんてことも
可能性としては0とは言えない。

787 :デフォルトの名無しさん:2019/12/12(Thu) 00:54:16 ID:UvCIGzud.net
AVXを使えば256bitを1命令で
AVX512を使えば512bitを1命令で
読み書き可能

788 :デフォルトの名無しさん:2019/12/12(Thu) 01:00:12 ID:UvCIGzud.net
x86系だとCMPXCHG命令
ARMだとLL, AC命令

がデータの一貫性確認に使える

789 :デフォルトの名無しさん:2019/12/12(Thu) 03:03:25 ID:hmkgwwLY.net
とんちプログラミングはもう流行らなさそう。

790 :デフォルトの名無しさん:2019/12/12(木) 03:28:17.88 ID:J/GuvI9A.net
とんちプログラミングwww

791 :デフォルトの名無しさん:2019/12/12(Thu) 03:55:57 ID:g+q4RhTJ.net
> これを避けるには、80386の設計者は、XOR交換命令を使うことを想定
> していたらしい。

当たり前じゃね?アトミックな命令を使うのは基本だと思うが

792 :デフォルトの名無しさん:2019/12/12(木) 07:30:46.73 ID:UvCIGzud.net
XOR

793 :デフォルトの名無しさん:2019/12/12(Thu) 07:43:20 ID:Vt8W+oPZ.net
xor rax,rbx
xor rbx,rax
xor rax,rbx
これでswap rax,rbx相当ってことね

794 :デフォルトの名無しさん:2019/12/12(木) 07:53:00.21 ID:UvCIGzud.net
>>777

795 :デフォルトの名無しさん:2019/12/12(木) 10:43:59.85 ID:r0VN1UlG.net
condition_variableで待機しているスレッドがない状態でnotify_allしたときの動作ってどうなりますか?

796 :デフォルトの名無しさん:2019/12/12(木) 10:56:19.34 ID:WJA8YZFG.net
時空が逆流し、針の先から悪魔が生まれる

797 :デフォルトの名無しさん:2019/12/12(木) 11:06:56.29 ID:a67Hqgb2.net
jsに対するTypeScriptみたいな感じで
C++に対するRustっていう認識は間違ってるが
それならC++に対するそれは何が適当なんかある?

798 :デフォルトの名無しさん:2019/12/12(木) 11:10:12.33 ID:Vt8W+oPZ.net
allに該当する要素の数が0なのを特別視する必要はなさそう

799 :デフォルトの名無しさん:2019/12/12(木) 11:21:14.68 ID:NrsugUJv.net
非同期な操作やしその瞬間何も起きんなら単にスルーするだけ

800 :デフォルトの名無しさん:2019/12/12(木) 12:01:38.93 ID:Z8SHCwDj.net
>>797
無い。

801 :デフォルトの名無しさん:2019/12/12(木) 12:26:43.11 ID:gL/Y8Ccu.net
>>797
Managed C++とかC++/CLIとか

802 :デフォルトの名無しさん:2019/12/12(木) 13:04:34.98 ID:Z8SHCwDj.net
>>801
それだと余計に変になっているので、JS ---> TypeScript の関係とは違う。

803 :デフォルトの名無しさん:2019/12/12(木) 13:08:42.86 ID:b3wcvAqB.net
C++は型安全だからC++はC++

804 :デフォルトの名無しさん:2019/12/12(木) 14:17:55.83 ID:CNmkwPhj.net
型安全認定された!

805 :デフォルトの名無しさん:2019/12/12(木) 14:59:18.45 ID:ZWrMIDdu.net
ていうかTypeScriptはJSが型があまりにもザルすぎて危険だよね、Javaやら
C/C++ほど堅くないにしてもある程度の型はいるよね?っていう発想ででてきた
ものだから C++ から寄せていくならむしろ型をユルくしてくパターンだな
そんなクソ言語には興味がないので具体的に何?ときかれても知らんがな

806 :デフォルトの名無しさん:2019/12/12(木) 16:27:22.69 ID:AVYkL4QT.net
JSが危険ってどういう事?

C/C++は型がない=危険だけど
JSなんかは型安全な言語だからちゃんと例外になって、
メモリ保護エラーとか起こすこと無いけど?

807 :デフォルトの名無しさん:2019/12/12(木) 16:39:21.91 ID:hmkgwwLY.net
Treeの節(Node)は部分木を表すRangeだと考えて差し支えないですかね?

808 :デフォルトの名無しさん:2019/12/12(木) 16:47:21.68 ID:hmkgwwLY.net
C++20のレンジってもしかしてDBのカーソルとかに応用できませんかね?

809 :デフォルトの名無しさん:2019/12/12(木) 18:38:14.77 ID:Ijd1d2r8.net
毎回フルスキャンしたいならどうぞ

810 :デフォルトの名無しさん:2019/12/12(木) 18:59:14.59 ID:hmkgwwLY.net
ビューで制限できるし遅延評価を目的としたストリームを代弁できるんじゃないかなって思ったのですが。

811 :デフォルトの名無しさん:2019/12/12(木) 19:07:50.30 ID:Z8SHCwDj.net
>>806
型も宣言も無い事が危険になることが多い。
例えば、関数を定義しても仮引数に型がないので、全く間違った実引数列
を指定してしまっても処理系がエラーを出してくれない。関数を修正して
仮引数列の真ん中あたりに新しい仮引数を一つ増やしたとする。
この場合、この関数を呼び出す側もちゃんと全て修正する必要がある。
Cだと型をチェックしてくれるので修正の仕方を間違うとエラーになって
くれることが多い。ところがJSだと間違っても全くエラーを出してくれない。

また、JSの場合、ローカル変数とグローバル変数を間違って使ってしまい、
グローバル変数にいれたつもりがローカル変数になってしまっていることがある。

また、変数を1文字間違えた場合も全くエラーにならず、新しいグローバル変数
が使用されたと解釈されてしまう。

どれも、C言語だとエラーになってくれるので安全だが、JSだと危険。

812 :デフォルトの名無しさん:2019/12/12(木) 19:25:03.70 ID:AVYkL4QT.net
>>811
お前が型安全の意味を間違ってるってことはよく分かった。

メモリ保護エラーなど言語で解決されないエラー
(OSがトラップするエラー)になってしまうことを
型安全じゃないっていうんだよ

言語で例外になるならそれは型安全

813 :デフォルトの名無しさん:2019/12/12(木) 19:44:50.53 ID:Vt8W+oPZ.net
ぬるぽ

814 :デフォルトの名無しさん:2019/12/12(木) 20:29:23.98 ID:f2lx0DlC.net
ツンッ

815 :デフォルトの名無しさん:2019/12/12(木) 20:46:51.94 ID:6QhfdrtV.net
>>808
おそらくできると思う

816 :デフォルトの名無しさん:2019/12/12(木) 22:31:55.78 ID:hmkgwwLY.net
boost.property_treeはノードはコンテナだって書いてる。
アルゴリズムイントロダクションにはポインタ三つ組みのツリー表現が紹介されてるけど、これがノードがコンテナ的な感じだろか。

817 :デフォルトの名無しさん:2019/12/12(木) 22:36:00.00 ID:2qfVB5NM.net
>>812
???
>>811は型安全なんて一言も言ってないけど?

818 :デフォルトの名無しさん:2019/12/12(木) 22:37:04.02 ID:hmkgwwLY.net
仮に、ノードにSTLのリストやベクターを持たせて子ノードを格納すると、別の部分木のイテレータが互換性を持たなくなる。
これはちょっとまずい。
ある部分木の途中からある部分木の途中までを注目することはよくあるから。

819 :デフォルトの名無しさん:2019/12/12(木) 22:45:48.06 ID:hmkgwwLY.net
ノードの物理量が必ず同じであることを利用すれば、データ構造ヒープを木として使うのが良いんだろか。
これなら、メモリーの確保はSTLのベクターが使え、木全体でイテレータが互換性を持てる。

820 :デフォルトの名無しさん:2019/12/12(木) 22:52:26.39 ID:hmkgwwLY.net
考えれば考えるほど、ノードに子ノード格納用のSTLコンテナを持たせるのは現実味がなく思える。

821 :デフォルトの名無しさん:2019/12/12(木) 22:59:41.49 ID:hmkgwwLY.net
つまり、型安全はプログラムの健全性を担保するものではなく、C++は型安全とは言えないって事で良いのでは。

822 :デフォルトの名無しさん:2019/12/12(木) 23:02:50.75 ID:+RpJiFi7.net
jsてのは女子小学生の意味か?

823 :デフォルトの名無しさん:2019/12/12(木) 23:04:10.87 ID:hmkgwwLY.net
型が無いと僕たちには辛すぎるよね。
ミスを発見してくれないから。

824 :デフォルトの名無しさん:2019/12/12(木) 23:36:51.22 ID:Rc7qy7fw.net
型はまあ重要だけど型ガーばっか言ってる奴は揃ってバカだよな。

825 :デフォルトの名無しさん:2019/12/13(金) 00:21:19.32 ID:0IHjBlJG.net
型が無いとinsertがinsert_from_intとかinsert_from_stringとか別々にしないといけなくなって、色々大変そう。
呼び出し側が責任を持つということになるのかも。

826 :デフォルトの名無しさん:2019/12/13(金) 00:22:24.50 ID:0IHjBlJG.net
型演算をコンパイラに任せることが出来なくなって、すべてプログラミングしないといけなくなるのかな。

827 :デフォルトの名無しさん:2019/12/13(金) 06:47:47.05 ID:6WB0hlYg.net
>>824
むしろ(静的)型なんて俺には不要だぜ、ベイビーって奴の方がアホっぽいけどなw

>>825-826
静的型付け 動的型付け
あたりでググってこい

828 :デフォルトの名無しさん:2019/12/13(金) 07:17:35.68 ID:0IHjBlJG.net
機械語は変数に型がない。
命令で型を使い分ける。
その大変さを考えると型欲しいってなるのかも。

829 :デフォルトの名無しさん:2019/12/13(金) 07:24:37.08 ID:Ry/2QtNy.net
まさにBがCに進化するときの考え方だね

830 :デフォルトの名無しさん:2019/12/13(金) 09:49:21.00 ID:wVkcEFxk.net
>>825
ただし、実引数の型が違うのに仮引数の違いだけの同じ関数名の関数を複数
用意して使うと言う発想はスクリプト言語的な発想。
そのようにした場合、コンパイラが厳密にどの関数を使うかが人間には
分からない事が多いので安全性を損なう場合が多い。
スクリプト言語は RAD言語なのため、できるだけ短い関数名で対処しようと
するが、それが思わぬ間違いを含みがち。
C言語が好かれているのは、どういう処理がされるかが人間が完全予測できる
ことで、「大体の動作」は好まれない。

831 :デフォルトの名無しさん:2019/12/13(金) 09:53:03.46 ID:wVkcEFxk.net
>>826
型の違いでコードを自動変化させるという思想は、C++の中でも非常に最近に
なって STL (template) で流行りだしたもの。
もともとC言語に型が導入されたのは、プログラマのミスをコンパイラが発見して
エラーを出してくれるようにするためだった。C言語には関数の多態性(overload)
がない。なお、override と overload は別の概念なので、知らない人は検索して
欲しい。

832 :デフォルトの名無しさん:2019/12/13(金) 09:53:50.44 ID:0IHjBlJG.net
イネーブラ使えば良いのでは。

833 :デフォルトの名無しさん:2019/12/13(金) 10:00:20.89 ID:0IHjBlJG.net
コンセプトコイコイって感じなのかな。

834 :デフォルトの名無しさん:2019/12/13(金) 11:27:07.79 ID:WVlIRY9+.net
#pragma omp parallel forで
自動分割され、各スレッドに割り当てられた
ループの開始点と終了点を取得することできませんか?

835 :デフォルトの名無しさん:2019/12/13(金) 18:09:24.89 ID:e6j7CnOm.net
>C言語には関数の多態性(overload)がない

さらりと嘘をつくやつがおるな

836 :デフォルトの名無しさん:2019/12/13(金) 18:27:30.70 ID:fi1/rC5j.net
今UE4と組み込み以外でc++の仕事あります?

837 :デフォルトの名無しさん:2019/12/13(金) 18:33:53.16 ID:xTSwswyu.net
オーバーロードあるか?
ディスパッチの方法はいろいろあると思うが

838 :デフォルトの名無しさん:2019/12/13(金) 18:55:58.62 ID:ftjAwgQI.net
>>836
USのマイクロソフトに行け

839 :デフォルトの名無しさん:2019/12/13(金) 19:01:03.38 ID:ysGzQi5M.net
>>830
> ただし、実引数の型が違うのに仮引数の違いだけの同じ関数名の関数を複数
> 用意して使うと言う発想はスクリプト言語的な発想。

え?スクリプト言語で「同じ関数名の関数を複数用意」できる言語なんて無いでしょ?
「同じ関数名の関数を複数用意」できるのは静的型付け言語の特徴だよ

840 :デフォルトの名無しさん:2019/12/13(金) 19:52:22.32 ID:6WB0hlYg.net
>>839
> え?スクリプト言語で「同じ関数名の関数を複数用意」できる言語なんて無いでしょ?
関数は無理だがメソッドでいいならPowerShell

841 :デフォルトの名無しさん:2019/12/13(金) 20:00:57.46 ID:ysGzQi5M.net
PowrShell は型付言語ですからね。
それぐらいでしょ?

842 :はちみつ餃子 :2019/12/13(金) 20:54:52.57 ID:1q9LzdDI.net
用語としてメソッドと言ってるものでよければ Common Lisp もそうじゃね?

843 :デフォルトの名無しさん:2019/12/13(金) 21:07:31.92 ID:KHLl2/ku.net
>>841
うん、1つあれば
> え?スクリプト言語で「同じ関数名の関数を複数用意」できる言語なんて無いでしょ?
の反例になるからね

844 :デフォルトの名無しさん:2019/12/13(金) 21:09:15.79 ID:wKYhuojH.net
>>843
そしたら、一つぐらいしか無いって俺は意見を訂正するだけなんだが、

お前も同じ関数名の関数を複数用意できるのはスクリプト言語では
PowerShellだけだって訂正するって話でいいの?

845 :デフォルトの名無しさん:2019/12/13(金) 21:13:12.55 ID:gmdEaqRD.net
それでいいんじゃないの

846 :デフォルトの名無しさん:2019/12/13(金) 21:23:18.13 ID:T1rtAOWF.net
質問です
template <typename T>
constexpr inline T value;
template <typename T>
constexpr inline T value = (T)0;
こうやって変数テンプレートの宣言と初期化を分離すると
VC、clang(Xcode付属)ではエラーになるんですがwandboxで試すとエラーになりません
本来どっちの動作が正しいんでしょうか?

847 :デフォルトの名無しさん:2019/12/13(金) 21:37:57.11 ID:KHLl2/ku.net
>>844
別にそれでいいよ
> え?スクリプト言語で「同じ関数名の関数を複数用意」できる言語なんて無いでしょ?
が無知からの発言と認めてもらえればいいだけだしw

848 :デフォルトの名無しさん:2019/12/13(金) 22:26:34.23 ID:0IHjBlJG.net
>>846
これも通ってしまった。
#include <iostream>

template <typename T>
constexpr T value = 1;

template <typename T>
constexpr T value = 2;

template <typename T>
constexpr T value = 3;

template <typename T>
constexpr T value = 4;

template <typename T>
constexpr T value = 5;

template <typename T>
constexpr T value = 6;

int main()
{
std::cout << value<int> << std::endl;
}

849 :デフォルトの名無しさん:2019/12/13(金) 22:27:26.74 ID:0IHjBlJG.net
実行結果。

Start
6
0
Finish

最後の定義が有効になってるように見える。

850 :デフォルトの名無しさん:2019/12/13(金) 22:28:16.14 ID:0IHjBlJG.net
Wandbox
C++
gcc HEAD 10.0.0 2019

851 :デフォルトの名無しさん:2019/12/13(金) 22:54:36.18 ID:T1rtAOWF.net
ありがとうございます、その結果を見るとgccがおかしいぽいですね・・・
宣言時に初期化は必須と考えて書いていこうと思います、ありがとうございました

852 :デフォルトの名無しさん:2019/12/13(金) 22:57:06.09 ID:0IHjBlJG.net
僕もちょっとわからないんだけど。

853 :デフォルトの名無しさん:2019/12/14(土) 00:21:27.14 ID:stptR0oK.net
>>836
デスクトップアプリ

854 :デフォルトの名無しさん:2019/12/14(土) 07:31:10.87 ID:SZLGcxYz.net
>>846
診断メッセージをよく見ろよ
> error C2737: 'value': 'constexpr' オブジェクトは初期化する必要があります。

そもそも分離できないんだよ
いいか、constexprは翻訳時定数だぞ
それを翻訳段階9まで未解決のままにできると思うか?

855 :デフォルトの名無しさん:2019/12/14(土) 08:56:55.09 ID:fBoJLlft.net
>>854
なんでできるようにしないの?
そっちの方がおかしくね?

856 :デフォルトの名無しさん:2019/12/14(土) 09:02:00.44 ID:SZLGcxYz.net
なんでという理由も述べたはずだが

857 :デフォルトの名無しさん:2019/12/14(土) 09:53:01.66 ID:fBoJLlft.net
>>856
だからそれを可能にするようにしてくれ

858 :デフォルトの名無しさん:2019/12/14(土) 10:02:03.90 ID:SZLGcxYz.net
ん? 俺は江添じゃねえぞ
奴なら標準会員だから言ってみるのもいいが

859 :デフォルトの名無しさん:2019/12/14(土) 10:02:27.48 ID:SZLGcxYz.net
- 標準会員
+ 標準化委員

860 :デフォルトの名無しさん:2019/12/14(土) 10:08:29.00 ID:yV/FURvf.net
江添本ダメ絶対

861 :デフォルトの名無しさん:2019/12/14(土) 10:30:50.58 ID:stptR0oK.net
江添でもできない

862 :846:2019/12/14(土) 10:35:10.86 ID:QUVSvjZy.net
>>854
>診断メッセージをよく見ろよ
見た上で言ってます(つまりgccまたはVC, clangのバグではないかということ

>いいか、constexprは翻訳時定数だぞ
それ以前にテンプレートなんですが

863 :デフォルトの名無しさん:2019/12/14(土) 12:26:05.30 ID:m0rD8Ode.net
ローマ法王は根競べで決めるらしいですよ奥さん。

864 :デフォルトの名無しさん:2019/12/14(土) 12:26:49.81 ID:gw9aL+td.net
誰でも閲覧できる規格ドラフト見ればすぐにわかることをこんな掃きだめで聞いても

865 :デフォルトの名無しさん:2019/12/14(土) 12:35:13.30 ID:SZLGcxYz.net
>>862
なんかとんがってんな

コンパイラのバグとまで言う根拠は何だ?
相場では規格票の条文だが

テンプレートなのは見ればわかるさ
だから何なのか説明をやめないでくれ

866 :デフォルトの名無しさん:2019/12/14(土) 12:50:37.99 ID:gw9aL+td.net
>相場では規格票の条文

通産省の癖の抜けない老人はご退場いただきたい

867 :デフォルトの名無しさん:2019/12/14(土) 12:58:43.25 ID:m0rD8Ode.net
これODRの緩和と関係あるんですかね?

868 :デフォルトの名無しさん:2019/12/14(土) 13:34:08.27 ID:T/HCOnVQ.net
>>772
>x86系CPUで普通のメモリへの読み書きで順番が入れ替わる可能性があるのは write => read だけ
別に。
コアAの読み書きをコアA自身が見る分にはそうかもわからんが
コアAの読み書きを異なるコアBから見たらwrite同士やread同士でも順番が入れ替わり得る
(アウトオブオーダー実行の影響で

安全に動かすには適切にメモリバリアで順序化する必要がある

869 :デフォルトの名無しさん:2019/12/14(土) 13:37:18.74 ID:JwYnIOEa.net
>>868
read ==> read
read ==> write
は入れ替わらない

870 :デフォルトの名無しさん:2019/12/14(土) 13:37:51.96 ID:T/HCOnVQ.net
といってもロックレス何ちゃらぐらいの制御であればInterlockedCompareExchange()で済むから
スレッド間の通信なら普通メモリバリアとか直接触る必要は無いが

871 :デフォルトの名無しさん:2019/12/14(土) 13:38:24.93 ID:T/HCOnVQ.net
>>869
迷信

872 :デフォルトの名無しさん:2019/12/14(土) 13:39:11.91 ID:JwYnIOEa.net
ソースは?

873 :デフォルトの名無しさん:2019/12/14(土) 13:39:40.59 ID:T/HCOnVQ.net
リードキューやコマンドキューにコマンドが入るのはアウトオブオーダープロセスの事後であるため
そのような保証は無い

874 :デフォルトの名無しさん:2019/12/14(土) 13:41:05.07 ID:JwYnIOEa.net
それのソース

875 :デフォルトの名無しさん:2019/12/14(土) 13:44:15.66 ID:JwYnIOEa.net
https://github.com/herumi/misc/blob/master/cpp/fence.md

876 :デフォルトの名無しさん:2019/12/14(土) 14:15:12.84 ID:JwYnIOEa.net
x86系は
シングルコアのマルチスレッドアプリ
の多くがそのまま動くように出来てる

シングルコア時代が長かったから

877 :デフォルトの名無しさん:2019/12/14(土) 14:55:10.15 ID:QUVSvjZy.net
>>865
>テンプレートなのは見ればわかるさ
>だから何なのか
普通に考えて、実体化がまだなのに定義(初期化)を強制される妥当な理由はない、ということ

878 :デフォルトの名無しさん:2019/12/14(土) 14:57:30.67 ID:T/HCOnVQ.net
確かにリンク先のインテルのマニュアルの
>8.2.3.2 Neither Loads Nor Stores Are Reordered with Like Operations
>Example 8-2. Stores Are Not Reordered with Older Loads

>Initially x = y = 0r1 = 1 and r2 = 1 is not allowed
と書いてあって>>875と同じことが書いてあるが疑わしい
マニュアルが間違っているのではないか、

ちな
>8byteのデータはアドレスが8の倍数のときにアライメントされている。
から安全に読み書きできるというのはi486みたいな古いプロセッサーだとかえって危険らしい
>8.1.1 Guaranteed Atomic Operations
を見たらワカル、

879 :デフォルトの名無しさん:2019/12/14(土) 15:04:35.33 ID:T/HCOnVQ.net
つか上のインテルのマニュアルには「投機的実行時中のメモリアクセスではメモリアクセス例外は発生しない」
旨が2箇所ぐらいに書かれているが、
ということはつまりアセンブリコード上A→BまたはA→Cというメモリアクセスが条件によってどちら片方だけ実行されることを意図したコードであっても
A→B→Cというメモリアクセス順に成り得ることを意味し、他コアからもそう見えてしまうはずだが、
これをメモリアクセス順がreorderされていないうちに入れてしまうのはどうなのか、、、
マニュアル執筆者の国語の再教育が必要なのではないか

880 :デフォルトの名無しさん:2019/12/14(土) 15:10:49.52 ID:SZLGcxYz.net
>>877
おまえさん、もしかして
テンプレートの宣言と定義と
オブジェクトの宣言と定義を
ごっちゃにしてないか?

int test;
int test = 5;
これは宣言と定義じゃなく定義の重複だぞ

881 :デフォルトの名無しさん:2019/12/14(土) 15:13:40.23 ID:PwUHvw+y.net
お前なぁ
x86のこと大して詳しくないのにしゃしゃり出てくるからそういう情けないこと言うはめになるんだよ
x86でstd::atomicのmemory_orderを変えてバリア付きがどういうインストラクションになるか見てみな
storeのseq_cst以外は素のmovだから(コンパイラ依存だから絶対ではない)

882 :デフォルトの名無しさん:2019/12/14(土) 15:20:09.00 ID:T/HCOnVQ.net
そりゃー間違ったマニュアルにしたがって実装したら間違った実装になり得る(キリ

ていうかアウトオブオーダー実行の影響がマルチコアCPUにおいても透過的だと認めやっても良いが、
>>879の投機的実行の件はどうなんじゃ?
あるコアが投機的実行中に他のコアをストップさせるのでは何のための投機的実行かわからん…

883 :デフォルトの名無しさん:2019/12/14(土) 15:21:14.95 ID:k5kIl1RN.net
>>877
× 普通に考えて
〇 俺の頭の中で

× 妥当な理由はない
〇 妥当な理由は思い当たらない

テンプレートなら初期化は不要という主張なら、
constexpr 変数の宣言と定義を分離できないことは納得してるのかな?
そうだとして、それをテンプレートの時だけ可能とすることに意義があると思うの?

特別ルールを設ければコンパイラ実装やプログラムの読み取りにコストがかかるから、
明確が意義がなければ特別ルールは無いのが妥当だと思うよ。

884 :デフォルトの名無しさん:2019/12/14(土) 15:24:42.79 ID:QUVSvjZy.net
>>880, >>883
マウント取るのが最優先でまともな回答できない(するつもりも無い)んなら黙っててくれ

>これは宣言と定義じゃなく定義の重複だぞ
externつけたら?

>それをテンプレートの時だけ可能とすることに意義があると思うの?
テンプレート実引数に使われる型が不完全型であっても、実体化まで評価を遅らせられる

さて、
>× 普通に考えて
>〇 俺の頭の中で

>× 妥当な理由はない
>〇 妥当な理由は思い当たらない
こんなゴミみたいな煽り入れてきたからには逃げるなよ

885 :デフォルトの名無しさん:2019/12/14(土) 15:32:39.86 ID:SZLGcxYz.net
>>884
おまえさんの元の質問はこうだったな
template <typename T> constexpr inline T value;
template <typename T> constexpr inline T value = (T)0;

どこにexternなんて書いてある?
マウントがどうたら気にするあまり後出しなんかしてるのはそっちだぞ
こっちはそんなこと微塵も考えちゃいねえよ失敬な
最初の口調に戻れよ

886 :デフォルトの名無しさん:2019/12/14(土) 15:36:57.55 ID:QUVSvjZy.net
間違えた
Xテンプレート実引数に使われる型が不完全型であっても、実体化まで評価を遅らせられる
○初期化に使われる定数式の評価を遅らせられる

言い換えれば、宣言と定義を分離できないならconstな変数テンプレートの宣言時には
それに使う定数式内のすべての型が完全型であることを強制されてしまう
=std::is_integral_v = std::is_integral<T>::valueでいえば
is_integral構造体の方が取り回しがいい、ということ
なんのために変数テンプレートが導入されたのか・・・・

887 :デフォルトの名無しさん:2019/12/14(土) 15:37:56.58 ID:QUVSvjZy.net
>>885
自分が失敬だからこうなってるとは考えられないんだな
何様だよ、そもそも質問に答えてないだろうが

888 :デフォルトの名無しさん:2019/12/14(土) 15:43:43.09 ID:SZLGcxYz.net
>>887
template <typename T> constexpr inline T value;
template <typename T> constexpr inline T value = (T)0;
を例示しての質問に対して
int test;
int test = 5;
という答えをしているぞ
valueがtestになったのは悪かったが
余計な飾りをとって問題の核心を指摘したんだよ

889 :デフォルトの名無しさん:2019/12/14(土) 15:48:43.77 ID:SZLGcxYz.net
家事があるんでしばらく離席する

890 :デフォルトの名無しさん:2019/12/14(土) 15:58:10.05 ID:QUVSvjZy.net
規格でそうなってる(テンプレートゆえの特例は無い)のが”わかってるなら”
最初からそう言ってくれれば済むんじゃないの?
>>854を読み直せよ、テンプレートのことが完全にすっぽぬけた上に失礼な回答だろ

>コンパイラのバグとまで言う根拠は何だ?
とまで、って・・・・普通にありえるだろ、動作が違うんだから(未定義とかいう屁理屈は無しで)

で、>>883は逃げたの?

891 :デフォルトの名無しさん:2019/12/14(土) 16:55:24.17 ID:k5kIl1RN.net
>>886
やっぱり constexpr 変数の宣言と定義を分離して何がしたいのか、
何ができるようになるのか、が見えてこない。ごめんね。

宣言だけ見える constexpr 変数への参照やポインタだけはとれるようになるけど、
それだともう constexpr である必要なくて const 変数でよさそうで、それならふつうに
宣言と定義は分けられるし。

ちなみにテンプレート実体化までテンプレート引数依存箇所の評価はされないから、
宣言と定義を分ける話を「評価を遅らせられる」と言い表しているのも何か間違ってそう。
「記述を遅らせられる」の間違い?

892 :デフォルトの名無しさん:2019/12/14(土) 17:16:54.80 ID:SZLGcxYz.net
だめだこいつ
絶望的に人に者を尋ねる態度がわかってない
「言ってくれれば済む」とか図々しすぎ
技術的な議論がしたいがこいつ相手では
不必要にイラついちまって無理だわ
俺そんなに人間できてない

893 :デフォルトの名無しさん:2019/12/14(土) 17:24:00.92 ID:QUVSvjZy.net
>>891
すまん、
>テンプレート実体化までテンプレート引数依存箇所の評価はされない
これ検証してみたらたしかにそうだった
手元のコードで完全型を要求されたから、初期化時に不完全型を使えないと思い込んでた
(おそらくconstexprな変数テンプレートの実体化が、必要な型の実体化より先に来てたっぽい
多分構造体か何かでワンクッション置けば解決できると思う)
これなら確かに分けられなくて問題無いね

>>892
>いいか、constexprは翻訳時定数だぞ
>それを翻訳段階9まで未解決のままにできると思うか?
>なんかとんがってんな
>後出しなんかしてるのはそっちだ
>余計な飾りをとって問題の核心を指摘したんだよ
さらには
>最初の口調に戻れよ
の上で
>技術的な議論がしたいがこいつ相手では
>不必要にイラついちまって無理だわ
よくそんなセリフが言えたもんだ
自己評価高すぎじゃない?wwww

894 :デフォルトの名無しさん:2019/12/14(土) 17:52:18.36 ID:SZLGcxYz.net
意見が合うとか合わないとか以前の問題
根底的なメンタリティに欠陥がある相手とは話にならない

895 :デフォルトの名無しさん:2019/12/14(土) 17:58:45.99 ID:k5kIl1RN.net
FYI

>>846
Bug 68012: g++ incorrectly accepts forward declaration of constexpr variable template
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68012

>>848
One definition rule
https://timsong-cpp.github.io/cppwp/n4659/basic.def.odr#1
> No translation unit shall contain more than one definition of any variable, function, class type, enumeration type, or template.

896 :デフォルトの名無しさん:2019/12/14(土) 18:08:23.02 ID:QUVSvjZy.net
>>895
わざわざありがとう、やっぱgccのバグだったのね

897 :デフォルトの名無しさん:2019/12/14(土) 19:50:50.54 ID:UskLmxJI.net
GCCに踊らされてスレを浪費した

898 :デフォルトの名無しさん:2019/12/14(土) 20:04:04.94 ID:4qfYuBec.net
>>837
オーバーロード=多態性じゃないんで…
オーバーライドのことなら当然cで実現できる

899 :デフォルトの名無しさん:2019/12/14(土) 21:11:37.22 ID:zf7JKoX1.net
>>898
どうやって?
いや、ディスパッチの方法はいろいろあると思うが

900 :デフォルトの名無しさん:2019/12/14(土) 21:15:53.72 ID:SZLGcxYz.net
禿もそんなことを言いながら
virtualの導入には当初反対から出発したんだよな

901 :デフォルトの名無しさん:2019/12/14(土) 21:26:53.87 ID:00Pm6Tju.net
>>899
その話題QZ相手にやったばかりなんで自分で調べて

902 :デフォルトの名無しさん:2019/12/15(日) 09:10:03.56 ID:LATD77rz.net
君が忘れた腕時計見つめながら。

903 :デフォルトの名無しさん:2019/12/15(日) 10:29:35 ID:ir8W/KPm.net
>>898
overload は、同じ関数名で仮引数の型が違う関数を作れるという多態性のことですよ。

904 :デフォルトの名無しさん:2019/12/15(日) 10:52:20.53 ID:LATD77rz.net
ツリーのイテレータがあるとして、イテレータが返すのはノードじゃなくて、ノードの持つ値ですよね?
すると、イテレータは立体機動出来ないといけなくなるけど、begin().begin()とか変ですよね?
begin().parent()とか。

905 :デフォルトの名無しさん:2019/12/15(日) 10:59:28.89 ID:LATD77rz.net
イテレータが返すじゃなくて、イテレータの逆参照が返すかな。

906 :デフォルトの名無しさん:2019/12/15(日) 11:08:51.65 ID:fGq+HT2S.net
コレクションとしては子孫ノード全部を列挙できればよくて、ツリー構造に沿った操作が行いたいなら
それに加えて直接の子ノードのみを列挙するイテレータが用意できればいいだろう。

907 :デフォルトの名無しさん:2019/12/15(日) 11:17:54.16 ID:LATD77rz.net
何が子ノードのみを列挙するイテレータを返すかがよくわからない。
ノードの値がイテレータを返すことはできないので、ノードが子ノードを指すイテレータを返すとすると、イテレータの逆参照はノードを返すことになる。
これは意味論的にちょっと違うかなって。
コレクションにおいて位置はイテレータで示されるので、立体的な位置を持つツリーでは、イテレータ自身が立体機動出来て、巡回能力を持つイテレータは、reverse_iteratorのように外部に用意されれば良いのかなと思ったんだけど。
たとえば、レベルオーダーや深さ優先の巡回イテレータがあるとすると、普通に考えるとスタックやキューが内部に必要にある。
というわけでコピーのコストがあるので、これを標準には出来ないんじゃないかなって。

908 :デフォルトの名無しさん:2019/12/15(日) 11:22:50.93 ID:LATD77rz.net
子ノードを指すイテレータの逆参照が子ノードを返すとすると、*node.begin()は子ノードを返す。
**node.begin()は最初の子ノードの値を返すことになるんだけども。
イテレータの逆参照がノードを返す場合、初期化子リストが素直に実装出来てイイんだけども、イテレータの逆参照が値を返さないのが腑に落ちない感じ。

909 :デフォルトの名無しさん:2019/12/15(日) 11:23:28.40 ID:Q+saMC6e.net
>>903
こらこらoverloadは多態じゃない多重定義だ
多態はpolymorphism間違えるな

910 :デフォルトの名無しさん:2019/12/15(日) 11:27:25.99 ID:LATD77rz.net
イテレータは演算子の実装を求められてるわけではなく、その演算子を呼び出した時の効果を求められてるだけなので、++(int)はスタックをコピーしない方法を考えた。

911 :デフォルトの名無しさん:2019/12/15(日) 11:30:57.88 ID:fGq+HT2S.net
そこは値じゃなくてノードを返すイテレータでいいんじゃね?
必要ならイテレータ自体を拡張してもいいだろうけど、この場合はあまり応用できそうもないし。

912 :デフォルトの名無しさん:2019/12/15(日) 11:31:53.05 ID:LATD77rz.net
そうなのかな?

913 :デフォルトの名無しさん:2019/12/15(日) 11:37:55 ID:PfQY9kAx.net
まずイテレータで何を抽象化したいかを明確にしなよ
ノードを意識させたいのか?

914 :デフォルトの名無しさん:2019/12/15(日) 11:38:38 ID:LATD77rz.net
STL風ツリーって検索しても絶対出てこないし、CIAが絡んでるような気がしてきた。

915 :デフォルトの名無しさん:2019/12/15(日) 11:39:36 ID:LATD77rz.net
そこがわかんないんだよねえ。
禿4とか読んでると、イテレータは位置を意味してるように思うんだけど。

916 :デフォルトの名無しさん:2019/12/15(日) 11:45:00 ID:mSzJWPy5.net
ツリー構造
範囲が広すぎて
汎用化すると使い勝手が悪くなるからしない
ってだけかと

917 :デフォルトの名無しさん:2019/12/15(日) 11:56:45.76 ID:Q+saMC6e.net
recursive_directory_iteratorとかね

918 :デフォルトの名無しさん:2019/12/15(日) 12:06:14.82 ID:mSzJWPy5.net
なんでdirectory?
treeでいいじゃん

919 :デフォルトの名無しさん:2019/12/15(日) 12:22:05.91 ID:Q+saMC6e.net
いや立体がどうたら言ってるから
じゃあrecursive_directory_iteratorを使うユーザーのコードは
いちいち多重ループだの再帰だのといった処理になるのかって
思ってさ

920 :デフォルトの名無しさん:2019/12/15(日) 12:24:23.41 ID:LATD77rz.net
ツリーは、あるノードの親が知りたいときもあるはず。

921 :デフォルトの名無しさん:2019/12/15(日) 13:07:24.45 ID:TeOOTcIs.net
ごちゃごちゃ考える前にイテレータの本分を決めなよ
begin()からend()まで++で走らせた時にどうなってほしいの?
話はそれからだ

922 :デフォルトの名無しさん:2019/12/15(日) 13:09:44.18 ID:MBW+LfoG.net
一般にtreeの探索順序はアルゴリズムと深く結びついてるし、
そこ凝りだすと沼だぞ。

923 :デフォルトの名無しさん:2019/12/15(日) 13:09:51.26 ID:5G1zfwod.net
関数ポインタをシリアライズしてファイルとして保存し、
ファイルからその関数ポインタを利用できる形に復元する方法ってあるのでしょうか?

924 :デフォルトの名無しさん:2019/12/15(日) 13:13:54.57 ID:nhcuVJi8.net
関数だろうが変数だろうがポインタはただの整数値でしょ

925 :デフォルトの名無しさん:2019/12/15(日) 13:18:39 ID:p2D9PeH2.net
>>923 環境や「利用」の仕方を具体的に限定すればやりようはあるかもね。

926 :デフォルトの名無しさん:2019/12/15(日) 13:20:48 ID:hicN34V0.net
次に(別のプロセスで)ファイルを読み込んだときに、
元の関数を同じ番地で参照できると限らんしな。
関数ポインタの配列のインデクスなら大丈夫だろうだけど。

927 :デフォルトの名無しさん:2019/12/15(日) 13:23:00.95 ID:LATD77rz.net
https://ja.cppreference.com/w/cpp/iterator/reverse_iterator/operator%3D
これconstexprになってるけど、どういうときに定数になるんだろ?
end()の時かな?

928 :デフォルトの名無しさん:2019/12/15(日) 13:39:23 ID:2FA7t6Jx.net
C++20以降のvector/stringとか
使われる時にconstexprであることを妨げないようにするために付いてるんだと思う

929 :デフォルトの名無しさん:2019/12/15(日) 13:47:38.10 ID:LATD77rz.net
どうもありがとう。

930 :デフォルトの名無しさん:2019/12/15(日) 13:52:49.06 ID:ph9lwYgM.net
constexpr関数の中で使うため。

931 :デフォルトの名無しさん:2019/12/15(日) 14:30:37.97 ID:o9m7qUoD.net
デストラクタがデフォルトでvirtualじゃないのは設計不良ではあるまいか

932 :デフォルトの名無しさん:2019/12/15(日) 14:34:47.01 ID:EeC59mXx.net
あえてベースの方のメソッドを呼びたいなんてことあるのかね?

933 :デフォルトの名無しさん:2019/12/15(日) 14:38:17 ID:p2D9PeH2.net
>>931 https://isocpp.org/wiki/faq/virtual-functions#virtual-dtor-rationale

934 :デフォルトの名無しさん:2019/12/15(日) 15:15:03.49 ID:K1ul1r/C.net
>>931
C++では基本的にゼロコストでできるところはそうできるようにするポリシーだからvirtualが必要なときだけvirtualを明示的に指定させる、というのをどこかで読んだ気がする

935 :デフォルトの名無しさん:2019/12/15(日) 15:29:48.68 ID:7Mmj/dyw.net
virtualでなかったら継承禁止にしても良かったんじゃないかとは思う

936 :デフォルトの名無しさん:2019/12/15(日) 16:19:56.16 ID:AolOnHel.net
そうするとメタプログラミングに色々と支障が出たはずだし
STLも結構継承使ってるから実現出来なかったかコスト増えてるよ

937 :デフォルトの名無しさん:2019/12/15(日) 16:52:10.11 ID:TkLVy9px.net
デストラクタをvirtualにする必要があるのは、baseのポインタ経由でdeleteする場合だけ
baseのポインタを使うことすらないようなもの(CRTPなど)までvirtualになるのは
どうなんだろうか

938 :デフォルトの名無しさん:2019/12/15(日) 17:01:04.52 ID:ph9lwYgM.net
unique_ptr使えばvirtualにする必要無いのでは?

939 :デフォルトの名無しさん:2019/12/15(日) 17:16:05.58 ID:p2D9PeH2.net
>>938 んなこたーない。
shared_ptr<Base>{new Derived} なら virtual デストラクタ不要になるから、間違えて覚えてるだけでは?

940 :デフォルトの名無しさん:2019/12/15(日) 18:59:53.87 ID:tmrMX5L5.net
>>937
>デストラクタをvirtualにする必要があるのは、baseのポインタ経由でdeleteする場合だけ
mjk、

941 :デフォルトの名無しさん:2019/12/15(日) 19:10:50.35 ID:AolOnHel.net
セオリーとして覚えてる人多いけど、何故なのかまで考えてない人が多い例の一つだね
要するにdeleteする基底のポインタからデストラクタを呼ぶ際に末端のデストラクタを呼ぶ方法(vtable)が必要というだけ
末端のデストラクタを呼べれば、そこから基底のデストラクタを呼んでいくのは何が基底かわかりきってるから自動で出来る

942 :デフォルトの名無しさん:2019/12/15(日) 19:29:34.24 ID:tmrMX5L5.net
>>941
>基底のポインタからデストラクタを呼ぶ際に末端のデストラクタを呼ぶ方法(vtable)が必要というだけ
mjk、

943 ::2019/12/15(日) 19:42:55.10 ID:gCPcwtH+.net
永遠の初心者です、お願いします
1. 式で if 文を表現したいときは条件演算子(三項演算子 ?: )が使えますが、同じく式でループ構造を表す方法は C++11 以後にありますでしょうか?
2. 1 の質問の理由としては、C++ は Java とちがって uper() がなく、派生クラスのコンストラクタの基底クラス初期化部分に式しか書けません、ここにループを書くとすれば「コンストラクタ用メンバ関数(メソッド)」を置いていますがいかにも無様だと思っています…
3. ある既存のクラスに皮をかぶせて機能アップを図るとき、もとのクラスの派生クラスとして機能アップ部分を既述することは、よくある定石でしょうか、それともあまりしないことでしょうか?

---
以上3点の質問は以下のプログラムを書いていて感じました
お題は「エラトステネスのふるい」、ただし、当初、まっとうにふるいを書いた後、機能アップ項目として
篩部分に格納する数は 2n + 1 奇数に限定する、あるいは 6n + 1, 6n + 5 の形のみに限定する
等を元の篩に対して派生クラスとして記述しました
https://ideone.com/YPlfsC

944 :デフォルトの名無しさん:2019/12/15(日) 20:01:24.23 ID:01f7hQnX.net
>>943
ラムダ式の出番かな?
void test(bool flag) { flag ? []{ for(int i = 0; i < 10; ++i) cout << i; } : throw 1; }

945 :デフォルトの名無しさん:2019/12/15(日) 20:05:17.27 ID:5sPbacoo.net
エラストテネス
6n+1, 6n+5だけ保持とかってみんな考えるよね

ちなみに
巨大なテーブル作成時のパフォーマンスを上げるなら
キャッシュが効くよう分割処理するのが非常に効果的
スレッド分割の為にいずれにしろ分割処理は作る事になる

946 :デフォルトの名無しさん:2019/12/15(日) 20:07:01.24 ID:5sPbacoo.net
エラトステネス

947 :デフォルトの名無しさん:2019/12/15(日) 20:14:20.76 ID:mkXjftMX.net
高分子エラストマー

948 :はちみつ餃子 :2019/12/15(日) 20:20:59.00 ID:jthcUe0A.net
>>943
初期化部分に複雑な処理をベタ書きする方が無様だと思うよ。
初期化リストの中にそんなごちゃごちゃしたこと書きたい?
ワイが思うだけなので世間でどう思われてるかは知らんけどとりあえずひとつの意見として。

949 :デフォルトの名無しさん:2019/12/15(日) 20:54:13.00 ID:TKBas8kS.net
>>939

親クラス(Base)のデストラクタに virtual 付けなくても...
{
shared_ptr<Base> obj( new Derived() );
} // ~Derived() called, then ~Base() called.

~Derived() はコールされるんですね... 確認してみて驚きました。
これができる仕組みを誰か教えてください。
スマートポインタのオブジェクトは子クラスの事何も知らないのに
どうして ~Derived() のコールが可能なのでしょうか?

950 :デフォルトの名無しさん:2019/12/15(日) 21:07:41.82 ID:2FA7t6Jx.net
>>949
いわゆるtype erasure
https://blog.cryolite.net/entries/2006/01/08#p1

951 :デフォルトの名無しさん:2019/12/15(日) 21:19:04.13 ID:TKBas8kS.net
>>950
まだ仕組みのとこまでですが理解できました。ありがとうございます。

952 :デフォルトの名無しさん:2019/12/15(日) 21:24:07.01 ID:tmrMX5L5.net
質問ですが構造体Fooの内側に構造体Barが定義されているという入れ子になった構造体において、
Fooの外のコードでFoo::Barのサイズをsizeof()で知りたいとき、以下は正しい?
1. C++だとsizeof(Foo::Bar)と書いたらおk
2. CまたはC++でもC互換構文の範疇で済ます場合、次のどちらかの方法でしか書けない
(1) Foo::Barのインスタンスyが存在するスコープ内で、sizeof(y)と書く
(2) Fooのインスタンスxが存在するスコープ内において、Foo::Bar型のメンバyをFooが持つ
    (Foo::yが定義されている)という条件の下で、sizeof(x.y)と書く

953 :デフォルトの名無しさん:2019/12/15(日) 21:39:08.56 ID:tmrMX5L5.net
ふとオモタがインスタンスの必要性は無くせるかもしれん
Foo::Bar型のメンバFoo::yが定義さえされておれば、Fooのインスタンスが無くても
 sizeof(((Foo*)0)->y)
と書けばC言語で逝けるかもしれん…
スゲー気持ち悪いコードだが、、、、

954 :デフォルトの名無しさん:2019/12/15(日) 21:46:34.52 ID:PfQY9kAx.net
>>951
あくまでコンパイル時の型で決まるだけだから要注意
例えば

class A;
class B : public A;

A* p = new B();
std::shared_ptr<A> a(p);

これだとBのデストラクタは呼ばれない

955 :デフォルトの名無しさん:2019/12/15(日) 21:48:17.68 ID:5sPbacoo.net
なんでそんな中途半端な機能を
わざわざコストをかけて入れたんだろう

956 :デフォルトの名無しさん:2019/12/15(日) 21:49:32.31 ID:5sPbacoo.net
やむを得ず
なんだろうけど

957 :デフォルトの名無しさん:2019/12/15(日) 21:51:55.29 ID:PfQY9kAx.net
>>953
Linuxカーネルとかそういう感じのマクロ満載だよ
C言語はそういうもん

958 :デフォルトの名無しさん:2019/12/15(日) 22:05:12.60 ID:TeOOTcIs.net
type erasureと相性悪いんだっけ

959 :はちみつ餃子 :2019/12/15(日) 22:15:04.90 ID:jthcUe0A.net
>>943
思い出した。
gcc や clang の拡張で良ければ複文が式になる。
だいぶん昔からある機能。

#include <vector>
#include <iostream>

int main() {
std::vector<int> foo(({int i; for(i=0; i<3; i++); i;}));
std::cout << foo.size() << std::endl;
return 0;
}

960 ::2019/12/16(月) 19:39:21.34 ID:NZyGx79l.net
>>944,945,948,959
コメントありがとうございます!

>>944,959
まずgcc拡張
>SieveDerived(int n) : Sieve<T>(({int r; while((r = index(n)) == 0) n--; r;})) { } /* HERE!! */
で問題なく動作しました
すでにgcc拡張で存在するところからみて、私の希望はあながち無謀かつ無稽なものではないことを知りほっとしました
次にラムダ式で定義して即評価する方法がみつかりました
>SieveDerived(int n) : Sieve<T>([](int n)->int{int r; while ((r = index(n)) == 0) n--; return r;}(n)) { } /* HERE!! */
これがやりたかった!とても満足しています、ありがとうございました!
今までは関数オブジェクトの糖衣構文としてしかみていなかったラムダ式を、自分の希望にあわせて(あるいはねじまげてでも)採用し、表現できるようになったのは一歩理解が深まったかと考えています

>>948
>初期化リストの中にそんなごちゃごちゃしたこと書きたい?
クラスのメソッド=メンバ関数には、クラスの提供する機能として独立性の高いもの、少なくとも二箇所で同じような処理がダブっているもの、あるいは主観的には「lemma」として成り立つものを書きたいと考えていました
一箇所でしか使わないものでも lemma 性があるのならば private メソッドとして書くのもありかと思っていますが、今回の場合は、他におなじような処理をおこなっている場所はなく、かといってメソッドとして立てるほどのことでもないので、
複数個所からコールできるメソッドにはしたくなかった、という主観がありました、そういう性質の記述ならば初期化リストにごちゃごちゃ書くのもありかと、読み手には他からコールされ得ないことが自明である点からしても

https://ideone.com/y3ROXS

961 :デフォルトの名無しさん:2019/12/16(月) 20:14:24.13 ID:89loOkbp.net
まあこういう自己満は通過儀礼だよな

962 :デフォルトの名無しさん:2019/12/16(月) 21:46:21.90 ID:kSgVv2yp.net
lambdaの即時評価はjsだと多用されているイメージ
ブロックスコープないからね

963 :はちみつ餃子 :2019/12/17(火) 00:52:53.01 ID:0JRJucIS.net
>>960
> すでにgcc拡張で存在するところからみて、私の希望はあながち無謀かつ無稽なものではないことを知りほっとしました

30 年以上の実績があってもなお仕様に入らない程度に駄目なんだよ。

964 :デフォルトの名無しさん:2019/12/17(火) 03:23:09 ID:JQ5aWxOy.net
プライベートメンバの単体テストってみんなどうしてるのかな。

965 :デフォルトの名無しさん:2019/12/17(火) 03:30:02 ID:nsTCJN+n.net
#define private public

966 :デフォルトの名無しさん:2019/12/17(火) 03:58:13.47 ID:KUtZUPl9.net
#if 0
friend test;
#endif

967 :デフォルトの名無しさん:2019/12/17(火) 07:08:07.08 ID:KzMqUd+t.net
#ifndef NDEBUG
friend struct test;
#endif

968 :デフォルトの名無しさん:2019/12/17(火) 07:46:15.26 ID:wpWnXFFo.net
闇言語

969 :デフォルトの名無しさん:2019/12/17(火) 11:20:07.09 ID:dc1/89bE.net
namespace Method{ namespace Detail {
template<typename ReturnType, typename ... ArgTypes> struct MethodRegister{};
} }
// 文字列で呼び出すための関数を登録するためのマクロ
#define METHOD_REGISTER_WITH_NAME( NAME, FUNC, RETURNTYPE, ... ) \
namespace Method { namespace Detail { \
template<> struct MethodRegister<RETURNTYPE, __VA_ARGS__> { \
using Functional = std::function<RETURNTYPE(__VA_ARGS__)>; \
MethodRegister() { \
MethodContainer::GetInstance().Register<RETURNTYPE, __VA_ARGS__>( #FUNC, Functional( static_cast<RETURNTYPE(*)( __VA_ARGS__ )>( FUNC ) ) ); \
} \
~MethodRegister() { \
MethodContainer::GetInstance().Unregister( #FUNC ); \
} \
}; \
static MethodRegister<RETURNTYPE, __VA_ARGS__> sMethodRegister##FUNC; \
} }
void HOGE(){
std::cout << "Hello World!" << std::endl;
}
void HOGE( std::string text ){
std::cout << text << std::endl;
}
METHOD_REGISTER_METHOD( HOGE, void );
METHOD_REGISTER_METHOD( HOGE, void, std::string );

こういった形で関数を登録する用のクラスを生成し、変数として生成して管理の自動化を行いたいのですが、
関数のオーバーロードを対応しようとした所、クラスの再定義や変数の再定義、管理クラスへの重複登録等
多数の問題が出て詰まってしまいました。
こういった問題を対処するにはどうすればよいのでしょうか?

970 :デフォルトの名無しさん:2019/12/17(火) 11:28:10.65 ID:rApV4krM.net
BOOST

971 :デフォルトの名無しさん:2019/12/17(火) 12:23:52.67 ID:lfJGbKnI.net
>>966
>>967
リリース時に消す必要あんの?

972 :デフォルトの名無しさん:2019/12/17(火) 18:42:08.59 ID:iYSb7MEE.net
このへんがいいんでないの。
https://srz-zumix.blogspot.com/2015/06/c-private.html

973 ::2019/12/17(火) 19:10:07.01 ID:780pCLgH.net
>>963
まあ、
({int r; while((r = index(n)) == 0) n--; r;})
の最後の
r;
というのが限りなく非文法的ですし

974 :デフォルトの名無しさん:2019/12/17(火) 21:19:56.70 ID:r3fDxRx7.net
プライベートメンバをテストしたくなったらそのロジックのみを非メンバ関数に切り出してテストしてるな。
まぁ、特に支障がなければ単純にpublicにするだけの時もあるけど。

975 :デフォルトの名無しさん:2019/12/17(火) 21:45:39.29 ID:HvtzVY9o.net
templateでアクセスすると合法的にプライベートメンバにアクセスできる

976 :デフォルトの名無しさん:2019/12/17(火) 21:49:21.80 ID:iYSb7MEE.net
そんな糞な方法でテストなんかしたくねー。

977 :デフォルトの名無しさん:2019/12/18(水) 01:14:03 ID:zSYbFuJ0.net
テストなんかお綺麗にする必要が無い

978 :デフォルトの名無しさん:2019/12/18(水) 06:18:11.97 ID:BbfJ/y//.net
テストのテストが必要になるような意味のわからないテストコードはアウト
テストコードは実行せずに人が読んで理解できなければいけない

979 :デフォルトの名無しさん:2019/12/18(水) 07:25:56.60 ID:ksLRDXXy.net
>>978
どんな感じか見せていただけないでしょうか。

980 :デフォルトの名無しさん:2019/12/18(水) 07:42:51.80 ID:PEFQbiIG.net
>>971
絶対必要でもないが
少なくともデバッグ用であることくらい
アピールしたい
//よりNDEBUGという特定ワードを使う点にも拘りがある

981 :デフォルトの名無しさん:2019/12/18(水) 07:48:17.80 ID:uFDqtnkl.net
>>979
例えばテストコードの中にループや条件分岐があるようなものはアウト

982 :デフォルトの名無しさん:2019/12/18(水) 11:33:15.65 ID:ksLRDXXy.net
ループは許してもらえませんか?
データの並びとか検査したいんで。
条件分岐はたぶんないと思います。

983 :デフォルトの名無しさん:2019/12/18(水) 12:41:59.93 ID:pXzQg2xI.net
原理主義にすぐ染まるやつw
ご苦労様

984 :デフォルトの名無しさん:2019/12/18(水) 13:15:29.66 ID:iEIErwam.net
テスト用にいろんな複雑なテストも入れてるけど
まずいのか?

985 :デフォルトの名無しさん:2019/12/18(水) 13:22:47.07 ID:AjekT9H/.net
Debugビルドしたら遅すぎて検証できなくて詰んだ

986 :デフォルトの名無しさん:2019/12/18(水) 13:34:17.71 ID:YQOjezK4.net
典型的な糞テストは、テスト対象の出力がハッシュや現在時刻などのような予測しづらいものに依存している場合に、
テストコードにテスト対象自体のロジックと似たものを書いてしまっているケースだな
原則的には、期待する出力は全てハードコードするのが正しい
難しいなら一度試しにテスト対象を実行して目視テストし、その結果をハードコードしたほうがマシ

987 :デフォルトの名無しさん:2019/12/18(水) 13:39:53.25 ID:iEIErwam.net
メカが絡むリアルタイム処理でそんな事出来るかよ

988 :デフォルトの名無しさん:2019/12/18(水) 15:13:38.33 ID:uFDqtnkl.net
>>982
Parameterized Testsがあれば十分じゃね?

989 :デフォルトの名無しさん:2019/12/18(水) 15:16:04.78 ID:uFDqtnkl.net
>>986
期待する出力をハードコードするから
テストで「○○以上であること」って書くこと無いよね?
こういうテストケースある?言い換えるとそういうマッチャーって必要?

990 :デフォルトの名無しさん:2019/12/18(水) 15:38:06.38 ID:AmwvkO78.net
次スレは

991 :デフォルトの名無しさん:2019/12/18(水) 16:59:26.54 ID:ksLRDXXy.net
よ。

992 :デフォルトの名無しさん:2019/12/18(水) 17:57:22.30 ID:uFDqtnkl.net
ほらよ

C++相談室 part147
https://mevius.5ch.net/test/read.cgi/tech/1576659413/

993 :デフォルトの名無しさん:2019/12/18(水) 20:28:47.90 ID:CdPazUY7.net
>>987
それはまた別の話
ここで言ってるのは単体テストレベルの話だぞ

994 :デフォルトの名無しさん:2019/12/18(水) 21:11:16.67 ID:LM1drZI+.net
クラスとかの勉強入る前にC言語でしっかり文字列処理出来るようになったほうがいい?

995 :蟻人間 :2019/12/18(水) 21:14:21.02 ID:Zo1XP656.net
>>995
strcpyなんて古い関数は21世紀では使えないぜ。std::stringでOK.

996 :デフォルトの名無しさん:2019/12/18(水) 21:14:35.04 ID:uFDqtnkl.net
C言語でしっかり文字列処理出来るようになったほうがいい? → いい
C++でC言語の文字列処理する? → しない

997 :デフォルトの名無しさん:2019/12/18(水) 21:16:04.08 ID:aoz4SWmd.net
>>987
逆にそういう不確定な部分とロジック部分を切り分けるのが単体テストの目的でもある。

998 :デフォルトの名無しさん:2019/12/18(水) 23:15:57.41 ID:cF9WM4jz.net
>>992

お前らコピー使うなムーブしろ

999 :デフォルトの名無しさん:2019/12/19(木) 00:00:58.14 ID:zX6m0cqE.net
単体テストはどんだけ単純でわかりやすいコードでテストパターンを網羅するかが肝
Google TestとかTest::MoreとかJUnit使ったらワカル

1000 :蟻人間 :2019/12/19(木) 00:08:57.93 ID:r6T/W91o.net
あれっ?

1001 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1001
248 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★