- 1 名前:デフォルトの名無しさん mailto:sage [2019/06/15(土) 13:51:53.57 ID:DKQ0QQLH0.net]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part142 https://mevius.5ch.net/test/read.cgi/tech/1554124625/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.105【環境依存OK】 https://mevius.5ch.net/test/read.cgi/tech/1556142878/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) ----- テンプレ ここまで ----- VIPQ2_EXTDAT: default:vvv:1000:512:----: EXT was configured
- 82 名前:デフォルトの名無しさん mailto:sage [2019/06/21(金) 21:19:00.28 ID:dWgEej/X0.net]
- 平均値の計算は実は簡単ではない
- 83 名前:デフォルトの名無しさん mailto:sage [2019/06/21(金) 21:21:02.30 ID:rC321OP20.net]
- そもそもmath.hはC言語のライブラリ
- 84 名前:デフォルトの名無しさん mailto:sage [2019/06/21(金) 21:29:06.50 ID:5xL7WT2l0.net]
- そのエクセルの関数の機能や電卓ツールはmath.hを使って作られている
- 85 名前:デフォルトの名無しさん mailto:sage [2019/06/21(金) 21:48:48.65 ID:0JVOBbqs0.net]
- 浮動小数甘く見過ぎ
- 86 名前:デフォルトの名無しさん [2019/06/22(土) 15:16:07.71 ID:ecTKxvDL0.net]
- C++コードをC++コンパイラでコンパイルするのと
CにトランスパイルしてCコンパイラでコンパイルするのと どっちが性能良いんだろう? トランスパイラの優秀さにもよりそうだが
- 87 名前:デフォルトの名無しさん mailto:sage [2019/06/22(土) 15:35:26.46 ID:XJUTErWD0.net]
- CがC++よりハイパフォーマンスという前提がありそうだが、そんなことはない
- 88 名前:デフォルトの名無しさん mailto:sage [2019/06/22(土) 16:04:32.30 ID:LOXx/aGE0.net]
- 今時c言語のみのコンパイラなんて見かけないな
- 89 名前:デフォルトの名無しさん mailto:sage [2019/06/22(土) 16:12:52.94 ID:9zxAgsAB0.net]
- >>86
いったんトランスパイルを挟むと、C++の元のコードをCで表現できる範囲内のコードに置き換えなきゃならないから、その時点で元のコードのままならなできた最適化のうちの一部はできなくなるだろうし、わざわざ効率の悪いコードに置き換えなきゃならないこともあるだろう。 トランスパイルの方が効率が上がる理由はないと思うよ。
- 90 名前: mailto:sage [2019/06/22(土) 16:38:05.67 ID:ICCmixle0.net]
- 現時点で利用可能な C++→C トランスパイラは何ですか?
- 91 名前:デフォルトの名無しさん mailto:sage [2019/06/22(土) 16:53:56.35 ID:3PgdpjOh0.net]
- llvm
- 92 名前:デフォルトの名無しさん [2019/06/22(土) 17:03:11.19 ID:ecTKxvDL0.net]
- https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/cpp.html
C++がCに勝ってる項目があるんだけど信じがたい
- 93 名前:デフォルトの名無しさん [2019/06/22(土) 17:16:00.48 ID:ecTKxvDL0.net]
- https://gist.github.com/simonhf/de808e0f8240ef27dac655505c8bf30f#file-result-summary-txt
こっちだとJavaにすら負けてる なんなんだろうねベンチマークって
- 94 名前:デフォルトの名無しさん [2019/06/22(土) 17:19:10.62 ID:ecTKxvDL0.net]
- blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/
どうやらC++はメモリの確保と解放にコストがかかるから Javaはまとめて大量にヒープをもってプールして使ってくから そこでJavaが勝利する場合があるらしい。 C++もメモリをプールしていちいち確保しないようにすればJavaより速くなる。 しかしいちいちそんな事やってられるか?
- 95 名前:デフォルトの名無しさん mailto:sage [2019/06/22(土) 17:20:50.35 ID:VTgUFffK0.net]
- >>89
c++のままでないとできない最適化って何がある?
- 96 名前: mailto:sage [2019/06/22(土) 17:40:41.59 ID:ICCmixle0.net]
- >>91
LLVM は C++->C はできないのでは?LLVM のこと、わかってますか?
- 97 名前: mailto:sage [2019/06/22(土) 17:41:56.82 ID:ICCmixle0.net]
- >>92
C++ の template は #define の親玉のようなものですから、qsort() とかの間接ポインタ渡しでなんとかするしかない C が不利な場合はあるとおもいますよ
- 98 名前:デフォルトの名無しさん mailto:sage [2019/06/22(土) 17:55:09.83 ID:VTgUFffK0.net]
- あとconstexprで事前計算してるのもあるね
- 99 名前:デフォルトの名無しさん mailto:sage [2019/06/22(土) 18:03:29.07 ID:kVNYu7LP0.net]
- >>94
allocatorってまさにそのための仕組みなんだけど
- 100 名前:デフォルトの名無しさん mailto:sage [2019/06/22(土) 18:48:22.39 ID:MmmgKpwaa.net]
- >>95
具体的にはあげられないけど、現在の文脈においてある前提が成り立つことが分かることによりできる最適化が、 (最適化を除いて)同じ動作となる別のコードに置き換えられることにより、元の文脈での前提条件が成り立つことを断定できなくなり適用できないという状況があるのではないかと思う。
- 101 名前:デフォルトの名無しさん mailto:sage [2019/06/22(土) 18:58:11.17 ID:3PgdpjOh0.net]
- >>96
そちらこそllvmをまるで理解していないみたいですね
- 102 名前:デフォルトの名無しさん mailto:sage [2019/06/22(土) 19:04:53.83 ID:cW7wMvLUM.net]
- >>100
具体的なのが聞きたい gccもllvmも中間言語でやる最適化が中心でしょ そういうc++の特別なフェーズがあるなら興味ある けど知らずに言ってるなら聞いても無駄だね
- 103 名前: mailto:sage [2019/06/22(土) 19:27:19.94 ID:ICCmixle0.net]
- >>101
llvm が変換した IR を C コードに戻すことができるのですか?
- 104 名前:デフォルトの名無しさん mailto:sage [2019/06/22(土) 20:26:09.97 ID:/7bwQJ5j0.net]
- (1) コンストラクタの呼び出し回数削減最適化
(2) クラスが絡むmemory ariasing (1)はC++かその意味を保った中間言語上で行う必要があり、C言語に逐語訳してからでは手遅れ (2)も同じくで、クラスの意味を失うような低レベルへの変換を一揆にかけると クラスFooのthisポインタとかクラス固有のアドレスが他のクラスにもグローバルな関数にも渡っていないことの保証がC言語に逐語訳してからでは手遅れ な印象 想像なので詳しくは知らん
- 105 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 01:02:56.59 ID:PTFzQo+G0.net]
- 初歩的な質問で申し訳ないんですけどcinってどういうもんなんでしょうか
cpprefjp見ると標準入力に対する入力ストリームオブジェクトなんて書いてありますけど iostream.hで定義されてる「なにか」だとは思うんですがどういう型のものなのかとかそういえば全然知らずに使ってたなって よろしくおねがいします
- 106 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 01:04:06.42 ID:tL1CwC/m0.net]
- console input
- 107 名前:蟻人間 mailto:sage [2019/06/23(日) 01:50:58.01 ID:DI9+Pcki0.net]
- マニュアルみれ
https://cpprefjp.github.io/reference/iostream/cin.html std::istream character input
- 108 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 02:02:56.98 ID:7pjzMc7c0.net]
- const inputかと思って親近感がわいていたのに…
- 109 名前:デフォルトの名無しさん [2019/06/23(日) 06:15:35.61 ID:6LMXkq2m0.net]
- じゃあCトランスパイラのNimはC++より遅いのかな?
https://github.com/kostya/benchmarks ぐぐったらマジでそうだった 高水準言語から直接コンパイルした方が速いんだな
- 110 名前:デフォルトの名無しさん [2019/06/23(日) 06:35:12.06 ID:6LMXkq2m0.net]
- C++でクロスプラットフォームなコードを書くのはどれくらい難しい?
Nimはクロスプラットフォームを主張してるんだけどどっちがいいんだろう?
- 111 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 06:38:35.47 ID:xbroTRmV0.net]
- Qtで書くだけ
- 112 名前:デフォルトの名無しさん [2019/06/23(日) 07:05:57.27 ID:6LMXkq2m0.net]
- WindowsもLinuxもMacもカーネルがCで書かれてるらしいけど何でC++じゃないんだろう?
- 113 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 09:01:51.47 ID:Xq17DW5L0.net]
- C++がそこまで整備されていなかったから
OSといえばC言語で書くのが当たり前だから そもそもC言語で十分だから Linus「C++はレベルの低い奴が使うものだから」
- 114 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 09:11:04.02 ID:p0iHiqR80.net]
- >WindowsもLinuxもMacもカーネルがCで書かれてるらしいけど何でC++じゃないんだろう?
何回質問されたことだろうか。
- 115 名前:デフォルトの名無しさん [2019/06/23(日) 10:55:33.78 ID:6LMXkq2m0.net]
- OSじゃなくて組み込みでも大部分Cでしょ?
なんで?
- 116 名前:デフォルトの名無しさん [2019/06/23(日) 10:57:16.59 ID:6LMXkq2m0.net]
- https://news.mynavi.jp/article/20170126-a093/
>組み込みシステム向けプログラミング言語の中で「一番好きな言語」としても「C」(29.1%)を選んだ人が最も多く、これに「Microsoft Visual Basic」(16.8%)、「C++」(15.3%)が続いた。
- 117 名前:デフォルトの名無しさん [2019/06/23(日) 11:17:45.87 ID:6LMXkq2m0.net]
- Linus TorvaldsのC++批判は正しかったのか
https://developers.srad.jp/story/15/03/13/2328200/ C++の最大の問題は学習が難しい事か。 たぶんC++を学ぶ時間でCとJava両方学べるね。
- 118 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 11:20:59.77 ID:JKCTeXCU0.net]
- 超堅牢に作らないといけないから、
見えないところでコピコン大量に走ったりするような言語は避けられるんじゃないか ヘッダーに実装書き散らしてるのよくないね OSはバイナリ境界意識しないといけないし まあどのみち標準ライブラリは使えないけど
- 119 名前:デフォルトの名無しさん [2019/06/23(日) 11:28:01.94 ID:6GXr3JQp0.net]
- 最近BS/CSが映らなくなった人はここを見ると良い
【B-CAS改造】Bカスカード2038化書き換えツール配布所 205 https://mevius.5ch.net/test/read.cgi/avi/1560914909/1-100
- 120 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 11:39:08.67 ID:4lSN7b3Y0.net]
- https://nlab.itmedia.co.jp/nl/articles/1902/19/news078.html
人の顔を生成するaiはどうやって作れますか?
- 121 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 11:39:50.16 ID:Xq17DW5L0.net]
- >>115
各ベンダーがサポートするにはC言語がちょうどいい規模だから
- 122 名前: mailto:sage [2019/06/23(日) 12:03:58.80 ID:DC/NnmXU0.net]
- >>112
C++ のデフォでのマングリングが外部結合(リンク)を阻害するから、に一票
- 123 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 12:09:47.82 ID:LchWS7uN0.net]
- ちがう
ちがうなぁ ポインタがあって適度に奥が深いから、だ
- 124 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 12:22:24.97 ID:BQwXISYN0.net]
- メモリの制御が難しいからじゃね
最近やっと標準でまともなメモリ管理の仕組みを作り込めるができるようになったくらいだし
- 125 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 14:34:24.36 ID:hhhlIxdX0.net]
- 昔からメモリ制御なんてCと同じことはできるだろ
- 126 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 14:56:33.46 ID:WUJS/EaT0.net]
- 今のC++なら十分使えるよね
継承やSTL、shared_ptrみたいなことをCで実装してるわけで それを考えたらC++で良い
- 127 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 16:01:29.78 ID:EoSayXaXa.net]
- プログラムの一部にでもRTTIを使用した部分があるとプログラム全体のパフォーマンスが低下する?
- 128 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 16:37:25.79 ID:p0iHiqR80.net]
- まあc++でちゃんとしたもの組もうと思ったらデストラクタをしっかり用意するってのが
大事なわけだが、かなりいろんな状況に対応したものにしないとまともに使い物にならん。 これはメタプロバカが思ってるほど難易度は低くない。
- 129 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 16:59:21.61 ID:7M38Ae5l0.net]
- >>127
コンパイラオプションでRTTIを無効化するとデータ量が減るのでパフォーマンスが上がる →つまり一部でも使ってると低下する まぁ今時は気にする必要無いと思うけど 速度は実測が基本
- 130 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 17:38:56.55 ID:hhhlIxdX0.net]
- 自前でデストラクタ書くなよ
- 131 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 18:20:15.96 ID:xbroTRmV0.net]
- えっ
- 132 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 18:29:28.72 ID:BQwXISYN0.net]
- ちゃんと例外を投げないデストラクタを書くんだぞ
fcloseの失敗はもみ消せ どうせ回復などできない
- 133 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 21:01:47.41 ID:EoSayXaXa.net]
- >>129
やはりそうですか、ありがとうございます 速度は今試せないのでまたこんどやってみます
- 134 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 21:13:15.69 ID:PTFzQo+G0.net]
- >>107
えーっとcinってのはistream型のオブジェクトってことでいいんですかね externをいまいちよく分かってないですがヘッダ内で定義されてるから他のファイルでも使えるとという認識で大丈夫ですかね
- 135 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 07:55:10.22 ID:6Zff8TGS0.net]
- 1.思考停止してそのまま使う
2.外界から齎される無限長の情報列がストリームである、と理解する 好きな方を選べ
- 136 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 15:40:31.96 ID:DnOtpTuq0.net]
- 何でC++使ってる職場少ないのにプログラム板で上位なの?
- 137 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 15:56:59.67 ID:OO73LhBR0.net]
- すく・・・ない・・・?
- 138 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 16:10:16.23 ID:vRXjoyqNM.net]
- Web業界の人とかなんだろ
- 139 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 17:32:13.27 ID:i4YKAGQ3r.net]
- 「C++実践プログラミング」って良い本?
- 140 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 18:02:59.78 ID:HUc+KEird.net]
- 実は多いだろ?
社内に囲われているだけで
- 141 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 22:05:46.06 ID:qyAEE2sQ0.net]
- C++プライマーとaccelerated C++一通りやってeffective C++始めたんだけどすんごくめんどくさーい
acceleratedの後半あたりから思ってたんだけど純粋なロジックやテクニック以外のところで考えなきゃいけないこと無限にあってできるようになる気がしない 実際に開発になってクラスやインターフェイスの設計ってみんなこんな色々考えてやってんの?って 競プロっぽい問題だったりちょっとしたもの作るのは割と面白いけどなんかもう萎えてきた 世の中のプロってやっぱ(modern) effective C++とかmodern C++ designとかその辺りは基礎教養レベルまでもっていってるもんなの? 2年目のペーペーだけどとてもC++のプロになれる気がせんわ
- 142 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 22:08:08.69 ID:tWJeInAS0.net]
- そのへんはさらっと何が書いてあるか見ておいて、実際書くときに関係ある部分を参照する本では?
- 143 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 23:54:52.99 ID:4vQIe5sT0.net]
- >>141
それは思うわ 結局その辺の不満を改善したのがJava以降のオブジェクト指向言語だから 今C++を勉強すると面倒すぎると感じるはず
- 144 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 00:51:00.92 ID:rXRUIvly0.net]
- 必要だと思うもんだけ使えばええがな
- 145 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 01:40:27.96 ID:rF6w0adX0.net]
- 11 名前:(´・ω・`)(`ハ´ )さん[] 投稿日:2019/06/24(月) 17:55:34.54 ID:PqEssjoP
世界三大英雄は野茂と村田と、あと1人は誰? 142 名前:(´・ω・`)(`ハ´ )さん[sage] 投稿日:2019/06/24(月) 21:21:51.77 ID:osRVwCku >>11 中野英雄
- 146 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 07:42:37.27 ID:p22LimGY0.net]
- >>132
回復できないエラーでもユーザーに通知する余地はあるでしょう。最悪abort()でも、もみ消すよりはマシ。
- 147 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 12:36:52.78 ID:U+wxsv9j0.net]
- JavaもC++も大して変わらないと思うけど
- 148 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 12:59:41.31 ID:gYxx7iw3p.net]
- >>141
modern C++ designはメタプログラミングに片足突っ込んでるからだいぶ後回しでいいと思う 考えること無限にある、は同意だけど優先順位低いものは忘れた方がいいんじゃないかね(特に、ループ回しもしない箇所の速度効率とか
- 149 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 17:37:46.05 ID:kxXa+TrUd.net]
- むしろjavaの方がいろいろ面倒くさくね
- 150 名前:デフォルトの名無しさん [2019/06/25(火) 17:56:57.79 ID:Cc6pu6kp0.net]
- 使用する概念としてはJavaとCを足してさらに多重継承とか演算子オーバーロードとかを足した
のがC++という印象だった。
- 151 名前:デフォルトの名無しさん [2019/06/25(火) 18:01:11.39 ID:Cc6pu6kp0.net]
- プログラミング言語 収入 ランキング
とかでぐぐると 難しい上に重要なはずのC++が年収ランキングで10位以内に無いんだが
- 152 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 18:15:31.86 ID:U1S86Wri0.net]
- 統計の取り方が不明
- 153 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 18:20:11.68 ID:4vpt+Hzy0.net]
- >>140
多いってのはどこで集計されて発表されてるの?
- 154 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 18:30:38.49 ID:U+wxsv9j0.net]
- 一発当てて稼げてるのがwebサービスやってる人たちだから
- 155 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 19:12:58.12 ID:p4xx1Je/a.net]
- C/C++まともに書ける人は貴重になってきてるのに何故か低いよねえ
特定の会社に行くしかない気がする
- 156 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 19:18:47.91 ID:S67hXFxm0.net]
- >>151
経済の世界でよくあること: ・高度な能力を持つ人は給与ではない部分にやりがいを感じるので給与に 関係なく集まってしまう。アニメーターは絵がものすごくうまいのに、 マクドナルド店員よりも自給が低い。「やりがい搾取」。 ・高度な分野は、人材も高度な人が集まってくるので需要よりも大き過ぎる過剰な 成果を出してしまうので給与が下がるらしい。プログラマや数学者、 コンピュータ業界なんかは大体、そんな感じのところがある。
- 157 名前:デフォルトの名無しさん [2019/06/25(火) 19:21:25.34 ID:Xe7ucSUW0.net]
- 高度な分野においては、とても僅かな一握りの人が、過大な成果を出してしまう。
すると、大体の場合、給与が下がるらしい。世界のわずか数人が異常なほど大きな成果を 出しているとか。
- 158 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 19:28:18.56 ID:U+wxsv9j0.net]
- みんな勘違いしてるが儲かる商売してるかどうかだけが稼ぎに関係している
儲からない商売に超絶技巧を投入しても意味ない サービスで一発当てる方が100倍稼げる
- 159 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 19:43:08.34 ID:0zPp4OkO0.net]
- というか自分のビジネス思いつくタイプでもないプログラマーが稼ごうと思ったらなるべくニッチな言語を探していくべきなんだと思う
C/C++なんてメジャーどころは一番だめなんじゃないか。まだまだ人が少ないか、書ける人がどんどん減っていきそうなところを
- 160 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 19:50:04.75 ID:U1S86Wri0.net]
- COBOLは意外と稼げるらしい
- 161 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 20:09:29.07 ID:U+wxsv9j0.net]
- >>159
違うぞ稼げる商売やってる人に乗っかるのが正解 現在儲かってしょうがない会社に入るか今後そうなる会社に入っておくしかない 専門分野は関係ないが一発当てようがない業界というのはあるからそういうところは目指さない方がいい
- 162 名前: mailto:sage [2019/06/25(火) 21:00:35.29 ID:eaNcyZwN0.net]
- 言語は表現手段にすぎないので、言語で分野が決まってしまう現状には疑問を持ちます
少なくともライブラリーは統一されるべきだと昔から夢想してきています
- 163 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 21:02:24.65 ID:i1Zv6l/dM.net]
- 現実にあったんじゃよCOMというものがな
- 164 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 21:03:41.95 ID:zDe7yE4Q0.net]
- ライブラリはCインターフェースさえあれば全てのまともな言語から呼べるから問題ない
- 165 名前: mailto:sage [2019/06/25(火) 21:07:14.96 ID:eaNcyZwN0.net]
- >>163
OLE は重過ぎるんじゃないでしょうか?単に名前と仕様が「ある程度」統一できればいいかと考えています でも OLE はもう一度調べなおしてみます、キーワード提供ありがとうございます
- 166 名前: mailto:sage [2019/06/25(火) 21:07:47.47 ID:eaNcyZwN0.net]
- >>164
OO であるべきでは?
- 167 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 21:10:43.33 ID:6yREXBxQ0.net]
- 素朴な疑問なんだけど
オブジェクトをshared_ptrで管理するとき そのオブジェクトから他のオブジェクトにポインタを渡したいときってどうするの? コンストラクタ以外のメソッドからならenable_shared_from_thisで 生なthisポインタからshared_ptrを生成して渡せばよいけど コンストラクタだとそれも無理だよね(shared_ptrが作られるのはnewの後だから) どうするの?
- 168 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 21:11:27.40 ID:paQRKRTX0.net]
- ポインタ指向プログラミングとオブジェクト指向プログラミングは根本的に相性が悪い
これがC++高難易度化の一要因
- 169 名前:蟻人間 mailto:sage [2019/06/25(火) 21:13:45.53 ID:ayyd1Kg3d.net]
- >>167
make_sharedじゃね?
- 170 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 21:15:54.14 ID:6yREXBxQ0.net]
- てかさ
自分自身のスマポを 外部から渡してもらわないと、自分では知れないってのは 設計ミスなんじゃね? 当たり前、JavaやC#だとそんな制約ないからなぁ
- 171 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 21:18:19.51 ID:p4xx1Je/a.net]
- 代入がメンバのコピーという仕様が全ての複雑さの元凶
互換性のために仕方なかったとはいえ おかげで完全に動くクラスをつくるのが凄まじくしんどい それを改善しようとしたJavaは全てポインタのコピーというふうに割り切ったが Optinalを導入しなかったせいかヌルポの山を築いた それを改善しようと Rustは全てがムーブという世界を作ったがまだ受け入れられるには早かった
- 172 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 21:24:24.92 ID:6yREXBxQ0.net]
- >>171
これまた不思議なもんで Cからして配列は参照渡しなのに構造体は値渡しだからねぇ Cの構造体が配列みたいにアクセスするとポインタに成り下がる仕様だったのなら C++もまた違ってただろうねぇ どちらがいいかは分からないが
- 173 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 21:26:08.00 ID:i1Zv6l/dM.net]
- えっ
普通は呼吸をするように const T& var て書く様に訓練されてるだろ?
- 174 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 21:29:04.07 ID:U+wxsv9j0.net]
- 任意にコピーとポインタとムーブを使い分けることになんの苦労も無いと思うけど
- 175 名前: mailto:sage [2019/06/25(火) 21:29:56.71 ID:eaNcyZwN0.net]
- >>172
私は逆を考えていました、すなわち、配列ですら値渡しであるべきかと 参照渡しにしたいのなら、そのすべてに * をつけて明示するべき
- 176 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 21:32:48.81 ID:6yREXBxQ0.net]
- そうではなくて
構造体において何も考えずに代入した場合 実体のコピーになるって話では その点、配列では実体のコピーにならないので JavaやC#のオブジェクトに近い仕様で なかなか先鋭的
- 177 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 21:44:51.24 ID:6yREXBxQ0.net]
- そんなことより
コンストラクタで自分自身のshared_ptrが欲しい時 どうするの? 欲しい理由としては、どっかシステム的なところにattachしたり 自分のコンポジションした子供たち?に渡したり そういうことをコンストラクタですっかりしたい場合どうすんの enable_shared_from_thisを継承して二段階初期化ってのもかっこ悪いし (↑生成する側がshared_ptrを使ってくれなかった場合 クラッシュするってのは置いておいてさ) そもそも実行時型情報なんて反則が許されるなら 仮想関数付きのオブジェクトは実行時型情報のどこかに参照カウンタを隠し持っている って仕様でもよかっただろ? スマポ側が参照カウンタを持っているってのは一見賢そうだけど… 上手くいかないパターンもあるよね
- 178 名前:デフォルトの名無しさん [2019/06/25(火) 21:48:45.68 ID:6yREXBxQ0.net]
- >仮想関数付きのオブジェクトは実行時型情報のどこかに参照カウンタを隠し持っている
↑これはちょっと不正確だな vtableと一緒に参照カウンタ〜 が正解かな
- 179 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 21:52:05.85 ID:zDe7yE4Q0.net]
- ファクトリでやれ
- 180 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 21:54:23.16 ID:jeBecXDk0.net]
- >>177
create関数でshare作ってから後の構築処理して返すしかないんじゃね
- 181 名前:デフォルトの名無しさん mailto:sage [2019/06/26(水) 00:01:25.34 ID:7raG/MY10.net]
- 有害でしかない美意識は投げ捨ててshared_form_this使えって話になるだろ
- 182 名前:デフォルトの名無しさん mailto:sage [2019/06/26(水) 00:07:57.67 ID:HPTAJdxK0.net]
- それでもコンストラクタでは使えないから二段階初期化になるな
|

|