C++相談室 part131 ..
[2ch|▼Menu]
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
ポインタではループ書けませんって
なんかつき合う気失せるぐらい初心者やね
いやアンタが悪い訳じゃないんやが


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

559日前に更新/267 KB
担当:undef