C++相談室 part146at TECH
C++相談室 part146 - 暇つぶし2ch2:デフォルトの名無しさん
19/11/07 11:36:06.80 4wggfTwe.net
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいには


3:なったな。 うむごくろう。 ---- テンプレ ここまで ----



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

5:デフォルトの名無しさん
19/11/07 13:14:32.06 S+DlaQTT.net
本人か?w

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

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

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

9:デフォルトの名無しさん
19/11/07 18:54:15.36 N9TqrKuA.net
>>7
文と式は区別しよう

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

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

12:デフォルトの名無しさん
19/11/07 20:01:08.25 3d5Ufx/F.net
たぶん三項演算子で分岐後の型が異なっている場合の事を気にしているのでは?
三項演算子は変数セレクタ(変な表現だけど)ではないのだが
そういう使い方もできるだけ

13:デフォルトの名無しさん
19/11/07 20:04:20.83 BQL6Knhs.net
>>11
なるほど。了解です。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

28:デフォルトの名無しさん
19/11/10 10:10:28.39 jbBoRETA.net
friendというか奴隷宣言だよね

29:デフォルトの名無しさん
19/11/10 10:53:53.52 T+oiajnu.net
class 満州国

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

31:デフォルトの名無しさん
19/11/10 11:29:20.79 wGUp3v12.net
従属宣言

32:デフォルトの名無しさん
19/11/10 11:41:08.02 T+oiajnu.net
class 明 : public 元;
class 清 : public 金, 元;
class 李氏朝鮮 {
 friend 明;
 friend 清;
};

33:デフォルトの名無しさん
19/11/11 22:41:26.04 X/f1urlF.net
なんで元をprivate継承してんだ?

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

35:デフォルトの名無しさん
19/11/15 08:06:03.04 NNCqRbhA.net
北京は一見すると漢民族の首都のように見えるけどまったく違う。
最初に現在の北京を首都にしたのはモンゴル帝国の元。
北京は、漢人・モンゴル人・満洲人それぞれの活動域の接結点に位置している。
以下の事件では、内モンゴルから来た2人の患者が北京の病院で肺ペストと診断されている。
中国で2人が肺ペストに感染、危険性高い劇症型
URLリンク(www.cnn.co.jp)
2019.11.14 Thu posted at 10:04 JST

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

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

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

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

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

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

42:デフォルトの名無しさん
19/11/16 12:17:41.91 N74GdtKe.net
inheritには立場や役目をそのまま成り代わって継続する意味合いがある
そういう意味合い抜きで単に引き継ぐだけ(あとは後任の勝手)ならsucceedな
王位とか家督とかの相続はinherit
単に財産を相続するとか、社長なり議員なりの後任を単に務めるだけならsucceed
(ただし後任の社長が前任の右腕で忠実に同じやり方を継続していく意向、みたいなのはinheritでもいい)
「継承」は原語のinheritの含みがスッポリ抜け落ちてんだよ
派生クラスが基底クラスの完全な代替として振る舞う(べき)っていうニュアンスが消えてるから初心者が誤解する

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

44:デフォルトの名無しさん
19/11/16 13:32:33.19 x87RiFEK.net
> 「継承」は原語のinheritの含みがスッポリ抜け落ちてんだよ
落ちてない
URLリンク(dictionary.goo.ne.jp)

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

46:デフォルトの名無しさん
19/11/16 16:15:31.56 fjjXSMO9.net
「継承」は老舗のお店や古典芸能の家系なんかの気持ちだったのかね。
先代の商売のやり方を引き継ぎながらも新しい世にも…みたいな。
「相続」は悪くない訳な気がするけどね。
祖先の遺産を使って苦労なく好きにアレコレできるとか、
変な具合にいじってお家断絶しちゃうとか。

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

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

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

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

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

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

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

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

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

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

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

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

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

60:デフォルトの名無しさん
19/11/17 15:03:16.97 Mp5WsRX6.net
おまいら暇だな

61:はちみつ餃子
19/11/17 18:41:21.48 zYX+B2Mq.net
そんなの程度問題だろ。

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

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

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

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

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

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

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

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

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

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

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

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

74:デフォルトの名無しさん
19/11/19 20:39:16.34 GNY4BPsd.net
で、もしIFactoryにXを持たせてもこうなる
URLリンク(ideone.com)
IFactoryとAのメモリレイアウトが違うんだろう
あくまでもDupは生成時にmake_sharedするべき

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

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

77:デフォルトの名無しさん
19/11/19 22:01:23.12 JHNr41O8.net
リフレ

78:デフォルトの名無しさん
19/11/19 22:06:20.10 +Lo3ALxa.net
>>74
んだね
C++ならif文を重ねるしかない
仮想関数の動きに惑わされず基本を押さえないとな
C++でデザパタやるとどうしても多少の泥臭さは我慢する必要がある
decltypeなんか使ったらコンパイル時に型が固定されちゃうよ

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

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

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

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

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

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

85:デフォルトの名無しさん
19/11/21 14:23:43.46 Gb3w6aC2.net
江添の本
無料

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

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

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

89:デフォルトの名無しさん
19/11/21 16:06:01.43 wEG3pGFv.net
>>86
なんで?

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

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

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

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

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

95:デフォルトの名無しさん
19/11/21 19:24:07.38 SB5I0OPT.net
>>85
あー、おまえ禿4の日本語版あるの知らねえウルトラ情弱かw
英語が苦手でググりスキルも家畜以下じゃ
C++に限ったことじゃねえよな
それはそれはステキな人生送ってそうだな
同業者として失笑が止まらんわw
内容くらい読んでからご託ぬかせよ
おまえみたいに物を知らんやつには
間違いなく勉強になるから
C++11がどういう位置付けかも知らず
営業呼称の数字がでかいの探してるだけだろ
う す ら ハ ゲ

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

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

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

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

100:デフォルトの名無しさん
19/11/21 20:15:37.46 +h+7QjsO.net
>> ID:SB5I0OPT
あほはアンカーのひとつもまともに入れられないってかウスノロ
原書持ってるのに11どまりの今頃Vol.4の日本語訳入手してどーするつもりだ低能

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

101:デフォルトの名無しさん
19/11/21 20:30:56.20 +h+7QjsO.net
>>94
>C++11がどういう位置付けかも知らず
シングルスレッドのお前は11で止まっとけよ低能
お前のオツムじゃ並列思考は到底無理だろうからよwww
あきらめて下請け土方でもやっとれ。あほ

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

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

104:デフォルトの名無しさん
19/11/21 20:46:13.11 JfgYWeJZ.net
シングル毛根のくせに11やっても毛が2本に増えたりゃせんぞ
 お ハ ゲ の 旧 太 郎 が

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

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

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

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

109:デフォルトの名無しさん
19/11/21 22:42:30.25 JfgYWeJZ.net
禿はcfrontの実装者だが

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

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

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

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

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

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

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

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

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

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

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

121:デフォルトの名無しさん
19/11/23 12:37:43.36 MxAA5A1q.net
>>116
void君とか頭おかしい連中が目立ってるからだろ
>>110
c++で創薬したるわ

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

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

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

125:
19/11/23 14:42:35.65 bse8qODO.net
>>123
具体例を

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

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

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

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

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

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

132:デフォルトの名無しさん
19/11/23 16:37:27.45 KvoIJqUR.net
>>130
そこらへん。

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

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

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

136:デフォルトの名無しさん
19/11/23 17:37:47.06 CZ47p2RQ.net
言語で囲い込みとかないない

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

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

139:デフォルトの名無しさん
19/11/23 18:31:11.69 D2JmV2eo.net
GC無効化すればいいのか?

140:デフォルトの名無しさん
19/11/23 18:34:17.97 pbrffxke.net
deleteないのに

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

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

143:デフォルトの名無しさん
19/11/23 21:20:13.50 fygFNKSM.net
GC で止まるのが嫌なら、GCの無い、Rust を使え!
その代わり、かなり注意深くプログラミングしないといけないw

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

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

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

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

148:デフォルトの名無しさん
19/11/23 22:48:42.12 fY6FJFDb.net
詳しい情報サンクス

149:デフォルトの名無しさん
19/11/23 23:09:28.20 rsD80hR9.net
>>145
えっ?

150:デフォルトの名無しさん
19/11/23 23:10:31.11 rsD80hR9.net
>>146
えっ?
こっちだった

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

152:デフォルトの名無しさん
19/11/24 15:14:02.85 FJ6sVzWZ.net
GCとプログラムの実行速度の姦計は、
GCが極力動かないようにプログラマの側で工夫する余地があるから必ずしも打つ手が無いわけでは…
(GCが動き出したらワーストケースの見積りが吹っ飛ぶというのはあるが
とゆーわけでC++に比べてC#がいまいち遅いのはGCが主犯というわけではなく、
オブジェクトに参照経由で毎回間接アクセスする言語仕様なのと
JITでマルチプラットフォーム対応可能なことと引き換えに最適化があんま利かせられていないせいだと思う
あとネイティブコードを呼び出す最にマーシャリングもするし、
ジャヴァのサンドボックス思想をパクるために仕方なかった側面、

153:デフォルトの名無しさん
19/11/24 15:29:19.64 FJ6sVzWZ.net
ユーザーコードがバックグラウンドタスク(応答時間非規定で可)でGCを使うだけなら
GCとリアルタイム性は両立しないわけでは無い
まあGC有りのプログラミング言語でプログラムする状況で
GCが使われる状況がバックグラウンドタスクのみに限定されるというのは
非現実的な想定かもしれんが

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

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

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

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

158:デフォルトの名無しさん
19/11/24 18:50:48.11 lsOVnPbd.net
どうりでな

159:デフォルトの名無しさん
19/11/24 19:43:00.54 aq7LfmWh.net
わたくしが「現代現象」と呼称する一連の悲劇的な出来事は
なんの変哲もない日常がいきなり変貌を遂げるものであり
その猶予は0.1秒もない
スイスチーズモデルを天文学的数字ですり抜けたそれら現代現象への対処時間は大抵は1秒未満になる
なので未来になればなるほど思いもよらない意味不明で突発的で素早い破壊事象が起こる
これを踏まえて車載映像の事故映像を見てみると猶予が本当に少ないことが分かる
なので自動運転では各種の重い処理はマーフィーの法則によれば衝突する0.1秒前の「暇な時」に動き出す
これを超克するには未来予知が必要になる

160:
19/11/24 19:55:00.69 oHJXyQoT.net
>>155
はちみつさんは lisp-er ですから、lisp-er 的な視点で現在のプログラミング環境をみれば、
やっと時代が lisp に追いついてきた、という感慨が発生するのも自然だと思いますよ
GC も lisp の産物ですから
「適正に欠く」と判断する推論内容は理解できませんね

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

162:
19/11/24 21:42:37.16 oHJXyQoT.net
>>160
私に適性がないのはそのとおりなのでしょうが、いちいち定量的に条件を明示して話をしなければならないわけでもないでしょう
魔法的にアレするレイヤーの話は別途規定する前提で、今は特に大局観を語りたいときにはね
あなたは、戦術レベルの話はできても戦略レベルの話は理解できない大局観に欠いた狭量な、例えば java 屋さんに見えますね

163:デフォルトの名無しさん
19/11/24 22:00:07.13 lsOVnPbd.ne


164:t



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

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

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

168:はちみつ餃子
19/11/25 00:55:16.50 a5DfrA3a.net
>>159
ワイは Scheme 使いでもあるし日常的には Scheme の方をよく使ってはいるが、
長いことバイナリマンだったし、 LISP の思想にそんな強い思い入れはないわ。
ただ、評価とかごちゃごちゃ言ってないで手早く


169:書いて実測しろってのは LISP 的かもね。 今では他の言語でも書きながら速いサイクルで回して改善するスタイルって一般的じゃね? 書き始めは楽観的にやってるよ。 なるべく楽して必要になってから手間かけりゃいいんだよ。 そんでもってゆるふわに富豪的プログラミングしてても割と足りてしまう経験の方がおおいなぁ。 >>156 俺は趣味人やで。



170:デフォルトの名無しさん
19/11/25 07:22:11.28 Nb9YSlRo.net
> 富豪的プログラミング
相手してはいかんやつだったコイツ

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

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

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

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

175:デフォルトの名無しさん
19/11/25 17:43:35.94 iOqWCNFx.net
>>170
お前はいつも正しい

176:
19/11/25 19:52:15.88 2aQAGKkK.net
>>170
説得力のあるご意見ですね…

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

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

179:
19/11/25 20:53:20.18 2aQAGKkK.net
>>175
日本だと思っていますが?

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

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

182:デフォルトの名無しさん
19/11/25 21:58:00.63 YppxgWfG.net
Unity

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

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

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

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

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

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

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

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

タイムクリティカルな用途ならそれこそOSからしてラウンドロビン


190:なんか使わない。 RTOSでわざわざ、メモリプール設定してるのに、new/delete繰り返すようなC++流の書き方はそもそもよろしくない。 C++で非推奨の限りなくpure Cに近い書き方してるのはもはやC++とはいわんだろ。



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

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

192:デフォルトの名無しさん
19/11/26 08:07:38.46 uPJEEVDZ.net
タイムクリティカルもいろんなレベルがあるから
ハード実装
FPGA
OSレスのフルアセンブラ
RTOS + C
....
クラウド

193:デフォルトの名無しさん
19/11/26 08:12:14.93 uPJEEVDZ.net
> C++で非推奨の限りなくpure Cに近い書き方してるのはもはやC++とはいわんだろ。
テンプレート、ラムダ、...を使いまくるコーディングだけがC++じゃない
小規模組み込みでnewすら使わない泥臭いC++もC++

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

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

196:デフォルトの名無しさん
19/11/26 11:27:29 auNO4ARl.net
うん

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

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

199:デフォルトの名無しさん
19/11/26 13:01:29.72 njyF587z.net
変数自体はスタック(またはレジスタ)に割り当てられるから
確保解放のコストは気にするな
変数の内部(コンストラクタ他)でのメモリ確保解放や初期化処のコストは当然気にしよう
パフォーマンスの問題であればクラス変数にする等

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

214:デフォルトの名無しさん
19/11/26


215:16:11:06 ID:FF/Zqwz/.net



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

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

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

219:デフォルトの名無しさん
19/11/26 17:39:44.76 M+fYb0eE.net
>>211
>>203

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

221:デフォルトの名無しさん
19/11/26 18:06:10.26 M+fYb0eE.net
>>210
普通の型なら普通にC++で書いた方が良い
定数ならコンパイラが工夫する
普通じゃない型、例えば多倍長でも
1ビットずつシフトして速くなることは無いと思って良い

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

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

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

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

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

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

228:
19/11/26 20:04:28.16 eitz3RWA.net
>>210
スレリンク(tech板:51番)
多桁長演算の乗算・除算もやってみたかったので書いたものです

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

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

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

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

233:デフォルトの名無しさん
19/11/26 20:39:17.37 78UVTJ0X.net
多倍長の乗算は、
非常に桁数が少ないときのみ筆算方式
もうちょっと大きいとカラツバ
もっと大きいとフーリエ変換
除算はニュートン法が一般的かと
もちろん、
特殊な形だと特殊な方法があったりする

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

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

236:デフォルトの名無しさん
19/11/26 20:49:49.76 78UVTJ0X.net
>>230
そりゃ当然出来ますよ
桁数が大きいときは、
除算は乗算の3倍程度の時間で出来ます

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

238:デフォルトの名無しさん
19/11/26 20:54:28.73 78UVTJ0X.net
分子の桁数が大きくて分母の桁数が非常に小さい場合のみ筆算方式が有効
この場合も、
非常に遅い割り算命令なんかは使いませんが

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

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

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

242:デフォルトの名無しさん
19/11/26 21:03:02.62 78UVTJ0X.net
>>235
普通のPCのDIV命令は30サイクル近くもかかる
乗算は1~4サイクル
スーパーコンピューターでも除算は非常に遅い
>>233の条件では
除算命令などは使わない方が速い
除算は乗算に置き換えるのが普通

243:デフォルトの名無しさん
19/11/26 21:04:44.09 78UVTJ0X.net
分母、分子それぞれの桁数によって
最適な方法は変わる
だからそういった条件をセットで語らないと意味がない

244:デフォルトの名無しさん
19/11/26 21:06:41.35 78UVTJ0X.net
巨大な桁数同士だとニュートン法が速い
乗算の3倍ほどの時間で出来る
割り算を組み合わせたらそんな時間では計算出来ない

245:
19/11/26 21:15:26.74 eitz3RWA.net
>>231
ニュートン法(にゅーとんらぷそん)って、曲線で与えられる関数の根の一つを求める方法でしょ?
いわゆる実数の根を求める方法であって、整数の剰余を求めることはニュートン法では無理なのでは?
何がどうなって「当然」なんですか?

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

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

248:デフォルトの名無しさん
19/11/26 21:23:39.77 78UVTJ0X.net
遅くないです

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

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

251:デフォルトの名無しさん
19/11/26 21:29:07.44 sE/nea3J.net
>>242
ニュートン法なので、
z = b / a の z を求めたい場合、直線 y = a * x - b と x 軸(y=0) との交点の
x を求めることによって行う。その際、x0, x1, ・・・, xn のように x を
漸化的に交点に近づけて


252:いく。数学的直感だと、その途中で剰余も求められ るように出来そうな気がする。



253:デフォルトの名無しさん
19/11/26 21:43:45.68 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;
の漸化式でいけるかも知れない。
間違っていたらゴメンなさい。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

269:デフォルトの名無しさん
19/11/26 22:19:47.56 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。

270:デフォルトの名無しさん
19/11/26 22:34:50.59 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

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

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

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

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

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

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

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

278:デフォルトの名無しさん
19/11/26 22:49:29.81 sE/nea3J.net
>>269
私は特に仮定はしていませんが、四倍浮動小数点型などに興味があり、
それを整数演算に置き換えて実装してみようかと思っていたりするので、
割る数も割られる数も同じくらいのBIT数の整数の場合に興味があります。
前に調べたところ、倍精度浮動小数点演算を用いて、四倍精度浮動小数点
の乗算、除算まで実装する方法があるようですね。ただし、その場合、
Intelの内部拡張倍精度(80BIT)方式をONにしていると駄目なんだそうですが。

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

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

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

282:デフォルトの名無しさん
19/11/26 22:59:32.53 78UVTJ0X.net
それ以前の普通の乗算でも出来るけど
AVXでSIMD化出来るのでたくさん計算するならぜひ

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

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

285:デフォルトの名無しさん
19/11/26 23:05:02.93 78UVTJ0X.net
>>275
私が何度か除算は乗算の3倍の時間と書いたのは
例えば100万桁同士の除算は100万桁同士の乗算の3倍な時間という意味
乗算命令の回数ではなくて
aが100万桁で1/aを100万桁精度で求めるのは
100万桁同士の乗算の2倍くらいの時間で出来る

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

287:デフォルトの名無しさん
19/11/26 23:17:37.02 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でやれば誤差が簡単に求まる

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

289:デフォルトの名無しさん
19/11/26 23:24:07.48 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...))}

290:デフォルトの名無しさん
19/11/26 23:30:51.74 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個くらいまで
で済みそうですね。

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

292:デフォルトの名無しさん
19/11/26 23:37:21.85 78UVTJ0X.net
多倍長の1/aの話なら
テーラー展開は遅すぎて使いませんよ
4倍弱精度の話であれば
除算命令やテーラー展開は使いますが
どれの話をしてるのかわかるようにかいてくれませんか?
>>238 の通りなので

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

294:デフォルトの名無しさん
19/11/26 23:53:50.60 78UVTJ0X.net
>>228

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

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

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

297:デフォルトの名無しさん
19/11/27 00:27:57.72 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;
}

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

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

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

301:デフォルトの名無しさん
19/11/27 01:11:14 tKRTExPe.net
ifの順番変えたら完成しました

302:デフォルトの名無しさん
19/11/27 02:13:53.15 XGkmLsxS.net
QZは馬鹿

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

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

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

306:デフォルトの名無しさん
19/11/27 13:47:03 KtqS+hCI.net
const は要らない子

307:デフォルトの名無しさん
19/11/27 14:58:41.90 vSkP4LPU.net
本当はね・・・constの逆が欲しいのさ
デフォが書き込み禁止で許可を明示だったらと
キャプチャのmutableみたいな

308:デフォルトの名無しさん
19/11/27 15:05:41.36 Yu9S3/3Y.net
めんどくさいだけ

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

310:デフォルトの名無しさん
19/11/27 15:13:19.55 zdI/1sLa.net
>>303

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

311:デフォルトの名無しさん
19/11/27 15:32:27 FMRbYBnJ.net
下に1票。同じ理由

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

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

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

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

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

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

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

319:デフォルトの名無しさん
19/11/27 18:11:30.16 p98u22dC.net
ベクトルの加減算や符号は紛れが無いのでオペレータで実装
乗算は内積、外積と要素ごとの積の3種類あるので
関数にする
3次元ベクトルも作る可能性があるなら
2次元ベクトルだとわかる名前にしておく
可能性が無いならそのままで
絶対値やノルム、象限などをグローバルにするかメンバ関数にするかは一長一短
設計ポリシー次第

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

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

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

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

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

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

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

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

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

329:デフォルトの名無しさん
19/11/27 19:57:18.53 nSz8Pwyp.net
主役がはっきりしてる場合はメンバ
同等な重要度の時は非メンバ
私の場合はだいたいこんな感じ

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

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

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

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

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

335:デフォルトの名無しさん
19/11/28 01:38:08 PoPpbfsh.net
代入は普通メンバだろ

=
+=
-=
*=
/=

[ ]も

336:デフォルトの名無しさん
19/11/28 01:44:12 PoPpbfsh.net
当然符号も

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

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

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

339:デフォルトの名無しさん
19/11/28 06:43:27.57 PoPpbfsh.net
>>332
>>328に言って
>>331
対称性は関係ないって
Point * double
だって型変換された方が都合が良いなら非メンバだろうに

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

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

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

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

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

345:デフォルトの名無しさん
19/11/28 18:11:40.54 PoPpbfsh.net
>>338
今回たまたま対称であったというだけで
対称性が理由じゃないってこと
ベクトル※ベクトル
ベクトル※スカラー
ベクトル※行列
ベクトル※矩形
なんであれ型変換された方が良いなら非メンバ

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

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

348:デフォルトの名無しさん
19/11/28 23:41:46.98 iCLeSa8c.net
だいたいそうよ

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

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

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

352:蟻人間 ◆T6xkBnTXz7B0
19/11/29 08:53:08 7m3ynrwG.net
>>345
usingを使っているから。

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

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

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

356:デフォルトの名無しさん
19/11/29 11:40:28.80 oVgX/GuB.net
>>345
#include <cstdint>は
#include <stdint.h>
つまりCのライブラリだからだ
typedef unsigned char uint8_t;
#ifdef __cplusplus
namespace std {
using ::uint8_t;
}
#endif
こうなっているだけだ

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

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

359:デフォルトの名無しさん
19/11/29 12:45:20.21 gmGtMFq3.net
何の情報も増えないし紛れも何もない
意味の無い情報に5文字も余分に使いたくない
画面も入力の手間も

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

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

362:デフォルトの名無しさん
19/11/29 13:01:25.99 0dBBAnUQ.net
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

363:はちみつ餃子
19/11/29 14:15:39.12 J8eB3+F9.net
>>350 >>350
cstdint 内の名前はマクロを除いて std に入るはず。
グローバル名前空間でも定義されるかどうかは処理系定義じゃなかったっけ?
逆に stdint.h 内の定義はグローバル名前空間でアクセスできるけど、
std 内でも定義されるかどうかは未規定だったように記憶してる。
仕様を読み返すのが面倒なので誰か調査よろ。

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

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

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

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

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

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

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

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

372:デフォルトの名無しさん
19/11/29 15:21:18.81 YkvT9y9m.net
textに実行時にアクセスするなら
いずれにしろアドレス計算は必須になる
>>360のようにすれば
最適化がうんこで複数回計算されるのを防ぐ可能性すらある
アクセスしないならおそらく最適化によってアドレス計算コードは生成されない

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

374:デフォルトの名無しさん
19/11/29 17:45:51.93 /RbGsSZk.net
m_data の型が shared_ptr<Data> なことを気にしてるのかな。
shared_ptr の指す先のメンバを参照変数でバインドするのは無作法か、とか。
と言うか、上の話は俺の疑問でもあるんだけど。

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

376:デフォルトの名無しさん
19/11/29 18:44:49.74 xP2G2+ZO.net
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
え?リリースするときスタティックリンクして配布するのかって?
ダイナミックリンクするけど?

377:デフォルトの名無しさん
19/11/29 18:46:27.54 xP2G2+ZO.net
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
え?リリースするときスタティックリンクして配布するのかって?
ダイナミックリンクするけど?
え?なんで俺が笑われてるの?

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

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

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

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

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

383:デフォルトの名無しさん
19/11/30 17:40:18.


384:51 ID:4Yq6PogE.net



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

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

387:デフォルトの名無しさん
19/12/01 01:54:44.83 Nfz3Rlxp.net
sizeofと何が違うんだ

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

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

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

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

392:デフォルトの名無しさん
19/12/01 10:31:53.72 sKSeAmO2.net
>>383
std::set とか、内部は木じゃね?
汎用的な木?
ポインタのvectorで良くない?

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

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

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

396:デフォルトの名無しさん
19/12/01 11:16:42.54 SqfEoEmM.net
>>387
うん。だから遅いよ。

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

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

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

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

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

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

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

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

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

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

407:デフォルトの名無しさん
19/12/01 12:33:53.83 SqfEoEmM.net
>>399
具体例を示そうね

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

409:デフォルトの名無しさん
19/12/01 12:41:44.01 IheeS71f.net
ソートが早い

410:デフォルトの名無しさん
19/12/01 12:47:37.78 gHT6E7kc.net
イテレータの安定性が。

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

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

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

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

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

416:デフォルトの名無しさん
19/12/01 13:00:34.69 YWi4MX0G.net
>>401
> 1000倍とかなら考えるだろ?
いや? 0.0001ミリ秒が0.1ミリ秒になったところで
大した問題じゃないからね

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

418:デフォルトの名無しさん
19/12/01 13:08:14.41 p3Z7Nr0h.net
>>409
1分と1000分なら大違い
トータル0.1ミリ秒なら何でも良いよ気にするな
データが多い時の話
オーダーが効いてくる
newの時間なんてオーダーの差に比べれば誤差
毎回newだから遅いとかトンチンカン

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

420:デフォルトの名無しさん
19/12/01 13:16:11.26 p3Z7Nr0h.net
データ構造は
list, set, リニア(vectorやdeque) で揃ってる
これでオーダー的には大抵は問題ない
微妙な高速化が必要なら専用を自作すれば良いが
組み込みでもなければ必要となることはあまりない
複雑なデータ構造は、
標準のデータ構造を組み合わせて作る
複雑なリンク構造はSLAMの世界だとよく使う


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