- 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
- 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
|

|