C++相談室 part131 at TECH
[2ch|▼Menu]
[前50を表示]
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には必要なファイルはありました
どのようにコンパイルすればいいのでしょうか

515:デフォルトの名無しさん
17/09/02 16:50:32.70 8FAKxNXu0.net
環境依存すれってなくなったの?

516:片山博文MZ
17/09/02 16:53:40.92 bEjlZdoBd.net
>>498
ライブラリをリンクする。

517:片山博文MZ
17/09/02 17:01:02.17 bEjlZdoBd.net
>>500
【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]2ch.net
スレリンク(tech板)

518:デフォルトの名無しさん
17/09/02 17:02:35.03 8FAKxNXu0.net
ないすー。

519:デフォルトの名無しさん
17/09/02 17:03:12.44 Vkplowcj0.net
>>501
すみませんでした
こっちで質問してみます

520:デフォルトの名無しさん
17/09/02 18:03:57.34 qkqtxzLpd.net
c++に限った話じゃないんだけど参考書
とかだとメソッドの後にフィールドが
書かれてる事が多いようだけど、それが
一般的なの?

521:デフォルトの名無しさん
17/09/02 18:45:42.87 qDvIb2f40.net
ちがう
一般的にはフィールドたるメンバ変数の方が先に来る
学習の都合で、メンバ変数を先に説明した方が、どう考えてもラク
メンバ関数を先に説明すると、入門書を読むレベルの初心者は間違いなく混乱するので、そんな参考書はまず見かけない
そもそもメソッドの中で使う変数は始めに宣言しておかないと使えない
結論としてはあなたが用語の取り違えをしてる……としか

522:デフォルトの名無しさん
17/09/02 19:04:41.89 4lafg32N0.net
クラスのレイアウトの話じゃなくて?

523:デフォルトの名無しさん
17/09/02 19:23:47.80 FGRVT/X40.net
レイアウト、というとデータの並び順の意味にとられかねず語弊がある

524:デフォルトの名無しさん
17/09/02 19:28:16.32 4lafg32N0.net
じゃあ宣言の順序

525:デフォルトの名無しさん
17/09/02 19:57:46.29 l0rE+2Xa0.net
public、protected、privateの順に書いていくと
自然と変数はpublic関数の次に来るわ

526:デフォルトの名無しさん
17/09/02 21:02:43.47 EU1kDRi00.net
普通アクセス修飾子の順じゃなくてフィールド→メソッドの順じゃないの
カプセル化するから変数なんてほとんどprivateだろうし
変数は変数でまとめて書いてもらわないと混乱する

527:デフォルトの名無しさん
17/09/02 21:08:20.92 Wuw432Mc0.net
ユーザーにとって重要な項目から順に書く
つまり、public→protected→privateで
ユーザーに見せる必要のないprivateは一番下で

528:デフォルトの名無しさん
17/09/02 21:13:48.77 FGRVT/X40.net
変数の宣言と関数の宣言の順序がどうでも良いのは自明
メンバ関数の定義がメンバ関数内で使用するメンバ変数の宣言に先行する場合も実験する限り合法
(規格に具体的にどういう文言で規定してあるのかは知らん
まあ定義時点で不完全な型やら値やらはテンプレートの定義で頻出するから
あんま定義と宣言の順序にこだわらない処理系の作りなのだと納得しておく
しかしなぜかテンプレートの引数でない型の定義(または宣言)と使用には厳格な順序を求められる…
次のコードはビルドが通らない
class Baz {
// struct Bar; // 左のコメントアウトを外したら逝ける
 void foo(Bar& b);
 struct Bar { int x, y; }
};
多分Cとの互換性のために仕様がワケワカメになった例

529:デフォルトの名無しさん
17/09/02 21:17:46.72 RAQSA3Kg0.net
ルールが存在してwell documentedで、ガバナンスがきいていることが重要
お前らのオレオレ哲学なんかどうでもいい

530:デフォルトの名無しさん
17/09/02 21:19:59.11 EU1kDRi00.net
ああそっか、プロトタイプ宣言しなきゃいけないんだっけC++は
C#の脳で考えてたわ

531:デフォルトの名無しさん
17/09/02 21:51:57.26 MiX3UcgLr.net
>変数の宣言と関数の宣言の順序がどうでも良いのは自明
自明かねぇ
C++11は問題になる例が思いつかないがC++98,03,14はどうでも良くない

532:デフォルトの名無しさん
17/09/02 22:01:20.86 VLpwNclp0.net
コンストラクタ実行時のメンバ変数の初期化の実行順が、初期化子の記述順ではなくクラス定義での並び順に従うっていうのがあった気がするけど、新しい規格では変わったんだっけ?

533:デフォルトの名無しさん
17/09/02 22:10:24.95 pFkNGMyF0.net
>>516
うそーん、初期化子の記述順>クラス定義の並び順だと思ってた。
てか、宣言の並び順は無関係?
そら、警察官も道行く江添さんに聞きたくもなるわw

534:デフォルトの名無しさん
17/09/02 22:21:28.04 MiX3UcgLr.net
>>516
微妙な表現以外、特に変わったという話は聞いたことがない
C++03 12.6.2/5
Then, nonstatic data members shall be initialized in the order they were declared in the class definition (again regardless of the order of the mem-initializers).
C++20 draft 15.6.2/(13.3)
Then, non-static data members are initialized in the order they were declared in the class definition (again regardless of the order of the mem-initializers).

535:デフォルトの名無しさん
17/09/02 22:37:32.53 i6uhqYA10.net
>C++11は問題になる例が思いつかないがC++98,03,14はどうでも良くない
とか書いてるから何か制約が無くなるような変更があったのかと思って聞いたんでない?

536:デフォルトの名無しさん
17/09/02 22:39:43.42 FGRVT/X40.net
ちな漏れがどうでもよい(どんな順序でも問題ない)と言ったのは
変数の宣言と関数の宣言の順序(どちらを先にするか)だからな
これ豆な

537:デフォルトの名無しさん
17/09/02 23:00:05.29 MiX3UcgLr.net
C++11でもこれがあったか
struct A {
 int m;
 decltype(m) /*←mは先に宣言が必要*/ f() { return m; /*←mは後でもいい*/ }
};
C++11で緩和されたのは11章のどっか(忘れた)

538:デフォルトの名無しさん
17/09/03 15:24:44.62 5WRYI1ZX0.net
static メンバ関数と friend 関数の使い分けについて教えてください
どちらも似た機能だと思ってしまうのですが‥

539:はちみつ餃子
17/09/03 15:42:16.65 XXf7E2cS0.net
あ〜、そんなこと考えたことなかったけど、クラス (メンバ関数) 内部から見たら近いっちゃ近いのかも?
クラスを定義する側じゃなくてそのクラスを使う側の気持ちで考えて。

540:デフォルトの名無しさん
17/09/03 15:47:48.54 5WRYI1ZX0.net
friend 関数は public で,static メンバ関数は private で,て感じでこの前は書きました
普通はどうするものかをお聞きしたいところです

541:はちみつ餃子
17/09/03 15:55:23.63 XXf7E2cS0.net
すまんけど自明すぎてどう使い分けるとか説明できない。
使い分け以前にそもそも理解できているか怪しいと思う。

542:デフォルトの名無しさん
17/09/03 16:12:00.06 5WRYI1ZX0.net
何度も宣伝するようで気が引けますが,前に書いたのは >>158
演算子のオーバーロードに絡むものは基本 friend で,内輪で使うものは private の static メンバ関数で,
くらいの線引きをしています.
書いてみてわかったのは「自明」という感じはしないこと,かな,考えてみれば friend 関数って他の言語にはなさそうです

543:デフォルトの名無しさん
17/09/03 16:48:05.14 jXGwZqzU0.net
何で? operatorはグローバルに出さなくても多重定義候補に挙がるぞ
俺は別の理由でoperatorをグローバルにする傾向があるが

544:
17/09/03 17:05:16.51 5WRYI1ZX0.net
>>527
URLリンク(codepad.org)
ほー,これは不思議だなあ‥
friend をはずすとコンパイルできない
friend をつけてしまうと public に置こうが private に置こうが関係ない,という認識であっていますか?

545:デフォルトの名無しさん
17/09/03 17:23:08.48 jXGwZqzU0.net
何が不思議?
friendを外すとメンバoperator+に過剰な仮引数となりエラー
friendは「メンバではない」のでアクセス指定は無関係
1点だけ気になるのが、friendは当該クラス自体と同じスコープに新しい識別子を導入しないはず・・・
識別子はoperator+で、これのみは某か標準のヘッダで既に宣言されているということか?

546:
17/09/03 17:29:26.39 5WRYI1ZX0.net
>>529
>operator+に過剰な仮引数となりエラー
つまり operator+ の >>528 とは違うもう一つの呼び出し書式にしないといけないわけですね.
でもこの場合は private に置くとコンパイルできない
URLリンク(codepad.org)
friend はアクセス制御如何にかかわらず「強引にpublic にする」ように見えますね‥わからない‥

547:片山博文MZ
17/09/03 17:31:44.96 zmbOaeS6d.net
friendなら、その人のプライベートにアクセスできる。それだけの意味。

548:片山博文MZ
17/09/03 17:33:29.06 zmbOaeS6d.net
ある人のfriendなら、その人のプライベートにアクセスできる。

549:デフォルトの名無しさん
17/09/03 17:36:12.98 5WRYI1ZX0.net
>>531
>>522 をどうかよろしくお願いいたします.

550:デフォルトの名無しさん
17/09/03 17:39:19.97 jXGwZqzU0.net
>>530
強引にpublic・・・で憶えやすいならそれでいいんじゃね?
ちな俺の憶え方はメンバでないものをどうやってprivateにするんだ、だ

551:片山博文MZ
17/09/03 17:40:51.54 zmbOaeS6d.net
あるクラスX内部のstaticでpublicな関数fは、Xのインスタンスの存在に関係なくX::fという名前でアクセスできる。
あるクラスX内部のfriendな関数gは、X内部のプライベートなメンバーm_aにアクセスできる。

552:デフォルトの名無しさん
17/09/03 17:42:36.39 5WRYI1ZX0.net
>>534
確かに friend 関数は「メンバーじゃない」ですか‥main() と同じような普通の関数なわけですね‥

553:デフォルトの名無しさん
17/09/03 19:02:31.58 jXGwZqzU0.net
friendは他のクラスのメンバかも知れない
そういうときも俺の憶え方なら動揺せずに済む

554:デフォルトの名無しさん
17/09/03 19:05:08.53 /S0gLPFy0.net
メンバ関数より、メンバでもfriendでもない関数を使おう
って誰かが言ってた

555:デフォルトの名無しさん
17/09/03 19:11:23.65 jXGwZqzU0.net
欲しい機能がメンバでない関数で使えないとなれば
それはクラスの設計ミスないしはダサい設計だかんな
クラックできちまうのと違う提供すべき機能の欠落

556:デフォルトの名無しさん
17/09/03 19:52:56.95 yMO/rU630.net
またクズが暴れてるのか・・・

557:デフォルトの名無しさん
17/09/03 19:55:19.54 eN0Ud7+B0.net
>>530
(1) friendが無い場合
「z = x + y;」に出くわしたコンパイラは
 1. インスタンスxに対しするC::operator+(y)(1引数)の呼び出し
 2. グローバルな関数C operator+(C const& a, C const& b)(およびその亜種)の呼び出し
のあてはめを順次試みるがどちらの関数も宣言が存在しないからあてはまるものが無くエラーになる
(2) friendがある場合
friendがつくことでoperator+()はCのメンバ関数ではなく、グローバルな関数として宣言されたことになる
このとき「z = x + y;」に出くわしたコンパイラは、上の1、2の順で当てはめを試み、
グローバルな関数C operator+(C const& a, C const& b)の呼び出しと解釈する。
本来この関数はクラスCのprivateメンバにアクセスできないが、friendの力でそれができ、めでたくビルドできて動く。
細かい話は規格の人がフォローして☆ホスイ

558:デフォルトの名無しさん
17/09/03 21:08:24.75 Kvjfvtnar.net
>(2) friendがある場合
最も近い(内側の)名前空間の関数になる(11.3/6-7)
friend関数がメンバーではないことがC++14に明記されていなかったようで、C++17ドラフトに追記された模様(N4659 12.2/2)
<おまけ>
宣言の場所がクラス内という事情により、リンカーはともかくコンパイラーから存在が見えにくい関数となる
この関数を使うには
・名前空間スコープで明示的に宣言し直す
 C operator+(C const& a, C const& b);
・ADL(argument dependent lookup)でクラススコープの検索を発動させる
 >>541でoperator+が呼び出せているのはADLによる

559:デフォルトの名無しさん
17/09/03 21:36:42.85 Kvjfvtnar.net
つまりクラスの外で定義された関数をイメージすればいい
struct A { friend void operator+(A,A) {/**/} };
 ↓
struct A { friend void operator+(A,A); };
void operator+(A,A) { /**/ } // ただしADLが無いと見えない

560:デフォルトの名無しさん
17/09/03 21:38:57.90 ipvja13x0.net
ドット拡張とかすればいいのにね
int static_value.fanction() = 0; // function専用
vid functionx.function(char*p){} // function専用
ファイル内スコープなんて今時ほとんど使わないから無視するか識別子重なったら同一と見做すかして
ついでにドット型はファイル内の前方参照も無くし宣言を省けるようにするとかさ

561:
17/09/04 01:15:45.54 rnM3x3Xp0.net
>>541
>friendがつくことでoperator+()はCのメンバ関数ではなく、グローバルな関数として宣言された
なるほど,そんなところだろうと >>528 で考えておりました.
件のライブラリもどきでは,operatorX のみクラス外に公開できればいいので,friend 関数で公開しておりました
その他は(基本的に)(公開すらしたくなかったため)static メンバ関数でのprivate 宣言となりました.
そうしたいようにそう書けばいいのですが今一つ統一感を見えてなかったかもしれません.
>>540
すみません

562:デフォルトの名無しさん
17/09/04 06:46:46.49 bUZLYHBF0.net
>>522
static関数とfriendは全然違うし似てるとこなんてない

563:デフォルトの名無しさん
17/09/04 08:11:17.30 6a+3L2fAd.net
>>546
みなさんこれが典型的ななんの役にも立たない回答の好例です

564:デフォルトの名無しさん
17/09/04 08:13:10.29 t0m5bmxTM.net
煽ることしかできない奴乙

565:デフォルトの名無しさん
17/09/04 08:17:12.97 MR3pz7f3d.net
>>546
共通点はある

566:
17/09/04 08:28:42.00 CIc3tQw70.net
>>546
static 関数をpublic に置くか,friend 関数にするかの判断がよくわからないのです.
なにか指針があればうれしいのですが

567:デフォルトの名無しさん
17/09/04 08:37:44.08 MR3pz7f3d.net
呼ぶときにクラス名を書きたいか書きたくないかで判断
コンパイルした結果には大した差はない

568:デフォルトの名無しさん
17/09/04 08:51:25.02 EfQNUMljd.net
staticだとADLに引っ掛からないとか?

569:デフォルトの名無しさん
17/09/04 09:10:00.24 s4lmvNao0.net
クラスの外の関数とオーバーロードさせたければfriend
URLリンク(ideone.com)

570:デフォルトの名無しさん
17/09/04 10:13:49.53 roJHcSrip.net
なんでこんなどうでもいいことで30も消費してんの

571:デフォルトの名無しさん
17/09/04 10:38:52.68 Ly8n+qhB0.net
staticはメンバを触れない。friendは触れる。
それくらいしか違いないけどなぁ。
俺、フレンド関数はほとんど書いたことない。

572:デフォルトの名無しさん
17/09/04 10:42:45.81 EfQNUMljd.net
>>555


573:デフォルトの名無しさん
17/09/04 10:44:19.85 Ly8n+qhB0.net
違ったっけ。
staticってthisもってないんじゃなかった?

574:デフォルトの名無しさん
17/09/04 11:03:17.00 Ly8n+qhB0.net
URLリンク(ideone.com)
勘違いやったわ。ごめんなさい。
一個勉強になった。

575:デフォルトの名無しさん
17/09/04 11:51:31.64 ByDgWFhHM.net
メンバ変数をprotectedにする人ってなんなの?露出狂なの?

576:デフォルトの名無しさん
17/09/04 11:55:13.79 EfQNUMljd.net
そういう人が日本に一人二人いるかも知れないけど、気にするだけ損だよ

577:デフォルトの名無しさん
17/09/04 12:17:47.72 Ly8n+qhB0.net
継承しても触れるようにするためだけど。継承自体がほとんどない。

578:デフォルトの名無しさん
17/09/04 12:51:51.83 bUZLYHBF0.net
>>558
勘違いというのが勘違い

579:デフォルトの名無しさん
17/09/04 12:57:07.34 KIEUzmnzM.net
クラス内に定義されたstatic関数は、そのクラスのオブジェクトが存在しなくても使える関数ってのが本来の意味。
動的なオブジェクト状態には依存せず、静的なクラス構造のみに依存するからstaticね。
対してfriendは、自分をさらけ出す人を指定するめのもの。
stream のから呼び出されるオペレーターを定義する時には、既に完成している stream (だけ)に対して自オペレーターをさらけ出してしまうのがいろいろな意味で最も効率的。
以上から、friend関数は、静的ポリモーフィズムを関数レベルでお手軽に実現したいときに使うと思っている。

580:デフォルトの名無しさん
17/09/04 13:03:46.35 bUZLYHBF0.net
表層的に言うと
staticはグローバル関数をクラススコープにして、かつアクセス制御も効くようにしたもの
friendは>>531の通り
ただそれだけのこと

581:デフォルトの名無しさん
17/09/04 13:05:20.90 ByDgWFhHM.net
>>561
なんで素っ裸でコートきてんの?露出狂なの?って聞かれて
コート脱いだらちんこ見えるようにする為だよって答


582:えてんのと同じだぞ まったく…露出狂は社会に出ちゃいけない存在なんだから、もう二度とプログラミングするんじゃないぞ



583:デフォルトの名無しさん
17/09/04 13:05:58.55 ws3TkDjE0.net
仕様がグダグダですな。

584:デフォルトの名無しさん
17/09/04 15:31:51.46 xMNR7APW0.net
>>565
うまい事言うなあ
friendは「なんで俺にだけ素っ裸見せんの?露出狂なの?」と聞かれて
「だってお前友達じゃん。だからお前にだけ俺の裸見せてやんよ」と言ってるわけだしな」

585:デフォルトの名無しさん
17/09/04 16:26:06.19 pd3pCmCq0.net
あれだろ
日本語のガールフレンドと
英語のgirl friendじゃ意味が違うというアレ

586:デフォルトの名無しさん
17/09/04 16:40:24.27 Ly8n+qhB0.net
>>565
あんたに決められる筋合いはねー。災いあれ。

587:デフォルトの名無しさん
17/09/04 16:58:13.05 EfQNUMljd.net
friendはクラスの役割を適当に分担しながら実装の隠蔽を図るのにはまあ妥当な仕組みだろうな

588:デフォルトの名無しさん
17/09/04 17:07:07.44 pd3pCmCq0.net
継承をほとんど使わないってどんな分野だろう
俺んとこではポートを叩くときのプロトコルが
似ているようで少しずつ違うなんての普通にあるし

589:デフォルトの名無しさん
17/09/04 17:13:32.82 MR3pz7f3d.net
複数のクラスのfriendが可能
staticは1個だけ

590:デフォルトの名無しさん
17/09/04 17:15:33.44 EfQNUMljd.net
ダックタイピングじゃね?

591:デフォルトの名無しさん
17/09/04 18:52:24.45 s+p5aXGeM.net
>>567
親しき仲にも礼儀あり。
アクセサぐらい用意するよね。

592:デフォルトの名無しさん
17/09/04 19:06:46.17 CIc3tQw70.net
>>565
>もう二度とプログラミングするんじゃないぞ
わかりました,もう止めます‥

593:デフォルトの名無しさん
17/09/04 19:28:25.71 EfQNUMljd.net
C++のfriendが現実世界の友達と違うのは、最初に決めたやつ以外にfriendを増やすことは全く好ましくない、
という点だろう

594:デフォルトの名無しさん
17/09/04 19:58:54.95 ByDgWFhHM.net
>>569
publicにしてあるほうが、まだかわいげがあるよ
もう、これからはすべてpublicにしなさい

595:デフォルトの名無しさん
17/09/04 23:34:49.89 jzRaTvEE0.net
friendじゃなくfamilyが良かった気がする

596:デフォルトの名無しさん
17/09/04 23:45:07.31 pd3pCmCq0.net
そうだね、ニュアンス的にはそっちだ

597:デフォルトの名無しさん
17/09/05 10:50:00.46 D99g/mXF0.net
>>578
#define family friend
で行ける?

598:デフォルトの名無しさん
17/09/05 12:19:42.29 FAzSlJ+ld.net
#define amigo friend

599:デフォルトの名無しさん
17/09/05 12:30:05.08 eN2J5TsS0.net
#define brother friend

600:デフォルトの名無しさん
17/09/05 13:50:03.50 MHv2cVQ40.net
printf("We are the World."); ←わかる
cout << "We are the World" <<endl; ←わからない
printfは「関数」だからわかります。
coutの<<はシフト?よくわからないです。
なぜC++はこんな文字の出力のさせ方にしたんでしょうか?関数じゃダメだったんですか?

601:デフォルトの名無しさん
17/09/05 13:54:25.72 5+GcycqS0.net
方法が増えただけ
以前どおり関数でも大丈夫だよ

602:デフォルトの名無しさん
17/09/05 14:03:50.06 CTfci4Vl0.net
>>583
<<は演算子オーバーロードだけどcoutなんて使う必要ないよprintfでOK


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

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