1 名前:デフォルトの名無しさん (ワッチョイ 3b96-ov1m) mailto:sage [2017/07/29(土) 11:28:28.97 ID:o30VDF4g0.net] 次スレを立てる時は本文の1行目に以下を追加して下さい !extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part130 mevius.2ch.net/test/read.cgi/tech/1490917669/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 echo.2ch.net/test/read.cgi/tech/1478440682/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) - VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
413 名前:デフォルトの名無しさん mailto:sage [2017/08/28(月) 20:55:31.76 ID:GiFa6ZsP0.net] 3E AF
414 名前:デフォルトの名無しさん [2017/08/28(月) 22:22:13.51 ID:Na7nyTMka.net] そう言えば64bitアセンブラ勉強してた時ウェブで64bitレジスタでxor rax raxってするより、64bitプログラムでもxor eax eaxってした方が機械語短いって書いてたな。 アセンブラ上は同じ長さだけど、機械語上は64bit命令の方が長い&32bitレジスタへの操作は自動的に64bitレジスタの上位bitがゼロクリアされるから同じ動きになるとかなんとか。 キャッシュに入るコードが増えるから速くもなるらしい。
415 名前:デフォルトの名無しさん mailto:sage [2017/08/28(月) 22:33:21.77 ID:Wq6HqE7w0.net] intel公式のドキュメントに書いてあるレベルだから 普通のコンパイラは当然そういうコードを吐くと思うよ
416 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 00:27:36.33 ID:AHYNkT+D0.net] OpenMPIを用いたプロセス並列コードのプロファイルを取りたいんですが、 gprofだとテンプレートがごちゃごちゃしててすごく見にくいです。 何か勧めなフリーのプロファイラはないでしょうか?
417 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 01:49:03.35 ID:skpcufF70.net] 座標を動的配列で格納していき、 (50,50),(100,100) //直線1の座標 (30,30),(70,70) //直線2の座標 ↑こんな感じに直線の数だけ座標の組み合わせが増えます。 この上から2個の座標の組み合わせ、 つまり座標4点を使い交点を計算するプログラムを作ろうとしています。 計算式を作っていく際にfor文を使っているのですが 1つ目の座標の組み合わせと2つ目の座標の組み合わせを計算式内で使うので 二重ループがいいかと思い作ろうとしましたが動的配列での二重ループの作り方が分かりません。 助けて頂けないでしょうか…。 長々と申し訳ありません。
418 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 02:17:37.67 ID:On05DpTS0.net] >>396 void* p = &p; ↑こういうのは受け入れないといけない一方で >382 を NG とするための境目を ちゃんと定めてコンパイラ実装するのはめんどくさそうだなと思う。 頻繁に踏む問題でも無くてコンパイラ実装者がそこに注力する動機も薄そうだし。
419 名前:デフォルトの名無しさん [2017/08/29(火) 02:27:26.09 ID:KA5Uf3Ix0.net] >>397 む、なるほど… 確かに未定義であれば、コンパイルエラーにしなくとも文句は言えませんね。 >>408 !!!なるほど!!! 実用性はさておき、その例文で納得してしまった。
420 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 02:33:36.21 ID:vHDkbJz50.net] >>407 動的配列だと何が問題あるの? 何につまずいているのかよくわからんなあ 例えばキューで実装するとか 直線をひとつづつプッシュ、 描
421 名前:諠^イミングで直線を必要数ポップし交点を描画 [] [ここ壊れてます]
422 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 22:17:26.88 ID:R/tQJHqT0.net] Iteratorで2重ループするやり方がわからな いとか?
423 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 00:38:16.23 ID: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 mailto:sage [2017/08/30(水) 01:26:58.11 ID:KDhhphrhd.net] it->begin(), it->end()
425 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 01:55:32.89 ID:0ZIBVCLk0.net] 基礎の基礎が判ってないってパターンか
426 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 02:05:27.07 ID:J1aJRQDA0.net] >>412 まず通常のループは書けるの? たとえばx2は4固定でいいのでループを記述してみたら?
427 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 05:26:39.94 ID:27CMeyKU0.net] >>412 https://ideone.com/CfQxRE
428 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 06:45:43.57 ID:3iEZIBUv0.net] >>413 itがイテレータならおかしいな
429 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 07:05:47.51 ID:0ZIBVCLk0.net] いてれたのいてれた
430 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 08:57:17.67 ID:95r+Hm0D0.net] >>415 通常のループも、二重ループもあらかじめ用意した配列でなら書けます 動的配列になるとiteratorの使い方が分からずプログラムが動かなくなってしまうのですが笑 >>416 ありがとうございます使ってみます!
431 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 09:07:19.16 ID:Nr6Jv4Sva.net] >>419 つまり分からないのはイテレータのループそのもので、二重ループは関係ないということかな?
432 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 09:12:14.51 ID:y1raZQAZ0.net] perlのfor my $elem (@array){をやるのに何年懸ったんだろうといつも思う
433 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 09:13:52.07 ID:95r+Hm0D0.net] >>420 そんなかんじですね たとえば、x[i+1]をiteratorのループではどう表現するのかとかそういうのが分からないとかです
434 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 10:44:38.77 ID:VpX1ZCKl0.net] イテレータは繰り返しを前提としているので基本的に進むと戻るの操作しか提供しない。ランダムアクセスっていうのもなくはないけどね。 it++で前進、it--で後退。操作して、Container.begin()と同じ値なら先頭を、Continer.end()と同じ値になったらそのコンテナの末端を指している。 基本的にはポインタを抽象化したものだからポインタの操作を思い出すと少しわかりが早い。
435 名前:デフォルトの名無しさん [2017/08/30(水) 12:11:28.40 ID:NGfIYJwv0.net] >>422 君には早いのでまずはポインタでぐぐってくれ x[i + 1] == *(x + i + 1)
436 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 12:24:58.79 ID:PTG1CRxV0.net] ポインタではループ書けませんって なんかつき合う気失せるぐらい初心者やね いやアンタが悪い訳じゃないんやが
437 名前:デフォルトの名無しさん [2017/08/30(水) 12:35:06.14 ID:BJd10UjW0.net] >>419 それ、end()が何を返しているかとか、 連続領域でないのにポインタを返しているとか そういう系の問題じゃね? あと「イテレータのループ」というのが range-based-forだったりすると x[i+1]はそもそも無理だぞ
438 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 13:45:30.49 ID:95r+Hm0D0.net] みなさんありがとうございます! もっと勉強して出直してきます
439 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 20:58:46.39 ID:UeWdSpDY0.net] Cとjavaの基礎やったから基本の文法とオブジェクト指向の触りみたいな部分だけわかるんだけどこの状態でテンプレートとかの勉強初めていいの? あそこらへん急に難しくなるイメージあるけど他に先にやるべきこととかあります? あとそういう人におぬぬめの本とかもしあったら教えてくだされ
440 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 21:26:25.83 ID:
] [ここ壊れてます]
441 名前:it2NMgLA0.net mailto: >>428 まずテンプレートライブラリの使用方法を重点的に 自分でテンプレートを書くのは後回しにしたほうがよい [] [ここ壊れてます]
442 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 22:54:34.30 ID:T8zS0A0mr.net] >x[i + 1] == *(x + i + 1) はて、いったい何の言語の話だろうか
443 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 23:02:57.29 ID:lE/piHRT0.net] 突っ込みたいことがあるならはっきり指摘すれば?
444 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 02:07:06.34 ID:Ce9FMcgb0.net] >>424 ポインタを意識させないのがイテレターだろうに >>430 左辺と右辺が同じだって事が言いたいんだろうけど... 上に書いた理由でトンチンカンと言わざるを得ない
445 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 02:08:47.68 ID:Ce9FMcgb0.net] >>422 it_next = it; it_next ++; とか
446 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 02:11:16.28 ID:JJLmvwvW0.net] >>432 意味がわからない もう少しわかりやすく頼む 出来ないならもう発言しなくて良いから
447 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 02:40:29.14 ID:ZosLKwRR0.net] なぜにイテレータでやろうとするのか valarray使えばこんなの即効だろ
448 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 05:33:17.64 ID:5oi4R35S0.net] あのー、このスレに限らずどこもなんだけどさ、 初心者をケナスくせは、やめた方が良いよ。 ちょっと知ってる者の傾向だね。 ちょっと自分が物事を知ってるから、 「自分らが、上だ。と、知らない者をけなす癖」が多大に有るよね。 本当に知ってる者は、初心者にもやさしく教えてあげるよ。
449 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 05:41:23.80 ID:xNENwSVur.net] >>432 >左辺と右辺が同じ 少なくともここはC++のスレで、C++では同じでないのだが何を言ってるんだお前は
450 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 06:49:36.91 ID:L0jWKquXM.net] 知らない者を貶す気はないけど知ったかの頓珍漢な指摘は全力でバカにする
451 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 06:52:13.92 ID:8V5/tdJ10.net] また規格に自信ある奴が日本語読めてないな 日本語の文脈を理解できるようになってから発言してくれ
452 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 07:01:04.95 ID:Ce9FMcgb0.net] >>437 C++でいつでも同じかなんてことはどうでも良い レス自体トンチンカンなんだから
453 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 09:29:52.97 ID:F7+XKf5b0.net] はっきり指摘できないのなら謙虚に発言した方がいい
454 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 10:24:10.68 ID:DHTk7O50d.net] 全くその通りだよね ポインタ滅ぶべしとか思ってるのかも知れないけど、初心者はまずイテレータを理解してその後 ポインタを学べば良いなんてプロセスは効果的とは限らないし、個人的には無理があると思う。
455 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 10:46:40.85 ID:8V5/tdJ10.net] C++使ってて初心者は隠蔽された中身を理解しなくていいとか本気で思ってる奴いるのかよ それにイテレータはポインタのような操作ができるインターフェイスなのでポインタを理解してることは前提となっている
456 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 12:26:30.87 ID:+APqOuiHM.net] 逆だよ。初心者は隠蔽された中身を理解しなくていい範囲と使うべき。 初心者に教えるときも注意しなきゃいかん。
457 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 12:41:58.03 ID:aPsP1NJ+d.net] >>443 イテレターを使う上で、ポインタを知らないと何が問題?
458 名前:デフォルトの名無しさん [2017/08/31(木) 12:45:17.10 ID:JYM1pg890.net] 「あたかもポインタのように振る舞うオブジェクト」を使うにあたって そもそもポインタを知らないことの何が問題か本気でわからないのか?
459 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 14:20:58.17 ID:+APqOuiHM.net] イテレーターのコンセプト、理解してる? ポインタのように振る舞う、じゃないよ。
460 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 14:38:31.89 ID:BoCBvGLq0.net] イテレーションすることを目的にしてるけど、 ポインタもイテレータの機能を持ってるからポインタを想像するとわかりやすいっていうのはある。
461 名前:デフォルトの名無しさん [2017/08/31(木) 15:09:44.78 ID:JYM1pg890.net] >>447 どっかから引用したわけじゃないんで そういうフレーズにはなってないだろうなあ ポインタの使い方に
462 名前:、イテレータの使い方を似せてあるのは 誰の目にも明らかなんだが、おまえだけ違うのか? 重箱の隅でない説明がもしできるなら拝聴したいぜ [] [ここ壊れてます]
463 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 15:25:08.02 ID:8V5/tdJ10.net] ポインタに似せるというコンセプトではないので、ポインタと同じ構文で操作できてもポインタとは何の関係もありませ〜んwwww そんな話してねえだろコミュ障か?
464 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 16:21:10.10 ID:N6KLaE+9M.net] イテレータの使い方がポインタの使い方に似せてある…? もしかして、イテレータの意味わかってないんじゃないか??
465 名前:デフォルトの名無しさん [2017/08/31(木) 16:22:24.21 ID:JYM1pg890.net] あ、ふじこったw そのザマ見て気が済んだ
466 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 16:48:47.10 ID:8V5/tdJ10.net] >>451 はいはい イテレータはポインタの操作方法と互換性がある ただし静的配列やvectorで使われているランダムアクセスイテレータはすべての操作をサポートしているが、それ以外ではサポートしていない操作もあるので注意 とまで補足を入れたらいいんだろ 配列の話をしていたはずなのにアスペはすぐ話の腰折るから困る
467 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 16:53:43.88 ID:DHTk7O50d.net] むしろ初心者ほど中身を知りたがるもの。 イテレータなんて実装が隠蔽されてるわけじゃなし、知った上で抽象化したらこうなるってのが妥当な方向だ。 コンパイラがやる最適化等とは別の話だ。
468 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 16:55:03.46 ID:DHTk7O50d.net] だいたいポインタの理解なんて義務教育レベルだしな。
469 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 16:55:37.94 ID:+APqOuiHM.net] >>450 初心者に教える、つう前提を無視するなよ。アホか? なんで初心者にイテレーター教えるのにポインタが必要なんだよ。説明してみろ。
470 名前:デフォルトの名無しさん [2017/08/31(木) 17:03:23.95 ID:JYM1pg890.net] さあねえ 俺はポインタを知らんやつにイテレータを教えたことがない それを馬鹿にしたければするがいい じゃあ、あんたはどうやって教えたのか、こっちが聞きたい
471 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 17:29:30.90 ID:8V5/tdJ10.net] >>456 その場でイテレータを使うだけなら必要ないが、それでは何故か動くおまじないになるだけ マンツーマンじゃあるまいし基礎を理解していない者に教えるのは疲れるし両者にとって不毛だ 複雑な実装のイテレータを理解しろともコンピュータの仕組みを理解しろとも言ってないし キーワードだけ見つけて何がなんだか分からない助けてくれと言う前に簡単な基礎からやれという指摘はおかしいか?
472 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 17:43:42.94 ID:N6KLaE+9M.net] >>453 ちがうちがう イテレータっていうのは繰り返しの抽象化だから、ランダムアクセスだのなんだのってのはおまけ ポインタっていうのはアドレスに少し機能を付け加えたもの リストのイテレータはリストのポインタと関係ないが、リストの特別版である配列のイテレータは配列のポインタと互換がある だから、イテレータの操作とポインタの操作に互換があるというのは間違えてる 人に教える前にデータ構造について一から勉強しなおしたほうがいいのでは?
473 名前:デフォルトの名無しさん [2017/08/31(木) 17:59:29.96 ID:JYM1pg890.net] ポインタに限ったことではなく、イテレータでもハンドルでも 「何が」「どこにある」という情報を持つもの、という概念を説明するとき ポインタが最も直接的な実装となっているので 具体的なアドレス値を図に書いて説明できるし 復習するにも実測値でその図を書いてみることができるし デバッガでも関係性を追ってみることが出来る ++で何をどう増やしているのか、比較とはどういうことかも 実測値から直感しやすい そして、それで憶えたことがvectorのイテレータでならとりあえず通用する そこからlistだとかistream_iteratorだとかへと差分学習で進めば楽だし algorithmもポインタさえ知ってればとりあえず使えて そこからまた差分学習でイテレータで使う場合を憶えれば楽という経験則 何か間違っているかね?
474 名前:デフォルトの名無しさん [2017/08/31(木) 18
] [ここ壊れてます]
475 名前::04:14.09 ID:JYM1pg890.net mailto: 誰かさんみたいに、ちがうちがうと自分の繊細さに酔うやつが 学習者の思考を丹念に潰しやる気を削いでいく有害な騒音源となる 語学の先生にもいるだろ? [] [ここ壊れてます]
476 名前:はちみつ餃子 mailto:sage [2017/08/31(木) 18:05:11.71 ID:Ev17QaWq0.net] イテレータはポインタに似せたというよりは、部分的にポインタと共通のインターフェイスに抽象化されたものであって、 C にも有ったポインタという機能と新しい機能を無理なく (?) 統合するアイデアでしょ。 だから、どちらが先にありきと言えるものではないけども、 大抵の C++ 入門書だと時代的に早く出現したポインタを先に説明するのが一般的だと思うし、 初心者がその流れに沿わない学習をしているのだとしたら 体系的に学ぼうとせず場当たり的に調べてるんじゃないのと疑うって話じゃないかな。 前提がちゃんと出来上がってない人の質問にきちんと答えるのは無理だよ。 だからこれとこれを先にやった方がいいよっていうのは誠実な回答だよ。
477 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 18:10:20.20 ID:8V5/tdJ10.net] >>459 マジでアスペか 実用上どのように使うかって話をしてるのに、聞いてもいないのに一人で勝手に賢いイテレータの定義の話をしている お前は>>412 と>>419 と>>422 を100回読んでから入門サイトでどんな説明をしてるか見てこい 俺はその上で質問者のやろうとしていることは、ポインタを操作することと同じなのでまずポインタを理解してくれと言っている
478 名前:デフォルトの名無しさん [2017/08/31(木) 18:24:58.66 ID:JYM1pg890.net] >>462 は? イテレータは少なくとも1993年以後にできたもので ポインタはBにもあったもので、どちらが先にありきは明白だ イテレータの設計にあたりポインタを意識しなかったなんて珍説を唱えるには膨大な説明がいると思うが おまえやってみるか?
479 名前:デフォルトの名無しさん [2017/08/31(木) 19:01:39.56 ID:JYM1pg890.net] 33e4-p7enの主張が二転三転していて何が言いたいのかわからん
480 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 19:05:47.57 ID:Him+FUnNM.net] std::optionalもアクセス構文が同じだから、使うにはポインタの知識が必要なのかな
481 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 19:07:29.54 ID:+APqOuiHM.net] >>463 必要なのは配列とインデックスと有効範囲だけだろ。ポインタを説明する必要は無い。
482 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 19:17:27.06 ID:8V5/tdJ10.net] >>467 使うために必要かどうかではない ポインタはC++を使う上で知ってて当たり前 ID:95r+Hm0D0 みたいに添字しかわかんねえと言われたらお前はそれよりもポインタからだとなる
483 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 19:20:33.91 ID:JJLmvwvW0.net] もうやめてくんない? 誰もイテレータの成り立ちなんて興味ないのよ
484 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 19:20:55.53 ID:Ce9FMcgb0.net] 好きな順で覚えればいいよ
485 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 19:27:09.07 ID:+APqOuiHM.net] 初心者に配列管理を説明するのにわざわざポインタ持ち出すな、つうてんの。そういう事言ってるから老害なんだよ。 range-based forを説明した方がよっぽど有益だわ。
486 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 19:33:38.32 ID:N6KLaE+9M.net] >>460 もちろんvectorを例にイテレータとポインタをまとめて教えるのは一つの手段として有りだと思うよ ただ、何度も書いてる通りポインタとイテレータは独立した概念だから、その差分学習は論理必然じゃない 現に、俺は学部時代に授業でプログラム習ったときは、vectorのような連続領域じゃなくlistのような抽象リストで習ってるし ポインタはCの授業で、アドレスの抽象として習ってるし、イテレータはデザパタの本で知ったからね どの学び方がいいかは人それぞれなんだろうけど、独立した概念を一緒だよとか変な方便使うのは間違ってると思うよ
487 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 19:34:33.87 ID:N6KLaE+9M.net] >>471 まぁ今ならコレだな
488 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 19:47:11.97 ID:oD4Vxh+n
] [ここ壊れてます]
489 名前:M.net mailto: >>471 に一票 [] [ここ壊れてます]
490 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 19:58:01.09 ID:8V5/tdJ10.net] >>471 この意見はさすがに論外だわ ポインタは難しいものでもややこしいものでもないから、ちゃんとした読み物があれば問題なく理解できる 難しいなら後回しにしてもいいならわかるが、最初から教えないというのは学習の機会を奪っているとさえいえる
491 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 20:02:22.38 ID:4TB5IpyN0.net] >>443 はげどう >>444 言語選ぼうよ;; >>445 イテレータはポインタの概念を引きずってゐる プログラムの動作を簡明に表すという意味では 配列の構文さえあれば十分なのに、 ※ 個人の感想です
492 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 20:04:46.13 ID:Ce9FMcgb0.net] 老害が多いな ソフトをやるならアセンブラからとか言いそうな勢い
493 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 20:08:55.54 ID:4TB5IpyN0.net] 尤も、C++の配列とか要素型であるクラスの継承とか多態性を表現しきらん欠陥品ではあるのだが (インターフェースの配列はポインタの配列としてやるしかない;; それゆえにやっぱC++で入門するなら中身知っとけと、
494 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 20:10:07.84 ID:Y1zUatWId.net] >>475 あなたに教えを請う人がいれば、あなたが教えたいように教えたらいい
495 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 20:11:27.89 ID:g5ZfiDra0.net] >>478 STLはテンプレートライブラリだから、動的なポリモーフィズムにガッツリ対応してないのは当然だし、 そーいうのがほしけりゃ自分で書けばいいだけ
496 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 20:17:41.92 ID:4TB5IpyN0.net] >>480 左様動的なポリモーフィズムにガッツリ対応したコンテナクラスのテンプレートを 曲がりなりにもかけるようになってからがC++の入門編 抽象化された上位レイヤーの知識だけあれば詳細は知らなくて良い、というのは 漏れのない抽象化が達成された後のみ通用する話だが ずんねんながらC++はそうではないし言語の性格上っ今後とも永遠にそうはならない
497 名前:デフォルトの名無しさん [2017/08/31(木) 20:25:29.52 ID:SvYtbMXE0.net] >>471 その有益というrange-based forを説明してくれよ。
498 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 21:08:08.63 ID:iFrEf/VH0.net] >>482 そこは流石にググれよ
499 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 21:11:56.48 ID:DEelFUhW0.net] このなげぇクソはいつ終わるんだ
500 名前:デフォルトの名無しさん [2017/08/31(木) 21:32:29.56 ID:SvYtbMXE0.net] >>483 悪いが馬鹿老害は黙っててくれないか。 若い人がせっかく説明したほうが有益だと言ってくれてるのだから。他の人も賛同してくれてる。
501 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 22:00:17.40 ID:Tmpts49Ar.net] 期待を裏切らない>>474
502 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 22:12:11.60 ID:Ce9FMcgb0.net] みんな、ちゃんとアセンブラから勉強しろよwww
503 名前:はちみつ餃子 mailto:sage [2017/08/31(木) 23:18:28.91 ID:Ev17QaWq0.net] >>464 いや、もちろん意識してるだろ。 そう書いたつもりだけど、どこをどう読んだんだ?
504 名前:デフォルトの名無しさん [2017/08/31(木) 23:19:12.52 ID:JYM1pg890.net] >>471 おまえさ、じゃあ配列の添字は何だと思っているわけ? 「どこにある」という情報をもつもの、という点で同じだぞ だから for(i = first ; i != last; ++i) において first や last や i が 整数であろうがポインタであろうがイテレータであろうが 同じ論理が通用するんだろうがよ ポインタで範囲外アクセスこくような大馬鹿者が 整数ならそんなことないとでもぬかすのか?
505 名前:デフォルトの名無しさん [2017/08/31(木) 23:24:55.90 ID:JYM1pg890.net] >>472 おまえC++やCよりも前に何かやってただろ 俺だってC++をCより先に憶えたクチで そんな真似ができたのはアセンブラ使いだったからな 間接の概念をまっさらから憶えるのに イテレータは無駄に難しいマゾプレーだつってんだ ポインタわかっててもハンドルで悩むやついるくらいで それに輪を掛けて++まであるのがイテレータであって
506 名前:デフォルトの名無しさん [2017/08/31(木) 23:27:04.06 ID:JYM1pg890.net] >>4
507 名前:88 悪かったよ そのようで [] [ここ壊れてます]
508 名前:デフォルトの名無しさん [2017/08/31(木) 23:32:03.77 ID:SvYtbMXE0.net] >>471 まだ説明してないのか。説明頼むよ。キミが言い出したことなんだよ。
509 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 23:40:32.47 ID:y40vazij0.net] (void*以外の)ポインタ自体も生のアドレス概念からは抽象化されている。 指されるオブジェクトの型やサイズを持っているんだからね。 それをさらに(ある方向に)抽象化したものがイテレータなんであって、そのように段階を追って 抽象化されていくストーリーを語るのは初心者向けにも有意義だと考える。
510 名前:はちみつ餃子 mailto:sage [2017/08/31(木) 23:59:46.91 ID:Ev17QaWq0.net] イテレータに限らないけど抽象化されたものは抽象化されたままで扱わないと抽象化した意味がなくて、 (内部の実装を意識しなきゃならないのなら抽象化の甲斐が無い。) 一方では、その抽象化を作る側になることもあるので抽象化が出来上がるまでは抽象化の内側も知ってなきゃいけない。 つまり、層を積み重ねるたびに抽象化の壁を作っていくってのがプログラムを構成する基本的なやり方だろう。 だから、プリミティブな方から積み重ねながらその抽象化が意味するところを学ぶってのは普通の方法だと思う。 そういう意味で >>493 に賛成。 抽象化の内側を知ってしまった人が抽象化の壁の向こうを忘れて抽象化されたものとしてだけ 扱うってのはそれなりにセンスがいるんじゃないかとも思うんだけど、 C/C++ の背景にあるセマンティクスは良くも悪くも機械の理屈なんで、 どうあがいても高級アセンブラだと割り切って泥臭いポインタの側から学ぶのがいいと私は思うよ。 その泥臭いところを頑張って隠してるのが C++ ってもんなんで、 泥臭いところを知ったら C++ の色んな機能が「あー、こういうの欲しかったわー」ってなってありがたみを感じる。
511 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 00:30:44.48 ID:oWX+X4Ay0.net] ストラウストラップが言うにはC++は 低レイヤーにアクセスできる機能とオーバーヘッドが無く使いやすいように隠蔽できる機能を持っている言語というようなことを言っていて 低レイヤーの部分を知らなくていいとは言っていない
512 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 01:02:22.22 ID:E+DzN2Xf0.net] アセンブラの代替言語なのだから当たり前だ。用途もOSやドライバ、マイコン向けばかりだ。 COBOL、FortranやPerl、C#やJavaの代わりに使う人などいない。 低層を隠蔽する機能などお呼びではない。
513 名前:デフォルトの名無しさん [2017/09/01(金) 02:01:03.59 ID:2msaHTP30.net] いやCOBOLの代わりには使うぞ Fortranの代わりつーとCな客はいたねえ
514 名前:デフォルトの名無しさん [2017/09/02(土) 16:34:51.42 ID:Vkplowcj0.net] opencv.jp/cookbook/opencv_img.html#image-resize ここのソースコードをコピペしてコンパイルしようとしたのですが 関数 `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 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 16:50:32.70 ID:8FAKxNXu0.net] 環境依存すれってなくなったの?
516 名前:片山博文MZ mailto:sage [2017/09/02(土) 16:53:40.92 ID:bEjlZdoBd.net] >>498 ライブラリをリンクする。
517 名前:片山博文MZ mailto:sage [2017/09/02(土) 17:01:02.17 ID:bEjlZdoBd.net] >>500 【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]2ch.net mevius.2ch.net/test/read.cgi/tech/1500329247/
518 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 17:02:35.03 ID:8FAKxNXu0.net] ないすー。
519 名前:デフォルトの名無しさん [2017/09/02(土) 17:03:12.44 ID:Vkplowcj0.net] >>501 すみませんでした こっちで質問してみます
520 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 18:03:57.34 ID:qkqtxzLpd.net] c++に限った話じゃないんだけど参考書 とかだとメソッドの後にフィールドが 書かれてる事が多いようだけど、それが 一般的なの?
521 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 18:45:42.87 ID:qDvIb2f40.net] ちがう 一般的にはフィールドたるメンバ変数の方が先に来る 学習の都合で、メンバ変数を先に説明した方が、どう考えてもラク メンバ関数を先に説明すると、入門書を読むレベルの初心者は間違いなく混乱するので、そんな参考書はまず見かけない そもそもメソッドの中で使う変数は始めに宣言しておかないと使えない 結論としてはあなたが用語の取り違えをしてる……としか
522 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 19:04:41.89 ID:4lafg32N0.net] クラスのレイアウトの話じゃなくて?
523 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 19:23:47.80 ID:FGRVT/X40.net] レイアウト、というとデータの並び順の意味にとられかねず語弊がある
524 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 19:28:16.32 ID:4lafg32N0.net] じゃあ宣言の順序
525 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 19:57:46.29 ID:l0rE+2Xa0.net] public、protected、privateの順に書いていくと 自然と変数はpublic関数の次に来るわ
526 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 21:02:43.47 ID:EU1kDRi00.net] 普通アクセス修飾子の順じゃなくてフィールド→メソッドの順じゃないの カプセル化するから変数なんてほとんどprivateだろうし 変数は変数でまとめて書いてもらわないと混乱する
527 名前:デフォルトの名無しさん [2017/09/02(土) 21:08:20.92 ID:Wuw432Mc0.net] ユーザーにとって重要な項目から順に書く つまり、public→protected→privateで ユーザーに見せる必要のないprivateは一番下で
528 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 21:13:48.77 ID:FGRVT/X40.net] 変数の宣言と関数の宣言の順序がどうでも良いのは自明 メンバ関数の定義がメンバ関数内で使用するメンバ変数の宣言に先行する場合も実験する限り合法 (規格に具体的にどういう文言で規定してあるのかは知らん まあ定義時点で不完全な型やら値やらはテンプレートの定義で頻出するから あんま定義と宣言の順序にこだわらない処理系の作りなのだと納得しておく しかしなぜかテンプレートの引数でない型の定義(または宣言)と使用には厳格な順序を求められる… 次のコードはビルドが通らない class Baz { // struct Bar; // 左のコメントアウトを外したら逝ける void foo(Bar& b); struct Bar { int x, y; } }; 多分Cとの互換性のために仕様がワケワカメになった例
529 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 21:17:46.72 ID:RAQSA3Kg0.net] ルールが存在してwell documentedで、ガバナンスがきいていることが重要 お前らのオレオレ哲学なんかどうでもいい
530 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 21:19:59.11 ID:EU1kDRi00.net] ああそっか、プロトタイプ宣言しなきゃいけないんだっけC++は C#の脳で考えてたわ
531 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 21:51:57.26 ID:MiX3UcgLr.net] >変数の宣言と関数の宣言の順序がどうでも良いのは自明 自明かねぇ C++11は問題になる例が思いつかないがC++98,03,14はどうでも良くない
532 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 22:01:20.86 ID:VLpwNclp0.net] コンストラクタ実行時のメンバ変数の初期化の実行順が、初期化子の記述順ではなくクラス定義での並び順に従うっていうのがあった気がするけど、新しい規格では変わったんだっけ?
533 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 22:10:24.95 ID:pFkNGMyF0.net] >>516 うそーん、初期化子の記述順>クラス定義の並び順だと思ってた。 てか、宣言の並び順は無関係? そら、警察官も道行く江添さんに聞きたくもなるわw
534 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 22:21:28.04 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 22:37:32.53 ID:i6uhqYA10.net] >C++11は問題になる例が思いつかないがC++98,03,14はどうでも良くない とか書いてるから何か制約が無くなるような変更があったのかと思って聞いたんでない?
536 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 22:39:43.42 ID:FGRVT/X40.net] ちな漏れがどうでもよい(どんな順序でも問題ない)と言ったのは 変数の宣言と関数の宣言の順序(どちらを先にするか)だからな これ豆な
537 名前:デフォルトの名無しさん mailto:sage [2017/09/02(土) 23:00:05.29 ID:MiX3UcgLr.net] C++11でもこれがあったか struct A { int m; decltype(m) /*←mは先に宣言が必要*/ f() { return m; /*←mは後でもいい*/ } }; C++11で緩和されたのは11章のどっか(忘れた)
538 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 15:24:44.62 ID:5WRYI1ZX0.net] static メンバ関数と friend 関数の使い分けについて教えてください どちらも似た機能だと思ってしまうのですが‥
539 名前:はちみつ餃子 mailto:sage [2017/09/03(日) 15:42:16.65 ID:XXf7E2cS0.net] あ〜、そんなこと考えたことなかったけど、クラス (メンバ関数) 内部から見たら近いっちゃ近いのかも? クラスを定義する側じゃなくてそのクラスを使う側の気持ちで考えて。
540 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 15:47:48.54 ID:5WRYI1ZX0.net] friend 関数は public で,static メンバ関数は private で,て感じでこの前は書きました 普通はどうするものかをお聞きしたいところです
541 名前:はちみつ餃子 mailto:sage [2017/09/03(日) 15:55:23.63 ID:XXf7E2cS0.net] すまんけど自明すぎてどう使い分けるとか説明できない。 使い分け以前にそもそも理解できているか怪しいと思う。
542 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 16:12:00.06 ID:5WRYI1ZX0.net] 何度も宣伝するようで気が引けますが,前に書いたのは >>158 演算子のオーバーロードに絡むものは基本 friend で,内輪で使うものは private の static メンバ関数で, くらいの線引きをしています. 書いてみてわかったのは「自明」という感じはしないこと,かな,考えてみれば friend 関数って他の言語にはなさそうです
543 名前:デフォルトの名無しさん [2017/09/03(日) 16:48:05.14 ID:jXGwZqzU0.net] 何で? operatorはグローバルに出さなくても多重定義候補に挙がるぞ 俺は別の理由でoperatorをグローバルにする傾向があるが
544 名前: mailto:sage [2017/09/03(日) 17:05:16.51 ID:5WRYI1ZX0.net] >>527 codepad.org/8Z3c2obA ほー,これは不思議だなあ‥ friend をはずすとコンパイルできない friend をつけてしまうと public に置こうが private に置こうが関係ない,という認識であっていますか?
545 名前:デフォルトの名無しさん [2017/09/03(日) 17:23:08.48 ID:jXGwZqzU0.net] 何が不思議? friendを外すとメンバoperator+に過剰な仮引数となりエラー friendは「メンバではない」のでアクセス指定は無関係 1点だけ気になるのが、friendは当該クラス自体と同じスコープに新しい識別子を導入しないはず・・・ 識別子はoperator+で、これのみは某か標準のヘッダで既に宣言されているということか?
546 名前: mailto:sage [2017/09/03(日) 17:29:26.39 ID:5WRYI1ZX0.net] >>529 >operator+に過剰な仮引数となりエラー つまり operator+ の >>528 とは違うもう一つの呼び出し書式にしないといけないわけですね. でもこの場合は private に置くとコンパイルできない codepad.org/RLo9fKuI friend はアクセス制御如何にかかわらず「強引にpublic にする」ように見えますね‥わからない‥
547 名前:片山博文MZ mailto:sage [2017/09/03(日) 17:31:44.96 ID:zmbOaeS6d.net] friendなら、その人のプライベートにアクセスできる。それだけの意味。
548 名前:片山博文MZ mailto:sage [2017/09/03(日) 17:33:29.06 ID:zmbOaeS6d.net] ある人のfriendなら、その人のプライベートにアクセスできる。
549 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 17:36:12.98 ID:5WRYI1ZX0.net] >>531 >>522 をどうかよろしくお願いいたします.
550 名前:デフォルトの名無しさん [2017/09/03(日) 17:39:19.97 ID:jXGwZqzU0.net] >>530 強引にpublic・・・で憶えやすいならそれでいいんじゃね? ちな俺の憶え方はメンバでないものをどうやってprivateにするんだ、だ
551 名前:片山博文MZ mailto:sage [2017/09/03(日) 17:40:51.54 ID:zmbOaeS6d.net] あるクラスX内部のstaticでpublicな関数fは、Xのインスタンスの存在に関係なくX::fという名前でアクセスできる。 あるクラスX内部のfriendな関数gは、X内部のプライベートなメンバーm_aにアクセスできる。
552 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 17:42:36.39 ID:5WRYI1ZX0.net] >>534 確かに friend 関数は「メンバーじゃない」ですか‥main() と同じような普通の関数なわけですね‥
553 名前:デフォルトの名無しさん [2017/09/03(日) 19:02:31.58 ID:jXGwZqzU0.net] friendは他のクラスのメンバかも知れない そういうときも俺の憶え方なら動揺せずに済む
554 名前:デフォルトの名無しさん [2017/09/03(日) 19:05:08.53 ID:/S0gLPFy0.net] メンバ関数より、メンバでもfriendでもない関数を使おう って誰かが言ってた
555 名前:デフォルトの名無しさん [2017/09/03(日) 19:11:23.65 ID:jXGwZqzU0.net] 欲しい機能がメンバでない関数で使えないとなれば それはクラスの設計ミスないしはダサい設計だかんな クラックできちまうのと違う提供すべき機能の欠落
556 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 19:52:56.95 ID:yMO/rU630.net] またクズが暴れてるのか・・・
557 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 19:55:19.54 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 21:08:24.75 ID: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 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 21:36:42.85 ID:Kvjfvtnar.net] つまりクラスの外で定義された関数をイメージすればいい struct A { friend void operator+(A,A) {/**/} }; ↓ struct A { friend void operator+(A,A); }; void operator+(A,A) { /**/ } // ただしADLが無いと見えない
560 名前:デフォルトの名無しさん [2017/09/03(日) 21:38:57.90 ID:ipvja13x0.net] ドット拡張とかすればいいのにね int static_value.fanction() = 0; // function専用 vid functionx.function(char*p){} // function専用 ファイル内スコープなんて今時ほとんど使わないから無視するか識別子重なったら同一と見做すかして ついでにドット型はファイル内の前方参照も無くし宣言を省けるようにするとかさ
561 名前: mailto:sage [2017/09/04(月) 01:15:45.54 ID:rnM3x3Xp0.net] >>541 >friendがつくことでoperator+()はCのメンバ関数ではなく、グローバルな関数として宣言された なるほど,そんなところだろうと >>528 で考えておりました. 件のライブラリもどきでは,operatorX のみクラス外に公開できればいいので,friend 関数で公開しておりました その他は(基本的に)(公開すらしたくなかったため)static メンバ関数でのprivate 宣言となりました. そうしたいようにそう書けばいいのですが今一つ統一感を見えてなかったかもしれません. >>540 すみません
562 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 06:46:46.49 ID:bUZLYHBF0.net] >>522 static関数とfriendは全然違うし似てるとこなんてない
563 名前:デフォルトの名無しさん [2017/09/04(月) 08:11:17.30 ID:6a+3L2fAd.net] >>546 みなさんこれが典型的ななんの役にも立たない回答の好例です
564 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 08:13:10.29 ID:t0m5bmxTM.net] 煽ることしかできない奴乙
565 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 08:17:12.97 ID:MR3pz7f3d.net] >>546 共通点はある
566 名前: mailto:sage [2017/09/04(月) 08:28:42.00 ID:CIc3tQw70.net] >>546 static 関数をpublic に置くか,friend 関数にするかの判断がよくわからないのです. なにか指針があればうれしいのですが
567 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 08:37:44.08 ID:MR3pz7f3d.net] 呼ぶときにクラス名を書きたいか書きたくないかで判断 コンパイルした結果には大した差はない
568 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 08:51:25.02 ID:EfQNUMljd.net] staticだとADLに引っ掛からないとか?
569 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 09:10:00.24 ID:s4lmvNao0.net] クラスの外の関数とオーバーロードさせたければfriend https://ideone.com/Bfcfbq
570 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 10:13:49.53 ID:roJHcSrip.net] なんでこんなどうでもいいことで30も消費してんの
571 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 10:38:52.68 ID:Ly8n+qhB0.net] staticはメンバを触れない。friendは触れる。 それくらいしか違いないけどなぁ。 俺、フレンド関数はほとんど書いたことない。
572 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 10:42:45.81 ID:EfQNUMljd.net] >>555 ?
573 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 10:44:19.85 ID:Ly8n+qhB0.net] 違ったっけ。 staticってthisもってないんじゃなかった?
574 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 11:03:17.00 ID:Ly8n+qhB0.net] https://ideone.com/qDEfdG 勘違いやったわ。ごめんなさい。 一個勉強になった。
575 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 11:51:31.64 ID:ByDgWFhHM.net] メンバ変数をprotectedにする人ってなんなの?露出狂なの?
576 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 11:55:13.79 ID:EfQNUMljd.net] そういう人が日本に一人二人いるかも知れないけど、気にするだけ損だよ
577 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 12:17:47.72 ID:Ly8n+qhB0.net] 継承しても触れるようにするためだけど。継承自体がほとんどない。
578 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 12:51:51.83 ID:bUZLYHBF0.net] >>558 勘違いというのが勘違い
579 名前:デフォルトの名無しさん [2017/09/04(月) 12:57:07.34 ID:KIEUzmnzM.net] クラス内に定義されたstatic関数は、そのクラスのオブジェクトが存在しなくても使える関数ってのが本来の意味。 動的なオブジェクト状態には依存せず、静的なクラス構造のみに依存するからstaticね。 対してfriendは、自分をさらけ出す人を指定するめのもの。 stream のから呼び出されるオペレーターを定義する時には、既に完成している stream (だけ)に対して自オペレーターをさらけ出してしまうのがいろいろな意味で最も効率的。 以上から、friend関数は、静的ポリモーフィズムを関数レベルでお手軽に実現したいときに使うと思っている。
580 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 13:03:46.35 ID:bUZLYHBF0.net] 表層的に言うと staticはグローバル関数をクラススコープにして、かつアクセス制御も効くようにしたもの friendは>>531 の通り ただそれだけのこと
581 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 13:05:20.90 ID:ByDgWFhHM.net] >>561 なんで素っ裸でコートきてんの?露出狂なの?って聞かれて コート脱いだらちんこ見えるようにする為だよって答
582 名前:えてんのと同じだぞ まったく…露出狂は社会に出ちゃいけない存在なんだから、もう二度とプログラミングするんじゃないぞ [] [ここ壊れてます]
583 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 13:05:58.55 ID:ws3TkDjE0.net] 仕様がグダグダですな。
584 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 15:31:51.46 ID:xMNR7APW0.net] >>565 うまい事言うなあ friendは「なんで俺にだけ素っ裸見せんの?露出狂なの?」と聞かれて 「だってお前友達じゃん。だからお前にだけ俺の裸見せてやんよ」と言ってるわけだしな」
585 名前:デフォルトの名無しさん [2017/09/04(月) 16:26:06.19 ID:pd3pCmCq0.net] あれだろ 日本語のガールフレンドと 英語のgirl friendじゃ意味が違うというアレ
586 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 16:40:24.27 ID:Ly8n+qhB0.net] >>565 あんたに決められる筋合いはねー。災いあれ。
587 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 16:58:13.05 ID:EfQNUMljd.net] friendはクラスの役割を適当に分担しながら実装の隠蔽を図るのにはまあ妥当な仕組みだろうな
588 名前:デフォルトの名無しさん [2017/09/04(月) 17:07:07.44 ID:pd3pCmCq0.net] 継承をほとんど使わないってどんな分野だろう 俺んとこではポートを叩くときのプロトコルが 似ているようで少しずつ違うなんての普通にあるし
589 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 17:13:32.82 ID:MR3pz7f3d.net] 複数のクラスのfriendが可能 staticは1個だけ
590 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 17:15:33.44 ID:EfQNUMljd.net] ダックタイピングじゃね?
591 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 18:52:24.45 ID:s+p5aXGeM.net] >>567 親しき仲にも礼儀あり。 アクセサぐらい用意するよね。
592 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 19:06:46.17 ID:CIc3tQw70.net] >>565 >もう二度とプログラミングするんじゃないぞ わかりました,もう止めます‥
593 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 19:28:25.71 ID:EfQNUMljd.net] C++のfriendが現実世界の友達と違うのは、最初に決めたやつ以外にfriendを増やすことは全く好ましくない、 という点だろう
594 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 19:58:54.95 ID:ByDgWFhHM.net] >>569 publicにしてあるほうが、まだかわいげがあるよ もう、これからはすべてpublicにしなさい
595 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 23:34:49.89 ID:jzRaTvEE0.net] friendじゃなくfamilyが良かった気がする
596 名前:デフォルトの名無しさん [2017/09/04(月) 23:45:07.31 ID:pd3pCmCq0.net] そうだね、ニュアンス的にはそっちだ
597 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 10:50:00.46 ID:D99g/mXF0.net] >>578 #define family friend で行ける?
598 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 12:19:42.29 ID:FAzSlJ+ld.net] #define amigo friend
599 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 12:30:05.08 ID:eN2J5TsS0.net] #define brother friend
600 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 13:50:03.50 ID:MHv2cVQ40.net] printf("We are the World."); ←わかる cout << "We are the World" <<endl; ←わからない printfは「関数」だからわかります。 coutの<<はシフト?よくわからないです。 なぜC++はこんな文字の出力のさせ方にしたんでしょうか?関数じゃダメだったんですか?
601 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 13:54:25.72 ID:5+GcycqS0.net] 方法が増えただけ 以前どおり関数でも大丈夫だよ
602 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 14:03:50.06 ID:CTfci4Vl0.net] >>583 <<は演算子オーバーロードだけどcoutなんて使う必要ないよprintfでOK
603 名前:デフォルトの名無しさん [2017/09/05(火) 14:04:00.15 ID:5KjI8r3d0.net] >>583 それはまさにC++の作者(以下、禿)が 彼の著書でアピールしていたことだ coutとは何か? <<とは何か? 記号と意味はどこでどのように関連付いているのか 意味は関数で表記することにしよう <<の意味を表記する関数の関数名をoperator<<としよう プログラム言語の命令とデータは動詞と目的語だ 動詞は関数と1対1対応でよいが目的語の定義は動詞の蓄積だ ・・・てな具合
604 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 17:31:12.14 ID:LcvSXQg0d.net] >>583 シフト演算子を全く別の意味に使う ひどい設計だと思う
605 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 18:16:33.48 ID:FAzSlJ+ld.net] それほどでもない
606 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 18:16:37.41 ID:deDONG/TM.net] cout.<<("We are the World"). <<(endl); があれば少しはマシだったかね。
607 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 18:45:41.20 ID:fgaIXgJY0.net] >>583 演算子のオーバーロードのよいお題ということで無理矢理ねじこんだんじゃないかな
608 名前:デフォルトの名無しさん [2017/09/05(火) 18:48:59.76 ID:Ol0Fklqi0.net] using namespace std; double value = 1.23; cout << "value = " << value << endl;
609 名前:デフォルトの名無しさん [2017/09/05(火) 19:06:29.40 ID:/x4Q9Nfh0.net] >>587 お約束を破っているが流し込んでる感が出ているので芸術点高い
610 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 19:25:16.50 ID:FAzSlJ+ld.net] +-*/と違って<< がシフト演算子なんて決まってないから「本来と違う」なんて意味なさない
611 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 19:34:59.61 ID:TUBHCjnbM.net] vectorオブジェクトが破棄されるとき、要素の解放順は要素順であることは保証されていますか?
612 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 19:39:42.84 ID:DJL8TJyoM.net] >>594 されてない
613 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 19:39:47.76 ID:LcvSXQg0d.net] >>593 いや決まってる ライブラリを抜きにした純粋な言語ではシフトの意味しかない 元の言語のC言語も同じ * の方がいろいろな意味で使われている
614 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 19:42:00.05 ID:FAzSlJ+ld.net] >>596 べつにc/c++の話じゃなく、一般に<<をIOの意味で使ってもなんとも思わんでしょ +-*/はさすがに刷り込まれている
615 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 20:04:52.50 ID:Xvi9WQb30.net] 数学の演算子とプログラム言語の演算子のことじゃないかな。 + - は数学とプログラム言語で一致 * / は数学と違うけど文字セットに乗除の記号がないし妥当な代用 << をシフトに使うのはC系プログラム言語の独特の使い方 だったら << が出力になってもええじゃないか、という話。
616 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 20:10:04.82 ID:CG6xGPaC0.net] 向きは違うけどbashみたいなイメージだと思ってた
617 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 20:10:32.88 ID:gdvLxkwI0.net] お前がそう思うんならそうなんだろうお前ん中ではな
618 名前:片山博文MZ mailto:sage [2017/09/05(火) 20:11:08.83 ID:HWiXORhGd.net] 数学では、比較してずっと小さい、ずっと大きいという意味で<<、>>を使うことがあるみたいだが。
619 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 20:11:12.82 ID:TUBHCjnbM.net] >>595 ありがとうございます 保証するにはどうすればいいですか? ググってstackoverflowとか見たんですが、できないという人もいたり clear()を使えという人もいてよくわかりません
620 名前:デフォルトの名無しさん [2017/09/05(火) 20:17:36.79 ID:5KjI8r3d0.net] 禿が言い出した<<と おまいらが言い出す<<では 悪いが社会への影響度がまるで違う 大勢のPGが<<はI/Oだと素直に従うかどうかでだ 新しい言語に旧来の言語と似た記号が出てきたからって 同じ意味でなければならないという法はどこにもない
621 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 20:19:03.84 ID:D99g/mXF0.net] >>602 なんで順番が気になるんだ?
622 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 20:21:01.51 ID:eN2J5TsS0.net] ローテート命令が演算子化されてないのは何故なんだぜ?
623 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 20:58:17.14 ID:TUBHCjnbM.net] 自己解決しました >>604 必要な場面がありまして
624 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 21:12:58.72 ID:Eko3GwfuM.net] printfをモダンにアレンジして新規格作ればいいのに。
625 名前:デフォルトの名無しさん [2017/09/05(火) 21:50:59.32 ID:5KjI8r3d0.net] >>605 それな 俺も
626 名前:時々欲しくなるんだけど キャリーを含む/含まないとかCHAR_BITの違いとかで 移植性が確保しにくそうだよな 記号を何にするかなんて後から決めりゃいいことだ [] [ここ壊れてます]
627 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 22:29:35.14 ID:NIuXE25q0.net] >>605 ローテートなんて頻繁に使うものじゃないから ビットが立ってる数を数えるとか、 ビットが立ってる位置を調べるとか、 バイト単位の並び替えとか、 小数から整数へ四捨五入とか、 他にいくらでも足したいものはある
628 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 22:54:34.26 ID:DO26xGrR0.net] 誰がこんなクソ言語つくったんだよ 作者はたぶんバチが当たって禿げてるはず
629 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 23:01:40.29 ID:nPfvfHCk0.net] だいたい最初にアスタリスクを乗算演算子にした奴は誰だよ。
630 名前:デフォルトの名無しさん [2017/09/05(火) 23:58:08.13 ID:5KjI8r3d0.net] ジョンバッカスだろ
631 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 23:58:19.96 ID:qAaUk7C50.net] operator:=とかoperator!?とか定義できるようにしてくれたら お前らが度肝を抜くような使い方して見せるのに、残念でならない。
632 名前:デフォルトの名無しさん [2017/09/06(水) 00:21:11.51 ID:eLdBXtqw0.net] operator?:ならマジで提案してみそ あわよくば大手柄だぞ
633 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 00:25:00.50 ID:VYubvLfh0.net] >>613 コンパイルエラーになろうが、ソース書くだけなら現状でもできるだろうから、度肝を抜いてくださいな。
634 名前:デフォルトの名無しさん [2017/09/06(水) 00:47:00.85 ID:eLdBXtqw0.net] 613なりのcxxfrontでも作ればいい
635 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 06:39:00.29 ID:lz1Lh31S0.net] >>611 あなたならどれにする?
636 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 06:40:33.11 ID:lz1Lh31S0.net] 同じかどうかの比較が = ではないのが欠陥
637 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 07:17:47.41 ID:xbyXQy+0M.net] >>615 なんか面白いこと言おうとしてるの?
638 名前:デフォルトの名無しさん [2017/09/06(水) 08:45:25.92 ID:6GspjXt70.net] >>618 BASICのように=の意味が文脈で変わるべきだと?
639 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 08:49:59.58 ID:/Hhi3W4sd.net] いや、代入を別の記号に それこそ := でも
640 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 08:50:33.96 ID:ZK3Q9QYA0.net] いやっすいやっす!代入に2タイプも使うのいやっす!
641 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 08:51:14.26 ID:DE0YQ4Kk0.net] 数学の方を現代に合わせて変えるべき
642 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 08:57:40.90 ID:zxwumig7M.net] >>623 勝手に変えたらどう? 数学はコンパイル不要だから、最初に定義さえすればお前の使いたい記号を好きなだけ使えるよ
643 名前:デフォルトの名無しさん [2017/09/06(水) 09:44:12.68 ID:f82uiC9X0.net] 自民党の恐怖の言論弾圧が迫る! 売国安倍は憲法改正で国民主権と基本的人権 を奪うつもりだ。 ← 民主主義の崩壊 www.data-max.co.jp/280113_ymh_02/ ↑ マスコミは 9条しか報道しないが 自民案 の真の恐さは21条など言論の自由を奪うこと 自民案が通ると 政府批判しただけで逮捕されるぞ! https://www.youtube.com/watch?v=h9x2n5CKhn8 上のビデオで 自民党は 日本人に基本的人権 は必要ないと 異常なことを平気で言う。 xn--nyqy26a13k.jp/archives/31687 ↑ 都民ファーストも安倍と同じく 憲法改正で 人権 無視の大日本帝国憲法に戻すつもりだから 絶対に投票してはだめだ。 民主主義が崩壊する blog.goo.ne.jp/ngc2497/e/889
644 名前:9f65988fe0f35496934dc972e2489 ↑ ネトウヨ= 安倍サポーター工作員はネットで国民を騙す。 https://dot.asahi.com/aera/2016071100108.html?page=3 http://blog.goo.ne.jp/kimito39/e/c0dd73d58121b6446cf4165c96ebb674 ↑ 安倍自民を操るカルト右翼「日本会議」は国民主権否定。 国民投票や選挙では自民党、維新、小池新党に絶対に入れるな。 [] [ここ壊れてます]
645 名前:デフォルトの名無しさん [2017/09/06(水) 11:33:15.11 ID:Mqa6x7N10.net] 2003年8月の第1回から2007年3月の第6回までいずれも中国北京で計9次の会合が行なわれた 話し合いで解決しなかった 原爆、弾道ミサイルの開発にカネ、時間を与えてしまった 軍事力でつぶすしかないのに、まだこんなこといってる ,,-―--、 |:::::::::::::;;;ノ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |::::::::::( 」 < 対話で解決しよう ノノノ ヽ_l \______________ ,,-┴―┴- 、 ∩_ /,|┌-[]─┐| \ ( ノ / ヽ| | バ | '、/\ / / / `./| | カ | |\ / \ ヽ| lゝ | | \__/ \ |  ̄ ̄ ̄ | ⊂|______| |l_l i l_l | | ┬
646 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 12:26:18.39 ID:8RU3q9uiM.net] >>623 数学は、最初に定義さえすれば自由にしていいんだよ。
647 名前:デフォルトの名無しさん [2017/09/06(水) 12:36:56.86 ID:/66SkMcqd.net] 話が成り立たないアホばっかりだな
648 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 15:29:10.13 ID:fXx7GStM0.net] プログラミング勉強し始めた初心者ですが 手詰まりになったので質問させてください ttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_3_C&lang=jp この問題をやっていますが、以下のコードで「Time Limit Exceeded」となってしまいます 他の正解者のコード見てもやってることは同じな気がするのですが なにがいけないのでしょうか? C++14コード ttp://codepad.org/2Yxb33Ab
649 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 15:33:28.13 ID:I6k6pGLy0.net] 多分出力のコードが間違ってる。
650 名前:629 mailto:sage [2017/09/06(水) 15:40:37.11 ID:fXx7GStM0.net] 追記です Case#8までは「Accepted」でOKなんですが Case#9が「Time Limit Exceeded」でした Case#9は入力が2000000行もあるっぽいです でも他の人とやってること自体は同じなんだから このコードでできるはずと思い込んでしまって 何が悪いのかさっぱり検討つきません。。。
651 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 15:54:34.75 ID:I6k6pGLy0.net] 2個出力してみ?
652 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 15:55:29.34 ID:I6k6pGLy0.net] あれ?勘違いだ。
653 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 15:59:43.73 ID:I6k6pGLy0.net] Listそのものがそんなに早くないとかかなぁ。 デリートはO(1)で終わるけど、ポインタの付け替えとかあるから、雑に遅いカモね。 最近のコンピュータだと配列の方が早かったりする。
654 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 16:38:37.77 ID:I6k6pGLy0.net] もしかしたら、sstringしてるのが重いかもなぁ。 cinで取れるのに何でssteamしてるのかよくわからん。
655 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 17:25:42.27 ID:I6k6pGLy0.net] judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=2522632 これで通った。
656 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 17:28:16.47 ID:I6k6pGLy0.net] judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=2522643 すまんこれでは通らなかった。
657 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 17:33:31.55 ID:I6k6pGLy0.net] judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=2522664#1 これは通った。
658 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 17:37:32.00 ID:I6k6pGLy0.net] 適当なこと言ってすまんかった。
659 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 18:55:53.01 ID:p
] [ここ壊れてます]
660 名前:ROvgKjd0.net mailto: んぁ? [] [ここ壊れてます]
661 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 19:15:05.29 ID:fXx7GStM0.net] >>630 >>632-639 ありがとうございます! まさに>>635 だったみたいです 1行ごとに入力を読み込みたいからsstream使ってたのですが そのせいでwhileループで毎回sstreamとstringの変数を定義しているせいでした cinとstringだけで入力を読み込むようにして 変数の定義をループの外にしたらようやく自分のコードで通りました sstream使わなくてもstring変数の定義をループ内に書いたままにしてたら ずっと通らなくてそれで何時間も四苦八苦してようやくすっきりしました 変数の定義って思いの外処理時間がかかるんだなあとしみじみ実感しました わざわざコーディングまでしてくださってありがとうございました
662 名前:デフォルトの名無しさん [2017/09/06(水) 21:33:01.28 ID:6GspjXt70.net] > 変数の定義って思いの外処理時間がかかるんだなあとしみじみ実感しました ものによる テキトーこくな
663 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 21:57:51.28 ID:P+VnvHZA0.net] >>642 > ものによる string だろ 話の流れも読めないのか? > テキトーこくな 実際にやってるだろうに何を言ってるんだよ いちゃもんつけたいだけか?
664 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 22:53:02.57 ID:OHCEwHay0.net] 変数の定義って処理なのか? stringが遅いのはどの言語でも同じ。ヒープに確保してるから。 Cの特権は固定長ならスタックに文字配列を確保できること。
665 名前:デフォルトの名無しさん mailto:sage [2017/09/06(水) 23:16:43.16 ID:LeFS08p/0.net] >>644 COBOLとかFORTRANヒープの概念があるとは
666 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 00:17:30.43 ID:E8QDgFBm0.net] デフォルトだとcinがstdioと同期取ってやたら遅かったりもする罠
667 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 02:37:57.68 ID:t89SIQGa0.net] コンストラクタがやけに重いクラスとかあるんだよ、標準でも。
668 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 06:02:40.83 ID:sowmLjiv0.net] C++のstream関連は全て糞 operator<<()の多重定義で自作クラスのフォーマット文字列化(stringizing)ができる、というのがちょっと嬉しかったけど しょせんコードの見かけだけの話やし、実行速度は速いし改造もしにくい、 (printf()ならvprintf()を使って関数1個書けば良いところをstd::streambufの派生クラスを作る羽目に、、 行単位の排他とかの作り方を比べたらワカル だいたい一般に1つのクラスに対して一般に (1) 人間が読むためのフォーマット文字列化 (2) ストレージか何かへのシリアライズ (3) ストレージか何かからのデシリアライズ の3つの要求が生じるのに対してoperator<<()とoperator>>()の多重定義の2個では数が足りない だったら上記3メソッドのインターフェースを全部Cのstdioベースで実装して済ませるわ; とにかくC++の中にあってstreamはパフォーマンスよりもコードの見かけに拘ってみました感が異端
669 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 06:46:38.33 ID:9W4DbE9gM.net] >>644 > 変数の定義って処理なのか? コンストラクタって知ってるか? > stringが遅いのはどの言語でも同じ。ヒープに確保してるから。 そもそもstring型はすべての言語にないし文字列型と言う意味ならFORTRAN77のように固定領域にとる言語もある >>645 モダンなバージョンなら普通にあるでしょ Fortran ⇒ Allocate 文 Cobol もオブジェクト指向になってるぐらいだからあると思う
670 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 07:52:40.01 ID:E5YdMpMh0.net] 相談室ということで C++でディープラーニングのライブラリといったらTensor Flowとtiny dnn以外にあります?
671 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 08:09:04.47 ID:6e0QaN8o0.net] >>650 ソニーから nnabla だったかな
672 名前:デフォルトの名無しさん [2017/09/07(木) 08:40:05.33 ID:BwtgUJJf0.net] ライブラリなど不要
673 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 12:48:57.45 ID:ccNhwHbvd.net] 学習など不要
674 名前:デフォルトの名無しさん [2017/09/07(木) 12:51:16.16 ID:m/W0Vwq0M.net] >>648 おちつけ。 > 実行速度は速いし改造もしにくい、 > だいたい一般に1つのクラスに対して一般に
675 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 15:45:42.89 ID:lWzPhy/F0.net] >>649 つまりインスタンス生成を「変数の定義」って言ってるのか。分りにくいな。
676 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 16:59:31.64 ID:WeVFjmVDd.net] 宣言でなく定義ならそういうことだろう
677 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 17:17:37.39 ID:E5YdMpMh0.net] >>651 ありがとうございます 調べてまいります
678 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 23:11:06.34 ID:sowmLjiv0.net] でけた! ttp://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=2524752#1 >>654 スマンorz
679 名前:デフォルトの名無しさん mailto:sage [2017/09/08(金) 10:17:30.47 ID:28eiJ4Rm0.net] >>658 お、ちょっと早いな。
680 名前:デフォルトの名無しさん mailto:sage [2017/09/08(金) 21:05:50.39 ID:VlEBq8a5M.net] >>648 モダンな言語の多くはprintfライクだし、javaも結局追加された。 printfライクのほうが効率的なことは経験的にわかってるのだからstreamにイマドキのformat関数を追加してくれればいいのに。
681 名前:デフォルトの名無しさん mailto:sage [2017/09/08(金) 21:16:51.55 ID:EwiEYpeM0.net] もっと50 msばかり速くすた、 ttp://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=2526468#1
682 名前:デフォルトの名無しさん mailto:sage [2017/09/08(金) 22:55:01.80 ID:EwiEYpeM0.net] さらに1桁速くしたわふーん(0.65 sec → 0.06 sec) ttp://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=2526595#1 メモリ消費量も1/4未満になた、(34520 KB → 7432 KB)
683 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 14:52:21.58 ID:4g0rauvm0.net] >>662 それって双方向連結リストなの?
684 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 19:52:47.52 ID:FtyOtgZ20.net] https://ideone.com/aKaZF9 これ、なんで通らないの? 頭爆発しそう。
685 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 20:19:57.93 ID:FtyOtgZ20.net] あぁ、色々いじってたら通った。 わけわかめ。
686 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 20:23:23.69 ID:FtyOtgZ20.net] と思ったらイデオンGCCで動かねーでやんの。 https://ideone.com/oqpQ8i VC2017では動く魔法のコード。
687 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 20:39:58.02 ID:iTjZctD80.net] もちつけ https://ideone.com/czcAS9
688 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 20:47:48.75 ID:FtyOtgZ20.net] うほ。素晴らしい。 が、今度はVCで動かなくなった。 なんじゃそれ。
689 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 21:07:39.82 ID:FtyOtgZ20.net] なんか、VCもGCCも半分くらいずつ間違えてる予感。 Setだけだとストレージがないからなんかバグの予感するし。 ストレージ持たせようとすると修飾が間違ってるって言われてる感じがする。 なんだこれ。
690 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 21:15:58.82 ID:FtyOtgZ20.net] 識者求!急募だ!!
691 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 21:53:02.98 ID:FtyOtgZ20.net] https://ideone.com/mqTzb8 これで手打ち。 よくわからん回り方されたなぁ。 とほほほ・・・。
692 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 21:58:32.95 ID:FtyOtgZ20.net] 最後に。さんきゅーそー。
693 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 23:23:25.26 ID:iTjZctD80.net] VC++のバグ…ではなくいつもの標準非準拠の独自仕様の気はする https://ideone.com/10vEzK
694 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 00:32:56.15 ID:8Jhjgi9Q0.net] >>673 およ、折衷案できそうか? 自分はVC動けばいいんだけど、 コード公開するときに動かないと間抜けっぽいから良対応しようと一応やってる。 visualデバッガが便利すぎてVCやめるの大変。
695 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 00:56:23.48 ID:ldnMOHDz0.net] デバッガのフロントエンドは自作するもの
696 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 00:57:46.72 ID:9qoMDsB9r.net] 完全な解決策も規格の規定も知っているが、 再現する最小限のコードにしてから他人に見せる知能も持ち合わせていない者には時間の無駄
697 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 02:34:17.64 ID:8GGB49VK0.net] 非修飾名
698 名前:フ探索の問題だから発想を変えて明示的修飾で回避すればいいって話? https://ideone.com/YTnOF2 [] [ここ壊れてます]
699 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 06:00:54.71 ID:Jp2o0TJ00.net] templateの使い方を完全に勘違いしてやがる。
700 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 07:35:26.76 ID:8Jhjgi9Q0.net] 折衷案色々あるなぁ、感心する。 >>676 別に個人のコードでどこかに迷惑かけてるわけじゃないし、この程度のコードも読めない方が問題。 それに高慢なお方は最初から相手にしてない。マウントしてほしくてやってるんじゃないんだよ。
701 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 07:49:26.32 ID:8Jhjgi9Q0.net] https://ideone.com/Ofcm9I >>677 を採用。これで解決しました。 明示の仕方がいまいちよくわかってなかった。 大変ありがとうございました。
702 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 10:50:41.00 ID:Ch3ZHKVB0.net] プロパティー実装例か… しかしまぁクソ面倒だ罠
703 名前:はちみつ餃子 mailto:sage [2017/09/11(月) 21:22:51.45 ID:+dEH7rh50.net] auto で受けるとおかしげなことになるんちゃう?
704 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 01:44:38.63 ID:uA5S/Coo0.net] 馬鹿に触らせるなテンプレートって昔から言うしな。 フレームワークのテンプレートライブラリ提供する側だけが使っていいんだよ。
705 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 08:52:24.85 ID:n2tkiU0+0.net] テンプレートはSTLやboostのまねをしていれば下手なことにはならないはずだが
706 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 08:56:45.99 ID:aShF6cdKa.net] 真似するだけでも、それなりのスキルが必要だ
707 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 09:35:13.31 ID:M9yu8us30.net] 何故そういうコードになっているかを理解せずに猿真似して意味があるかどうかはわからんけど autoで受けるとおかしなことになるのは、キャストや代入で望む結果を得る方法(expression templateなど)全部そう 暗黙のキャストでなく関数呼び出しを強制すればautoでも大丈夫だけど
708 名前:デフォルトの名無しさん [2017/09/12(火) 10:11:33.04 ID:CGKPtYms0.net] > 馬鹿に触らせるなテンプレートって昔から言うしな。 自分が触りたくないのはわかったから
709 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 19:29:46.28 ID:mgCIj6GX0.net] >>682 コピコン切ってあるから大丈夫だと思う。あとは推論性能。
710 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 19:43:33.31 ID:8IhLGzTX0.net] コピコン
711 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 20:29:35.11 ID:mgCIj6GX0.net] コピーコンストラクタ!
712 名前:はちみつ餃子 mailto:sage [2017/09/12(火) 22:54:11.94 ID:cQiNwo4o0.net] >>688 あ、なるほど、状況を勘違いしてた。 C++17 からは RVO が使える場合は常に RVO で処理する (従来は「してもよい」というオプショナルな動作) ことと、 そのときはコピー (ムーブ) コンストラクタが無くても良いというルールが念頭にあったのだけれど、 この場合は RVO は関係なかった。 スマソ
713 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 23:35:09.46 ID:q3PtGkEdr.net] >C++17 からは RVO が使える場合は常に RVO で処理する ほうほう、それは本当ですか
714 名前:はちみつ餃子 mailto:sage [2017/09/14(木) 16:51:14.81 ID:HER/jB+d0.net] そうです。
715 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 17:39:29.28 ID:7On5vAcFr.net] >>693 だとすると https://wandbox.org/permlink/KeuEcKR5gy18bi3K この二つのアドレスは同じになるはずでは?
716 名前:デフォルトの名無しさん [2017/09/14(木) 22:59:53.42 ID:AfykdPhZ0.net] いい流れだ
717 名前:デフォルトの名無しさん [2017/09/15(金) 15:29:03.53 ID:zUPCfesd0.net] "clacla.h" class Clacla { void func1(); void func2(); void func3(); }; "clacla.cpp" //実装部 クラスClacla くくり { <-ここ void func1() { printf( "1" ); } void func2() { printf( "2" ); } void func3() { printf( "3" ); } }; のように関数の実装時にClacla::を省
718 名前:ェする方法ってあるでしょうか? [] [ここ壊れてます]
719 名前:はちみつ餃子 mailto:sage [2017/09/15(金) 15:33:45.29 ID:leF15WXE0.net] >>694 最適化が有効なら C++17 であろうがなかろうが clang なら RVO が効くはずだけど、 u.p の値は null になっちゃうな。 RVO がどうこうじゃなくて this の挙動に関するなんか変なルールが適用されてるとかかも?
720 名前:片山博文MZ mailto:sage [2017/09/15(金) 16:07:51.71 ID:RQr5TBB1d.net] >>696 クラス内部にインライン関数を埋め込む方法しかない。
721 名前:696 [2017/09/15(金) 16:35:44.21 ID:zUPCfesd0.net] >698 やっぱり無いですよね。 ありがとう。
722 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 21:02:35.06 ID:86K7wrSvr.net] >>697 いやだからISO/IEC DIS 14882:2017 15.2/p3の規定により常にRVOが働くわけではないのではないかと申しているのですよ ついでにu.pがnullptrになることはない
723 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 21:24:40.19 ID:xDlOGQNS0.net] 実にC++相談室らしい流れ
724 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 21:27:27.94 ID:5X/IRSU20.net] 右辺値参照の暗黙適用は例外の処理で不都合があるよね 元の値をTmpにコピっといて例外発生で書き戻すにしても 関数A処理内で呼び出した関数Bからの例外をAのユーザコードでは完スルーなのに コンパイラコードではコッソリ捕まえて書き戻す必要が有る そんときロックでも掛かってたらどーすんのよと 呼び出し繋がりを横断的に管理要するとんでもないコスト増なんじゃね?
725 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 21:36:23.16 ID:xDlOGQNS0.net] Tmpのアドレスを関数B(およびその先の関数)が知る可能性がコンパイラから見て排除できない限り 関数Aから関数Bを呼び出す前にTmpは元の値の完コピーにならざるおえないのでは… (そうでなければ副作用のある関数を安全にコンパイルできない&安心して書けない さらにロックに入るときと出るときは上と同じ理由で結果的に完コピーになる上に、 まともなOSならメモリバリアまで手当てしてくれるんじゃ…
726 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 21:42:30.18 ID:xDlOGQNS0.net] つまり右辺値参照の暗黙適用が効力を持つのはスゲー広範にインライン展開されるような場合 (当然いかなるOSのAPIやシステムコール類の呼び出しも含まない 「だけ」 であって、通常のプログラマーにはあんまありがたみがはっきりしない仕様 ※ 個人の感想です
727 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 22:02:45.85 ID:1aOT1P+6d.net] コンパイラに頼らないで、素直にパラメーターの参照にしよう
728 名前:はちみつ餃子 mailto:sage [2017/09/15(金) 22:04:08.03 ID:leF15WXE0.net] >>700 意図するところをあらためて説明すると、 最適化オプションを有効にする (RVO が効くはず) と実際に null になるんだから clang があてにならないのじゃない? という話。
729 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 22:08:16.65 ID:5X/IRSU20.net] いや noexcept 付きを呼ぶ場合も有難味あると思うよ C++は const祭りに noexcept祭り追加でござる 特殊化も爆発
730 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 22:34:11.14 ID:1joZngjnr.net] >>706 なるほど理解した C++11の頃に輝いたclangはその後、規格的にはG++にも劣るゴミなのでそのへんは致し方ない
731 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 11:22:55.52 ID:u7cVvkyR0.net] forward祭り
732 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 10:24:11.11 ID:lVEmBRA9d.net] tcp/ipの勉強のためにC++で何か作れば勉強になるかな?って思ってるのだけど こういうものを作れば勉強になるよってものある?? パケットの動きだったり階層の考え方だったりを学びたい
733 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 10:40:29.87 ID:U79GLBVsM.net] >>710 TCP/IPの勉強ならWireSharkの使い方覚えた方が早いかも その上のプロトコルレベルなら勉強したいプロトコルの簡単なクライアントから始めればいいと思う ちなみに俺はNetNewsに流れるむふふ画像を取り込みたかったのでnntpのクライアントをperlで組んで勉強した
734 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 11:05:46.29 ID:lVEmBRA9d.net] >>711 プロトコルレベルの勉強をしたい そうなるとhttpサーバを立てることになるのかな? そういう場合は簡単なhttpサーバとクライアントを作成すれば良いのかね? それで通信しあってwiresharkで中身を見てtcpだったりhttpだったりを見るべき?
735 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 11:39:07.40 ID:9mrqYCJU0.net] おれは一昔前、深夜ボリュームでかくする姉貴のPCが煩くてTCP通信でマスターボリューム弄るサーバー&クライアント作ってコッソリ仕込んでコントロールしてたな。 まぁ、やってやるぞというモチベーションは大事だとおもうよ。 ガンバってね。
736 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 11:41:39.15 ID:qrTqFTlir.net] >>713 それ仕込んでるとき超ワクワクしそう
737 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 11:43:19.16 ID:lVEmBRA9d.net] >>713 姉貴のパソコンにサーバプログラム常駐させる そいつがポートXXXで待ち構える 同じ家なのでネットワーク帯は同じで 自分のpcからポートXXXにメッセージ送信する 姉貴のサーバプログラムが受け取ってボリューム下げる処理をする こんなことしてたってことかね?
738 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 12:01:08.52 ID:9mrqYCJU0.net] >>715 まぁ大体そんな感じなんだが、急に音量小さくすると即効でばれるので、まず、姉貴PCの音量を取得するのが第一だな。 そこからスライダーでボリューム下げていった値をサーバーに順次送信しサーバープログラムがその値に応じて音量を徐々にフェードコントロールするといった具合だな。
739 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 12:08:20.13 ID:nt0hX0ohr.net] >>716 が>>715 の三人きょうだいの次女である可能性が否定できない
740 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 12:10:35.92 ID:lVEmBRA9d.net] >>716 いつも音量小さくなってたのはあんたのせいだったのね?? ってことはそれって通信はhttp?
741 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 12:15:30.74 ID:9mrqYCJU0.net] >>718 http関係ない ボリュームと改行の平文を繰り返し送るだけの超簡易仕様 だれでも作れる
742 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 12:57:21.32 ID:lVEmBRA9d.net] >>719 相互にsend recvしてるだけってことかな
743 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 13:48:18.24 ID:U79GLBVsM.net] >>712 サーバーよりクライアントの方が簡単だからサーバーは適当な奴持ってきて簡単なクライアントを作るところから始めればいいと思う
744 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 14:27:41.23 ID:lVEmBRA9d.net] >>721 IISサーバとかってことかな? あの辺の使い方も基本は同じよね? ポート指定して使うみたいな
745 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 15:08:42.19 ID:eqWC6Q8G0.net] >>722 > IISサーバとかってことかな? 環境ならWindows IISが簡単だろうね ネットでググれば情報たくさんあるし
746 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 17:35:56.07 ID:UWkHQHZA0.net] そもそも、TCP/IPの練習にC++は妥当なのか?
747 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 17:55:46.62 ID:lVEmBRA9d.net] >>724 CとC++しか言語知らんのや... IISサーバーと通信できない これのポートとかどう設定するんや...
748 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 18:29:11.61 ID:Of28e9o20.net] ネットワークライブラリは現在策定中だっけ。
749 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 18:34:59.92 ID:HogVByKA0.net] >>725 以前ネットワークプログラム勉強するのにこのサイト利用させてもらった わかりやすいと思う x68000.q-e-d.net/~68user/net/
750 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 20:33:20.53 ID:lVEmBRA9d.net] >>727 今読み始めたけど丁寧でわかりやすい
751 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 10:23:20.37 ID:mIuFgC1Fd.net] 初歩の初歩の初歩の質問なんだけど あるPCにポートXXを口とするサーバソフトを同時に二つ立てることはできないよね? 1つめはXXを使うとしてその後にたてられた2つめはどうなる? (スレチっぽくなってますがよろしくです...)
752 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 10:38:02.75 ID:S6233VLa0.net] 出来ます サーバー側はリクエストに応じて複数のプロセスを起動し、 同じポート番号を使って複数のプロセスが受け答えします 各プロセスはそれぞれで生成したソケットを使ってクライアントとやり取りします
753 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 10:57:49.02 ID:mIuFgC1Fd.net] >>730 それってプログラム内でforkして子プロセスを作る場合の話です? サーバソフトAとサーバソフトBの両立ができたとすると ポートXX使用します!ってのはどこでどちらを使うと判断するのでしょうか...
754 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 13:04:43.06 ID:TdcUa1CK0.net] 特定ポートでlistenするプロセスは一つだけです。 複数のプロセスで共用は出来ません。
755 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 17:39:27.17 ID:5tfXl8chM.net] >>729 LANポートが複数あればできるし、LANポートがひとつしかなくてもIPアドレスを複数割り当てられるなら可能
756 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 18:44:47.92 ID:PcYxkZC90.net] >>733 ああ言えばこういうの典型 どうでもいいけどC++と関係ないクソ話もうヤメロよカスども
757 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 18:49:41.83 ID:Poc3cQP+M.net] しかも間違ってるという
758 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 18:57:54.46 ID:5tfXl8chM.net] >>735 ん? どこか違ってたっけ?
759 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 19:48:42.76 ID:SHe+skknr.net] >>736 二つ前のレスくらい読んでほしいものだ
760 名前:デフォルトの名無しさん [2017/09/19(火) 20:12:29.29 ID:4ZFv917O0.net] C++98ではできない C++11以後できるようになった だろ、通信は本質的にマルチタスクだ
761 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 00:14:27.26 ID:zNeStlMI0.net] なにをいってるかよくわからんがすごい自信だ。
762 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 01:48:22.84 ID:E2xZjesx0.net] 規格外のライブラリならほぼ何でもありといえばありだけどさ。 ライブラリ自信はまだ策定中でしょ。
763 名前:デフォルトの名無しさん [2017/09/20(水) 03:12:29.17 ID:E3lPvo/Y0.net] bind()する時のローカルのIPアドレスを別々にすれば同一ポートで別々のサーバプログラムって動かないの?
764 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 04:49:07.58 ID:uOAr6bd90.net] >>741 だから動くってば ユニークである必要があるのはIPアドレス:ポート番号の組み合わせだから >>730 >各プロセスはそれぞれで生成したソケットを使って まさかその生成されたソケットがサーバーと同じポート番号を持つとか思ってないよな? いずれにせよこんなのはネットワーク初心者の話題であってC++とは何も関係ない
765 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 06:46:32.53 ID:k3KNfXHnM.net] >>737 それが間違ってるって話 >>741 が言うようにローカルアドレスを指定すれば同じPCで同じポートを使用するサーバーを複数立てられる
766 名前:742 mailto:sage [2017/09/20(水) 10:56:07.53 ID:uOAr6bd90.net] 自己訂正 >まさかその生成されたソケットがサーバーと同じポート番号を持つとか思ってないよな? あはは、これは俺の勘違いだったわ acceptで返されるソケットはlistenポートと同じポート番号を持っている
767 名前:デフォルトの名無しさん [2017/09/21(木) 05:09:49.50 ID:t8iqXrAz0.net] 質問です。 { 10/*%*/ } = { a,b,c }; というのは、 a = 10% b = 10% c = 10% なのでしょうか?それとも、 a+b+c = 10% なのでしょうか?
768 名前:デフォルトの名無しさん [2017/09/21(木) 05:48:27.92 ID:eSaSp7RC0.net] C++を習得するのに莫大な時間を費やしました。 C++のプロフェッショナルなプログラマーになりたかった。 なのに、ハード系の知識が無いと言う理由で、もらう仕事はVB.NET、C#.NET系ばかりでした。
769 名前:デフォルトの名無しさん [2017/09/21(木) 05:51:26.56 ID:eSaSp7RC0.net] 質問を書くのを忘れやんした。 C++の仕事ってハード系、通信系、制御系以外、通常業務のシステム開発はないんでしょうか?
770 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 06:00:29.19 ID:Bo0/1phe0.net] ポート重複で同じアドレスでBananaサーバーみたいなラックマウントサーバーの仕組みってあれは一つのサーバーがlistenで待って接続してきたクライアントの処理を複数の子サーバーに割り振っているだけなのか?
771 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 08:18:42.29 ID:E1HbcZFyr.net] struct unko { unko()=delete; }; int main() { unko u{}; } 何故コンパイルが通るのかを理解するのに半日かかった やはりこの言語はクソ
772 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 08:46:59.52 ID:iktVOuYO0.net] >>746 他人から降って湧いてくることしか期待してないからそうなる 自分がやりたいことは自分で始めろ
773 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 10:13:00.29 ID:JjsSVLys0.net] >>747 C++はC#とかでできないことがあるときに仕方なく使うイメージがある
774 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 11:36:34.81 ID:p6kNBh4ir.net] >>749 あれ 何で動くんだ? plain old dataあたりの話が噛んでる?
775 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 12:35:00.95 ID:iktVOuYO0.net] C#の方が楽なところが特に無いのでC#という選択肢が無い
776 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 13:21:38.51 ID:TbHBi0+x0.net] >>752 PODがかかわってる部分はあるけど基本として理解しておくべきことは =default,=delete指定はコンストラクタの宣言でも定義でもない ということ つまり>>749 の文脈では struct unko { unko()=delete; }; int main() { unko u{}; } は struct unko {}; int main() { unko u{}; } と等価でありuはaggregate初期化されコンストラクタは呼ばれないからエラーにならない (unko();みたいにはっきりとデフォルトコンストラクタが呼ばれる状況ならエラーになる)
777 名前: mailto:sage [2017/09/21(木) 16:15:38.61 ID:na02B6ss0.net] >>750 お、おう!
778 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 17:36:23.55 ID:E1HbcZFyr.net] >>752 規格によると unko u{}; は 8.5/p17『If the initializer is a (non-parenthesized) braced-init-list, the object or reference is list-initialized』によりリスト初期化される リスト初期化は8.5.4/p3『If T is an aggregate, aggregate initialization is performed』 に該当するのでコンストラクターが呼ばれずにaggregate初期化される。 なおaggregateの定義は8.5.1/p1により『array or a class (Clause 9) with no user-provided constructors (12.1), no (略)』 ここで8.4.1/p1により「=delete」は関数本体だが、 8.4.2/p5によりuser providedではないと見なされている(たぶん)
779 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 22:11:37.04 ID:VzX3yrPwM.net] >>748 パケットレベルで振り分けたり、プロキシとして動作したり色々 ロードバランサ 仕組み とかでググるがよろし あとそこまで行くと完全にスレチなので ネットワーク mevius.2ch.net/hack/ とかに行っとくれ
780 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 23:20:34.43 ID:Bo0/1phe0.net] ほほう
781 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 11:36:40.13 ID:2CJ5RW/30.net] >>747 20年前は普通にあった、ていうかそれしか方法がなかったが 今はもっと楽な方法があるのでほぼ無くなった 僅かな例外はパフォーマンスを求めるようなプログラムを作る場合だが それでもライブラリなどの表から見えない部分の作成に限られる
782 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 21:53:53.16 ID:DdQqqOWmH.net] 各添字が 1 から X まで動く多次元配列を一次元で A[i + X*j + X*X*k] のように表しているのですが、この多次元配列の各添字を入れ替える操作を頻繁に行うので、関数にしたいです。 どのようにするのが良いでしょうか。 たとえば f(A, B, 2, 3, 1); のように引数をとって B という配列に B[j + X*k + X*X*i] = A[i + X*j + X*X*k] と要素を入れたいです。 「2, 3, 1」を関数の中で解釈する方法も分からなくて困っています。
783 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:14:21.88 ID:dWsmcDp10.net] >>760 その例だと A[X][X][X] の3次元相当だけど3次元限定でいいの?
784 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:34:01.05 ID:qTNnvPi+0.net] https://ideone.com/x9PCnt こんなんでええやろ
785 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:36:10.87 ID:dWsmcDp10.net] >>760 こういう解釈でいいかな? template <typename T, std::size_t X> void fillA2B(T (&A)[X*X*X], T (&B)[X*X*X], int ax1, int ax2, int ax3) { int i, j, k; int& ii = (ax1==1)? i: ( (ax1==2)? j: k ); int& jj = (ax2==1)? i: ( (ax2==2)? j: k ); int& kk = (ax3==1)? i: ( (ax3==2)? j: k ); for ( i = 0 ; i < X ; ++i ) for ( j = 0 ; j < X ; ++j ) for ( k = 0 ; k < X ; ++k ) B[ii + X * jj + X * X * kk] = A[i + X * j + X * X * k]; } int main() { const int N = 2; int A[N*N*N], B[N*N*N]; int n{0}; for ( int a = 0 ; a < N*N*N; ++a ) A[a] = n++; fillA2B<int, N>(A, B, 1, 2, 3); fillA2B<int, N>(A, B, 2, 3, 1); fillA2B<int, N>(A, B, 3, 1, 2); return 0; }
786 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:38:24.75 ID:cFmXNXGU0.net] 左辺が j, k ,i 右辺が i, j, k のようだが
787 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:45:31.08 ID:dWsmcDp10.net] あ、一気に全要素にFillしなくてもいいのかな?
788 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 00:03:03.61 ID:7FyCscw80.net] ……素直に3次元の配列にすりゃあいいんじゃねえのかなコレ どーーーしても1次元にしなきゃいけない重大な理由が背後に控えてんのかな?
789 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 00:08:42.25 ID:xnpjieyid.net] 普通にメモリ確保したら1次元だからな
790 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 00:21:25.13 ID:J5lzydll0.net] B[ii][jj][kk] = A[i][j][k]; でも通るな
791 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 00:25:12.68 ID:QX+6yKIgH.net] >>761 もちろん任意の次元を一度に扱えたら最高です。 ゆくゆくは各添字の次元を変えることも考えています。 >>762 >>765 すみません。 全要素を並び替えたいです。 >>766 カラムメジャー、ロウメジャーを任意にしたいという背景があります。 また、各添字の次元が本当は任意であるということもあります。 >>763 ありがとうございます。 確かにこれで>>760 はできそうです。 パーミュテーションの実装の仕方が分かりました。 原理的にはこれで任意の添字の数、次元に対応できる (それぞれ関数を作る必要はある) と思うのですが、もっとアカデミックな方法ともあるのでしょうか?
792 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 02:35:34.07 ID:0uAENq5F0.net] >>769 アカデミックは知らんが一般化するなら B[ i*bi[0] + j*bi[1] + k*bi[2] + ... ] と各次元ごとの係数を変数にして設定だな >>760 のたとえばでは bi[0] = X*X, bi[1] = 1, bi[2] = X あとはインターフェイスにあわせてヘルパ処理を用意すればいい f(... int x, int y, int z) int bi[3]; bi[x - 1] = 1; bi[y - 1] = X; bi[z - 1] = X*X;
793 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 17:29:12.46 ID:vw1eQBGxr.net] >>770 ありがとうございます。 あとは任意個数の引数を取れるようにすれば添字がいくつあっても、各添字がどのように走っても一つの関数で対応できますね。 勉強になりました。
794 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 00:05:50.55 ID:KE0eJu6Z0.net] C++とほとんど関係ないな
795 名前:デフォルトの名無しさん [2017/09/25(月) 10:20:39.11 ID:c/fcx1bx0.net] 任意個数の引数って、まさか省略記号と可変個数実引数では・・・ と思ったらモロじゃねえか おいおい このスレ的にはinitializer_listやtemplate parameter packだろ
796 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 11:38:31.09 ID:VZWzPiEFd.net] >>773 template parameter pack って variadic template と同じもの? 後者の呼び方には馴染んでるんだけど。
797 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 12:51:53.80 ID:ML1gBCAMM.net] >>774 同じ
798 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 16:12:14.99 ID:b+XdOI/H0.net] >>773 ほっといたっていずれ覚えるだろうに何故押し付けるのか
799 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 17:17:22.88 ID:RnBeI/QIM.net] >>776 より良い代替案があるんだったらそっちに誘導すべきだろう。 実際使うべきじゃないし。
800 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 18:34:40.87 ID:iFpSSPyJr.net] >>774 違う
801 名前:デフォルトの名無しさん [2017/09/26(火) 10:35:57.85 ID:DAuKDJeY0.net] >>776 このスレ的にはって書いてあるのが読めてないのか 自分が苦手なものに触れられたくないのか どっちだ?
802 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 11:02:34.83 ID:XbrOuhiT0.net] >>779 最近お前みたいなニワカが増えてうんざりするわ というかCの可変長引数がどこに出てきた?
803 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 11:38:28.30 ID:XSwUFkBD0.net] つかぬことを伺いますが、 あるクラス内で定義した構造体を同クラス内でstatic constメンバとして宣言し、 外部で定義しようとしたところ、「〜との互換性がありません」と出て上手く行きません どうすればよいのでしょうか 〜ヘッダ内 class Hage{ public: struct A{ int a; int b; }; static const struct A M; } 〜ソース内 #include "ヘッダ" const struct A Hage::M; //不正
804 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 11:39:54.54 ID:XSwUFkBD0.net] あ、行頭の半角スペース消されるの忘れてた
805 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 11:48:05.08 ID:XbrOuhiT0.net] const struct Hage::A Hage::M;
806 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 11:48:55.33 ID:r3ztyMSNd.net] >>781 少なくとも Hoge::A としなけりゃダメなんじゃないか >>771 を読んでもCの可変長引数とは決めつけられなかった
807 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 11:51:53.92 ID:XSwUFkBD0.net] うわあ何でこんな初歩的なことに躓いていたんだアホらしい >>783-784 サンクス
808 名前:デフォルトの名無しさん [2017/09/26(火) 15:18:58.40 ID:SDiSqFpw0.net] ###HUM### 000-K,AZ,0,1, 001-KI,L,I.T,DEF,11.2,TE,F,0.12235, 002-EM,OBLA,7##END
809 名前:デフォルトの名無しさん [2017/09/26(火) 15:24:00.47 ID:DAuKDJeY0.net] >>780 うわーおまえ、それ人に聞かなきゃ判んねえの? 省略記号は右端という初歩の初歩でミスりながら ドヤってる笑い地獄が2日前あったんだが 突っ込めなきゃせっかくボケた芸人も泣いてるだろうな
810 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 16:32:49.03 ID:XbrOuhiT0.net] >>787 まずはsageることから覚えような
811 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 16:36:37.77 ID:r3ztyMSNd.net] >>773 の「モロじゃねえか」がどっから出てきてるのか謎だ
812 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 17:08:16.18 ID:XbrOuhiT0.net] 多分Cの可変長引数なら右端以外にも書けると思ってんじゃないかな
813 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 18:55:18.16 ID:DXd+nok20.net] こんなイメージかな? #define X (100) #define f(a,b,c,d,e) ((b)[(c)+X*(d)+X*X*(e)] = (a)[(e)+X*(c)+X*X*(d)])
814 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 19:31:39.64 ID:T9NefDHyr.net] >const struct A Hage::M; //不正 初歩的でなく相当に高度な気がしてならない 規格の3.4.1/p7,p8,p14あたりを頭に入れていないといけない 「class NS::C;」のように何でも「::」を付ければ良いと言うわけでもないので
815 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 22:59:17.35 ID:pvKSJMRt0.net] そうでもない
816 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 23:10:02.38 ID:28pSalnA0.net] だってグローバルスコープにも struct A; が存在したらどうなるか? って考えればすぐわかりそうなモノじゃんね
817 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 23:33:07.57 ID:QYZ1C1Pk0.net] グローバルが優先される所と、グローバルよりクラスや名前空間が優先される所が入り乱れたこの言語で どちらが優先なのかを正確に覚えてるのはかなりの変人である可能性が高い https://ideone.com/RZTBk7
818 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 23:48:01.42 ID:piJXswiP0.net] グローバルが優先するところなんてあったか?
819 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 23:48:58.27 ID:28pSalnA0.net] >>795 その例ではいったんA::の中に入っているから B はA::B になるけど >>781 のはそうじゃないからな。
820 名前:デフォルトの名無しさん [2017/09/27(水) 00:14:02.46 ID:LyDwKMB00.net] >>788 おーいバカ、省略記号の位置の件はわかったか? まさか789なみの重度池沼じゃねえよな
821 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 00:41:37.58 ID:lz0JexH90.net] >>771 は>>770 を参考にして新たに考えようとしてるじゃないか。 それを>>770 のやり方でまんま行こうとしている、と解釈するのは悪意があるぞ。
822 名前:デフォルトの名無しさん [2017/09/27(水) 00:57:18.03 ID:LyDwKMB00.net] だからって770の大ボケを正当化する法はあんめえ
823 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 07:53:47.82 ID:Ep3hxvTm0.net] あんめえ
824 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 09:12:11.59 ID:nsBNhogE0.net] >>800 お前まだ分からんのか・・・ >>770 のどこが大ボケなんだよ 添え字演算子の中で二項演算子の後に省略記号書いて再帰的に計算させたり パラメータパック(またはそれを含む式)も無しに引数の左端にいきなり省略記号書いたり なんてのはCでもC++でも出来ないの お前みたいにCの可変長引数もvariadic templateも分かってるつもりなら >>770 を見た瞬間にこれは文面上の省略であって動くコードではないと一瞬でわかるはずなんだよ 質問でもないのにageまくるわ自分も初心者のくせして同じ初心者(あるいはそれ以上)を聞きかじりの知識でバカにしようとするわ 憂さ晴らしにしか利用しないのなら出ていけ
825 名前:デフォルトの名無しさん [2017/09/27(水) 09:30:35.39 ID:LyDwKMB00.net] 文面上の省略だっておw 大ボケに苦しい言い訳を上塗りして アフォから超アフォに進化したなあ
826 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 09:41:27.37 ID:nsBNhogE0.net] 俺>>770 じゃないよw
827 名前:デフォルトの名無しさん [2017/09/27(水) 10:03:04.41 ID:LyDwKMB00.net] どう見ても770だな 必死さの理由が他にない
828 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 10:19:41.03 ID:Ls/Jbx6+0.net] ワッチョイも知らないアホじゃん
829 名前:デフォルトの名無しさん [2017/09/27(水) 11:12:43.27 ID:LyDwKMB00.net] 驚いた、ム板にIP信者がいるとはね 嘆かわしい限りだ
830 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 11:41:32.93 ID:/eBNIii1d.net] >>800 だったら>>771 をターゲットにすればよかったんだよ お前は>>770 をも貶し続けていると見なされていたんだよ
831 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 11:42:15.16 ID:/eBNIii1d.net] ");
//]]>-->832 名前:1501295308/808" rel="noopener noreferrer" target="_blank">>>808 間違えた、逆だ [] [ここ壊れてます]
833 名前:デフォルトの名無しさん [2017/09/27(水) 14:47:33.57 ID:LyDwKMB00.net] 大ボケ+言い訳+IP信者+錯乱 この安定したアフォぶりは、どう見ても同一人物だなw
834 名前:デフォルトの名無しさん [2017/09/29(金) 01:30:30.30 ID:ppl3WHHK0.net] %%%3%%% 000-DOK<NAZE-0.8112162> 001-3800%\73NMB/1,81,2,NB"IKKI"% 002-91.81%ML7"8.122231746668193,43@ML.4@"%^23.1444 003-1.33321444718%"YLD""SO"%{71.%{62.1339816{331.422231765%<<<NL6 004-LOOP%Go To"000"% VCL
835 名前:デフォルトの名無しさん mailto:sage [2017/09/29(金) 22:15:16.68 ID:7WUGaaf40.net] javaやc#しかやったことないような人間がc++でもメモリ管理をきちんと身につけるには何から始めるのが手っ取り早いでしょう?
836 名前:デフォルトの名無しさん mailto:sage [2017/09/29(金) 23:55:16.07 ID:7WUGaaf40.net] そもそもみんなc++で何してるの?🤔
837 名前:デフォルトの名無しさん mailto:sage [2017/09/30(土) 00:49:06.72 ID:Yf3yOiqk0.net] 人工知能ゥ・・・
838 名前:はちみつ餃子 mailto:sage [2017/09/30(土) 00:56:27.58 ID:H54Xn+Px0.net] >>812 C++ ではなるべくスマートポインタを使って自動化すべきなんだけど、 その内側にあるメモリの気持ちを実感として持つには C の範囲で色々やってみるのもいいかな。
839 名前:デフォルトの名無しさん mailto:sage [2017/09/30(土) 01:18:37.51 ID:bL0j7tMv0.net] >>812-813 JavaやC#が選択肢になる状況でC++を選択する理由はない。 今C++を何に使うか決まってないのなら、JavaやC#を極める方向に努力した方がいい。
840 名前:デフォルトの名無しさん mailto:sage [2017/09/30(土) 01:39:01.97 ID:zjlhf9G/0.net] VisualStudioでMFCのSDIテンプレートを作ると、ドキュメントクラス、ビュークラス、アプリケーションクラス、メインフレームクラスができますが、 これらのポインタを初期化時にグローバル化しておいて、以後あらゆるクラスから気軽にアクセスできるようにしとくのは良くないんでしょうか? グローバル変数はあまり使うべきではないという考えは置いておくとして、動作上問題は起こるのでしょうか?
841 名前:デフォルトの名無しさん mailto:sage [2017/09/30(土) 09:54:39.91 ID:1M7A4t/A0.net] まあたまには口ですることもあるかな…
842 名前:デフォルトの名無しさん mailto:sage [2017/09/30(土) 16:24:19.18 ID:EIEZdyCfd.net] 問題が起こらないように作れば起こらない としか言えない
843 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 00:09:52.37 ID:A+1idbvt0.net] MFCのtheAppには100万回ぶち切れてきたけど動作上は特に問題は無い
844 名前:デフォルトの名無しさん [2017/10/01(日) 04:08:21.65 ID:EFR2vscz0.net] あーこの人、こうやっちゃったんだ(ニヤニヤ しながら使うもの ARM C++ベースなんで同情するところもあるけどね
845 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 11:18:29.65 ID:coFT7XLp0.net] グローバル変数だからといって頭ごなしにぶち切れるのもいかがなものか… CPU視点でやるべきことに対して処理順序にあいまいさが生じないなら実行上問題無いし、 プログラマーの視点で管理できる個数なら実用上も問題無い 同一クラスの複数インスタンスが欲しければグローバルな配列にしたらやり過ごせる ていうか仮にtheAppを根とする木構造で全てのデータを管理することを思い立ったとして、 その木の根付近をぶち切って得た2〜3の大枝をグローバル変数を根とするそれぞれ別の木にする、ぐらいの 挿し木設計は設計上のショートカットとして許されるべきや というのは、プログラムのあらゆる箇所で theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue() と書かねばならなかったものが、 g_dataAA->...->getMemberZZ()->getValue() ぐらいで済む
846 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 12:31:41.44 ID:A+1idbvt0.net] 平気でグローバル変数を使う奴はtheAppの混じったコードを使いまわし続けて大量にデータを持たせるようになる そして結合しまくりのクラスを他のソフトにコピペしていつのまにか神theAppができある マルチスレッドで読み書きしてるもんだから予想外のバグが起こる 上司はそれでそれが当たり前だと思ってるから同じようにしろと俺に命令する 俺切れる
847 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 12:47:25.61 ID:coFT7XLp0.net] >マルチスレッドで読み書きしてるもんだから予想外のバグが起こる これはグローバル変数でなくとも起きる設計なら起きるから別件 ていうか >CPU視点でやるべきことに対して処理順序にあいまいさが生じ(>>822 ) ているケースにあたる 非同期呼び出しの同期化は呼び出される側のクラスで解決すべき、というだけ メソッド内で完結できれば最も安全 パホーマンスや処理の粒度の関係でそれが適さない場合は トランザクション処理をちゃんと設計汁、
848 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 12:50:48.09 ID:+enXMbbO0.net] >>823 アプリケーションの中で寿命の長いデータはどこにどうやって置いてるの?
849 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 14:12:37.21 ID:A+1idbvt0.net] >>824 ちょっと足りなかったわ マルチスレッドでかつ複数のクラスを跨って別々の場所で読み書きされているからいつどこで変更されるかわからないことが多々ある そうなるとあちらを立てればこちらが立たずといった感じになり、きれいに書く気力が失われてさらに汚さが加速する >>825 必要なデータだけを引数で与えるべき
850 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 14:15:44.38 ID:P+J8m3XL0.net] グローバル変数で同期とるんじゃないぞ。そんなもので同期なんて取れないからな。 ちゃんとOSが提供する同期オブジェクト使えよ。
851 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 14:17:42.21 ID:LFbo+6zld.net] どんな環境でもOSがあってしっかりした同期の仕組みが有るとか思ってるお花畑がいると聞いて
852 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 14:25:15.04 ID:P+J8m3XL0.net] いやはや無知で申し訳ない。 マルチスレッド機能があって同期の仕組みが提供されない処理系があるならばご教授して頂きたい。
853 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 14:59:48.84 ID:8m985+fI0.net] 文脈上Windowsでの話なのははっきりしてるのに「どんな環境でも」とか
854 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:20:08.45 ID:+enXMbbO0.net] >>826 >必要なデータだけを引数で与えるべき 引数を渡す側がそのデータをどこにどうやって保持すればいいのか、という問題が残るだけでは?
855 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:35:52.14 ID:7TdPvZgo0.net] >>831 > 引数を渡す側がそのデータをどこにどうやって保持すればいいのか、という問題が残るだけでは? 再帰的にたどって行けばいいだけかと プログラムの寿命とほぼ同じ寿命が必要ならmain( )で定義することになるだろうし
856 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:38:17.18 ID:P+J8m3XL0.net] どうしてもグローバル的なものがほしいなら、グローバルにしてしまえよ。 アクセス用の関数だけしっかり同期処理書けばいい。
857 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:41:47.38 ID:coFT7XLp0.net] んまーマルチスレッド機能有りのOSであり (1) OSがプリエンプトしてくるのを止めるAPIが無い (2) ユーザープログラム独自に割り込み禁止命令を実行できない(特権命令違反でトラップされる としたらユーザー側ではフラグのread modify writeのアトミック性を保証する術がまるきり無くなる
858 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:43:55.69 ID:coFT7XLp0.net] いやすまん下記も追加 (3) interlock系の命令が使えない(特権命令違反か何かでトラップされる (3)は使えるかな普通… >>829 のは杞憂かもしれんな…
859 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:51:28.11 ID:coFT7XLp0.net] しかしまあ同期処理はOSが提供すべき(理念としてだけでなく、その方が効率よく実現できるから というのは同意 マルチスレッド機能があるOSなら必ずプリエンプトされないコード範囲を持つので、そこでなら interlock系の命令を持たないZ-80みたいなCPUでも何も問題なくアトミックなread-modify-writeができる、
860 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:52:05.08 ID:7TdPvZgo0.net] >>834-835 Compare-And-Swapとかの命令が特権命令になってるプロセッサなんてあるんだっけ?
861 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 15:59:29.84 ID:coFT7XLp0.net] >>837 Interlock系命令の意味で言った 正しい言葉使いかは知らん…!
862 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 16:05:24.82 ID:a+6SxdIf0.net] atomicなread及びwriteが使えるならmutexを構成できるし、それを利用すればread modify writeも可能だよ。
863 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 17:15:48.85 ID:zBOS+jx9M.net] ミューテックスが何だって? くだらねえ話しやがって・・
864 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 17:18:14.77 ID:A+1idbvt0.net] >>831 どんどん上にたどっていく そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい externした変数はそのクラスが所有権を持っていることと同等なので、パフォーマンス上の都合が無ければ極力共有は避けるべき あとコードを使いまわすときにも障害になる ファイルにまとめて他でincludeしてもそのまま使えない
865 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 17:46:49.19 ID:+enXMbbO0.net] >>841 >そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい クラスが持つっていうのはそのクラスのスタティックメンバにしろという意味? それでは結局グローバル変数とか無名namespace内変数とあまり変わらないような気がする。
866 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 18:21:24.53 ID:A+1idbvt0.net] >>842 言ってる意味がわからない クラスA内クラスBとCを宣言して B b; C c; c.set_data(b); だとか main関数内で Dptr d_ptr = D::get_resource(); Eptr e_ptr = E::get_resource(); F f(d_ptr, e_ptr); f.excute(); とかこんな風にする
867 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 18:30:22.24 ID:+enXMbbO0.net] >>843 んー >そのデータを管理しなければいけないクラスあるいはmain関数が保持すればいい 「あるいは」ってどういう意味? main関数内に持つ方はわかるんですよ。 そうでなく、「クラスが保持」の方の解説をお願いしたい。ずっと保持し続けるんだから スタティックメンバなのかな?と思った。
868 名前:817 mailto:sage [2017/10/01(日) 18:34:27.58 ID:SWvA/SVx0.net] >>820 では、例えば初期化時にtheApp内に、Doc、View、MainFrmクラスのポインタをメンバに持たせておいて、 以降、あらゆるクラスからtheAppを介してアクセスしてもよいということですね。 こういったやり方でふとよぎった不安なんですが、 長時間アプリを起動していたとき、とあるクラスの参照ポインタがいつのまにか変わっていて、 例えばビュークラスを取得しようと「theApp.GetView()」としたときにはすでにそこにViewクラスはいない。。。なんてことは起こりませんか?
869 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 19:04:09.96 ID:c8q3kohq0.net] >>845 起こらないように設計する。
870 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 19:06:45.42 ID:A+1idbvt0.net] >>844 普通なパブリックなメンバでいいと思うけど その所有権をもったクラスの寿命が尽きたら同時に開放される >>845 もちろん参照元からは参照先の実態があることが保障されないのでよくある 特定のメンバの参照数が数百箇所になってたときは手に負えなくなったのでさすがに作り直した
871 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 19:24:06.85 ID:8m985+fI0.net] 「クラスの寿命」とかもう難しすぎてついていけんわ
872 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 19:38:58.01 ID:A+1idbvt0.net] >>848 推敲とかしてないのである程度読み替えて言いたいことを汲み取ってね そのクラスの変数の寿命な
873 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 19:42:13.70 ID:+enXMbbO0.net] うん、寿命の長いオブジェクトをどうやって保持し続けるかっていう話なのにね
874 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 19:51:59.11 ID:P+J8m3XL0.net] 悩む理由がよく分からないが。適当な管理クラス作ればいいだけでは。
875 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 19:54:30.69 ID:+enXMbbO0.net] >>849 寿命の長いオブジェクトをどうやって保持し続けるかがテーマなので、 「a というデータはクラスBのオブジェクトbに持たせればいい」では じゃあそのbはどこにどうやって保持し続けるのかという無限後退に陥る。 普通のグローバル変数やシングルトン theAppにぶら下げるの mainの中に置く 一長一短あるのでそれ以外に何かないかなという話
876 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 20:03:44.13 ID:P+J8m3XL0.net] 別に永続化、シリアライズの話までしてないわけでしょ。 mainかグローバルの2択で推奨はmain、どのスコープからも見えてアクセスしたいならグローバルもありで終わりでしょ。
877 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 20:06:34.68 ID:+enXMbbO0.net] >>853 あなたの意見は>>833 以降ずっと一貫しているからいいですよ。 >>823 の意見がわかるようでわかりにくい
878 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 20:15:10.00 ID:P+J8m3XL0.net] MFC? H社のソフトのことかな?
879 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 22:22:01.91 ID:SWvA/SVx0.net] >>846 >>もちろん参照元からは参照先の実態があることが保障されないのでよくある ソースコードで意図的にdeleteとか、アドレス移動する命令をいれてなくても起こるんですか? (ガベージコレクションみたいなことが)
880 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 22:50:35.76 ID:LFbo+6zld.net] >>829 無知を謝る必要はない マルチコアのDSPをOSレスで使うとか
881 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 22:54:38.73 ID:LFbo+6zld.net] >>826 パラメータで渡すべき情報と そうじゃない情報と がある
882 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 23:00:12.89 ID:LFbo+6zld.net] >>852 スタティックメモリ(グローバル変数など) auto変数(スタックやレジスタなど) OSやAPI側の保存領域(APIを用いた設定など) ファイルなど
883 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 23:08:17.57 ID:A+1idbvt0.net] >>856 起こるわけないが
884 名前:デフォルトの名無しさん mailto:sage [2017/10/01(日) 23:28:49.53 ID:LFbo+6zld.net] 意図的じゃないdelete
885 名前:デフォルトの名無しさん [2017/10/02(月) 15:27:40.28 ID:jSh1mr/v0.net] > プログラムのあらゆる箇所で > theApp()->getMemberA()->getMemberAA()->getMemberAAA()->...->getMemberZZ()->getValue() > と書かねばならなかった 本当にあらゆる箇所に重複コードを書きまくっているとしたら相当なアフォだな 関数化かキャッシュするだろふつー
886 名前:デフォルトの名無しさん [2017/10/02(月) 17:30:53.86 ID:wJY11lw/0.net] 最近WindowsのほうでVSを入れまして、簡単なSTGを作って遊んでいるのですが、MacOSでもC++でSTGを作ることはできるのでしょうか? Windowsでは、DxlibといったSTG制作に特化したライブラリがありますが、MacOSではどうなのでしょうか…?実際にMacでSTG制作の経験がある方、挫折した方の話をお聞かせください。よろしくお願いします。
887 名前:デフォルトの名無しさん [2017/10/02(月) 17:45:41.63 ID:M0wavUvt0.net] DXLibがSTG制作に特化したライブラリ…
888 名前:デフォルトの名無しさん [2017/10/02(月) 18:07:53.55 ID:wJY11lw/0.net] >>864 何かおかしなことを言っていたらすみません。 STG制作入門のホームページでそのようなことが書かれていたので、そう認識していた次第です。
889 名前:デフォルトの名無しさん mailto:sage [2017/10/02(月) 19:07:36.56 ID:SPyFybU20.net] それはDirectXの薄いラッパなので何に特化しているとかはない マルチプラットフォームで作りたいならOpenGLで作れ
890 名前:デフォルトの名無しさん [2017/10/02(月) 20:27:58.95 ID:wJY11lw/0.net] OpenGLか… 難しそうだしまだ取っ付くべきじゃないような気がするんだけどそんなことはない?
891 名前:デフォルトの名無しさん [2017/10/02(月) 20:36:13.43 ID:/AEbHlJU0.net] Valkan行こう
892 名前:デフォルトの名無しさん mailto:sage [2017/10/02(月) 22:38:15.66 ID:O4roxos+0.net] >>845 それぞれアクセス関数が用意されているので馬鹿なことはやめなさい
893 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 00:06:57.08 ID:AOU4wQiN0.net] >>862 黙れよキチガイ theApp()はtheAppかthisの間違いだがそれは別にして メソッドgetMenberA()を有するクラスから始まって、 メソッドgetValue()を有するクラスFooまでの全てのクラス が完璧にカプセル化された設計の元で theAppから配下のFooのメンバにアクセスするアクセッサは実質的に>>862 な状況を呈する これはもう完璧なカプセル化を諦めて途中までグローバル変数にする(挿し木設計)か インライ
894 名前:涛W開による最適化を期待するぐらいしか手が無い [] [ここ壊れてます]
895 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 00:11:53.92 ID:AOU4wQiN0.net] まあ神の視座に立てば完璧な抽象化を徹底してそんな深いアクセッサをいらなくすれば良いのだが そんなことが最初からできるなら苦労は無い、
896 名前:デフォルトの名無しさん [2017/10/03(火) 05:23:10.92 ID:ZkSEHHAS0.net] > カプセル化を諦めて途中までグローバル変数 ヘボ野郎
897 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 15:26:50.04 ID:tYdASm94H.net] 二次元配列の中身を1命令で一気に出力する方法はないでしょうか いちいち2重ループかくのめんどくさいです
898 名前:デフォルトの名無しさん [2017/10/03(火) 16:01:22.87 ID:ZkSEHHAS0.net] CならあるがC++では一般的な方法はない
899 名前:デフォルトの名無しさん [2017/10/03(火) 16:16:18.00 ID:vTZ8MAnuM.net] >>874 Cでの方法を教えていただけると嬉しいです
900 名前:デフォルトの名無しさん [2017/10/03(火) 16:16:57.77 ID:vTZ8MAnuM.net] すいませんIDかわりました >>875 は>>873 です
901 名前:デフォルトの名無しさん [2017/10/03(火) 16:20:42.09 ID:ZkSEHHAS0.net] 俺も暇なヤツだなw template <typename T> void print_dim(T&); template <typename T, int RANK> struct print_dim_t { void doit(T& x) { for(auto& y : x) print_dim(y); } }; template <typename T> struct print_dim_t<T, 1> { void doit(T& x) { for(auto& y : x) std::cout << y << ','; } }; template <typename T> void print_dim(T& x) { print_dim_t<T, std::rank_v<T>> obj; obj.doit(x); }
902 名前:デフォルトの名無しさん [2017/10/03(火) 16:34:48.99 ID:ZkSEHHAS0.net] #define print_dim(array, type) do_print_dim_##type((type *)&array, (type *)(&array + 1)) void do_print_dim_int(int *first, int *last) { for(int *p = first; p != last; p++) printf(" %d", *p); }
903 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 16:54:32.30 ID:hqWXgVBV0.net] 暇じゃないので横着しました int* it = (int*) mat; for_each(it, it + ROW * COL, [](int i){cout << i << " ";});
904 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 18:26:58.85 ID:O2xwfga8d.net] linuxの質問です ・koファイルからコマンドライン実行で実行ファイルを実行したい どうやって実現するか調べてもわからなくてやり方教えて欲しいです A --B みたいな呼び出しかたをしたい ・複数スレッドを立てているBプロセスを 全スレッドsleepにすることできる?
905 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 18:34:16.19 ID:O2xwfga8d.net] >>880 親プロセスをスリープにできるだけでも問題ないです
906 名前:片山博文MZ mailto:sage [2017/10/04(水) 18:45:43.87 ID:HMkkIXOid.net] system, execl, execlp, execle, execv, execvp, execvpe, spawn, popen, fork
907 名前:片山博文MZ mailto:sage [2017/10/04(水) 18:47:36.46 ID:HMkkIXOid.net] sleep, usleep, nanosleep
908 名前:片山博文MZ mailto:sage [2017/10/04(水) 19:21:33.45 ID:HMkkIXOid.net] 解説が必要ですか? はい/いいえ
909 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 19:29:13.24 ID:N0mfbhbs0.net] >>880 上半分だけ .ko ってデバイスドライバとかのローダブルモジュールじゃないかな。 動作中のカーネルにinsmodで組み込まなきゃ使えないと思うんだけど。
910 名前:885 mailto:sage [2017/10/04(水) 19:36:09.54 ID:N0mfbhbs0.net] すまん、質問の意図を取り違えたかも。 カーネルモジュールの中から外部コマンドを呼びたいって話かな。 可能かも知れん、と言うかカーネルがコマンドを実行するのと同じ手順のはずだが、 具体的な方法はさっぱり分からん。役に立たなくて申し訳ない。
911 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 22:05:29.41 ID:O2xwfga8d.net] >>884 とても欲しいです..
912 名前:. >>886 カーネルオブジェクトから外部コマンド(実行ファイル)をコマンド形式で呼び出したいって意味ですね [] [ここ壊れてます]
913 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 22:07:13.92 ID:UdMKuk5G0.net] ハッカーですね。
914 名前:片山博文MZ mailto:sage [2017/10/04(水) 22:16:13.63 ID:HMkkIXOid.net] >>882 に書かれている関数のそれぞれの機能を比較し、該当する関数のソース(in Linux kernel)を読んでみては?
915 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 22:19:51.52 ID:O2xwfga8d.net] >>889 今解説読んでいてsleep関連が終わったとこ exec関連多すぎて大変
916 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 07:00:51.51 ID:AZey7Nzq0.net] >>880 ちょいと検索したところ call_usermodehelper て関数があるみたい。
917 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 21:41:51.13 ID:/Agpj2+3d.net] >>891 今調べたら出てきました! 自分が望んだことできそうですありがとうございます
918 名前:デフォルトの名無しさん [2017/10/06(金) 09:41:37.58 ID:aNGBh62I0.net] ("a,b,c")とは、a,b,cの合計を表すのでしょうか? それとも、a,b,c各それぞれを表すのでしょうか?
919 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 10:15:40.40 ID:tNPv5Oyi0.net] ここの住人はソースコードをコメントで装飾するのに、どういう書き方をしていますか? 参考にさせて下さい
920 名前:デフォルトの名無しさん [2017/10/06(金) 10:26:06.63 ID:8EN3J+m8d.net] doxygen方式
921 名前:片山博文MZ mailto:sage [2017/10/06(金) 11:28:24.20 ID:u49AV52wd.net] >>893 ただのC文字列。
922 名前:893 mailto:sage [2017/10/06(金) 14:25:11.99 ID:aNGBh62I0.net] >>896 ありがとうございました。
923 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 19:52:03.20 ID:sTEh17J80.net] C++リテラル文字列だろ
924 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 19:54:12.06 ID:sTEh17J80.net] いや、やっぱただの文字列か
925 名前:デフォルトの名無しさん [2017/10/06(金) 21:08:44.42 ID:vfMxTM1h0.net] → の意味教えて下さい。
926 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 21:15:27.43 ID:fyJ+AUec0.net] そんなものありません。
927 名前:片山博文MZ mailto:sage [2017/10/06(金) 21:46:37.43 ID:u49AV52wd.net] 「ptr->member」は、「(*ptr).member」と同じ意味。
928 名前:900 mailto:sage [2017/10/06(金) 23:48:23.51 ID:vfMxTM1h0.net] 参考書の一部です fast-uploader.com/file/7062856811993/ どう言う意味なのでしょうか?
929 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 23:52:15.96 ID:vfMxTM1h0.net] 本を読んでも structやunionが具体的に、どの様に動作してるのか分かりません。
930 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 23:58:13.70 ID:yrQN1jb/0.net] 基本の基本なので、 先ずは、小さなサンプル作って、実際に動かしてデバッガで追ってみる。 その上で、判らない事を質問すべき。
931 名前:デフォルトの名無しさん [2017/10/07(土) 01:41:08.30 ID:6wfQSWva0.net] 質問です 以下のコードがコンパイルに通りません class Structure { public: std::string type; }; std::vector< std::unique_ptr<void> > data; std::unique_ptr<void> structure(new Structure); structure->type = "HogeHoge"; data.push_back(structure); >g++ -Wall -std=c++11 -c hogehoge.cpp >error: ‘std::unique_ptr<void>::pointer {aka void*}’ is not a pointer-to-object type > structure->type = "HogeHoge"; > ^ std::unique_ptr<void>ではなくて、 std::unique<Structure>にするとコンパイル通りました voidだとだめなんでしょうか エラーになる理由を教えて下さい
932 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 01:49:12.44 ID:IjrnmnS30.net] >>906 anyつかえ。
933 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 05:28:19.29 ID:9j2tI+ab0.net] >>900 こりゃ -> の誤植だな。 印刷屋さんがC知らなくて矢印記号と思ったんだな。 コード部分は執筆者が念を入れてチェックしなきゃね。
934 名前:デフォルトの名無しさん [2017/10/07(土) 08:30:30.38 ID:r58+Koxz0.net] >>906 エラーメッセージに書いてあるだろ <
935 名前:br> structure->type = "HogeHoge"; の代入先がオブジェクトじゃねえぜと おまえさんはvoid = char const*;をやろうとしたんだよ [] [ここ壊れてます]
936 名前:デフォルトの名無しさん [2017/10/07(土) 08:31:55.56 ID:r58+Koxz0.net] あ、すまんちょいミスった 指摘できるやついる?解説頼むわ
937 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 08:41:11.20 ID:eyY86HOM0.net] >>906 unique_ptrあんまりしらんから想像で書くけど そいつがデストラクタまで管理したいからvoidじゃなくてちゃんと型渡せってことじゃね
938 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 09:00:22.02 ID:y2Dkbadu0.net] >>906 > エラーになる理由を教えて下さい void 型の変数なんてないから そもそも何をしたいんだよ...
939 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 09:03:55.62 ID:7nonADk70.net] unique_ptr<void>という型なので、 中にtypeというメンバーがあることがコンパイラからはわからない。 static_cast<Structure*>(structure.get())->type = "HogeHoge"; のように明示すればコンパイルだけは通るかと思ったんだが、 こっちだと>>911 の問題に引っかかって、その前の行でエラーになる。
940 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 09:27:45.88 ID:7nonADk70.net] >>913 の最後の行は勘違いだった。 こちらの環境だと、unique_ptr<void>の時点でエラーになる。
941 名前: mailto:sage [2017/10/07(土) 11:35:23.13 ID:NngrEkye0.net] unique_ptr<void *> だとどうなる?
942 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 11:58:47.95 ID:rHfSD+zL0.net] >>913 delete できないからね voidを渡すんならカスタムデリータもセットにしなきゃならない。 template <typename T> struct vp_deleter { void operator ()(void *p)const { delete static_cast<T*>(p); } }; std::unique_ptr<void, vp_deleter<int>> a(new int(8)); なら通った。
943 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 12:19:56.83 ID:jvf7kHO4M.net] void型なんて定義もなければサイズもないから 素で使うがそもそもNG
944 名前:デフォルトの名無しさん [2017/10/07(土) 12:36:08.56 ID:6wfQSWva0.net] >>907 anyは知りませんでした stdじゃなくてboostにあるんですね つかってみます >>909 つまり void*->type は void.type になるってことですね voidポインタは使ったことなくて、あれから調べたのですが アクセスする前にキャストが必要だと知りました・・ 無知ゆえの初歩的なミスです 指摘ありがとうございます >>911 , >>913 , >>916 スマートポインタなのでデストラクタを呼び出せるようにしないといけないんですね カスタムデリータは知りませんでした コード参考になります void型なのはStructureの他にもプリミティブ型とかも入れたかったからです boost::any使うやり方とカスタムデリータ渡すやり方両方やってみます 皆さんレスありがとうございました
945 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 13:41:40.48 ID:j+yonEy7d.net] ひとつのカスタムデリータでいろんな型をdeleteするってなら無理
946 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 14:16:25.95 ID:LB5EP+Z/0.net] いまだにforkとthreadの動作の違いがわからない
947 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 14:17:50.50 ID:jvf7kHO4M.net] ある配列がありそれを指定した順番で並び替えしたい std::vector< any_struct_t > array; //これを並び替えたい std::vector< unsigned int > index_list = { 3,8,6,0,2...}; //この順番にしたい 探しているんだけど適当なライブラリが見つからない 標準ライブラリに入ってたりする? またはアルゴリズムが知りたい 出来ればswap回数が少ない方法が知りたい
948 名前:デフォルトの名無しさん [2017/10/07(土) 15:34:33.81 ID:cqowZFEsp.net] 配列もう一個用意してその添え字に移動するんじゃだめなん
949 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 16:00:10.47 ID:ZvmF6v7F0.net] >>922 それが一番速そうだよね
950 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 16:14:50.00 ID:Mcd7mBScM.net] std::vector<any_struct_t> ret(index_list); std::transform(index_list.cbegin(), index_list.cend(), ret.begin(), [&array](auto i){ return array[i]; });
951 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 16:25:34.07 ID:jvf7kHO4M.net] >>924 それタイプミスあります? でももう一つ配列を用意してコピーする点では 他の方と一緒ですね 別配列を用意せず全てswapで済ます方法も作ってみましたが これにはindex_listが更に2本必要になり 効率は別配列と変わらないと予想される結果でした 参考になりました ありがとうございました
952 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 16:38:58.22 ID:Mcd7mBScM.net] 一行目初期化はsizeだった すまん
953 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 16:55:14.57 ID:rHfSD+zL0.net] >>925 別領域を全く使わずin-placeでかつ汎用性のあるやり方ってすごく難しそう。 でも不可能性の証明も難しそうなんだよな。
954 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 17:23:03.40 ID:9j2tI+ab0.net] index_list に含まれる値がそれぞれ重複なく1回だけ出現とか、 いかにも破られそうな条件を暗黙に期待するライブラリ、 てのも変な感じだしねぇ。
955 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 17:39:38.90 ID:7nonADk70.net] 任意の置換は互換の積で表せるので、swap繰り返せばin-placeで可能。 rikei-index.blue.coocan.jp/senkei/teigi4senkei.html
956 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 17:47:14.55 ID:IjrnmnS30.net] >>906 https://ideone.com/j7lHlZ こういうことでしょ?
957 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 18:00:13.73 ID:rHfSD+zL0.net] >>929 まだやってない場所どこだっけ?
958 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 18:14:41.26 ID:7nonADk70.net] >>927 「別領域を全く使わず」を見落としてたすまぬ
959 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 18:35:30.53 ID:rHfSD+zL0.net] 「別領域を全く使わず」とはいっても、テンポラリの変数を1個とか2個の固定数だけ使うのは除く。
960 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 19:11:01.43 ID:7nonADk70.net] 屁理屈を言うと、index_listを壊していいなら、 以下の手順で別領域を使わない置換は可能。遅いけど。 for( size_t i = 0; i < array.size() - 1; ++i ) { std::swap( array[i], array[index_list[i]] ); std::swap( index_list[i], *std::find( index_list.begin()+i+1, index_list.end(), i ) ); }
961 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 19:26:56.50 ID:7nonADk70.net] おっと、index_list.begin()+i+1の「+1」は消してくれ
962 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 19:44:23.58 ID:rHfSD+zL0.net] この話をきっかけに、std::next_permutation の仕様を見てみたが、どういう時に使うのかよくわからない。
963 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 20:14:16.81 ID:jvf7kHO4M.net] 流石にO(n)は維持しないと 厳しいと思います
964 名前:片山博文MZ mailto:sage [2017/10/07(土) 20:23:01.47 ID:vDiuGwTad.net] お前ら、プログラム書くとき、普通にnoexceptを何回も書いてるの?
965 名前:片山博文MZ mailto:sage [2017/10/07(土) 20:25:42.72 ID:vDiuGwTad.net] >>936 permutation を実装するときに決まってんだろ?
966 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 20:53:48.18 ID:Mcd7mBScM.net] >>938 今までthrow()と書いてた場所には書いてるよ むしろ、書いてないの?
967 名前:片山博文MZ mailto:sage [2017/10/07(土) 21:02:34.40 ID:vDiuGwTad.net] >>940 コンパイラーのバカ。
968 名前:はちみつ餃子 mailto:sage [2017/10/07(土) 21:05:19.53 ID:JUuMz14c0.net] >>918 any は C++17 で標準に入ったよ。
969 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 21:13:10.52 ID:x4ka+ayCr.net] 規格と規格じゃないものの区別も付かない低能はすっこんでて
970 名前:900 mailto:sage [2017/10/07(土) 21:13:19.89 ID:m/msdGTM0.net] >>908 ありがとうございます。 いくら検索しても出て来ないので、困ってました。
971 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 21:17:07.24 ID:rHfSD+zL0.net] >>939 わからんがな
972 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 23:13:09.50 ID:7nonADk70.net] >>934 別領域を使わない置換に再挑戦。今回はO(n)のはず。 for( size_t i = 0; i < array.size() - 1; ++i ) { size_t j = i, k = index_list[i]; while( k != i ) { std::swap( array[j], array[k] ); index_list[j] = j; j = k; k = index_list[k]; } index_list[j] = j; }
973 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 00:16:09.42 ID:FGX6bPrh0.net] >>9
974 名前:46 二重ループなのにO(n)なの? [] [ここ壊れてます]
975 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 00:28:37.42 ID:wi1g/BWB0.net] 後出しのようで心苦しいけどindex_listを壊すのはダメだと思う。 const参照で渡すインタフェースにできないという意味で汎用性条件を満たしていない。
976 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 06:22:19.14 ID:+SudLjvR0.net] >>947 以下の2つの理由により、外側のループがn回まわる間に 内側のループの中身はたかだかn回しか実行されない。 1. 内側のループ内で処理済みのインデックスjに対し index_list[j]=j が実行される。 2. index_list[i]==i の条件が最初から満たされていた場合、内側のループは実行されない 要するに、内側のループを実行済みかのフラグとしてindex_listを使ってるだけ。 >>948 index_listを壊している時点で屁理屈なのは自覚しているんで、仕方ない。 一応、別配列にムーブする場合と比べると、 最初から正しい位置にある要素への処理が不要になるというメリットは有る。
977 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 11:20:44.83 ID:HosRocIl0.net] >>928 , >>948 ライブラリに対するオレオレ定義をいちいち開陳しなくていいよ、チラ裏にでも書いとけ
978 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 11:34:33.36 ID:+SudLjvR0.net] 駄目な理由が引数を壊すってことだけなら、引数を値渡しにしてやれば、 呼び出し時に勝手にコピーされるので問題ないはず。 壊していい引数を渡す時はstd::move()すればいいし。
979 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 13:39:35.60 ID:GUxnbDfL0.net] 引数がconst参照=引数の状態を変更しない(てか、できない)という意思表示 に対して 引数が右辺値参照=引数の状態を変更する(しても文句言うな)という意思表示 というのはアリ? 右辺値参照に対する理解が曖昧なんで漠然とよく分からない(何が分かって ないかも分からないw)んだが、もっと別な意思表示方法もある?
980 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 16:07:31.29 ID:6tf5QjxV0.net] ほ〜ん>>946 の奴はちゃんと動いたわ; ttps://ideone.com/6lwMOn
981 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 16:11:39.00 ID:6tf5QjxV0.net] >>946 の奴は要素[i]が内側のwhile()ループからは1回以上アクセスされないから確かにO(N)な気配、
982 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 23:25:19.93 ID:sIfqyVAH0.net] 右辺値参照はさっぱり意味わからんわ。
983 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:00:03.09 ID:U0LcPFS10.net] 右辺値参照というのは、関数f()へのT型データの値渡し時に暗黙のうちに行われる(C++03までは無条件に行われていた) (左辺値) = (右辺値) という代入処理において、 当該代入処理後、右辺値が関数呼び出し元によって使われなくなることが明白なとき、 左辺値へのコピー後、右辺値をデストラクトする という処理に暗黙のうちになっていたものを、 右辺値から左辺値への移動 と「も」書けるようにするためのしくみ Tに効率の良いムーブコンストラクタ(か右辺値参照を引数とする代入演算子)を定義しないとメリットが生じない ポインタに__restrictを付けるべきかどうか悩まねばならないレベルの人用 C++03でもコンストラ・デストラ呼び出し回数削減の最適化がかかって同じような効果になるケースが多々あるから そういうのが信用できない神経質な人向け ※ 個人の感想です
984 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:09:56.49 ID:Ge9OzZ/lr.net] それで>>952 の質問の答えはどうなるんだ?
985 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:20:15.73 ID:U0LcPFS10.net] >>957 右辺値参照には一時オブジェクトしか代入できない縛りがあるから_ 関数fooを voiid foo(int&& x) というバージョンしか定義していないとすると、 int g_x = 10; foo(g_x); がビルドが通らないのではないか; 一般的な使用を想定すれば、結局foo(const int& x)も定義必要 C++03までしか使ったこと無いから知らんけど;;
986 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:37:56.10 ID:nhJ4ZLVgM.net] >>958 その場合はfoo(int(g_x));が通るから、必須ではないよ コピーを外側で明示的にやらせることで、こっちのほうが責任が明確になるので好きという人もいる
987 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 10:15:14.60 ID:53KUOYPr0.net] 必然性の無い実装都合のシンクはクソ
988 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 17:26:43.28 ID:bLguG3ky0.net] オブジェクトのコピーとかムーブのためにここまで言語仕様を複雑にしないといけないのか。おれにはさっぱり理解不能だわ。
989 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 17:57:29.04 ID:0USm99MRM.net] 俺も右辺値参照はどうかと思う いらないよね
990 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 18:35:18.07 ID:3udUYydoM.net] 使わなくてもいいんじゃないか? 使ったことないから複雑に感じるだけで、そこまで複雑でもないよ
991 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 18:45:40.84 ID:UEIAYP2F0.net] >>961 GCをもたない言語の宿命だから嫌なら性能を犠牲にするかGCを持つ言語を使えばいい
992 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 18:56:48.86 ID:QjIlXwNcM.net] いやいやスマポがあるじゃない。 中級が多いプロジェクトならスマポ強制のほうが性能上がるんじゃないかと思う。
993 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 18:58:40.39 ID:8DJAJvC20.net] 個人的にはC++の言語仕様の暗黒面はほとんど「参照」が絡んでいると思う。
994 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 19:50:58.39 ID:3udUYydoM.net] ADLとか部分特殊化のマッチとかのほうが、はるかに複雑で暗黒だと思う
995 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 20:54:40.71 ID:bLguG3ky0.net] >>964 理解してないのでなにを指摘してるかさっぱり分からないが、 つまり、気取ってC++でGCっぽいことしようとして破綻してるわけだな。
996 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 20:56:32.03 ID:UEIAYP2F0.net] >>968 > 理解してないのでなにを指摘してるかさっぱり分からないが、 わからないなら絡んでくるなよ... > つまり、気取ってC++でGCっぽいことしようとして破綻してるわけだな。 全然違うし
997 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 20:56:47.16 ID:1ynB1O3m0.net] >>967 そう思う。 そのへんは「ルール」でしかないけど、右辺値参照はそれ自体が左辺値参照とは違うひとつの概念だから理解可能
998 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 21:28:57.78 ID:iWLkHfj90.net] 右辺値参照なんか、破壊不可オブジェクトをムーブするときくらいしか使わないような。うにーくぽいんたとか。 それ以外は参照でいいし。
999 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 21:45:04.70 ID:Rk3/uNWr0.net] 右辺値参照の有用性を理解できない人間にとってはそもそもC++自体が無用だと思う さっさと退散しなさい
1000 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 21:56:43.96 ID:bLguG3ky0.net] ところでなんでそんなに一時オブジエクトを参照しなきゃいけないコードを書くの? 参照元を管理するのが面倒だから? そういう人は初めからGC言語使えばよくね? ということですか?
1001 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:03:17.69 ID:Rk3/uNWr0.net] なんでとか言われても。。。 壊してもいい一時オブジェクトの場合、特別に効率的な扱いをしたくなるケースなんて山ほどある それが分からないならC++なんて触らずにGC言語専門でやってればいいと思うよ
1002 名前:はちみつ餃子 mailto:sage [2017/10/09(月) 22:10:35.64 ID:GeS0S50a0.net] そのあたりはトレードオフなんだよ。 そりゃあ気にせずに済むなら気にしたくないが、気にしなきゃならないときに出来ることがないのはつらいって話で。
1003 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:13:59.60 ID:0USm99MRM.net] 俺もわからん 左辺値参照ではなく右辺値参照を使った方が 良い状況ってどんなの? あと唐突にガページコレクション出してるけど 何の関係があるの?
1004 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:24:17.86 ID:bLguG3ky0.net] もしかしてC++で仕事したことないんですか?
1005 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:25:07.16 ID:1ynB1O3m0.net] そりゃ右辺値を束縛したくてかつconst
1006 名前:左辺値じゃダメな場合だろ [] [ここ壊れてます]
1007 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:43:46.89 ID:0USm99MRM.net] んー? 結局無いんでしょ? 使うべきシチュが そうならそう言えばいいのに
1008 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:45:47.51 ID:jvobj8TT0.net] >>979 classの初期化はどう?
1009 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:51:16.17 ID:UEIAYP2F0.net] 使うシチュエーションがない? 規格決める奴等が無駄にあーだこーだ言ってるだけとか思ってるなら病院に行った方がいいと思う
1010 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:54:00.89 ID:0USm99MRM.net] 初期化はどう?って言われても・・ 右辺値参照で初期化するのがベターな状況は 浮かびませんけど
1011 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 22:55:12.55 ID:0USm99MRM.net] >>981 と言いつつも 思い浮かばないんでしょ? じゃあ君もワイと一緒ですね
1012 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:09:59.39 ID:1ynB1O3m0.net] んん? 右辺値を束縛したい(一時オブジェクトだから左辺値としての実体はない) けどconst左辺値じゃダメ(中身を変更したいから) ↑ これのどこにわかりにくい点があるというのか? 「RVOが保証されるようになったらいらない」という意見なら理解できるが・・・
1013 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:14:06.35 ID:1ynB1O3m0.net] たとえば swap の実装なんか(素朴には)moveを3回繰り返すんだから 右辺値参照の有用性は明らかだろ
1014 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:16:20.29 ID:7RyTvmhPr.net] >>973 「なんでそんなに一時オブジエクトを参照しなきゃいけないコードを書くの?」 ↓ >>984 「右辺値を束縛したい(一時オブジェクトだから左辺値としての実体はない)けどconst左辺値じゃダメ」 「これのどこにわかりにくい点があるというのか?」 これがアスペというやつか
1015 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:20:00.09 ID:1ynB1O3m0.net] >>986 は? >>979 に言ってるんだよ
1016 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:25:56.07 ID:0USm99MRM.net] >>985 これを右辺値参照Verに書き換えて 利点を示してもらえますか? void swap(int& a,int& b) { int c = a; a = b; b = c; } void main() { int a = 1; int b = 2; swap(a,b); }
1017 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:26:35.20 ID:1ynB1O3m0.net] >>986 そっちこそ唐突に>>793 と>>984 を唐突に矢印で結び付けてるけど大丈夫か? お前の脳内の連想なんて誰にもわからないぞ
1018 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:27:28.76 ID:1ynB1O3m0.net] >>988 利点はない intだもの
1019 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:31:15.79 ID:0USm99MRM.net] なら何なら利点があるの? long long型ならあるの? もう訳が分からないよ
1020 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:32:58.04 ID:1ynB1O3m0.net] >>991 コピーコストの大きいコンテナだったら三回も代入したくないだろ?
1021 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:34:48.01 ID:jvobj8TT0.net] >>982 もう使わないなら右辺値参照版のコンストラクタに渡したほうがいいじゃん そしたら、コピーが起きなくて済むでしょ?
1022 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:41:18.28 ID:U0LcPFS10.net] >>986 右辺値を束縛したい文脈ではかわりにconst左辺値で常におkなのでは…(ていうかconstはあってもなくても良い >>985 T型データのswapは素朴にはT型データのコピー3回+破棄2回ぐらいが生じる のでわ…
1023 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:48:51.82 ID:bLguG3ky0.net] swapが頻繁に起こるような用途なら、なんではじめからポインタで管理しないんですか?
1024 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:49:46.71 ID:qIHa8iWG0.net] 一時オブジェクトもglvalueなんだから T &に束縛できればよかった
1025 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:52:41.96 ID:jvobj8TT0.net] >>995 ヒープじゃなくてスタックで処理したいから
1026 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:55:42.49 ID:0USm99MRM.net] 結局のところ 右辺値参照はコピーコストを削減出来るのが利点で それぐらいしか使い道がないってことか かつ、コピーコンストラクタよりムーブコンストラクタの方が コストを軽く出来るクラスに限られると struct a{ void* p; }; // これには効果が期待出来るが struct b{ int p[65536]; }; // これには効果は期待出来ない 結論としては、やっぱいらねーやこんなのってことだな
1027 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 23:58:36.68 ID:jvobj8TT0.net] 後者も効果が期待できるよ そして、コピーコストが削減できるだけってのは正しいが、いるかいらないかは人による
1028 名前:デフォルトの名無しさん mailto:sage [2017/10/10(火) 00:01:39.19 ID:O5j+wjNW0.net] >>998 > struct b{ int p[65536]; }; // これには効果は期待出来ない それはあんたがそんな構造をよく使うんなら正しい よかったじゃないか、結論が出てw
1029 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 72日 12時間 33分 11秒
1030 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています