- 1 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:17:05.84 ID:wmfpIKt/.net]
- 次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part137 (正しくはpart138) mevius.5ch.net/test/read.cgi/tech/1535353320/ C++相談室 part139 https://mevius.5ch.net/test/read.cgi/tech/1538755188/ C++相談室 part140 https://mevius.5ch.net/test/read.cgi/tech/1547326582/ C++相談室 part141 https://mevius.5ch.net/test/read.cgi/tech/1550772463/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.103【環境依存OK】 https://mevius.5ch.net/test/read.cgi/tech/1530384293/ ■長いソースを貼るときはここへ。■ 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
- 449 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 14:19:47.17 ID:gDkH0fQs.net]
- 8bit pic用XCでもlongは32bitなのに
- 450 名前: mailto:sage [2019/04/30(火) 15:03:05.44 ID:iYYZTFZo.net]
- >>449
それはそれですごいインプリメンテーションですね… 8 bit PIC で 32bit int がさくさく書けちゃうとは、そのインプリメンターは根性がありますね、それか頭のねじが何本か外れていて「無理を無理と思わない人」とか…
- 451 名前:デフォルトの名無しさん [2019/04/30(火) 15:29:16.24 ID:0LsajAP1.net]
- shortは16bit固定でlongは32bit固定でしょ。何言ってんの?
- 452 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 16:18:35.89 ID:coQMvXAj.net]
- >>451
いや、お前こそ何を言ってるんだ?
- 453 名前: mailto:sage [2019/04/30(火) 16:37:10.66 ID:iYYZTFZo.net]
- >>451
残念でした、short も long もインプリメンターが好きに実装していいのですっ!きりっ!
- 454 名前:さまよえる蟻人間 mailto:sage [2019/04/30(火) 16:45:08.36 ID:lzNlO/OB.net]
- >>451
64-bit Linux でsizeof(long) が8だった。移植がある場合は<cstdint>使わんとあかん
- 455 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 17:46:03.06 ID:bcA0O1+B.net]
- intが16bitならISOの規格は満たしてることになるかな。
32bit以上の長い整数はクラスと演算子オーバーロードで誤魔化すか。 頑張ってもリテラル表記もダメだろうから、使い勝手は悪いよな。
- 456 名前:デフォルトの名無しさん [2019/04/30(火) 19:51:46.33 ID:tnl21ewQ.net]
- >>451
うろ覚えだが VC Win32bit: int 32bit long 32bit pointer 32bit gcc Linux32bit: int 32bit long 32bit pointer 32bit -ここまでは同じ VC Win64bit: int 32bit long 32bit pointer 64bit -int64_tで64bit整数 gcc Linux32bit: int 32bit long 64bit pointer 64bit
- 457 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 20:17:37.41 ID:YvhWBPAF.net]
- 既にLP64とかLLP64とかの呼び方が存在するんだから、そっちを使おうよ
https://ja.wikipedia.org/wiki/64%E3%83%93%E3%83%83%E3%83%88#64%E3%83%93%E3%83%83%E3%83%88%E3%83%87%E3%83%BC%E3%82%BF%E3%83%A2%E3%83%87%E3%83%AB
- 458 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 20:34:29.38 ID:4LCMFhXh.net]
- 厳密なbit長が必要なときにintだのlongだの使っちゃ駄目よ
- 459 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 20:56:09.36 ID:ba2OmOyM.net]
- じゃあ何を使えばいいの?
- 460 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 20:59:46.66 ID:jq/I62+g.net]
- int_leastシリーズでは?
- 461 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 21:02:03.72 ID:tJFiug19.net]
- intの配列のラッパーのようなものから再発明すりゃーいい
class Bignumber{ int number[4]; Bignumber(const String num){ for(int i=0; i<4; i++){ number[i] = //考えるのが面倒臭い } } Bignumber operator+(){ //以下、延々とオペレータオーバーロードが続く } };
- 462 名前: mailto:sage [2019/04/30(火) 21:02:11.05 ID:iYYZTFZo.net]
- >>459
int64_t とか int32_t とか cstdint の面々を使うしかないでしょうね…私もデフォでそうするようになりました
- 463 名前:デフォルトの名無しさん [2019/04/30(火) 21:08:03.86 ID:0LsajAP1.net]
- あ…ありのまま 今 起こった事を話すぜ。
平成の終わりにいろんな奴からshort/longに対する認識の誤りを指摘される恥辱を味わった。 何言ってるかわからねーと思うが(以下略
- 464 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 21:08:35.71 ID:QYmLdpSV.net]
- なんかもうビットという表現すら無くそうとしてるんじゃなかった?
- 465 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 21:19:14.38 ID:l5C1eDEl.net]
- 制限された環境で使える多倍長整数のライブラリくらいいくらでもありそうだけど
- 466 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 21:42:28.23 ID:ba2OmOyM.net]
- >>462
なるほど、cstdint ですか! 教えてくださりありがとうございます
- 467 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 23:24:19.16 ID:xHYWEb3z.net]
- ビット数を付けるのは、MISRA-C で決まっているだろ
int8, 16, 32 uint8, 16, 32
- 468 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 00:05:54.61 ID:rGIFhODV.net]
- C++の規格上はintは16 bit以上(ターゲットのアーキテクチャで一番自然なサイズ
、longは32 bit以上 だったと思った
- 469 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 06:23:13.87 ID:EdGuPz7E.net]
- class ClassA
class ClassB: public ClassA class ClassA::ClassC のときに、ClassBはClassAのサブクラスと言いますがClassCはなんと呼ぶものですか?
- 470 名前: mailto:sage [2019/05/01(水) 06:32:09.33 ID:JcO9/TOD.net]
- >>469
>class ClassA::ClassC この意味はなんですか?
- 471 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 06:32:44.82 ID:TS5dpT59.net]
- 基底クラス
スーパークラス 親クラス ベースクラス
- 472 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 06:56:41.43 ID:q4ZM9Khf.net]
- 細かいことを言えば、規格準拠の処理系でも
int32_t (ピッタリ32bit) が定義されるとは限らないのね。 int_fast32_t, int_least32_t なら定義される。 8bit単位じゃないCPUへの配慮らしいから、 普通の(この表現も危険だけど)コンピュータを使う分には int32_t があると仮定して書いてもたいがい大丈夫だろうけど。 コンパイルエラーが出るから出たら対処、で十分かと。
- 473 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 07:06:00.95 ID:EdGuPz7E.net]
- >>470
クラス内で定義したクラスです class ClassA { public: ... private: class ClassC; ClassC * C; } class ClassA::ClassC { ... } の場合class ClassA::ClassC からClassA::を取るとコンパイルが通りません
- 474 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 07:25:40.44 ID:shCLaGGL.net]
- 「プログラミング言語C++」だと、入れ子クラス(nested class)とか
メンバクラス(member class)とか呼んでるみたい。
- 475 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 07:36:13.31 ID:EdGuPz7E.net]
- おお、なるほど
ありがとうございます
- 476 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 09:29:42.19 ID:HwrGV3PF.net]
- 内部クラス(inner class)もよく聞くけど調べたらJava用語っぽいな
- 477 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 10:28:09.06 ID:imZnb7dZ.net]
- Inner Class、Java用語なのか。そう呼んじゃってたわ
- 478 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 17:22:15.78 ID:Ul5/0sra.net]
- 今よみがえる構造体ネストの悪夢
- 479 名前:はちみつ餃子 mailto:sage [2019/05/01(水) 17:31:05.65 ID:Gk4iJJA0.net]
- >>473-474
nested class は仕様にあるので、 これが公式な用語と思って良いみたいだね。
- 480 名前:デフォルトの名無しさん [2019/05/01(水) 19:23:34.42 ID:DLNQH846.net]
- 以前、「完全さを求めるあまり今存在する良い物を犠牲にしてはならない」という趣旨のことわざをBBCハードトークで仄聞したのだが、原典はなんだろうか?
- 481 名前: mailto:sage [2019/05/01(水) 19:59:09.50 ID:JcO9/TOD.net]
- >>480
ググってヒットしたもののうち、これについてめぐらせています(ことわざとは関係ありません…) www.kt.rim.or.jp/~hisashim/gabriel/WIB.ja.html この人(原著者)、最後まで間違ったままでいるような気がしてなりませんが、実際のところどうでしょうか
- 482 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 22:03:28.27 ID:EdGuPz7E.net]
- >>479
ありがとう
- 483 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 17:19:13.49 ID:x8LtSB02.net]
- >>480 https://en.wikipedia.org/wiki/Perfect_is_the_enemy_of_good
- 484 名前:デフォルトの名無しさん [2019/05/06(月) 08:44:53.70 ID:Omhj+R8I.net]
- ストリームの遅さは凄い凄すぎる。
ほとんどの場合、遅くても問題ないということはわかる。 でもあそこ迄遅くする必要があったのだろうか。
- 485 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 10:41:12.07 ID:ZJRraXBB.net]
- 突然何?
- 486 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 12:17:09.96 ID:jqdyfBGc.net]
- 3.5 ストリーム
ttps://sicp.iijlab.net/fulltext/x350.html これだろう 理想的にはこうなるべきだが、技術的には未だに追いついてないだけであり、将来的には解決される なのでC++では他のどの言語も真似してない<<や>>がある 逆に言うとストリーム・プログラミングが主流になったらC++が主流の座に返り咲く
- 487 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 15:05:44.09 ID:XjarcZ9f.net]
- 今やどの言語もprintfのような書式付き文字列を指定する方式に回帰した(jsすら!)。
少なくとも書式付き出力に限れば、ストリームはプログラミング言語の中ではもう淘汰されてしまったんだと思うよ。 早いとこ、string::format()とかbasic_ostream::format()とか作ってほしいわ
- 488 名前:デフォルトの名無しさん [2019/05/06(月) 15:24:11.52 ID:ecbY6TsO.net]
- 多言語対応するためにはC#みたいに %1, %2みたいに引数を番号で指定できる書式じゃないとダメでしょ。
- 489 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 15:30:05.12 ID:HRNpJ9Fc.net]
- ストリームの精神はrangeに受け継がれて生き残るよ
だから書式はそろそろ負けを認めよう
- 490 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:03:09.57 ID:ZJRraXBB.net]
- どうしてprintf使わないの?
- 491 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:28:48.00 ID:YSlWnmwv.net]
- オーバーロードできないから
- 492 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:36:53.99 ID:oGUqqIoM.net]
- <<には<<なりの良さがあると思うので、ストリームというより、stringがoperator <<をサポートすれば良いと思う。
- 493 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:40:04.95 ID:DF3zK1Xx.net]
- 文字列操作するためのインターフェイスとしては最悪だよ。
考えた奴は自分では絶対使わないで人に使わせるだけのタイプだろうな。
- 494 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:45:40.32 ID:Yv9FD/Sb.net]
- そもそもだけど、なんで文字って表示されるのに
<< とか %s とかこういうのが必要なの? どの言語でもprint(a);だけで表示させればよくない?aが文字列でも整数でも小数でもさ。 引数で判断してくれよ。
- 495 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:51:17.77 ID:oGUqqIoM.net]
- >>493
え、そう? 文字列を連結する時に、+=と+を使い分けるより<<だけですむ方が楽だし、連結する順番も自明だし結構良くない? std::string str; str << "hoge" << 123 << ".txt"; みたいな。
- 496 名前: mailto:sage [2019/05/06(月) 17:27:51.75 ID:vu8V8zIe.net]
- >>492
それは私も考えていました、cerr に都度吐いているメッセージを、もう一度プログラムの最後にまとめて吐きなおす、とかをやってみたいんです…
- 497 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 17:37:23.51 ID:QULX0INn.net]
- >>495
そのやり方は引数の順序を変えられないから語順が違う言語間での翻訳で困る
- 498 名前:デフォルトの名無しさん [2019/05/06(月) 17:37:57.33 ID:ecbY6TsO.net]
- コンストラクタの引数に出力先stringインスタンスを渡すostream派生クラスを作ればいいじゃない。
string str; hogestream sstr(str); sstr << "hoge" << 128;
- 499 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 17:42:30.68 ID:B4KNKrTg.net]
- 別にstringstreamで良いじゃない
- 500 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 17:42:46.83 ID:B4KNKrTg.net]
- 別にstringstreamで良いじゃない
- 501 名前:デフォルトの名無しさん [2019/05/06(月) 18:13:11.14 ID:L6nFhRY+.net]
- iostreamの<<はC++の黒歴史の一つだね
- 502 名前:はちみつ餃子 mailto:sage [2019/05/06(月) 18:19:09.50 ID:K/rO19sE.net]
- stream の機能はいらんからとにかく文字列に差し込むだけ出来ればいいってのなら
単に operator<< を定義すれば出来るけど……。 https://wandbox.org/permlink/dIkEh0LDZEixGoiF
- 503 名前:デフォルトの名無しさん [2019/05/06(月) 18:27:12.43 ID:ecbY6TsO.net]
- >>499,500,501
ostream派生クラスじゃなくて独自のクラスのほうが軽量でいい。 stringインスタンスへのポインタのほかに、数値書き込み時の進数設定(oct,dec,hexを覚えておく)などをメンバ変数に持てばOK。
- 504 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 18:58:24.90 ID:oGUqqIoM.net]
- >>502
をを、なるほど、これは素晴らしいw
- 505 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 21:02:54.05 ID:ZJRraXBB.net]
- >>492
stringstream・・・
- 506 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 19:51:10.38 ID:FbrTB0S1.net]
- basic_ostream使えよっていつも思う
なんで決め打ちするのかわからない
- 507 名前:デフォルトの名無しさん [2019/05/08(水) 21:52:50.27 ID:iQQm+nuQ.net]
- to_charsというものをみつけました。
- 508 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 18:03:02.17 ID:PdPEbd3c.net]
- b配列全てをa配列のケツにコピーするとき
std::vector<char> a; char b[]={0,1,1,3,4}; a.insert(a.begin(),&b[0],&b[sizeof b]); これでいいの? &b[sizeof b] これが死ぬほど気持ち悪いんだけど
- 509 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 18:18:44.76 ID:JXKWFyOS.net]
- そんな気色悪い書き方しなくてもこれでいいよ
a.insert(a.end(), std::begin(b), std::end(b));
- 510 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 18:25:51.81 ID:PdPEbd3c.net]
- なるほど!ありがとう
- 511 名前:はちみつ餃子 mailto:sage [2019/05/09(木) 18:44:16.05 ID:IVoLxnXn.net]
- >>508-509
std::copy に back_inserter を渡す方が効率的という豆知識。
- 512 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 18:53:31.44 ID:vbHvKAwn.net]
- >>511
insertのが速いんでね? resizeしてmemcpyになるはず
- 513 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 23:40:45.34 ID:q7ofaYCv.net]
- アルゴリズムよりvector::insertのほうが実装による最適化の余地は大きそうだな
- 514 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 00:47:30.50 ID:5C678nxv.net]
- ポインタがイテレータとして渡された時点で相手が連続バッファだってわかるからね
- 515 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 11:00:01.95 ID:KAkBQh2y.net]
- &b[sizeof b]でもstd::end(b)でもやってることは変わらないんだけどな
見映えは重要だな
- 516 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 11:08:59.15 ID:pPfi71KH.net]
- sizeof bじゃcharでしか使えないんで、そういう意味でもイケてないかも
- 517 名前:はちみつ餃子 mailto:sage [2019/05/10(金) 12:01:59.87 ID:g2QrvVju.net]
- >>515
見栄えというか、名前が付いているってのはそれだけで単純にわかりやすいな。 (名前が妥当であれば。)
- 518 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:02:43.61 ID:UhKi+qPE.net]
- 嫌儲で、東京五輪チケットのソースコードが出てるけど
C++使ってるお前らなら、こんなソースコードじゃないよね? https://gogotsu.com/wp-content/uploads/2019/05/01-9.jpg
- 519 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:05:10.83 ID:curN/h5M.net]
- >>518
サーバーサイドあまりやってないけどこんな泥臭い書き方するのか
- 520 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:05:16.55 ID:TAwz/zT/.net]
- javascriptやん
- 521 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:36:57.50 ID:tfYAY6pz.net]
- こんなもんだろ
SIerが間違ってコンシューマ系のWeb制作を請けてしまうとこんな感じになる
- 522 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 21:47:05.61 ID:oOPMkjEw.net]
- てかこんなもの韓国に出すのね
安くなさそう ってもしや北の方?
- 523 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 21:53:19.07 ID:oOPMkjEw.net]
- parseInt(Num).lengthって動かなそう
- 524 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 21:57:58.16 ID:TAwz/zT/.net]
- ほんまやw桁でも返ってくるのかと思ったがundefinedじゃんかw
- 525 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 22:59:11.84 ID:HK1/2Yro.net]
- 型に無駄にこだわった結末がstreamと知っとくのは重要。
あの間違いを覚えとけ。
- 526 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 23:25:31.58 ID:u3uVdMgu.net]
- ゲームのシーンを管理するクラスとシーンクラスがあり、管理するクラスはシーンクラスを保持しています
シーンクラスから管理クラスのシーンチェンジを行う関数を呼び出したいのですがどうやったらいいでしょうか シーンクラスが管理クラスのインスタンスを持ちたくありません
- 527 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 23:30:31.35 ID:0WVRNDv3.net]
- >>518
webにあげるなら難読化まではしないにしても最低限圧縮するよね
- 528 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 23:55:31.69 ID:tshfuAdx.net]
- >>526
シーンクラスに管理クラスへの参照(ポインタ)を持たせればいいんじゃないのか
- 529 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 03:16:15.93 ID:xsmcwCcm.net]
- 早速情報漏洩やらかしたの?
- 530 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 10:30:07.92 ID:f5HniSEP.net]
- >a.insert(a.begin(),&b[0],&b[sizeof b]);
> これ、添字オーバーしてるけどメモリエラーとかにならないの?
- 531 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 10:54:36.87 ID:RjxICFG6.net]
- >>530
イテレータ範囲のendは配列の場合最後の要素の次のアドレス それは普通の実装ではアクセスされることはない 規格的にも最後の次の要素へのポインタだけは未定義じゃない
- 532 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 11:55:52.83 ID:Y1ZlGg0p.net]
- >>530
アクセスしてるからダメそう
- 533 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:40:07.82 ID:3XjGQ6E0.net]
- []はただのアドレス計算じゃん
- 534 名前:デフォルトの名無しさん [2019/05/11(土) 12:42:52.29 ID:DVWj7ai3.net]
- &p[N]はp + Nと同じって規格にあったっけ?
- 535 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:44:31.45 ID:RjxICFG6.net]
- 確かに&b[sizeof b]はデリファレンスしてるわ
これはあかんそう
- 536 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:56:49.51 ID:FaKAPAIh.net]
- >>533
a[i]は a+i ではなく *{a+i}
- 537 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 13:12:17.25 ID:2v2BzL6t.net]
- 経験上出来るプログラマーは言語オタクが多いイメージ?(ただし浅い)
- 538 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 18:44:16.82 ID:fU686pnk.net]
- &*pはデリファレンスなしで単にpと評価するってどっかで特別に決められてなかったっけ?
- 539 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 06:58:46.18 ID:x4ccFx6b.net]
- >>530
int a[5]; int *p = &a[5]; というコードが有効、つまり 「配列の最終要素の次の要素」(現実には存在しないデータ)のアドレスを取れる、 という仕様から、この場合は許される、というのが >>531 の指摘か。 一般的に >>538 が成り立つなら便利だけど、調べ切れなかった。 流れの元になった >>508 を見返したら、 a.insert(a.begin(),&b[0],&b[sizeof b]); これだと b[] の内容はベクタ a の先頭に挿入されちゃうね。
- 540 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 07:43:52.68 ID:2y1+p9UL.net]
- >>530
>>a.insert(a.begin(),&b[0],&b[sizeof b]); >> > >これ、添字オーバーしてるけどメモリエラーとかにならないの? 508だけど、これは a.insert(a.begin(),&b[0],&b[sizeof b]); こっちの間違いです。ごめんなさい。 a.insert(a.end(),&b[0],&b[sizeof b]); &b[sizeof b]); この部分は b+sizeof(b) これなら問題ない感じ? どちらでも動くけど、たまたまいてる可能性捨てきれないから不安なんだよね。 実際のソースはsizeof(b)がbに格納されているデータのサイズを示していて、 char b[256]; int s = read( fd, b, sizeof b); a.insert(a.end(),&b[0],&b[s]); みたいな感じで書いてます。 んで、b最大数来た場合にちゃんと動くか気になったというわけっす。 int s = read( fd, b, (sizeof b)-1); 無難にこれの方がいいですかね?
- 541 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:19:05.13 ID:k8bUqGvO.net]
- >>539
>int *p = &a[5]; これは多分だめで、ポインタ値としての存在なら許される int *p = a+5;
- 542 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:53:09.39 ID:nuZIUjqi.net]
- ややこしいからoperator <<を定義しようw
- 543 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 15:25:00.10 ID:8/5ODvoI.net]
- VC++だと
std::vector<T> a; &a[a.size()]はoperator[]のassertionに引っかかるね
- 544 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 22:25:11.86 ID:yr8YjJOU.net]
- std::transformって並列処理されてますか?
- 545 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 23:20:05.82 ID:jFoQmc6B.net]
- c++17のparallel版使えば並列実行されるかもしれない
- 546 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 01:24:36.27 ID:RKe/NLvg.net]
- visual studioでC++17にしたけどいまいち並列版の使い方が分からなかった
普通にfor回すのと、OpenMP使ってfor並列化するのと、transform(非並列)使うの比較したら OpenMP>普通にfor≧transform だった
- 547 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 20:49:38.54 ID:YS57w6Jq.net]
- おとなしくpthead使えよ。
- 548 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 20:56:12.40 ID:WUu3P+2G.net]
- 非並列使ったならそりゃそうなるだろ
- 549 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:02:33.17 ID:1v50lv4I.net]
- struct AとAを継承したstruct Bがあって
Aの内容をBの共通部分にコピーする方法ってないですか? A a; B b = a; みたいにしたいんですけど親を派生先にキャストはできないので困ってます
- 550 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:06:57.91 ID:mZDDPYlt.net]
- struct B : public A
{ B* operator=(const A& a){ this->hoge = a.hoge;} }; これ初期時にも使えるんかな
- 551 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:25:05.62 ID:1v50lv4I.net]
- コピーコンストラクタが実装できたとしてメンバ変数は1個ずつコピーするしかないですかね
- 552 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 02:28:08.55 ID:mZDDPYlt.net]
- スライシングをさせるとか?
安全に?スライシング起こす方法ってあったっけな? なんか危ういからやろうともしなかったが
- 553 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:25:17.13 ID:/dAesd8e.net]
- cloneメソッド用意するとか
- 554 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:31:42.80 ID:ebJ8HHSX.net]
- >>549
初期化時は普通にコンストラクタ初期化リストで A(a) って書けるでしょ。残りのメンバをどうするのか知らんけど。 代入なら static_cast<A&>(b) = a か b.A::operator=(a) で済みそう。
- 555 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:33:37.60 ID:C3C4SHXA.net]
- 普通にコンストラクタかオペレーター作ればいいんじゃね
B::B(const &A) B::operator =(const &A) A::operator B() 雑なキャストでよければdynamic_cast<A>でおk
- 556 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:38:27.18 ID:C3C4SHXA.net]
- ↑dynamic_cast<B>の間違い
B b = dynamic_cast<B>(a);
- 557 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 11:40:14.21 ID:74mGoL8y.net]
- >>551
sturctでまとめればデフォルトコピーコンストラクタが使えるけどね。 あとはintとかPODオブジェクトだけだったらmemcpyしちゃうとかも、俺はたまにやるなw
- 558 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 17:20:00.24 ID:PgzYowjZ.net]
- 549です
解決しましたありがとうございます 以下のように書いたら思っていたことが出来ました (派生先のコンストラクタで親のデフォルトコピーコンストラクタ呼べるの知りませんでした) 代入は現状使う予定がないので大丈夫です B::B(const &A a) : A(a) {}
- 559 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 18:17:29.46 ID:mr2QiBZl.net]
- その内容だったら=defaultでいいよ
- 560 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 21:32:58.41 ID:/aEDSlbd.net]
- 引数付きコンストラクタって、=default使えるの?
- 561 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 22:09:55.18 ID:jJO9F8Je.net]
- 使えないよね
うかうかっと読み過ごしてたわw
|

|