17/08/15 21:16:01.46 AjDM7F7/0.net
>>111
WindowsのウィンドウをWin32APIで出すときは、Cのインターフェースに渡さないといけない。
なので、デフォルトキャプチャにthisのアドレスコピーが入ってくれないと厳しい。
113:デフォルトの名無しさん
17/08/15 21:38:42.75 K8T9Hr6g0.net
>>112
typedef bool(*Fun)();
にキャプチャしたデータを置いとく場所が無いんだからいつまでまっても実現しないよ
そういうC言語のAPIにはvoid*でユーザーデータ渡せて引数で取得できるようになってるはずなんだからそれに規則性があるのなら(例えば最初の引数がユーザーデータになってるとか)テンプレートでラッパー書くの簡単でしょ
114:デフォルトの名無しさん
17/08/15 21:53:17.41 +1mFvI7w0.net
>>105
できるも何も型が違うからエラーでしょ。
ラムダ型のオブジェクトはautoでしか受けられない。
115:デフォルトの名無しさん
17/08/15 23:43:23.71 AjDM7F7/0.net
>>113
クロージャって知らない?
>>114
条件を限定することで関数ポインタに束縛できるようになりました。
まぁ今回書いたのは願望ですけど。
116:デフォルトの名無しさん
17/08/15 23:55:50.09 K8T9Hr6g0.net
>>115
キャプチャしないラムダ式は関数ポインタに変換出来るだけ。束縛じゃない。
117:デフォルトの名無しさん
17/08/15 23:58:52.92 AjDM7F7/0.net
あぁ、語弊があったね。ゴメン。
118:デフォルトの名無しさん
17/08/16 06:02:38.98 1FqF77kw0.net
クロージャがどのように実装されているか調べてみることを勧める。
そしてそれをC言語の関数ポインタと互換性がある形で実装可能か考えてみるといい。
119:デフォルトの名無しさん
17/08/16 06:31:25.68 3XX715Yb0.net
>>117だよ。
駄々っ子みたいになってるが、
スレッドローカルみたいな変数を持たせれば持てないことも無いと思う。
まぁ、もうできないことはわかったので抜けます。
120:デフォルトの名無しさん
17/08/16 12:58:58.53 +9oABFYpM.net
もういない宣言出てるけど、スレッドローカルでやられても困るだけだと思う。
121:デフォルトの名無しさん
17/08/16 14:20:28.94 5HjXxUQN0.net
>そしてそれをC言語の関数ポインタと互換性がある形で実装可能か考えてみるといい。
もともとC言語はλ式とか、(束縛変数がクラスのこともありえるが)クラスを構文でサポートしていないのだから
「C言語の関数ポインタと互換性がある形」と逝っただけでは何を指しているのか不明確にならざるおえない
呼び出し側がいかに煩雑な記述になろうとも、動けば互換性があるという立場をとってみるテスト、
束縛変数も毎回引数渡しすればC言語の関数ポインタと互換にできるのでは…
もはやクロージャでも何でも無いが一応動く
122:デフォルトの名無しさん
17/08/16 14:36:46.12 53LlWcImr.net
>>121
>もはやクロージャでも何でも無いが一応動く
ちなみにどうでもいいことだがラムダ式から取得した関数ポインターはC++リンケージ型なのでC関数に渡してコンパイルが通る保証が無い
123:デフォルトの名無しさん
17/08/16 15:18:13.19 5HjXxUQN0.net
>>122 関数ポインタ経由の関数呼び出しに関数名のマングルは関係無いのでは…
125:デフォルトの名無しさん
17/08/16 15:34:56.89 53LlWcImr.net
>>123
関数名だけではない
extern "C" using CF = void(); と
using CPPF = void(); は似て非なる関数型
この二つはオーバーロード可能で互換性も無い
恐らくマングリのみならず関数呼び出し規約の違いを許容する思想
ただこれを正しく実装したコンパイラーを見たことは無い
126:デフォルトの名無しさん
17/08/16 15:57:26.34 07vifjzr0.net
「正しく実装」すると互換性がないってこと?
127:デフォルトの名無しさん
17/08/16 15:59:31.27 CMzvSoma0.net
a = 0
2.times do
b = 1
3.times do
p a, b
end
end
「Rubyのしくみ」に書いてあるけど、Rubyは、Cで作ってあり、
do ~ end のブロックは、クロージャの実装。
ラムダ・Proc も、ほとんど同じ
子のブロック内で、変数が見つからなければ、
外のスコープ(先祖の方向)へ遡って、探しに行く
128:デフォルトの名無しさん
17/08/16 16:07:27.94 53LlWcImr.net
>>125
そのとおり
規格では別の型と規定されている
atexitなど関数ポインターを渡す関数ではCリンケージの関数ポインターを渡すかC++リンケージの関数ポインターを渡すかで
C版atexitとC++版atexitのオーバーロード呼び分けができることになっている
clang/G++は意図的に規格に従っていないというのが痛説
Visual C++は規格より自分が正しいという意味不明な見解
129:デフォルトの名無しさん
17/08/16 16:16:58.46 07vifjzr0.net
や、互換性がない→別の型 は真でも 別の型→互換性がない はそうじゃないような。
130:デフォルトの名無しさん
17/08/16 16:31:53.97 53LlWcImr.net
そのとおりだ
暗黙の変換は禁止されていない
ただ暗黙の変換が可能というルールも存在しないので「コンパイルが通る保証が無い」と書いた
131:デフォルトの名無しさん
17/08/16 16:48:50.64 07vifjzr0.net
なるほど。
上の方で原理的に無理みたいなことが書いてあった気がしたので念のため。
132:デフォルトの名無しさん
17/08/16 18:09:49.22 VpF+jov/0.net
マングリングっていやらしいよな
133:デフォルトの名無しさん
17/08/16 18:35:35.31 lmNMFTOO0.net
そういうCのインタフェースにはたいてい関数ポインタの他にユーザデータを指定できるようになっててそこにthisなんかを入れておくものだが、 >>105 は関数オブジェクトを関数ポインタだけに変換したいと言っているわけか……
コードを動的に生成すれば不可能ではないだろうけど、色々トレードオフがあるから言語の機能にするのはどうだろうね。
ライブラリを作っても良いんだろうけど、おとなしく定石に従っておいた方が良いよ
134:デフォルトの名無しさん
17/08/16 22:53:19.96 VOMe5hsv0.net
>>132
動的にコードを生成したとしてもどこにその生成したコードを置くのか、それをどうやって解放するのかが問題になるね。だったらコード生成してもしなくても同じ事。
135:デフォルトの名無しさん
17/08/16 23:14:18.00 lmNMFTOO0.net
>>133
> 動的にコードを生成したとしてもどこにその生成したコードを置くのか、それをどうやって解放するのかが問題になるね。
そうだね。
> だったらコード生成してもしなくても同じ事。
同じではないね。
136:デフォルトの名無しさん
17/08/16 23:47:46.20 VOMe5hsv0.net
>>134
言い方が悪かったかな?
「どこにその生成したコードを置くのか、それをどうやって解放するのか」が解決するのであれば、コードを動的に生成しなくてもキャプチャしたデータ自体をそこに置けばいいだけ。
137:デフォルトの名無しさん
17/08/17 02:40:17.43 PxJqlDv90.net
>>135
キャプチャしたデータ(またはそれへのポインタ)をコード以外のどこかに置くとして、それは関数ポインタ一つ(コードへのポインタをとるCのAPIにそのまま渡せる形)にはならないだろ。
何の話をしてるんだ?
138:デフォルトの名無しさん
17/08/17 05:10:47.78 gXVZW44o0.net
WTL/ATLでそれっぽいことをやってるね。
URLリンク(hp.vector.co.jp)
139:デフォルトの名無しさん
17/08/17 08:39:28.71 rYxoi1+/d.net
MS は mfc の頃から動的コード生成でやってだ記憶がある。
this をロードして jmp みたいな小さいコードを生成して Window Proc として使う。
140:デフォルトの名無しさん
17/08/17 09:01:01.55 6E9r52D/0.net
それ動的生成だろ。コードじゃなくてインスタンス。
141:デフォルトの名無しさん
17/08/17 10:51:29.58 rYxoi1+/d.net
>>139
コードだっつーの
関数ポインタ一つしか渡せないwindowprocにthisを渡すためにそうやってるんだよ。
なんで知らんのに反論するかなー
142:デフォルトの名無しさん
17/08/17 11:04:19.66 OslnP8rdM.net
>>140
ひょっとして各インスタンスにコードが含まれてるとか思ってる? w
143:デフォルトの名無しさん
17/08/17 14:38:16.10 B8c7/K0xr.net
>>138
そのサンクらしきものはどこのセグメントに置くの?
144:デフォルトの名無しさん
17/08/17 15:30:51.11 PxJqlDv90.net
自分でソース読めば良いのに。
最近はDEPとかあるから工夫が必要そうだよね、と検索したらこんなのが出てきた。
URLリンク(support.microsoft.com)
145:デフォルトの名無しさん
17/08/17 16:53:07.66 6E9r52D/0.net
>>143
MFCのどのクラスに動的コード生成の実装が書いてんの?
146:デフォルトの名無しさん
17/08/17 17:43:39.99 PxJqlDv90.net
なんか頭悪そうなのがつっかかってきた
147:デフォルトの名無しさん
17/08/17 17:47:21.07 fzzVUP+8d.net
DOS時代は動的コード生成とか良く使ったな
148:デフォルトの名無しさん
17/08/17 18:37:40.30 6E9r52D/0.net
>>145
なんで急にキレるんですか?
あなたがソース読めとアドバイスしたからMFCのどのソースか聞いただけなのに。
149:デフォルトの名無しさん
17/08/17 18:53:03.48 p6ewHhXhd.net
理解しようという気持ちも理解する力もないのに質問すんなよ…
mfc ではやってたっけ?やってないんじゃないの?
というツッコミならともかく、
>>141>>142なんて思考力が虫以下だろ…どこのセグメントとかアホか
Win32 は古来よりフラットなリニアアドレスモデルだろ。
VirtualAlloc も知らなそうだし。
150:デフォルトの名無しさん
17/08/17 18:56:13.88 wL10pSGX0.net
質問だと思ってる時点で低能確定やん w
まあセグメントと聞いてセグメントレジスタしか頭に思い浮かばない
151:低能はROMってろ
152:デフォルトの名無しさん
17/08/17 19:26:52.61 KC+pdSEir.net
>古来よりフラットなリニアアドレスモデル
まさかそっちのセグメントに反応するとは予想外だった
153:デフォルトの名無しさん
17/08/17 19:47:30.76 6E9r52D/0.net
>>148
だいたいあなたがMFCの頃から動的コード生成でやってたって言い出したんですよ。
だから私はMFCにあるのはインスタンスの動的生成だという指摘をしたんですよ。
そしたら、再度あなたがATLのような実装があるんだと言ったんですよ。
ソース見ろとか言う人までいるから、どのソースか聞いたらキレて、なんで言い出したおまえまでキレんだよ。アル中か?
ここは相談室だぞ。
154:デフォルトの名無しさん
17/08/18 07:51:05.48 mSCO2cNh0.net
C++を身に着けたいと思いつつも、自分でC++で何かを作るモチベーションが湧かなくって、数千行程度のC++プログラムの写経でもしようかと思ってるのですがおすすめありませんか?
SDLを使ったゲームとか興味を持ちやすくて写経しやすいかと思ってgithubとか漁ってるのですがなかなかいいのが見つからなくて悩み中です
QtみたいなC++を拡張してるのは勘弁です
155:デフォルトの名無しさん
17/08/18 08:26:03.23 cQGhZEXD0.net
あなたが何に興味を持つかなんてわかりません
C++以外の技能は?
156:デフォルトの名無しさん
17/08/18 09:19:25.85 q7vLALqK0.net
てんそるふろーでも読んでみるとか。
今を時めくフレームワークだよ。
157:デフォルトの名無しさん
17/08/18 12:28:43.04 vqpgoPDk0.net
クソだと思うやつを俺が叩き直してやるってやっていればそのうち上達してる
158:デフォルトの名無しさん
17/08/19 00:15:55.63 LWJoSxYpr.net
ぜひ叩き直してください!
159:デフォルトの名無しさん
17/08/19 10:13:11.47 2Vqw9aXW0.net
>>156
思いっきり叩いてやるからまず自分が書いたソースをどこかにアップしろ
160:デフォルトの名無しさん
17/08/19 11:23:26.49 w9JmRxmV0.net
>>157
スレリンク(tech板:20番)
161:デフォルトの名無しさん
17/08/19 12:05:03.25 uvlmBKsV0.net
他人に使わせる気のないコードなんていくら書いても意味ない
ソフトウェアとして公開して叩かれろ
162:デフォルトの名無しさん
17/08/19 12:07:34.16 w9JmRxmV0.net
>>159
>他人に使わせる気のないコード
どうすれば他人に使わせる気満々のコードになるのでしょうか?
ソースを公開する以外に何かしないといけないのでしょうか?
163:デフォルトの名無しさん
17/08/19 12:13:16.84 YuM2o2hA0.net
3行以内で書く、とか?
164:デフォルトの名無しさん
17/08/19 12:46:02.69 dHC0uy3l0.net
使いたくなるか否か、それを判定するソースコードを見せてくれれば一番早い
そしてそのソフトウェア自体をその判定にかけると得点はMAXになるのは当然
165:デフォルトの名無しさん
17/08/19 15:54:33.73 /pRbJcl80.net
>>160
・OSSライセンスを適用する
・有名処のOSSホスティングサービスで公開する
・ソフトウェアの目的と利用方法を理解しやすいようにドキュメント化する
・CPUやメモリなどのリソースを効率よく使用する
・汎用性が考慮された作りにする
・特殊化も考慮された作りにする
・バクが無いようにする
・こまめに更新し継続して改善されている事をアピールする
このくらいやれば他人に使わせる気満々のコードに見える
166:デフォルトの名無しさん
17/08/19 16:03:12.53 w9JmRxmV0.net
>>163
なるほど
でも >>158 をやる気満々で公開しようと思ってもアピール点が見つからないんです
「C++ だけで簡潔する多桁演算」というのは訴求ポイントとしてはどうなんでしょうか
誰かやってるかどうかはさておき、魅力的がどうかは気になります
167:デフォルトの名無しさん
17/08/19 16:04:19.60 w9JmRxmV0.net
×簡潔○完結
168:デフォルトの名無しさん
17/08/19 18:29:45.94 xqVOePdU0.net
右辺値参照がやっぱりわからん
template<class T>
void test(T&& t) {
f(std::forward<T>(t))
}
このstd::forward<T>(t)は左辺値なの?
名前持つt(左辺値)を転送してるから左辺値でいい?
f()はf(T&)を呼ぶであってる?
169:デフォルトの名無しさん
17/08/19 18:30:36.24 eKyb4lix0.net
C++11,14を勉強するのにいい本おしぇーてください。
170:デフォルトの名無しさん
17/08/19 19:12:00.26 o+HPRhwX0.net
effectiveなんちゃらフォイ
171:デフォルトの名無しさん
17/08/19 19:19:27.18 eKyb4lix0.net
もだーん?
172:デフォルトの名無しさん
17/08/19 19:52:37.70 g5B0Pqab0.net
>>166
forward<T>(t)はtをTの右辺値参照にキャストして返すんだから
f()はT&& tを受け取る(f(T&&)が呼ばれる)んじゃね?
173:デフォルトの名無しさん
17/08/19 20:21:54.83 3jYO+FxO0.net
>>166
それはforwarding referenceという機能を使ったperfect forwardingというテクニックで
右辺値参照を理解した先にあるものだ
右辺値参照の勉強中なら今は気にせず忘れておくもので
右辺値参照を理解してるなら右辺値参照とは別物として新たに勉強しなくてはならないものだ
174:166
17/08/19 20:37:29.73 xqVOePdU0.net
>>170
やっぱり右辺値参照へのキャストか
左辺値参照ぽい動きなんで質問してみた。ありがと
>>171
俺にはforwardはまだ早いってことスね
まずforwardなしでもう少し考えてみるわ
175:デフォルトの名無しさん
17/08/19 22:34:08.72 s/7RraD70.net
>>166
もとの test という関数が右辺値、左辺値どっちでも引数に取れる、そして std::forward でそのまま転送している
f がとる引数の型は test がとった引数と同じ。
つまり答えは実引数次第だ。
176:デフォルトの名無しさん
17/08/20 08:37:02.88 5zFtpOhv0.net
うにふぁいどこーるしんたっくすはしんだなぜだ!
177:デフォルトの名無しさん
17/08/20 08:45:14.41 0H5//osor.net
死んだ?
むしろ他の提案が出ておちつきそうだったのに
自尊心を傷つけられたと感じたハゲがゴネだして蒸し返えされたような
178:デフォルトの名無しさん
17/08/20 08:47:52.43 5zFtpOhv0.net
>>175
あんた詳しそうだな。今どうなってるの??
猛烈にほしいんだけど、サクッと入らんかな?
詳しいリンクとかあったらいただけないでしょうか。
179:デフォルトの名無しさん
17/08/20 12:02:18.26 0H5//osor.net
>>176
すまんが別の提案と間違えた。忘れて
open-std.orgのWG21のpapersの2016のP0251R0が最新ではないだろうか
何の動きもなくC++20ドラフトN4687にも入っていない
180:デフォルトの名無しさん
17/08/20 13:06:57.93 FiktH31Q0.net
3年毎に膨らんでいく仕様とか嫌だな
そらリナスさんもブチキレますわw
181:デフォルトの名無しさん
17/08/20 14:55:44.31 5zFtpOhv0.net
>>177
あぁ、情報ありがとう。やっぱ死んだままか。
手間かけさせてゴメンね。
やっぱコンセプト無いとコードサジェスト爆発するから気に入らないんだろうなぁ。。。
182:デフォルトの名無しさん
17/08/20 14:59:30.48 sGdhnhOm0.net
トーバル君は単に自分のニーズに最適な言語はCと言っているだけで
他の言語がどうなろうと知ったこっちゃないでしょ
それを周りのアフォどもが色々押しつけに来ることに時折ブチキレるだけで
183:デフォルトの名無しさん
17/08/20 15:24:25.28 4v9fraNU0.net
スキルの差によって読める、読めないの差がありすぎてもはや言語としての体をなしていない。
コンパイラによってもコンパイルできる、できないの差も激しい。大きなプロジェクトを管理する側はキレて当然。
癌のように誰も望んでない仕様拡張が続けられている。
184:デフォルトの名無しさん
17/08/20 15:43:51.01 Np+yxjmfM.net
メイヤーズがこっそりc++とバイナリ互換の新言語を開発している…と信じたい
185:デフォルトの名無しさん
17/08/20 15:57:28.37 uPeoc0+j0.net
そのバイナリ互換ってなに?
C++11 以降で、役に立つ仕様とどーでもいい仕様とをわけるとすれば、何?
186:デフォルトの名無しさん
17/08/20 16:05:02.55 sGdhnhOm0.net
>>181
誰も望んでいない仕様拡張?
autoは? range-based-forは? R"リテラルは?
initializer_listは? ラムダ式は? template parameter packは?
<random>は? shared_ptrは? <regex>は? <system_error>は?
187:デフォルトの名無しさん
17/08/20 16:10:46.08 H9uxxda60.net
>>181
ふつう、どの規格を使うかとか、場合によってはどの開発環境のどのバージョンを使うかまで
プロジェクトで規定するものだろう。
決めたことと違うコードを混ぜようとするメンバーがいたりしたらキレてもいいが。
188:はちみつ餃子
17/08/20 16:14:30.65 ikEvsZIR0.net
少なくとも個別の提案はプログラムが読みやすくなるし楽になる方向なんよね。
だからまぁ、 >>181 の言い分にある「誰も望んでない」という言説には違和感があるな。
嫌だという人がいるのはわからんでもないが、
勝手にユーザ全体の意見を代表してしまうやつは単にクズなので、
誰も耳をかさないよ。
189:デフォルトの名無しさん
17/08/20 16:17:20.06 uPeoc0+j0.net
>>154
TFか‥ソニーからも何か出たようだね
190:デフォルトの名無しさん
17/08/20 16:41:18.86 gPEOCHBy0.net
>>181
> スキルの差によって読める、読めないの差がありすぎてもはや言語としての体をなしていない。
日本語(自然言語)でも同じだろ。
馬鹿と天才でおなじ結果(コード)にしかならない、という方が問題だ。
それが天才側に揃っていれば理想的だが、実際は馬鹿側に揃うわけだし。
>>186
> 少なくとも個別の提案はプログラムが読みやすくなるし楽になる方向なんよね。
これは同意だが、問題は一部が本質的なところ(骨組み)まで変えられる程な点だろ。
現実的には>>185のようにプロジェクトリーダーが何を使うか厳密に決めればいい話で、
Linuxの場合はCだ、って言うんだから他の奴が布教しなければ丸く収まる話だ。
とはいえ通常製品の場合は「何でも出来る=何にも使えない」ではあるのだが、
C++の場合は半製品(製品を作る道具)ではあるし、
実際、機能はあった方が便利だったりするので、(使う側がどこまで使うか決めればいいだけ)
プロジェクトリーダーがしっかりしていれば、現在の貪欲な拡張方向も悪くない。
「全部の機能を使わないといけない」と信じている馬鹿と初心者は混乱するだろうけどね。
191:デフォルトの名無しさん
17/08/20 16:58:27.04 zvlsjK6m0.net
>>188
>「全部の機能を使わないといけない」と信じている馬鹿と初心者は混乱するだろうけどね。
残念ながらこういう人たちは少数派ではないのだよ。。
192:デフォルトの名無しさん
17/08/20 18:05:26.65 sGdhnhOm0.net
>>188
馬鹿側に揃えるポリシーを見事なまでにやってのけた言語と言えば。。。
IDENTIFICATION DIVISION.
再帰できない、ダミーセクションできない、動的記憶ない、オラこんな村いやだ♪
で、その結果なにが起きたか。。。
エロパブの嬢がどこかで見覚えのある顔だと思ったら、うわあ(kwskはガン無視します)
193:デフォルトの名無しさん
17/08/20 18:47:40.43 gPEOCHBy0.net
>>190
COBOLの事か?だとするとあれは試行錯誤の結果だ。非難されるべき物でもない。
そもそもあの時代の言語は再帰出来ないのも多かった。Fortran77もBASICもそうだろ。
俺が思うに、第
194:一世代言語(C以前)は「プログラミングとはこうあるべき」、 つまり、プログラミング自体を規定しようとしている。 COBOL:自然言語の仕様書がそのままソースになるべき C:所詮アセンブラ smalltalk:オブジェクト間のメッセージングこそが真の未来 Lisp:ラムダこそ真理 BASIC:馬鹿でも使えることが重要 Fortran:所詮計算機だろ で、C以外が全部糞だったのでCで統一された。 当然第二世代言語はCの後継で、C++/Java/C#のような面子になる。 とはいえ、COBOLの方向性は間違いでもないよ。 ソース自体が可読性のあるドキュメントであるべき、ってのは今でも理想だろ。
195:デフォルトの名無しさん
17/08/20 19:00:58.06 sGdhnhOm0.net
>>191
BASICは再帰できたぞ
FORTRANを実装できないマシン用に作られた縮小版で、
でもFORTRANより新しく作られた分、改良が図られていた
そのうちの、すべての行に行番号というのが賛否両論だった
当時初心者だった俺にとってはあれがラベルの概念の入り口になってくれたが
1桁KBのパーコンで構造化などという寝ぼけた老害たちがGOTOがどうたら言ってた
あ、嫁が呼んでるw じゃあな
196:デフォルトの名無しさん
17/08/20 19:05:55.32 QoZjiUMw0.net
>>192
BASIC で再帰ができるのは,ハドソン系ベーシック等,マイクロソフト以外の BASIC ではないか?
197:デフォルトの名無しさん
17/08/20 19:39:46.63 sGdhnhOm0.net
メインフレーム用の一部の言語が再帰できないのは
当時のS/370がスタックのないアーキテクチャだったからだ
逆にBASICが実装された多くのPCではCPがにスタックを持っていた
なので全変数がグローバルなのでやりにくいができるにはできた
俺もBASICでの再帰は大道芸の域を出ることがなく
実用上の手の内に入ったのはCからだった
198:デフォルトの名無しさん
17/08/20 19:45:06.60 sGdhnhOm0.net
s/CP/CPU/
CPじゃ制御プログラムだねw
199:デフォルトの名無しさん
17/08/20 21:07:10.22 gPEOCHBy0.net
>>194
> 全変数がグローバルなのでやりにくいができるにはできた
これは一般的には出来るとは言わない。
再帰が出来る=関数ローカルの変数が定義出来る、だよ。
変数共通で突っ込むのは今なら「再入」と呼ばれる物に近く、
これは言語として云々ではなく、対応する構造にするかどうかだけ。
また、CPUのスタック操作命令は高速化に寄与するだけであって、
無ければエミュレートすればいいだけだろ。
その論法だとスタック操作命令がないCPUではC言語を実装出来ないことになるが、
これはないだろ。
(S/370上のC言語実装も無いとは思えないし)
200:デフォルトの名無しさん
17/08/20 21:48:19.43 sGdhnhOm0.net
>>196
そこは俺とは見解が違うね
再帰の定義はサブルーチンの中からそのサブルーチンを呼び出すことで、
それをやりやすく補助する存在は本質じゃない
なのでスタックですら再帰の本質ではない
マシンによってはサブルーチンのネストが6層までとか限定されていて
それは何かというとリンクレジスタの個数でありスタックじゃない
再入は共通変数なんか使わないし、使ったらRENTじゃなくなる
メインフレームの流儀ではいちいちGETMAINとかね
メインフレーム上のCの実装は、俺が目撃したのはS/370じゃなく
ESA/370だったけどいちいちGETMAINはしてなかった
201:デフォルトの名無しさん
17/08/20 22:03:55.37 sGdhnhOm0.net
秀和の解析本にはBASICのくせにunwindがあるぞってなのが載ってたね
202:デフォルトの名無しさん
17/08/20 22:43:04.76 gPEOCHBy0.net
>>197
> 再帰の定義はサブルーチンの中からそのサブルーチンを呼び出すことで、
> それをやりやすく補助する存在は本質じゃない
これは屁理屈だ。
なぜならこの定義では、「再帰出来ない」言語なんて無いから。
再帰出来る/出来ない『言語』を議論している時点で、この定義は無意味で、
「普通に再帰を記述した時に問題なく動くか」が議論用の定義になる。
これは当然であり、自明だ。
つか、君は何が言いたかったんだ?
君の定義ならCOBOLだって再帰出来るだろ?
203:デフォルトの名無しさん
17/08/21 04:24:06.96 LgR8oR3f0.net
再帰アルゴリズムを繰り返し(ループ)アルゴリズムに変換することは普通のアーキテクチャー上では常に可能、
再帰回数に応じて新規のメモ化用領域を本質的に必要とするという重症なケースでも、最悪配列が使えればどうとでもなる、
>>197
メインフレームってグローバル変数として配列とか確保できなくて
いちいちGETMAINするしかないのスゲー
>>199
System/370で動くGCCの実装があったと聞いたわ(ただし今はSystem/390が動作下限とのこと)
再帰ができるかどうかはしらんwwwwwww
204:デフォルトの名無しさん
17/08/21 06:45:36.67 OHbYaZtv0.net
>>199
> 君の定義ならCOBOLだって再帰出来るだろ?
(当然だが当時のCOBOLは)できないよ
戻り番地を1つしか覚えてないのでネストしたら戻れなくなる
205:デフォルトの名無しさん
17/08/21 07:37:14.11 7Rgof7Fhr.net
そろそろよそでやれ
206:デフォルトの名無しさん
17/08/21 08:01:15.80 7Rgof7Fhr.net
C++17ドラフトのguaranteed copy-elisionが難しい
しかも規格が約50カ所修正されている
A a = A{}; と A a = f(); のムーブ無くすだけでどんだけ根本概念に手を入れてんだ
207:デフォルトの名無しさん
17/08/21 08:10:41.60 M1FJxIMj0.net
>>199
だから見解が違っているねと言ったろ
アセンブラは再帰できるのか、できないのかという問いと、
COBOLは再帰できるのか、できないのかという問いに、
同じバックボーンで答えることが俺には出来ないが
おまえさんには出来るということだろ?
>>200
bfdではi370だね
208:デフォルトの名無しさん
17/08/21 22:52:00.36 Ec7rLiDE0.net
ついに裁判か…
URLリンク(www.bengo4.com)
209:デフォルトの名無しさん
17/08/21 23:00:08.39 M1FJxIMj0.net
犯人扱いしておいて違ったら知らん顔という制度そのものが間違ってる
捜査協力した人には謝礼だろうが
にせ伝票で架空の謝礼費を着服なんかしてないで
やるべきことをやれっての!
210:デフォルトの名無しさん
17/08/21 23:01:02.71 M1FJxIMj0.net
架空の謝礼費を内部告発した仙波さん、えらい扱い受けたよね
211:デフォルトの名無しさん
17/08/21 23:09:51.41 BkgqT9qm0.net
C++の最新仕様を追い続けられる人ってのはやっぱどこかちょっと変わり者というか
ふわふわしたものが許せないというか、なんとなく動いてるからいいや的な緩さが
許せないというか、白黒はっきりつけようぜ的な性格なのかな?って思ったw
212:デフォルトの名無しさん
17/08/21 23:12:01.91 M1FJxIMj0.net
たったの千円でも知らん顔とは次元が違う
謝礼の対象でないという取り決めがあるばかりに
警察官の横柄な態度を誘発しているんだよ
213:デフォルトの名無しさん
17/08/21 23:56:14.20 pHph3yYu0.net
>>208
たかだか3年に1度の更新がそんなにしんどいのかよ
追い続けるもクソもねえ
重箱の隅をつついても1冊程度にまとめられる量しかないのに
214:デフォルトの名無しさん
17/08/21 23:59:39.85 RPf0vXrN0.net
最近は生ポインタ撲滅されそうと聞いたが
今までのメソッドとかどうしてるん
混在してるだろ
215:デフォルトの名無しさん
17/08/22 00:35:41.09 CYQ4BtpJ0.net
生ポのオレオレ定義
216:デフォルトの名無しさん
17/08/22 00:59:49.41 2UJiCQ8C0.net
プロパティーいつ実装されるのやら
getsetくっそマンドクサ
217:デフォルトの名無しさん
17/08/22 01:03:51.34 NIldwpVs0.net
>>208
ほとんどが待ってた機能だぜ?
言語仕様だけでなくライブラリまで
おまえろくすっぽC++使ってねえだろ
218:デフォルトの名無しさん
17/08/22 02:32:46.66 Z58zmq8rp.net
全くわからない
雰囲気でc++を使っている
219:デフォルトの名無しさん
17/08/22 02:42:19.05 S2ZGAu0e0.net
VSのインテリセンスさんだって
いまだについていけず
ポンコツなエラー吐きまくってるわけだし
まだまだ大丈夫!
220:デフォルトの名無しさん
17/08/22 11:30:22.61 FcKiiis6a.net
>>210
>重箱の隅をつついても1冊程度にまとめられる量しかないのに
お前は本を出したことないから「1冊程度にまとめ」るのがどれだけ大変か分からないだけ
221:デフォルトの名無しさん
17/08/22 12:26:19.96 NIldwpVs0.net
そういうおまえはあるのか?
222:デフォルトの名無しさん
17/08/22 12:33:51.83 c0Kw6L5Fd.net
雑誌の編集長ですから
223:デフォルトの名無しさん
17/08/22 12:42:39.12 NIldwpVs0.net
それが本当なら恥ずかしい見積もりミスしてんぜおまえさん
224:デフォルトの名無しさん
17/08/22 12:43:40.67 aOcQtSkRH.net
>>217
本を読む、理解する側の分量の話をしてるんだから、まとめる側の労力が大きいかどうかはどうでもいいのでは?
225:デフォルトの名無しさん
17/08/22 15:03:21.13 d7ebk59r0.net
うん。するどい。
226:デフォルトの名無しさん
17/08/22 15:14:35.21 NIldwpVs0.net
雑誌ってエロ本か何かだろどーせ
技術系の雑誌やっててあーゆーバカ言っちゃ自殺もんの恥だぜ
227:デフォルトの名無しさん
17/08/22 17:02:21.79 w4zQmMtVr.net
>重箱の隅をつついても1冊程度にまとめられる量しかないのに
その一冊程度の更新にclang/gcc/vc++すべてが追従出来ていないというのに
228:デフォルトの名無しさん
17/08/22 17:10:08.87 hmTXL6wT0.net
>>205
情熱があるんだね,うらやましい‥
ガス欠状態から脱却した
229:デフォルトの名無しさん
17/08/22 17:20:14.07 NIldwpVs0.net
あいたた、本にまとめることも、実装とテストも、
とにかく量的な感覚がどこにもないのか
230:デフォルトの名無しさん
17/08/22 20:47:37.89 0/CmF7JC0.net
>>213
なら、publicにしちゃえばいいじゃんといってみる。
関数は振る舞いを書くべきだと思うし、変数の代わりに使うものじゃないと思うんだ。
あと、オブジェクト指向的にクラス変数は基本悪である、ということも考えるべきではないだろうか。
231:デフォルトの名無しさん
17/08/22 20:56:12.81 COEJtZVq0.net
>>227
横からだけど俺もそれに同意だ
余分な抽象化は単に工数が増えるだけ
しかしなんで"貪欲"な標準化委員会はプロパティは入れないんだろな
232:デフォルトの名無しさん
17/08/22 21:04:28.96 dxaP++Hz0.net
プロパティ導入したら、なんかいいことあるの?
233:デフォルトの名無しさん
17/08/22 21:13:44.10 CYQ4BtpJ0.net
>>227
クラス変数って何?
234:デフォルトの名無しさん
17/08/22 21:18:39.19 BxNeEQM2M.net
>>229
変数そのものがバッキングフィールドにカプセル化されることで、変数へのアクセスを必ずメソッド経由にできる
235:デフォルトの名無しさん
17/08/22 21:46:13.74 dxaP++Hz0.net
>>231
バッキングフィールドってメンバ変数をprivateにすれば今でも同じことできるんじゃね?
236:デフォルトの名無しさん
17/08/22 22:05:33.19 q1PzJh5lM.net
地味に嬉しいのは既存のパブリックメンバ変数にアクセスしてるコードを変更せずに処理を追加できること
237:デフォルトの名無しさん
17/08/22 22:30:23.44 uMve0U0S0.net
>>232
privateな変数はclass内からアクセスし放題だけど、バッキングフィールドはアクセッサ経由以外では絶対に触れない
238:デフォルトの名無しさん
17/08/22 22:34:14.35 ONlIaE3KM.net
c++erは厳しくしつけられているので、既存のpublicメンバがそもそも存在しない
239:デフォルトの名無しさん
17/08/22 22:35:33.43 uMve0U0S0.net
>>235
これは正しい
240:
241:デフォルトの名無しさん
17/08/22 22:36:16.75 ONlIaE3KM.net
おっと変数が抜けた
242:デフォルトの名無しさん
17/08/22 22:58:36.57 D8nSL4rC0.net
>>233
逆にそれが入らない原因なのでは?
軽い処理(public変数)なのか重いかもしれない処理(関数呼び出し)なのか、
見た目分かるようにしろってのがC++の流儀なんだろ。
俺はあった方がいいと思うけどね。
速度チューニングでこの手のマイクロマネージメントは全く意味がないから。
243:デフォルトの名無しさん
17/08/22 22:59:26.20 UHwuUWMX0.net
publicなメンバが一つもなかったらそもそもインスタンスを構築できないのでは…
244:デフォルトの名無しさん
17/08/22 23:02:04.62 UHwuUWMX0.net
>>238
メンバ変数の公開よりもアクセサーを設けてインライン展開してもらう方がC++の思想的に望ましいのでは…
245:239
17/08/22 23:02:59.41 UHwuUWMX0.net
スマンfriendを使えば良いのか…
246:デフォルトの名無しさん
17/08/22 23:13:00.45 zLx3ukqP0.net
>軽い処理(public変数)なのか重いかもしれない処理(関数呼び出し)なのか、
>見た目分かるようにしろってのがC++の流儀なんだろ。
C++って、それを判断するのが最も困難な部類の言語だと思うが。
247:デフォルトの名無しさん
17/08/22 23:20:46.21 NIldwpVs0.net
set/get用のデータメンバをちまちま用意するという
狭い考えに限定してきやがる思考妨害アイテムは無用
248:デフォルトの名無しさん
17/08/22 23:28:17.57 D8nSL4rC0.net
>>240
それはオブジェクト指向の理想。C++はそっちを向いていない。
>>242
いや簡単な部類の言語だ。
249:デフォルトの名無しさん
17/08/22 23:37:15.06 +MsUtw+Or.net
ほう、ではこのプログラムがC++17で何回ムーブが行われるかわかるかね?
auto f() {
struct C{int m;};
return C{};
}
auto c = f();
250:デフォルトの名無しさん
17/08/22 23:37:39.41 CYQ4BtpJ0.net
はいはい属性の抽象化属性の抽象化
251:デフォルトの名無しさん
17/08/22 23:39:19.18 CYQ4BtpJ0.net
>>245
0回
252:デフォルトの名無しさん
17/08/22 23:41:09.40 +MsUtw+Or.net
残念
0回または1回
因みに確認のためにムーブコンストラクターを追加すると0回に変わる
253:デフォルトの名無しさん
17/08/22 23:49:21.67 +MsUtw+Or.net
ということで、見た目で判断することは難しいのではないかと
254:デフォルトの名無しさん
17/08/23 00:09:19.34 CuDbJhab0.net
つかお前ら他言語使ってないだろ。
逆に言えばC++はその程度の精度での見積もりが出来る、ということなんだよ。
GC言語なんてGCがどこで走るか予測不能だから、実行時間の保証なんて全く出来ないし、
JIT言語はJIT側にその最適化が入っているかどうかで全く速度が変わってしまう。
つまりJava/C#/JavaScript等はその精度での見積もりはそもそも不可能なんだよ。
それとは別に、C++はその辺の仕組みがかなり複雑になっているのは認めるが、
それでも他言語と比べたら精度高く見積もれる方だよ。
getterを使った場合の問題は、それが見積もりにくくなることと、
あまりに多用するとどこで処理しているのか分かりにくくなる点だが、
まあ、適切に使っている限りはかなり使える機能だから、有った方が便利なんだけどね。
だから普通に考えれば「貪欲」なら当然入れるべきだし、
むしろラムダより先に入れるべきだが、入れないんだから何か引っかかってんでしょ多分。
255:デフォルトの名無しさん
17/08/23 00:16:20.92 Cw77BvbJ0.net
>>248
?
256:はちみつ餃子
17/08/23 02:11:33.58 wuLlGfOo0.net
getter がただの変数アクセスに被せてあるだけならまともなコンパイラなら最適化で消えるから速度的なペナルティはゼロだよ。
257:デフォルトの名無しさん
17/08/23 07:57:53.52 KTb6BBkr0.net
a = 1;
こんなコード片で、aの型がプリミティブ型かconstr(int)/operator=(int)を持つクラスなのかによって
実際に実行される処理内容が違う時点で
>軽い処理(public変数)なのか重いかもしれない処理(関数呼び出し)なのか、
>見た目分かるようにしろってのがC++の流儀なんだろ。
そんなものないとわかるだろう。
それににしても、そこからGCのオーバーヘッドに話が
258:飛ぶのはさすがにアクロバティックすぎるw 実実行時間の話なら、マルチスレッドの非リアルタイムOS上のプログラムはどれも正確な見積もりなどできん。
259:デフォルトの名無しさん
17/08/23 08:29:43.04 kvkWqUxa0.net
プリミティブ型? ああJava訛りね、C++用語はISO/IEC14882:2011 3.9.1に規定あるから
a = 1; がビルトインの代入か、トリビアルのoperator=か、
ユーザー定義のoperator=か、コンストラクタを呼び出すか、
コピーかムーブか、読めない人はC++には向いてないので無理しなくていいよ
要するにアセンブラ苦手なんだろ
マルチスレッドでもタイムクリティカルとか割り込みマスクとかあるしね
別にRTOSに限ったことじゃなく
260:デフォルトの名無しさん
17/08/23 11:11:46.28 KtaXakwM0.net
>>254
オメーは何が言いてえんだw
無意味に反論するんじゃねえよ
だからアホだって言われるんだよ
261:デフォルトの名無しさん
17/08/23 12:25:37.91 kvkWqUxa0.net
C++を批判するには
おまえ足んねーものが
多すぎつってんだよ
262:デフォルトの名無しさん
17/08/23 18:58:23.34 HlA0mWJs0.net
C++ 標準委員会のドワンゴ江添は、職務質問の手荷物検査を拒否したら、
警官10人に、現場で1時間半以上、拘束されたらしい
捜査でもない、任意の行政処分なのにw
それで東京都を訴えた
263:デフォルトの名無しさん
17/08/23 19:16:52.69 Rd2CDMDCM.net
>>254
> a = 1; がビルトインの代入か、トリビアルのoperator=か、
> ユーザー定義のoperator=か、コンストラクタを呼び出すか、
> コピーかムーブか、読めない人
それがわかったからと言ってなんになるんだ?
定義が常に読めるとは限らんだろ
> 要するにアセンブラ苦手なんだろ
逆アセしてでも読めとか言ってるなら単なる老害のアホ
264:デフォルトの名無しさん
17/08/23 22:25:37.71 kvkWqUxa0.net
>>258
ほーお、おまえさんは定義が読めないと判断できないのか
普通の人は宣言まで読めれば判断できるんだがw
逆汗読まないほうがバカガキ
バカガキからみて普通の人は老害というだけ
265:はちみつ餃子
17/08/24 00:52:21.94 MQSUCcmg0.net
そうか。
266:デフォルトの名無しさん
17/08/24 07:16:54.28 uGClSq1gM.net
老害だと思ってたら基地害だったと言うオチかよ w
267:デフォルトの名無しさん
17/08/24 07:27:59.03 kJk0ElnZ0.net
熱いなプロパティ
はやく標準化されればいいのに
268:デフォルトの名無しさん
17/08/24 10:04:23.28 VdsYrxcW0.net
いらね
269:デフォルトの名無しさん
17/08/24 11:04:12.57 h3Bt5TkH0.net
プロパティじゃないと出来ないことってなになの
270:デフォルトの名無しさん
17/08/24 11:21:59.10 ItTZCijS0.net
見た目だけじゃね?
271:デフォルトの名無しさん
17/08/24 11:45:56.43 VdsYrxcW0.net
IDEがやれば済むこと
わざわざ言語に入れる必要なし!
272:デフォルトの名無しさん
17/08/24 12:19:36.07 TzTK1OIfM.net
メンバ変数と関数の呼び出し統一化。
いらんというのは同意。
273:デフォルトの名無しさん
17/08/24 14:05:25.76 5zDLSTW70.net
オブジェクトの状態と操作の区別
関数でも代用できてしまうけど、変数のように扱えるってのが大きい
変数のような使い方で処理を挟める、これはPublicなメンバ変数では出来ない
274:デフォルトの名無しさん
17/08/24 14:20:51.13 VdsYrxcW0.net
できるよバーカ
C++98より前、ARM C++の時代から
275:デフォルトの名無しさん
17/08/24 17:42:35.34 hLrI3YRl0.net
たしかに、operator()とoperator=があればできそうではある
276:デフォルトの名無しさん
17/08/24 18:28:45.68 dK94ZXMf0.net
>>269
どうやって?コードよろ
277:デフォルトの名無しさん
17/08/24 18:48:22.87 hLrI3YRl0.net
ARMだとテンプレート�
278:ネいから、メンバ変数にしたい型ごとにラッパークラス作らないいけないから大変そう
279:デフォルトの名無しさん
17/08/24 18:52:57.63 4nWMkj3x0.net
質問ですが
std::string str("abcdefghi"); // (*1)
str.resize(8); // (*2)
size_t len = strlen(str.c_str()); // <-- "abcdefgh\0"の長さが返る (*3)
となるのですが、(*3)の時点でできる終端NUL文字"\0"って、
いつのタイミングでどこの領域に確保されるのですか、
280:デフォルトの名無しさん
17/08/24 18:54:42.67 4nWMkj3x0.net
訂正
×:、(*3)の時点でできる
○:、(*3)の時点でできている
281:デフォルトの名無しさん
17/08/24 19:23:39.06 hLrI3YRl0.net
ARMテンプレートあったわ。失礼
282:デフォルトの名無しさん
17/08/24 20:00:39.22 kJk0ElnZ0.net
>>270
そのスマートオブジェクトをメンバ変数にした場合、一々親へのポインタをそのスマートオブジェクトに記憶してやらんといけないからすごく面倒なのだよ
プロパティはその点何の束縛もないから良いのだ
283:デフォルトの名無しさん
17/08/24 20:11:18.34 VdsYrxcW0.net
>>272
アフォwww
template と try catch それと typeid はARMで新設されたんだよ
おまえ多重継承だけだと思ってんだろ
284:デフォルトの名無しさん
17/08/24 20:14:15.85 G5OnAPYO0.net
>>273
*1の時点であるよ
285:デフォルトの名無しさん
17/08/24 20:17:27.08 LSCbdyW40.net
>>273
(*2)の時点で 'i' があった場所に置かれる、
と素朴に思ってた
286:デフォルトの名無しさん
17/08/24 20:39:47.98 oFKMCsHnd.net
🐒
287:デフォルトの名無しさん
17/08/24 21:28:30.26 YTCHjYE8M.net
>>273
(*2) の時点で新規領域に abcdefgh をコピーしてその後に \0 を置く
288:デフォルトの名無しさん
17/08/24 21:29:59.02 G5OnAPYO0.net
新規領域もコピーもないでしょ
289:デフォルトの名無しさん
17/08/24 21:33:49.00 4nWMkj3x0.net
コピーが生じないんだとしたら、
std::string::size()はいつも1バイトだけサバを読んだ値を返すってこと?
290:デフォルトの名無しさん
17/08/24 21:34:29.37 G5OnAPYO0.net
せやで
291:デフォルトの名無しさん
17/08/24 21:35:38.05 4nWMkj3x0.net
なのか
292:270
17/08/24 22:02:35.81 oFKMCsHnd.net
プロパティはこれじゃアカンの?
URLリンク(wandbox.org)
293:デフォルトの名無しさん
17/08/24 22:12:47.64 4nWMkj3x0.net
Windows Phoneの開発で使うC++/CXにはpropertyが構文でサポートされているで
ていうかpropertyがあることが存在意義な感じ?(ネイティブなC++は別にあってそれはそれで利用可能
294:デフォルトの名無しさん
17/08/24 22:15:25.24 4nWMkj3x0.net
データメンバ直アクセスでなくてpropertyにすると良いことがあるというのは
マーシャリングを裏で勝手にやって来る点
295:デフォルトの名無しさん
17/08/24 22:28:47.63 TzTK1OIfM.net
メンバ関数でいいじゃん。ということだろ。
296:デフォルトの名無しさん
17/08/24 22:34:36.32 4nWMkj3x0.net
|
| ('A`) .oO(名前考えるのマンドクセ
/ ̄ノ( ヘヘ ̄ ̄ ̄
/
297:デフォルトの名無しさん
17/08/24 22:54:26.67 TzTK1OIfM.net
0変数:getter, 1変数:setter, 尻尾付き:メンバ変数
とかは良くやるな
298:デフォルトの名無しさん
17/08/25 00:06:28.73 w8QRZZ7K0.net
>>287
それ以前のVC++/CLIからサポートされてる。
>>286
駄目。
propertyは新規機能ではなく、見た目だけの問題だから、
逆に言えば、見た目がpropertyで書いた時より分かりにくいようなら駄目なんだ。
ほぼ同じ事はラムダとファンクタでもそうだけど。
299:デフォルトの名無しさん
17/08/25 00:10:22.03 hVYhQQjP0.net
>>268
オペレーターのオーバーライドとにたような感じになると思うけど、その挟み込む処理の重さが隠蔽されてしまうという問題があって、一般には、非推奨だとおもうのだけど今はかわってきてるのかね?
たとえば、代入しているだけだとおもったら、実
300:はファイルアクセスまでしてたとかかな。
301:デフォルトの名無しさん
17/08/25 00:19:32.01 4dE2HuPo0.net
>>293
>258理論によれば、老害じゃなければ一目で処理の重さがわかるんじゃね
もっとも処理の重さに関するC++の不透明さに警戒を抱くことを老害とするならば、
カーニハンやリッチーも老害にカテゴライズされてしまうが
302:デフォルトの名無しさん
17/08/25 00:49:30.90 w8QRZZ7K0.net
>>294
K&Rというか生Cが嫌っている理由は「余計なことをするな」だ。
適切に使っている限りC++は不透明ではない。それでも彼等は嫌うだろ。
>>293
横だが結局は使い方次第だよ。C++はいくらでも読みにくいコードを書けるから。
ただ、きちんと使えば有用な機能だよ。
演算子オーバーロードについてはgoogleは「慎重にやれ」だね。
URLリンク(ttsuki.github.io)
どうでもいいが、何故演算子は「オーバーロード」なんだ?
言われてみれば「オーバーライド」の方が適切な気がする。
303:デフォルトの名無しさん
17/08/25 02:45:57.11 g+9HiqWa0.net
>>293
それは言語機能の問題じゃなく実装の問題じゃない?
propertyってメンバ変数がどうなっているかに関わらずオブジェクトの状態を表すもの
言語機能の話をしているのであって
既存の機能をやりくりして似たことは出来るって言われてもって感じ
304:デフォルトの名無しさん
17/08/25 04:18:10.56 4FaT6XJy0.net
「処理の重さを隠蔽するな」なんて思想がそもそもあるのかね?
305:デフォルトの名無しさん
17/08/25 05:23:39.04 RGmsOxnq0.net
>>295
オーバーロードは新設で、たいていのoperatorがこっち
オーバーライドは変更で、代入やnewが本当はこっち
306:デフォルトの名無しさん
17/08/25 06:02:53.19 sj2/Y28y0.net
property ってパブリック変数とどう違うの?
307:デフォルトの名無しさん
17/08/25 06:53:00.86 s9vD7wq8M.net
>>294
> >258理論によれば、老害じゃなければ一目で処理の重さがわかるんじゃね
どこにも「わかる」って書いてないのにどんなアホ解釈したらそんな結論になるんだよ w
308:デフォルトの名無しさん
17/08/25 06:55:30.90 s9vD7wq8M.net
>>295
> どうでもいいが、何故演算子は「オーバーロード」なんだ?
> 言われてみれば「オーバーライド」の方が適切な気がする。
オーバーロードとオーバーライドの違いもわかってないの?
まあ>>298も色々おかしいが
309:デフォルトの名無しさん
17/08/25 07:02:27.63 g3SOHHgl0.net
オーバーロードってモモンガ
310:デフォルトの名無しさん
17/08/25 07:24:58.66 crVCqQ4J0.net
URLリンク(ideone.com)
URLリンク(qiita.com)
なんか通った。プロパティですよ?
こんなかんじでいいのかな?
何で動いてるのかよくわからん。Orz
311:デフォルトの名無しさん
17/08/25 07:49:18.88 4dE2HuPo0.net
>>300
>>254~>>258の流れをa=1;の実行速度が一目見てわかるのかどうかという問題提起の意味に解釈すた、
パフォーマンスを読みきるには何の言語であれボトルネック(ループ回数×1回の実行時間が最大の処理)の特定が必要だが
C++は演算子のオーバーロードとかインライン展開とかテンプレートがそれ以前の障害として立ちはだかる点がCより重症
パフォーマンスを上げるための手段を豊富に提供してプログラムを書く人の選択に委ねているみたいな?
つまりC++はソースコードのROM専はお断りな言語
>>295
スマン言いたかったのはK&Rではなくてカーニハンとロブ・パイクやったorz
『プログラミング作法』の第7章「性能」のところにC++の特性について(CやJavaとの比較が)
312:書かれていた希ガス、 (目次)ttps://tatsu-zine.com/books/practice-of-programming ちな本は売ったから手元に無い >>297 本来のK&Rがまさにそれなのでは… Unixの移植目的で作られた言語なので、移植性と意図通りのアセンブリコードに落ちること (ソースコードからアセンブリコードが透けて見えること)の両立が着手時点の第一優先だったはず 故に生ポインタが言語の前面に出てきてインクリメント/デクリメントがそれぞれ2種類あった
313:デフォルトの名無しさん
17/08/25 08:42:44.14 XasQqnRJ0.net
>>298
いや、new もオーバーロードでしょ。
314:デフォルトの名無しさん
17/08/25 08:51:39.36 crVCqQ4J0.net
newはオペレーターじゃないの?
315:デフォルトの名無しさん
17/08/25 08:53:26.21 mWX/padLd.net
いやいや、newは新しいって意味
316:デフォルトの名無しさん
17/08/25 09:08:17.73 crVCqQ4J0.net
新しくメモリのようなものを持って来るってことでしょ。
言語上ではオペレーターじゃないの?
317:デフォルトの名無しさん
17/08/25 09:09:11.80 mWX/padLd.net
オペレーターかどうかの議論なんて誰もしてない
318:デフォルトの名無しさん
17/08/25 09:11:08.77 crVCqQ4J0.net
オペレータはオーバーロードするもんじゃね?
まぁいいか。
319:デフォルトの名無しさん
17/08/25 09:52:04.11 RGmsOxnq0.net
>>305
「本当は」って書いてるだろ
# 流れを読んでない近視眼的なアフォどもは無視
320:デフォルトの名無しさん
17/08/25 09:54:07.34 mWX/padLd.net
「本当は」とは?
C++の規格?
本来の英語の意味?
321:デフォルトの名無しさん
17/08/25 09:55:05.21 mWX/padLd.net
突然「本当は」とか書いても、どういう意味でどういう意図で書いたかなんてわからんぞ
322:デフォルトの名無しさん
17/08/25 10:21:51.52 RGmsOxnq0.net
わかんなくていい
バカ以外とさえ話せれば
323:デフォルトの名無しさん
17/08/25 12:45:56.08 s9vD7wq8M.net
>>304
ごちゃごちゃ書いてるけどどこから
> 老害じゃなければ一目で処理の重さがわかるんじゃね
が出てくるのかさっぱりわからん
324:デフォルトの名無しさん
17/08/25 12:58:22.38 BrjL74izM.net
>>311
いや、グローバルのオペレーターに対して、型特化を新設するんだから、newも代入も、オーバーロードでいいんだよ。って話。
c++の実現方法(クラス内定義)でイメージしちゃうから、オーバーライドと思っちゃう気持ちはわかるけど。
325:デフォルトの名無しさん
17/08/25 13:22:21.09 2fWpITWD0.net
operatorを仮想関数にしたことないや
326:はちみつ餃子
17/08/25 13:27:32.63 a70Vb5yP0.net
そうか。
327:デフォルトの名無しさん
17/08/25 14:12:03.69 RGmsOxnq0.net
::operator newは新設か?
ユーザー定義するとビルトインを置き換えるだろ
328:デフォルトの名無しさん
17/08/25 14:14:35.88 11RxMW0L0.net
>>319
だからオーバーライドだというの?
329:デフォルトの名無しさん
17/08/25 21:42:16.87 0c3f6Usc0.net
そういえば昔C++のoperator批判を見たなと思って探してみたらこれだった。
URLリンク(local.joelonsoftware.com)
330:デフォルトの名無しさん
17/08/25 22:11:25.23 IbGqUCQq0.net
operatorをオーバーライドしてる人いるみたいだけど、operatorを仮想関数にするのってどういう時なの?
331:片山博文MZ
17/08/25 22:17:04.37 M7y+0IYNd.net
>>322
ポインタから多態を利用じゃねーの?
332:片山博文MZ
17/08/25 22:28:47.46 M7y+0IYNd.net
ポインタじゃなくてC++参照ね。
333:デフォルトの名無しさん
17/08/25 22:37:18.66 IbGqUCQq0.net
>>323
具体的には何のoperatorをオーバーライドしてるの?
334:デフォルトの名無しさん
17/08/25 22:39:23.28 11RxMW0L0.net
遺伝子
335:片山博文MZ
17/08/25 22:45:02.30 M7y+0IYNd.net
operator==を仮想化したら、多態性が必要な状況であれこれはかどるだろう。
Numberクラスを基底として、RealクラスやらComplexクラスを作ったりしたら、同値確認にoperator==を使いたくなるだろう。
336:デフォルトの名無しさん
17/08/25 22:47:00.20 g+9HiqWa0.net
男はオーバーロード
女はオーバーライド
337:デフォルトの名無しさん
17/08/25 23:16:33.27 11RxMW0L0.net
>>327
それってダブルディスパッチの問題起きないの?
338:片山博文MZ
17/08/25 23:29:12.56 M7y+0IYNd.net
>>329
お馬鹿で済みません。
339:デフォルトの名無しさん
17/08/25 23:44:46.18 11RxMW0L0.net
?
340:デフォルトの名無しさん
17/08/25 23:58:05.92 w8QRZZ7K0.net
よく分からん揉め方をしているが、
俺は>>298の表現は極めて的確で分かりやすいと思うぞ。
俺はあれで納得だ。サンクス。一応言っておく。
341:デフォルトの名無しさん
17/08/26 00:07:55.23 NVd9gXan0.net
>>327
RealクラスとComplexクラスを比較した時の振る舞いが直感的じゃなくね?
342:デフォルトの名無しさん
17/08/26 00:16:33.84 m69mKCvsr.net
はてoverloadとoverrideは排他的な存在だっただろうか
ちなみに規格で::newはreplace, displace
overrideとは言わない
343:片山博文MZ
17/08/26 00:17:51.21 HPL6ZAk0d.net
>>333
その場合はオーバーロードよりも強力なダブルディスパッチを使うのが妥当だった。すまね。
344:デフォルトの名無しさん
17/08/26 00:20:52.21 kchnKiPS0.net
まだおまいらオーバーなんちゃらで言い争っているのかw
345:片山博文MZ
17/08/26 00:39:36.17 HPL6ZAk0d.net
URLリンク(qiita.com)
これを貼るだけだったな。
346:デフォルトの名無しさん
17/08/26 03:28:35.80 KpMB1a9f0.net
>>332
operator newって仮想関数にできなくない? なんでオーバーライドが的確なの?
347:デフォルトの名無しさん
17/08/26 08:56:30.09 jcvKb5O50.net
>>336
言い争ってなんかいねえぜ
一部のアフォどもをこっちはスルーしてるんで争いになってない
348:デフォルトの名無しさん
17/08/26 17:00:12.26 dtKp7Pu80.net
>>334
排他的くねなぜならシグネチャが変わらないオーバーロードは無いしシグネチャが変わるオーバーライドもこれまた無いからだ
349:デフォルトの名無しさん
17/08/26 17:19:10.37 XR3UemNVr.net
そうか?
URLリンク(ideone.com)
これはオーバーロードかつオーバーライドだと思うが
オーバーロードは特定の関数について言及しているのではなく同一スコープに同一の名前が複数存在する状態を指すものだと思っとりました
350:デフォルトの名無しさん
17/08/26 18:47:41.02 O53zOlu10.net
>>341
それは
上の方はオーバーライド
で
下の方はオーバーロード(を追加している)
でしょ
関数単位で見たら排他だと思う
351:デフォルトの名無しさん
17/08/26 19:44:51.20 dtKp7Pu80.net
>>342
あー左様かvoid B::f(int)のオーバーライドとf()のオーバーロードが同時にありえるのか、
完全に排他的(背反)というわけでもないな
ただしそれぞれ独立な概念とは言える
なぜなら下記の4通り全ての組み合わせが有り得、互いの成立要件に他方の成立の真偽が関係しないだから、
1. オーバーライド∧オーバーロード
2. オーバーライド∧¬オーバーロード
3. ¬オーバーライド∧オーバーロード
4. ¬オーバーライド∧¬オーバーロード
352:デフォルトの名無しさん
17/08/26 19:47:02.66 dtKp7Pu80.net
訂正
△: ただしそれぞれ独立な概念とは言える
○: ただしそれならそれでそれぞれ独立な概念とは言える
353:デフォルトの名無しさん
17/08/26 23:26:52.66 rkE5GYva0.net
同じ名前の関数で、引数が同じならオーバーライド、 引数が違えばオーバーロードだよ?
そんなに難しい話じゃないはずだった気がしたんだけどな。
354:デフォルトの名無しさん
17/08/26 23:42:30.55 eHXsO5oX0.net
>>345
usual な operator new は、いつも
void* operator new(std::size_t);
というシグネチャなのに、なぜオーバロードなのか
という話題だったのでは?
355:デフォルトの名無しさん
17/08/27 00:10:24.07 NCmIfXRWr.net
「同じ名前の関数で、引数が同じならオーバーライド、 引数が違えばオーバーロードだよ?」
これまた珍説を
356:
17/08/27 00:50:06.39 Cp6PBSjn0.net
>>347
>引数が違えばオーバーロードだよ?
演算子のオーバーロード
357:デフォルトの名無しさん
17/08/27 00:54:36.33 DagGpBhC0.net
おまいらのアタマがオーバーフロー
358:デフォルトの名無しさん
17/08/27 02:06:53.19 99717IEt0.net
みんな人に説明できるだけのまともな言語能力を備えてから来てくれ
あとクソみたいな反論をするのもやめよう
359:デフォルトの名無しさん
17/08/27 07:10:35.78 NCmIfXRWr.net
>>348
それは>>298と>>319を読んだ上で物申してるのかね
360:デフォルトの名無しさん
17/08/27 10:16:57.94 FD5yZ+sq0.net
2010年にも同じような話あったみたいね
URLリンク(cpplover.blogspot.jp)
361:デフォルトの名無しさん
17/08/27 13:59:49.66 nap9vlyD0.net
constオブジェクトのデストラクタって
一般に中で非constメソッドを呼んでいるのに
なんで合法に呼び出されるの?
それとも合法に見えるのはVC++固有?
プロセスが死ぬまで破棄されないのが正しいロジックなんじゃないの
362:はちみつ餃子
17/08/27 15:08:55.59 hmah67i90.net
const の考え方には logical const と bitwise const があって、
logical const を実現するために言語としては bitwise const を基本として要求してる感じ。
logical const ってのは論理的な const 性で、
bitwise const ってのはビットパターンとして不変ってことね。
mutable キーワードを付ければ const なメンバ関数からも操作できるデータメンバを
作れるけど、これは bitwise const でなくてもよくなるだけで
logical const であることは要求される。
(その性質を満たすようにプログラマが配慮しないといけない。
コンパイラは面倒みてくれない。
reinterpret_cast と同じくらいには危険で面倒くさいと思う)
寿命が尽きたオブジェクトにはアクセスは許されないから
もはや logical も bitwise も関係なく const 性は無意味になる。
363:デフォルトの名無しさん
17/08/27 15:29:34.75 nap9vlyD0.net
>>354
>寿命が尽きたオブジェクトにはアクセスは許されないから
>もはや logical も bitwise も関係なく const 性は無意味になる。
これはだいたいワカタ
前半はわからん
bitwise const でないオブジェクトがROMに割り付けられたり、とか、
bitwise const でないオブジェクトがmemcpy()的手段で同じビットパターンに繰り返し上書きされるみたいな
処理があったりするとbitwise constでないことは致命的だが
それ以外のケースではconstといいつつクラス内部ではmutableな扱いであっても全く実害無いんじゃ…
ていうかそもそもC++の非PODオブジェクトに対するconstはbitwise constなのかかなり疑問が、、
364:はちみつ餃子
17/08/27 16:21:07.86 hmah67i90.net
>>355
logical const であれば性質として充分だよ。
だけど、それをコンパイラがチェックすることは出来ないから、
原則としては bitwise const を要求して、
それがちゃんとできてなけりゃエラーも出す。
だけど、 bitwise でなくても logical に出来る場面では
プログラマの責任でやるよっていうのを mutable キーワードで表すってわけ。
365:デフォルトの名無しさん
17/08/27 16:23:29.96 Pcpci17F0.net
ルールを増やせば増やすほど使ってもらえない。
366:デフォルトの名無しさん
17/08/27 16:50:02.45 99717IEt0.net
しかし現実には使われているもよう
367:デフォルトの名無しさん
17/08/27 16:52:16.64 OhTIHz5/0.net
おい、mutableなんてキーワード初めて知ったぞw
ググってみたらC++11から導入されてたんだな知らんかった、、、
368:デフォルトの名無しさん
17/08/27 16:55:16.46 7+G8dT33M.net
またまたご冗談を
369:はちみつ餃子
17/08/27 17:26:13.10 hmah67i90.net
>>359
ANSI で規格化された最初から有ったがな (´・ω・`)
370:デフォルトの名無しさん
17/08/27 19:19:01.73 +rBIMmXP0.net
>>359
いやいやおいおい…
371:デフォルトの名無しさん
17/08/27 22:57:23.47 epttQBO0r.net
「C++の非PODオブジェクトに対するconstはbitwise constなのかかなり疑問が」
標準レイアウトではないconstexprなオブジェクトはビットレベルでconstなのだろうか
constexpr struct A { constexpr A()=default; int m=1; private: int n=2; } a;
確かに疑問だ
372:デフォルトの名無しさん
17/08/27 23:06:36.65 Pcpci17F0.net
どんどんキーワードが増えるのは思いつきで仕様を決めてるからだ。
無能SEの下のプロジェクトではよくあること。
50年は仕様を追加しないつもりで仕様を決めてほしい。
373:はちみつ餃子
17/08/27 23:35:20.73 hmah67i90.net
コンピュータを取り巻く事情は予想の斜め上をいく形でどんどん変わるのに言語だけのんびりしとれるかいな
374:デフォルトの名無しさん
17/08/28 00:12:36.48 OtmMiMVk0.net
永久に仕様が追加されない言語なんてたくさんあるから好きなのを使いなよ
機能が必要になった背景やそれを追加することが適当だという根拠まで知ってろとは言わないからさ
375:デフォルトの名無しさん
17/08/28 00:24:42.42 JtlNpsV60.net
雑魚に上から言われる筋合いはない。そんな態度だから囲まれて職質されるんだよ。
376:デフォルトの名無しさん
17/08/28 00:26:53.59 GiFa6ZsP0.net
つ、追加しなくても1.5年待てば倍速くなるもん…!
ていうかメモリバリア周りの扱いが未だに規格化されていないのは言語としてはお寒い状況だといわざるおえない
ゆくゆくはOpenMPIを正式に取り込んでキャッシュスヌープ無しのメニーコア環境でも
最高のパフォーマンスを発揮できるだけの選択肢をプログラマに提示し、
さらにはGPGPU対応もしてホスイ、
377:デフォルトの名無しさん
17/08/28 00:29:36.83 GiFa6ZsP0.net
スマンOpenMPIはOpenMPのつもりで言った!
378:デフォルトの名無しさん
17/08/28 01:19:26.30 83bJD8zl0.net
openmpみたいなマクロまみれよりtbbのほうが好き
379:デフォルトの名無しさん
17/08/28 01:23:37.61 JtlNpsV60.net
そんなに新機能を追加したいなら、新しく別言語を創れ。JavaやC#みたに成功して普及した事例はいくらでもある。
一度普及した言語に、碌に実務でコードも書いたことないような輩が後からやってきてデタラメな糞仕様を追加するんじゃない。
380:デフォルトの名無しさん
17/08/28 01:31:42.56 OtmMiMVk0.net
後から来た輩(ビャーネ・ストラウストラップ)
381:デフォルトの名無しさん
17/08/28 01:37:29.69 JtlNpsV60.net
CとC++が同じ言語と思ってるとは、さすが見込みどおりの雑魚。
382:デフォルトの名無しさん
17/08/28 02:11:44.25 nC18rNgy0.net
実務でコード書く人=Windowフォームにボタンを乗せる仕事の人
383:はちみつ餃子
17/08/28 03:06:17.85 yPLR2tUq0.net
ライブラリの蓄積もあるからさ。 負債の蓄積とのバランスだよねー。
ときどき Go とか Rust とかみたいなのが出てきて一新してくれりゃいいんだけど、
C++ はともかく C はいつまでも死なない気がする。
384:デフォルトの名無しさん
17/08/28 07:31:44.71 GiFa6ZsP0.net
別に新機能のほしいものリストを無秩序に書き連ねたわけではないもん;;
C++はSimulaの代替品として登場した時点から実行時パフォーマンスの追求を意識していたし、
理解しやすさなら他の言語を選択すればよい昨今においては
特に実行時パフォーマンスの追求こそがC++の存在意義として強調されるべき
テンプレートによるメタプログラミングに最高の効率を阻害する穴があれば塞がれねばならないし、
最適化がほっといたら中途半端にとどまるケースには尻を叩くキーワードが追加されねばならないし、
そのときどきのアーキテクチャーの詳細に立ち入ってでもあらゆる実行時パフォーマンス追求手段が
プログラマに提示されねばならない
インテリセンスがまともに働かないとかテンプレートの分割コンパイルがもはや完成しないバベルの塔だとか
言語規格が変わり続けて解説書が分厚くなる一方だといった側面の不調法はそうであってこそ許容される、
385:デフォルトの名無しさん
17/08/28 07:36
386::18.26 ID:GiFa6ZsP0.net
387:デフォルトの名無しさん
17/08/28 07:36:46.75 96+DvSIX0.net
ウニファイドコールシンタックスを直ちに入れるのです。
コードサジェストが爆発してもいいじゃない。
388:デフォルトの名無しさん
17/08/28 07:43:38.48 96+DvSIX0.net
>>377
機会が賢くなったら、あらゆる言語をCに一回トランスコ―ドするようになる気がする。
そこでパフォーマンスチューニングしてコンパイル。
人間だとコストかかってできない方法。
389:デフォルトの名無しさん
17/08/28 07:58:00.50 GiFa6ZsP0.net
中間言語とか3番地コードと条件判断とgotoで必要にしてほぼ十分なのでは…
390:デフォルトの名無しさん
17/08/28 08:00:37.13 96+DvSIX0.net
>>380
あーそんなもんか。
それじゃ、アセンブリにした方が早いね。
もしくはあらゆる言語がLLVMを介してコンパイルされるとかね。
LLVMのストラクチャも自動生成とか。
あー怖い。
391:デフォルトの名無しさん
17/08/28 12:49:34.85 0HhHgrwNM.net
ちょっとしたコーディングミスで、以下の簡易コードように書いてしまって、ハマったのですが、コンパイルエラーにならなかった事に驚きました。
string a(何らかの文字列);
string s = s.replace(置換指示); //a.replace() と書こうとした。
コピーコンストラクトの右辺に、構築中(?)の自分自身を使ってしまったと言う事なのですが、これは規格上合法なのでしょうか?
392:デフォルトの名無しさん
17/08/28 12:59:59.78 0HhHgrwNM.net
↑のサンプル貼っておきます。
URLリンク(ideone.com)
393:デフォルトの名無しさん
17/08/28 13:04:19.26 96+DvSIX0.net
x^=x でゼロになるんだっけ。
一応昔からある文法だけど。
394:デフォルトの名無しさん
17/08/28 16:57:17.16 KK7lC/68d.net
>>384
それの使い道がよくわからん
コンパイラと環境によっては x=0 より速かったりとか?
即値は全て名前を付けなきゃいけないとかいう糞コーディングルールの回避とか?
volatileをつけて、
ダミーリードと0クリアを1文で書けるとか?
思い付くのはこのくらい
395:デフォルトの名無しさん
17/08/28 17:22:45.55 3VrqihWx0.net
コンストラクタが実行される前なのでオブジェクトの内容は不定だろうし
不定なオブジェクトにも適切にアクセスする場合なら合法かもしれない
ただ不定な変数を使って何かしようとすると途端に undefined behavior 地雷を
踏むことが多いのでそこで頑張っても実りがあるとも思えないけど
396:デフォルトの名無しさん
17/08/28 17:43:39.28 +dyqlMtL0.net
>>385
アセンブラでよく使う xor eax,eax を逆コンパイルするとアレになる
397:デフォルトの名無しさん
17/08/28 17:52:50.38 eeKFZJ460.net
のっぷぁ
398:デフォルトの名無しさん
17/08/28 17:54:52.47 eeKFZJ460.net
or eax,eax だろバカチン
399:片山博文MZ
17/08/28 18:02:16.04 HJX32+mcd.net
xor eax,eaxがゼロクリアで、
or eax,eaxが何もしない。
400:デフォルトの名無しさん
17/08/28 18:08:57.91 Wq6HqE7w0.net
さすがにPC系コンパイラで
0クリアを最適化しないのは無いかと
xor eax, eax は0イディオムとか言って、
普通のxorとは微妙に扱いが異なる
昔は sub ax, axより xor ax, axの方が微妙に速かったりした
今はフラグ以外は同じ
>>390
何もしないわけじやない
ちゃんとフラグが変わる
401:デフォルトの名無しさん
17/08/28 18:38:50.00 7lbHEj3b0.net
URLリンク(www.st.rim.or.jp)
昔とはこういうスゴイ編み物の時代ですかね
402:デフォルトの名無しさん
17/08/28 19:05:01.12 Wq6HqE7w0.net
だね
403:片山博文MZ
17/08/28 19:10:04.94 HJX32+mcd.net
編み物だって意味のあるつまら
404:ないことの積み重ねで実現されている。 プログラミングだって多分同じ。
405:デフォルトの名無しさん
17/08/28 19:36:30.92 KK7lC/68d.net
コルモゴロフの最小プログラムに対しても同じ事が言える?
406:デフォルトの名無しさん
17/08/28 19:37:58.17 y0vE8H3MM.net
>>382
質問を変えると、
何でコンパイルエラーにしてくれないんだろう?
ってところが気になっています。
407:デフォルトの名無しさん
17/08/28 19:41:20.09 MWmJNebXr.net
>>382
3.3.2/1には反しないが3.8/6的にはだめだろう(たぶん)
未定義動作なのでコンパイルエラーになることは要求されていない
408:デフォルトの名無しさん
17/08/28 19:41:46.31 KK7lC/68d.net
別のsが定義されてるとか
409:デフォルトの名無しさん
17/08/28 19:58:41.88 rn9GWLpv0.net
>>391
それは x86/インテル方言なだけでは?
普通のアーキテクチャならばロードだけでフラグが変わるもんですキッパリ
410:デフォルトの名無しさん
17/08/28 20:21:02.23 KK7lC/68d.net
x86の話をしてるわけだけど
411:デフォルトの名無しさん
17/08/28 20:22:04.01 KK7lC/68d.net
eaxなんてレジスタ、他にあるか?
412:デフォルトの名無しさん
17/08/28 20:48:55.97 GiFa6ZsP0.net
inline void zero_clear(int& x) { x ^= x; }
413:デフォルトの名無しさん
17/08/28 20:55:31.76 GiFa6ZsP0.net
3E AF
414:デフォルトの名無しさん
17/08/28 22:22:13.51 Na7nyTMka.net
そう言えば64bitアセンブラ勉強してた時ウェブで64bitレジスタでxor rax raxってするより、64bitプログラムでもxor eax eaxってした方が機械語短いって書いてたな。
アセンブラ上は同じ長さだけど、機械語上は64bit命令の方が長い&32bitレジスタへの操作は自動的に64bitレジスタの上位bitがゼロクリアされるから同じ動きになるとかなんとか。
キャッシュに入るコードが増えるから速くもなるらしい。
415:デフォルトの名無しさん
17/08/28 22:33:21.77 Wq6HqE7w0.net
intel公式のドキュメントに書いてあるレベルだから
普通のコンパイラは当然そういうコードを吐くと思うよ
416:デフォルトの名無しさん
17/08/29 00:27:36.33 AHYNkT+D0.net
OpenMPIを用いたプロセス並列コードのプロファイルを取りたいんですが、
gprofだとテンプレートがごちゃごちゃしててすごく見にくいです。
何か勧めなフリーのプロファイラはないでしょうか?
417:デフォルトの名無しさん
17/08/29 01:49:03.35 skpcufF70.net
座標を動的配列で格納していき、
(50,50),(100,100) //直線1の座標
(30,30),(70,70) //直線2の座標
↑こんな感じに直線の数だけ座標の組み合わせが増えます。
この上から2個の座標の組み合わせ、
つまり座標4点を使い交点を計算するプログラムを作ろうとしています。
計算式を作っていく際にfor文を使っているのですが
1つ目の座標の組み合わせと2つ目の座標の組み合わせを計算式内で使うので
二重ループがいいかと思い作ろうとしましたが動的配列での二重ループの作り方が分かりません。
助けて頂けないでしょうか…。
長々と申し訳ありません。
418:デフォルトの名無しさん
17/08/29 02:17:37.67 On05DpTS0.net
>>396
void* p = &p;
↑こういうのは受け入れないといけない一方で >382 を NG とするための境目を
ちゃんと定めてコンパイラ実装するのはめんどくさそうだなと思う。
頻繁に踏む問題でも無くてコンパイラ実装者がそこに注力する動機も薄そうだし。
419:デフォルトの名無しさん
17/08/29 02:27:26.09 KA5Uf3Ix0.net
>>397
む、なるほど…
確かに未定義であれば、コンパイルエラーにしなくとも文句は言えませんね。
>>408
!!!なるほど!!!
実用性はさておき、その例文で納得してしまった。
420:デフォルトの名無しさん
17/08/29 02:33:36.21 vHDkbJz50.net
>>407
動的配列だと何が問題あるの?
何につまずいているのかよくわからんなあ
例えばキューで実装するとか
直線をひとつづつプッシュ、
描�
421:諠^イミングで直線を必要数ポップし交点を描画
422:デフォルトの名無しさん
17/08/29 22:17:26.88 R/tQJHqT0.net
Iteratorで2重ループするやり方がわからな
いとか?
423:デフォルトの名無しさん
17/08/30 00:38:16.23 95r+Hm0D0.net
はい
iteratorでの二重ループが分かりません。
x1={1,2,3}
x2={4,5,6}
1*4 , 1*5 , 1*6
2*4 , 2*5 , 2*6
3*4 , 3*5 , 3*6
といったような計算が出来るプログラムを動的配列でつくりたいです。
424:片山博文MZ
17/08/30 01:26:58.11 KDhhphrhd.net
it->begin(), it->end()
425:デフォルトの名無しさん
17/08/30 01:55:32.89 0ZIBVCLk0.net
基礎の基礎が判ってないってパターンか
426:デフォルトの名無しさん
17/08/30 02:05:27.07 J1aJRQDA0.net
>>412
まず通常のループは書けるの?
たとえばx2は4固定でいいのでループを記述してみたら?
427:デフォルトの名無しさん
17/08/30 05:26:39.94 27CMeyKU0.net
>>412
URLリンク(ideone.com)
428:デフォルトの名無しさん
17/08/30 06:45:43.57 3iEZIBUv0.net
>>413
itがイテレータならおかしいな
429:デフォルトの名無しさん
17/08/30 07:05:47.51 0ZIBVCLk0.net
いてれたのいてれた
430:デフォルトの名無しさん
17/08/30 08:57:17.67 95r+Hm0D0.net
>>415
通常のループも、二重ループもあらかじめ用意した配列でなら書けます
動的配列になるとiteratorの使い方が分からずプログラムが動かなくなってしまうのですが笑
>>416
ありがとうございます使ってみます!
431:デフォルトの名無しさん
17/08/30 09:07:19.16 Nr6Jv4Sva.net
>>419
つまり分からないのはイテレータのループそのもので、二重ループは関係ないということかな?
432:デフォルトの名無しさん
17/08/30 09:12:14.51 y1raZQAZ0.net
perlのfor my $elem (@array){をやるのに何年懸ったんだろうといつも思う
433:デフォルトの名無しさん
17/08/30 09:13:52.07 95r+Hm0D0.net
>>420
そんなかんじですね
たとえば、x[i+1]をiteratorのループではどう表現するのかとかそういうのが分からないとかです
434:デフォルトの名無しさん
17/08/30 10:44:38.77 VpX1ZCKl0.net
イテレータは繰り返しを前提としているので基本的に進むと戻るの操作しか提供しない。ランダムアクセスっていうのもなくはないけどね。
it++で前進、it--で後退。操作して、Container.begin()と同じ値なら先頭を、Continer.end()と同じ値になったらそのコンテナの末端を指している。
基本的にはポインタを抽象化したものだからポインタの操作を思い出すと少しわかりが早い。
435:デフォルトの名無しさん
17/08/30 12:11:28.40 NGfIYJwv0.net
>>422
君には早いのでまずはポインタでぐぐってくれ
x[i + 1] == *(x + i + 1)
436:デフォルトの名無しさん
17/08/30 12:24:58.79 PTG1CRxV0.net
ポインタではループ書けませんって
なんかつき合う気失せるぐらい初心者やね
いやアンタが悪い訳じゃないんやが
437:デフォルトの名無しさん
17/08/30 12:35:06.14 BJd10UjW0.net
>>419
それ、end()が何を返しているかとか、
連続領域でないのにポインタを返しているとか
そういう系の問題じゃね?
あと「イテレータのループ」というのが
range-based-forだったりすると
x[i+1]はそもそも無理だぞ
438:デフォルトの名無しさん
17/08/30 13:45:30.49 95r+Hm0D0.net
みなさんありがとうございます!
もっと勉強して出直してきます
439:デフォルトの名無しさん
17/08/30 20:58:46.39 UeWdSpDY0.net
Cとjavaの基礎やったから基本の文法とオブジェクト指向の触りみたいな部分だけわかるんだけどこの状態でテンプレートとかの勉強初めていいの?
あそこらへん急に難しくなるイメージあるけど他に先にやるべきこととかあります?
あとそういう人におぬぬめの本とかもしあったら教えてくだされ
440:デフォルトの名無しさん
17/08/30 21:26:25.83
441:it2NMgLA0.net
442:デフォルトの名無しさん
17/08/30 22:54:34.30 T8zS0A0mr.net
>x[i + 1] == *(x + i + 1)
はて、いったい何の言語の話だろうか
443:デフォルトの名無しさん
17/08/30 23:02:57.29 lE/piHRT0.net
突っ込みたいことがあるならはっきり指摘すれば?
444:デフォルトの名無しさん
17/08/31 02:07:06.34 Ce9FMcgb0.net
>>424
ポインタを意識させないのがイテレターだろうに
>>430
左辺と右辺が同じだって事が言いたいんだろうけど...
上に書いた理由でトンチンカンと言わざるを得ない
445:デフォルトの名無しさん
17/08/31 02:08:47.68 Ce9FMcgb0.net
>>422
it_next = it;
it_next ++;
とか
446:デフォルトの名無しさん
17/08/31 02:11:16.28 JJLmvwvW0.net
>>432
意味がわからない
もう少しわかりやすく頼む
出来ないならもう発言しなくて良いから
447:デフォルトの名無しさん
17/08/31 02:40:29.14 ZosLKwRR0.net
なぜにイテレータでやろうとするのか
valarray使えばこんなの即効だろ
448:デフォルトの名無しさん
17/08/31 05:33:17.64 5oi4R35S0.net
あのー、このスレに限らずどこもなんだけどさ、
初心者をケナスくせは、やめた方が良いよ。
ちょっと知ってる者の傾向だね。
ちょっと自分が物事を知ってるから、
「自分らが、上だ。と、知らない者をけなす癖」が多大に有るよね。
本当に知ってる者は、初心者にもやさしく教えてあげるよ。
449:デフォルトの名無しさん
17/08/31 05:41:23.80 xNENwSVur.net
>>432
>左辺と右辺が同じ
少なくともここはC++のスレで、C++では同じでないのだが何を言ってるんだお前は
450:デフォルトの名無しさん
17/08/31 06:49:36.91 L0jWKquXM.net
知らない者を貶す気はないけど知ったかの頓珍漢な指摘は全力でバカにする
451:デフォルトの名無しさん
17/08/31 06:52:13.92 8V5/tdJ10.net
また規格に自信ある奴が日本語読めてないな
日本語の文脈を理解できるようになってから発言してくれ
452:デフォルトの名無しさん
17/08/31 07:01:04.95 Ce9FMcgb0.net
>>437
C++でいつでも同じかなんてことはどうでも良い
レス自体トンチンカンなんだから
453:デフォルトの名無しさん
17/08/31 09:29:52.97 F7+XKf5b0.net
はっきり指摘できないのなら謙虚に発言した方がいい
454:デフォルトの名無しさん
17/08/31 10:24:10.68 DHTk7O50d.net
全くその通りだよね
ポインタ滅ぶべしとか思ってるのかも知れないけど、初心者はまずイテレータを理解してその後
ポインタを学べば良いなんてプロセスは効果的とは限らないし、個人的には無理があると思う。
455:デフォルトの名無しさん
17/08/31 10:46:40.85 8V5/tdJ10.net
C++使ってて初心者は隠蔽された中身を理解しなくていいとか本気で思ってる奴いるのかよ
それにイテレータはポインタのような操作ができるインターフェイスなのでポインタを理解してることは前提となっている
456:デフォルトの名無しさん
17/08/31 12:26:30.87 +APqOuiHM.net
逆だよ。初心者は隠蔽された中身を理解しなくていい範囲と使うべき。
初心者に教えるときも注意しなきゃいかん。
457:デフォルトの名無しさん
17/08/31 12:41:58.03 aPsP1NJ+d.net
>>443
イテレターを使う上で、ポインタを知らないと何が問題?
458:デフォルトの名無しさん
17/08/31 12:45:17.10 JYM1pg890.net
「あたかもポインタのように振る舞うオブジェクト」を使うにあたって
そもそもポインタを知らないことの何が問題か本気でわからないのか?
459:デフォルトの名無しさん
17/08/31 14:20:58.17 +APqOuiHM.net
イテレーターのコンセプト、理解してる?
ポインタのように振る舞う、じゃないよ。
460:デフォルトの名無しさん
17/08/31 14:38:31.89 BoCBvGLq0.net
イテレーションすることを目的にしてるけど、
ポインタもイテレータの機能を持ってるからポインタを想像するとわかりやすいっていうのはある。
461:デフォルトの名無しさん
17/08/31 15:09:44.78 JYM1pg890.net
>>447
どっかから引用したわけじゃないんで
そういうフレーズにはなってないだろうなあ
ポインタの使い方に
462:、イテレータの使い方を似せてあるのは 誰の目にも明らかなんだが、おまえだけ違うのか? 重箱の隅でない説明がもしできるなら拝聴したいぜ
463:デフォルトの名無しさん
17/08/31 15:25:08.02 8V5/tdJ10.net
ポインタに似せるというコンセプトではないので、ポインタと同じ構文で操作できてもポインタとは何の関係もありませ〜んwwww
そんな話してねえだろコミュ障か?
464:デフォルトの名無しさん
17/08/31 16:21:10.10 N6KLaE+9M.net
イテレータの使い方がポインタの使い方に似せてある…?
もしかして、イテレータの意味わかってないんじゃないか??
465:デフォルトの名無しさん
17/08/31 16:22:24.21 JYM1pg890.net
あ、ふじこったw
そのザマ見て気が済んだ
466:デフォルトの名無しさん
17/08/31 16:48:47.10 8V5/tdJ10.net
>>451
はいはい
イテレータはポインタの操作方法と互換性がある
ただし静的配列やvectorで使われているランダムアクセスイテレータはすべての操作をサポートしているが、それ以外ではサポートしていない操作もあるので注意
とまで補足を入れたらいいんだろ
配列の話をしていたはずなのにアスペはすぐ話の腰折るから困る
467:デフォルトの名無しさん
17/08/31 16:53:43.88 DHTk7O50d.net
むしろ初心者ほど中身を知りたがるもの。
イテレータなんて実装が隠蔽されてるわけじゃなし、知った上で抽象化したらこうなるってのが妥当な方向だ。
コンパイラがやる最適化等とは別の話だ。
468:デフォルトの名無しさん
17/08/31 16:55:03.46 DHTk7O50d.net
だいたいポインタの理解なんて義務教育レベルだしな。
469:デフォルトの名無しさん
17/08/31 16:55:37.94 +APqOuiHM.net
>>450
初心者に教える、つう前提を無視するなよ。アホか?
なんで初心者にイテレーター教えるのにポインタが必要なんだよ。説明してみろ。
470:デフォルトの名無しさん
17/08/31 17:03:23.95 JYM1pg890.net
さあねえ
俺はポインタを知らんやつにイテレータを教えたことがない
それを馬鹿にしたければするがいい
じゃあ、あんたはどうやって教えたのか、こっちが聞きたい
471:デフォルトの名無しさん
17/08/31 17:29:30.90 8V5/tdJ10.net
>>456
その場でイテレータを使うだけなら必要ないが、それでは何故か動くおまじないになるだけ
マンツーマンじゃあるまいし基礎を理解していない者に教えるのは疲れるし両者にとって不毛だ
複雑な実装のイテレータを理解しろともコンピュータの仕組みを理解しろとも言ってないし
キーワードだけ見つけて何がなんだか分からない助けてくれと言う前に簡単な基礎からやれという指摘はおかしいか?
472:デフォルトの名無しさん
17/08/31 17:43:42.94 N6KLaE+9M.net
>>453
ちがうちがう
イテレータっていうのは繰り返しの抽象化だから、ランダムアクセスだのなんだのってのはおまけ
ポインタっていうのはアドレスに少し機能を付け加えたもの
リストのイテレータはリストのポインタと関係ないが、リストの特別版である配列のイテレータは配列のポインタと互換がある
だから、イテレータの操作とポインタの操作に互換があるというのは間違えてる
人に教える前にデータ構造について一から勉強しなおしたほうがいいのでは?
473:デフォルトの名無しさん
17/08/31 17:59:29.96 JYM1pg890.net
ポインタに限ったことではなく、イテレータでもハンドルでも
「何が」「どこにある」という情報を持つもの、という概念を説明するとき
ポインタが最も直接的な実装となっているので
具体的なアドレス値を図に書いて説明できるし
復習するにも実測値でその図を書いてみることができるし
デバッガでも関係性を追ってみることが出来る
++で何をどう増やしているのか、比較とはどういうことかも
実測値から直感しやすい
そして、それで憶えたことがvectorのイテレータでならとりあえず通用する
そこからlistだとかistream_iteratorだとかへと差分学習で進めば楽だし
algorithmもポインタさえ知ってればとりあえず使えて
そこからまた差分学習でイテレータで使う場合を憶えれば楽という経験則
何か間違っているかね?
474:デフォルトの名無しさん
17/08/31 18
475::04:14.09 ID:JYM1pg890.net
476:はちみつ餃子
17/08/31 18:05:11.71 Ev17QaWq0.net
イテレータはポインタに似せたというよりは、部分的にポインタと共通のインターフェイスに抽象化されたものであって、
C にも有ったポインタという機能と新しい機能を無理なく (?) 統合するアイデアでしょ。
だから、どちらが先にありきと言えるものではないけども、
大抵の C++ 入門書だと時代的に早く出現したポインタを先に説明するのが一般的だと思うし、
初心者がその流れに沿わない学習をしているのだとしたら
体系的に学ぼうとせず場当たり的に調べてるんじゃないのと疑うって話じゃないかな。
前提がちゃんと出来上がってない人の質問にきちんと答えるのは無理だよ。
だからこれとこれを先にやった方がいいよっていうのは誠実な回答だよ。
477:デフォルトの名無しさん
17/08/31 18:10:20.20 8V5/tdJ10.net
>>459
マジでアスペか
実用上どのように使うかって話をしてるのに、聞いてもいないのに一人で勝手に賢いイテレータの定義の話をしている
お前は>>412と>>419と>>422を100回読んでから入門サイトでどんな説明をしてるか見てこい
俺はその上で質問者のやろうとしていることは、ポインタを操作することと同じなのでまずポインタを理解してくれと言っている
478:デフォルトの名無しさん
17/08/31 18:24:58.66 JYM1pg890.net
>>462
は? イテレータは少なくとも1993年以後にできたもので
ポインタはBにもあったもので、どちらが先にありきは明白だ
イテレータの設計にあたりポインタを意識しなかったなんて珍説を唱えるには膨大な説明がいると思うが
おまえやってみるか?
479:デフォルトの名無しさん
17/08/31 19:01:39.56 JYM1pg890.net
33e4-p7enの主張が二転三転していて何が言いたいのかわからん
480:デフォルトの名無しさん
17/08/31 19:05:47.57 Him+FUnNM.net
std::optionalもアクセス構文が同じだから、使うにはポインタの知識が必要なのかな
481:デフォルトの名無しさん
17/08/31 19:07:29.54 +APqOuiHM.net
>>463
必要なのは配列とインデックスと有効範囲だけだろ。ポインタを説明する必要は無い。
482:デフォルトの名無しさん
17/08/31 19:17:27.06 8V5/tdJ10.net
>>467
使うために必要かどうかではない
ポインタはC++を使う上で知ってて当たり前
ID:95r+Hm0D0 みたいに添字しかわかんねえと言われたらお前はそれよりもポインタからだとなる
483:デフォルトの名無しさん
17/08/31 19:20:33.91 JJLmvwvW0.net
もうやめてくんない?
誰もイテレータの成り立ちなんて興味ないのよ
484:デフォルトの名無しさん
17/08/31 19:20:55.53 Ce9FMcgb0.net
好きな順で覚えればいいよ
485:デフォルトの名無しさん
17/08/31 19:27:09.07 +APqOuiHM.net
初心者に配列管理を説明するのにわざわざポインタ持ち出すな、つうてんの。そういう事言ってるから老害なんだよ。
range-based forを説明した方がよっぽど有益だわ。
486:デフォルトの名無しさん
17/08/31 19:33:38.32 N6KLaE+9M.net
>>460
もちろんvectorを例にイテレータとポインタをまとめて教えるのは一つの手段として有りだと思うよ
ただ、何度も書いてる通りポインタとイテレータは独立した概念だから、その差分学習は論理必然じゃない
現に、俺は学部時代に授業でプログラム習ったときは、vectorのような連続領域じゃなくlistのような抽象リストで習ってるし
ポインタはCの授業で、アドレスの抽象として習ってるし、イテレータはデザパタの本で知ったからね
どの学び方がいいかは人それぞれなんだろうけど、独立した概念を一緒だよとか変な方便使うのは間違ってると思うよ
487:デフォルトの名無しさん
17/08/31 19:34:33.87 N6KLaE+9M.net
>>471
まぁ今ならコレだな
488:デフォルトの名無しさん
17/08/31 19:47:11.97 oD4Vxh+n
489:M.net
490:デフォルトの名無しさん
17/08/31 19:58:01.09 8V5/tdJ10.net
>>471
この意見はさすがに論外だわ
ポインタは難しいものでもややこしいものでもないから、ちゃんとした読み物があれば問題なく理解できる
難しいなら後回しにしてもいいならわかるが、最初から教えないというのは学習の機会を奪っているとさえいえる
491:デフォルトの名無しさん
17/08/31 20:02:22.38 4TB5IpyN0.net
>>443
はげどう
>>444
言語選ぼうよ;;
>>445
イテレータはポインタの概念を引きずってゐる
プログラムの動作を簡明に表すという意味では
配列の構文さえあれば十分なのに、
※ 個人の感想です
492:デフォルトの名無しさん
17/08/31 20:04:46.13 Ce9FMcgb0.net
老害が多いな
ソフトをやるならアセンブラからとか言いそうな勢い
493:デフォルトの名無しさん
17/08/31 20:08:55.54 4TB5IpyN0.net
尤も、C++の配列とか要素型であるクラスの継承とか多態性を表現しきらん欠陥品ではあるのだが
(インターフェースの配列はポインタの配列としてやるしかない;;
それゆえにやっぱC++で入門するなら中身知っとけと、
494:デフォルトの名無しさん
17/08/31 20:10:07.84 Y1zUatWId.net
>>475
あなたに教えを請う人がいれば、あなたが教えたいように教えたらいい
495:デフォルトの名無しさん
17/08/31 20:11:27.89 g5ZfiDra0.net
>>478
STLはテンプレートライブラリだから、動的なポリモーフィズムにガッツリ対応してないのは当然だし、
そーいうのがほしけりゃ自分で書けばいいだけ
496:デフォルトの名無しさん
17/08/31 20:17:41.92 4TB5IpyN0.net
>>480
左様動的なポリモーフィズムにガッツリ対応したコンテナクラスのテンプレートを
曲がりなりにもかけるようになってからがC++の入門編
抽象化された上位レイヤーの知識だけあれば詳細は知らなくて良い、というのは
漏れのない抽象化が達成された後のみ通用する話だが
ずんねんながらC++はそうではないし言語の性格上っ今後とも永遠にそうはならない
497:デフォルトの名無しさん
17/08/31 20:25:29.52 SvYtbMXE0.net
>>471
その有益というrange-based forを説明してくれよ。
498:デフォルトの名無しさん
17/08/31 21:08:08.63 iFrEf/VH0.net
>>482
そこは流石にググれよ
499:デフォルトの名無しさん
17/08/31 21:11:56.48 DEelFUhW0.net
このなげぇクソはいつ終わるんだ
500:デフォルトの名無しさん
17/08/31 21:32:29.56 SvYtbMXE0.net
>>483
悪いが馬鹿老害は黙っててくれないか。
若い人がせっかく説明したほうが有益だと言ってくれてるのだから。他の人も賛同してくれてる。
501:デフォルトの名無しさん
17/08/31 22:00:17.40 Tmpts49Ar.net
期待を裏切らない>>474
502:デフォルトの名無しさん
17/08/31 22:12:11.60 Ce9FMcgb0.net
みんな、ちゃんとアセンブラから勉強しろよwww
503:はちみつ餃子
17/08/31 23:18:28.91 Ev17QaWq0.net
>>464
いや、もちろん意識してるだろ。
そう書いたつもりだけど、どこをどう読んだんだ?
504:デフォルトの名無しさん
17/08/31 23:19:12.52 JYM1pg890.net
>>471
おまえさ、じゃあ配列の添字は何だと思っているわけ?
「どこにある」という情報をもつもの、という点で同じだぞ
だから for(i = first ; i != last; ++i) において first や last や i が
整数であろうがポインタであろうがイテレータであろうが
同じ論理が通用するんだろうがよ
ポインタで範囲外アクセスこくような大馬鹿者が
整数ならそんなことないとでもぬかすのか?
505:デフォルトの名無しさん
17/08/31 23:24:55.90 JYM1pg890.net
>>472
おまえC++やCよりも前に何かやってただろ
俺だってC++をCより先に憶えたクチで
そんな真似ができたのはアセンブラ使いだったからな
間接の概念をまっさらから憶えるのに
イテレータは無駄に難しいマゾプレーだつってんだ
ポインタわかっててもハンドルで悩むやついるくらいで
それに輪を掛けて++まであるのがイテレータであって
506:デフォルトの名無しさん
17/08/31 23:27:04.06 JYM1pg890.net
>>4
507:88 悪かったよ そのようで
508:デフォルトの名無しさん
17/08/31 23:32:03.77 SvYtbMXE0.net
>>471
まだ説明してないのか。説明頼むよ。キミが言い出したことなんだよ。
509:デフォルトの名無しさん
17/08/31 23:40:32.47 y40vazij0.net
(void*以外の)ポインタ自体も生のアドレス概念からは抽象化されている。
指されるオブジェクトの型やサイズを持っているんだからね。
それをさらに(ある方向に)抽象化したものがイテレータなんであって、そのように段階を追って
抽象化されていくストーリーを語るのは初心者向けにも有意義だと考える。
510:はちみつ餃子
17/08/31 23:59:46.91 Ev17QaWq0.net
イテレータに限らないけど抽象化されたものは抽象化されたままで扱わないと抽象化した意味がなくて、
(内部の実装を意識しなきゃならないのなら抽象化の甲斐が無い。)
一方では、その抽象化を作る側になることもあるので抽象化が出来上がるまでは抽象化の内側も知ってなきゃいけない。
つまり、層を積み重ねるたびに抽象化の壁を作っていくってのがプログラムを構成する基本的なやり方だろう。
だから、プリミティブな方から積み重ねながらその抽象化が意味するところを学ぶってのは普通の方法だと思う。
そういう意味で >>493 に賛成。
抽象化の内側を知ってしまった人が抽象化の壁の向こうを忘れて抽象化されたものとしてだけ
扱うってのはそれなりにセンスがいるんじゃないかとも思うんだけど、
C/C++ の背景にあるセマンティクスは良くも悪くも機械の理屈なんで、
どうあがいても高級アセンブラだと割り切って泥臭いポインタの側から学ぶのがいいと私は思うよ。
その泥臭いところを頑張って隠してるのが C++ ってもんなんで、
泥臭いところを知ったら C++ の色んな機能が「あー、こういうの欲しかったわー」ってなってありがたみを感じる。
511:デフォルトの名無しさん
17/09/01 00:30:44.48 oWX+X4Ay0.net
ストラウストラップが言うにはC++は
低レイヤーにアクセスできる機能とオーバーヘッドが無く使いやすいように隠蔽できる機能を持っている言語というようなことを言っていて
低レイヤーの部分を知らなくていいとは言っていない
512:デフォルトの名無しさん
17/09/01 01:02:22.22 E+DzN2Xf0.net
アセンブラの代替言語なのだから当たり前だ。用途もOSやドライバ、マイコン向けばかりだ。
COBOL、FortranやPerl、C#やJavaの代わりに使う人などいない。
低層を隠蔽する機能などお呼びではない。
513:デフォルトの名無しさん
17/09/01 02:01:03.59 2msaHTP30.net
いやCOBOLの代わりには使うぞ
Fortranの代わりつーとCな客はいたねえ
514:デフォルトの名無しさん
17/09/02 16:34:51.42 Vkplowcj0.net
URLリンク(opencv.jp)
ここのソースコードをコピペしてコンパイルしようとしたのですが
関数 `cv::Mat::release()' 内:
test.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x47): `cv::Mat::deallocate()' に対する定義されていない参照です
collect2: error: ld returned 1 exit status
このようなエラー文が出てしまいます
使っているOSはdebian stretchです
/usr/include/opencv2には必要なファイルはありました
どのようにコンパイルすればいいのでしょうか