次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part133
http://mevius.5ch.net/test/read.cgi/tech/1511509970/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
C++相談室 part134
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 5fcb-Q2eK)
2018/01/20(土) 09:05:42.21ID:mJKRg6iz02デフォルトの名無しさん (ワッチョイ e3cb-Q2eK)
2018/01/20(土) 09:07:45.45ID:mJKRg6iz0 STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
いつまでこの糞テンプレ張り続けるんだおい
---- テンプレ ここまで ----
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
いつまでこの糞テンプレ張り続けるんだおい
---- テンプレ ここまで ----
3デフォルトの名無しさん (ワッチョイ 3d46-7dS8)
2018/01/20(土) 09:24:34.73ID:i+Y70H5F0 前スレのvectorのsize_tの質問した者だけど
実際gprofでvectorの[]が重い原因になってることを確認してる
次に重い原因がイテレータの比較なんだけど
実際gprofでvectorの[]が重い原因になってることを確認してる
次に重い原因がイテレータの比較なんだけど
4デフォルトの名無しさん (ワッチョイ 23b3-3fO/)
2018/01/20(土) 09:35:10.31ID:CFAgCrzx05デフォルトの名無しさん (ワッチョイ 2334-wln7)
2018/01/20(土) 09:50:30.10ID:AVDgMNZq0 またトンデモな使い方をしているのだろうな
6デフォルトの名無しさん (ワッチョイ 9d23-bNKV)
2018/01/20(土) 11:02:33.41ID:Bd+LbacS0 メモリ帯域が律速になる処理はわりとあるので
大容量のデータを処理してるならおかしくはない
キャッシュ効かないメモリアクセスするコストに比べたら整数の拡張など微々たるもんだ
大容量のデータを処理してるならおかしくはない
キャッシュ効かないメモリアクセスするコストに比べたら整数の拡張など微々たるもんだ
7デフォルトの名無しさん (ワッチョイ e3bd-16v+)
2018/01/20(土) 11:46:34.01ID:slOCvU7H0 >>1乙
↓前スレの続き
std::vector<double> vec((size_t)1000);
...
size_t sz = vec.size();
for (int i = 0; i < (int)sz; ++i) {
cout << i << " " << vec[i] << "\n";
}
の方がiをsize_tにするよりループ命令の部分が軽量化されることにより早いかも試練(x64では気のせい?
およびループ内で他に32 bit演算をやる場合、x64だと全てレジスタ上で賄える可能性が高まるから
速くなるかも試練、
結論: アセンブリコードを確認せよ
↓前スレの続き
std::vector<double> vec((size_t)1000);
...
size_t sz = vec.size();
for (int i = 0; i < (int)sz; ++i) {
cout << i << " " << vec[i] << "\n";
}
の方がiをsize_tにするよりループ命令の部分が軽量化されることにより早いかも試練(x64では気のせい?
およびループ内で他に32 bit演算をやる場合、x64だと全てレジスタ上で賄える可能性が高まるから
速くなるかも試練、
結論: アセンブリコードを確認せよ
8デフォルトの名無しさん (ワッチョイ e3bd-16v+)
2018/01/20(土) 12:06:11.44ID:slOCvU7H0 いやスマン
例が不適切やったわ;
ループ内でstd::coutみたいな重量のある関数呼び出しをしたら
「全てレジスタ上で賄える」とか
「キャッシュが有効活用で劇速化」とかも糞も無いな
例が不適切やったわ;
ループ内でstd::coutみたいな重量のある関数呼び出しをしたら
「全てレジスタ上で賄える」とか
「キャッシュが有効活用で劇速化」とかも糞も無いな
9デフォルトの名無しさん (ワッチョイ 25b3-GP+B)
2018/01/20(土) 12:31:55.30ID:w1mvJepJ0 noexceptってどういうときにつけたらいいですか。
10デフォルトの名無しさん (スップ Sd03-3us9)
2018/01/20(土) 13:45:44.65ID:gdCBjjapd >>3
[ ] が問題なら生ポ使えと書いてるんだけど無視?
[ ] が問題なら生ポ使えと書いてるんだけど無視?
11デフォルトの名無しさん (スップ Sd03-3us9)
2018/01/20(土) 13:51:38.35ID:gdCBjjapd12デフォルトの名無しさん (スップ Sd03-3us9)
2018/01/20(土) 14:00:41.11ID:gdCBjjapd >>3
ん?
プロファイラの確認?
だとしたら[ ] が遅いんじゃなくてメモリの読み込みが実際に遅い可能性があるのでは?
そもそも、
[ ] が問題になるような小さなループで
[ ] の時間を正しく測れるのか?
いずれにしろ、生ポと比較してみるのが一番
ん?
プロファイラの確認?
だとしたら[ ] が遅いんじゃなくてメモリの読み込みが実際に遅い可能性があるのでは?
そもそも、
[ ] が問題になるような小さなループで
[ ] の時間を正しく測れるのか?
いずれにしろ、生ポと比較してみるのが一番
13デフォルトの名無しさん (スップ Sd03-3us9)
2018/01/20(土) 14:02:23.47ID:gdCBjjapd メモリ帯域の問題なら
もっと大きな視野で最適化をしないとな
複数ループをくっつけてメモリアクセスを減らすとか
細切れに処理をしてキャッシュを効かすとか
もっと大きな視野で最適化をしないとな
複数ループをくっつけてメモリアクセスを減らすとか
細切れに処理をしてキャッシュを効かすとか
14デフォルトの名無しさん (ブーイモ MM43-Q2eK)
2018/01/20(土) 14:04:10.50ID:C2bNNCkKM []が問題になるわけ無いだろ。ソースコード見たのかよ。
ナマポで書き直すなんて無意味。抜本的にアルゴリズム見直せ
ナマポで書き直すなんて無意味。抜本的にアルゴリズム見直せ
15デフォルトの名無しさん (スップ Sd03-3us9)
2018/01/20(土) 14:05:12.48ID:gdCBjjapd あ、可能性だけで言えば
signedよりunsignedの方が速い
32bit から 64bit の符号拡張はコストが微妙にかかることもあるが、
ゼロ拡張はなにもしなくて良いから
レジスタの上位32bitは勝手にゼロになる
signedよりunsignedの方が速い
32bit から 64bit の符号拡張はコストが微妙にかかることもあるが、
ゼロ拡張はなにもしなくて良いから
レジスタの上位32bitは勝手にゼロになる
16デフォルトの名無しさん (スップ Sd03-3us9)
2018/01/20(土) 14:07:10.18ID:gdCBjjapd17デフォルトの名無しさん (ワッチョイ 23b3-3fO/)
2018/01/20(土) 14:50:38.90ID:CFAgCrzx018デフォルトの名無しさん (スップ Sd03-3us9)
2018/01/20(土) 14:56:00.07ID:gdCBjjapd19デフォルトの名無しさん (ワッチョイ 3d8a-ajZX)
2018/01/20(土) 19:43:21.88ID:J+aY78FJ0 MOVSXもMOVZXも0クロックでは処理できないと思うんだが
ZXが0クロックで出来るってエビデンスはあるのかな?
https://stat.ameba.jp/user_images/20180105/17/genten-nippon/2b/2b/j/t02200142_0640041414105871600.jpg
ZXが0クロックで出来るってエビデンスはあるのかな?
https://stat.ameba.jp/user_images/20180105/17/genten-nippon/2b/2b/j/t02200142_0640041414105871600.jpg
20デフォルトの名無しさん (ドコグロ MM91-3fO/)
2018/01/20(土) 20:07:30.62ID:aYLVMpQqM 32bitデータをレジスタに書き込んだら上位32bitが0クリアされることを言ってるんでしょ
コスト0って言うのはどうかと思うけど
コスト0って言うのはどうかと思うけど
21デフォルトの名無しさん (ワッチョイ 25b3-GP+B)
2018/01/20(土) 20:30:37.09ID:w1mvJepJ0 質問させてください。
以下のコードで push_back 時にコピーコンストラクタが呼ばれます。
ttps://ideone.com/Zodd94
こちらとしては、下のページにあるように、ムーブコンストラクタが呼ばれることを期待しています。
ttps://qiita.com/_meki/items/90f9815a1e899593daa3
なぜムーブではなくてコピーになるのか、教えて頂けないでしょうか。
以下のコードで push_back 時にコピーコンストラクタが呼ばれます。
ttps://ideone.com/Zodd94
こちらとしては、下のページにあるように、ムーブコンストラクタが呼ばれることを期待しています。
ttps://qiita.com/_meki/items/90f9815a1e899593daa3
なぜムーブではなくてコピーになるのか、教えて頂けないでしょうか。
22デフォルトの名無しさん (ワッチョイ a3a2-GP+B)
2018/01/20(土) 20:43:12.42ID:kYo2uzfm023デフォルトの名無しさん (ワッチョイ 25b3-GP+B)
2018/01/20(土) 20:49:44.91ID:w1mvJepJ0 >>22
ありがとうございます。解決しました。
ありがとうございます。解決しました。
24デフォルトの名無しさん (ワッチョイ 25b3-GP+B)
2018/01/20(土) 21:07:26.00ID:w1mvJepJ0 追加で質問させてください。
コンパイラが自動生成する関数で、noexceptがついているのは
・デストラクタ
・ムーブコンストラクタ
・ムーブアサインメントオペレーター
の3つでよろしいでしょうか。
よろしくお願いします。
コンパイラが自動生成する関数で、noexceptがついているのは
・デストラクタ
・ムーブコンストラクタ
・ムーブアサインメントオペレーター
の3つでよろしいでしょうか。
よろしくお願いします。
25デフォルトの名無しさん (ワッチョイ e3e7-x16F)
2018/01/20(土) 21:11:18.68ID:Z4eZ5+gd0 残り3つもデータメンバと基底クラスの同じものが全部noexceptなら付くよ
26デフォルトの名無しさん (ワッチョイ 25b3-GP+B)
2018/01/20(土) 21:18:07.18ID:w1mvJepJ0 回答ありがとうございます。
データメンバと基底クラスのそれぞれのデフォルトコンストラクタが全て noexcept なら、
noexcept なデフォルトコンストラクタが自動生成される。
コピーコンストラクタ、コピーアサインメントオペレーターも同上
という理解でよろしいでしょうか。
また、その条件が成立しないときは、>>24で挙げた3つということになるのですしょうか。
よろしくお願いいたします。
データメンバと基底クラスのそれぞれのデフォルトコンストラクタが全て noexcept なら、
noexcept なデフォルトコンストラクタが自動生成される。
コピーコンストラクタ、コピーアサインメントオペレーターも同上
という理解でよろしいでしょうか。
また、その条件が成立しないときは、>>24で挙げた3つということになるのですしょうか。
よろしくお願いいたします。
27デフォルトの名無しさん (ワッチョイ 25b3-GP+B)
2018/01/20(土) 21:36:13.58ID:w1mvJepJ0 >>26について自己解決しましたので、質問を取り下げます。
ありがとうございました。
ありがとうございました。
28デフォルトの名無しさん (ブーイモ MMe9-Q2eK)
2018/01/21(日) 11:30:18.34ID:LU9Vj3hRM >>16
noexceptなしに = defaultで宣言した場合はどうなるの?
noexceptなしに = defaultで宣言した場合はどうなるの?
29デフォルトの名無しさん (ブーイモ MMe9-Q2eK)
2018/01/21(日) 11:32:32.53ID:LU9Vj3hRM >>28
>> 25の間違いです
>> 25の間違いです
30デフォルトの名無しさん (ワッチョイ e3e7-x16F)
2018/01/21(日) 13:25:22.34ID:XRSBBZxr0 もちろん宣言通りになる
31デフォルトの名無しさん (ブーイモ MMe9-Q2eK)
2018/01/21(日) 13:32:54.03ID:LU9Vj3hRM >>30
thx
thx
32デフォルトの名無しさん (ワッチョイ 559f-x16F)
2018/01/21(日) 19:49:20.49ID:FwsOgvVZ0 記述上 int* であるが、上書きされた場合に自動的に中身を delete してくれるポインタの入れ物を、
operator= のオーバーロードなしで定義できますか?
ちょっと変な質問なのだけど、native C++なら多分以下コードで出来る。
struct PatHead {
int* ptr;
int* operator=(int* value){
if (ptr) delete [] ptr;
ptr = value;
return value;
}
operator int*(){ return ptr;}
};
void test(){
PatHead ph[10]; // int* ph[10] と同じ記述で通るのがミソ
ph[1] = (int*)1;
int* tgt1 = ph[1];
}
問題はこちらが使っているのはVC++/CLIで、
なぜか value struct では operator= のオーバーロードが出来ず、(C3194)
マネージ配列に直接入るのは value型だけなのでちょっと詰んでいる。
なお ref struct なら出来るのだが、こちらは逆に初期化部分で記述が増えるので、
それなら諦めようかな、って感じ。
というわけで回避策を思いつく人がいればお願いします。
何で値型で禁止されているか分かる人も居ればよろしく。
operator= のオーバーロードなしで定義できますか?
ちょっと変な質問なのだけど、native C++なら多分以下コードで出来る。
struct PatHead {
int* ptr;
int* operator=(int* value){
if (ptr) delete [] ptr;
ptr = value;
return value;
}
operator int*(){ return ptr;}
};
void test(){
PatHead ph[10]; // int* ph[10] と同じ記述で通るのがミソ
ph[1] = (int*)1;
int* tgt1 = ph[1];
}
問題はこちらが使っているのはVC++/CLIで、
なぜか value struct では operator= のオーバーロードが出来ず、(C3194)
マネージ配列に直接入るのは value型だけなのでちょっと詰んでいる。
なお ref struct なら出来るのだが、こちらは逆に初期化部分で記述が増えるので、
それなら諦めようかな、って感じ。
というわけで回避策を思いつく人がいればお願いします。
何で値型で禁止されているか分かる人も居ればよろしく。
33デフォルトの名無しさん (ワッチョイ ae81-MBfL)
2018/01/26(金) 13:51:50.30ID:duEsoqcC0 イテレータでendの一つ前を表すのはありますか。
endからの引き算必須ですか。
endからの引き算必須ですか。
34デフォルトの名無しさん (ワッチョイ ba34-0fOh)
2018/01/26(金) 13:58:16.53ID:SmrT25am0 &back()
35デフォルトの名無しさん (ブーイモ MMaf-nzgF)
2018/01/26(金) 14:00:31.27ID:27cZOHeHM3633 (ワッチョイ ae81-MBfL)
2018/01/26(金) 14:14:09.94ID:duEsoqcC0 サンクスです。できました。
37デフォルトの名無しさん (ワッチョイ 9ae7-fPTX)
2018/01/27(土) 07:12:46.54ID:ZP0gkUPd0 rbeginはちょっとトリッキーな実装になってることがあるから注意
38デフォルトの名無しさん (ワッチョイ daf9-Ddy8)
2018/01/27(土) 11:46:50.10ID:RraDQJG10 実装に依存しないような仕様に沿った使い方をすればいいんでないの?
仕様に合致していない実装ならどうしようもないが。
仕様に合致していない実装ならどうしようもないが。
39デフォルトの名無しさん (アウアウウー Sa77-fQjY)
2018/01/27(土) 19:12:13.06ID:Boft2e8Ea SHA256のハッシュをkeyにしたmapを高速で扱いたいんだが、
keyのoperator <,>それぞれでmemcmpしてて、多分このせいで性能悪くなってる
なんか良い解決策ってないですかね?
Linuxのrbtreeと比較すると100万件あたり150msec程度差がついてました
keyのoperator <,>それぞれでmemcmpしてて、多分このせいで性能悪くなってる
なんか良い解決策ってないですかね?
Linuxのrbtreeと比較すると100万件あたり150msec程度差がついてました
40デフォルトの名無しさん (ワッチョイ aa7e-rgA5)
2018/01/27(土) 19:13:43.71ID:IajdzWB80 simd
41デフォルトの名無しさん (ワッチョイ 6e62-WBz1)
2018/01/27(土) 19:44:42.49ID:MtS5alc90 unordered_mapにsha256の関数渡せばええやん
42デフォルトの名無しさん (ブーイモ MMda-FYQJ)
2018/01/27(土) 20:08:58.78ID:6QrTsC7zM fpga
43デフォルトの名無しさん (ワッチョイ ba34-0fOh)
2018/01/27(土) 22:07:02.09ID:bqR9C45e0 mapじゃなくてハッシュを実装しろとしか
44デフォルトの名無しさん (アウアウウー Sa77-fQjY)
2018/01/27(土) 22:15:03.18ID:Im+FAy1Qa45デフォルトの名無しさん (ワッチョイ 9ae7-fPTX)
2018/01/27(土) 22:53:57.64ID:ZP0gkUPd0 Compareの自作で何がいけなかったのかわからないけど解決おめ
46デフォルトの名無しさん (スップ Sd7a-4fyU)
2018/01/27(土) 23:05:46.83ID:r2gR5oNyd 赤黒木ってスマートポインタを使って実装できますか?
親を弱参照で書いたらわけわかめに
親を弱参照で書いたらわけわかめに
47デフォルトの名無しさん (スプッッ Sd7a-g7kd)
2018/01/28(日) 01:55:54.91ID:B1112Jntd ハッシュをソートかあ
48デフォルトの名無しさん (ワッチョイ 9abd-xSVK)
2018/01/28(日) 03:22:06.75ID:vIDP+sWr0 コピーしたくないオブジェクトへのポインタ(ていうか全体をシリアライズするの可能性も考えたらindexがマジお勧め)の配列おソートすれば良い
そういった実装の詳細はクラスの中に隠すことができる 何のためにC++を使っているのやヽ(`Д´)ノ!!!11!1
そういった実装の詳細はクラスの中に隠すことができる 何のためにC++を使っているのやヽ(`Д´)ノ!!!11!1
49デフォルトの名無しさん (ワッチョイ aee8-7ZJK)
2018/01/28(日) 08:17:39.92ID:abHZXNlp0 >>47
なんかモヤモヤするなそれw
なんかモヤモヤするなそれw
50デフォルトの名無しさん (ブーイモ MMaf-nzgF)
2018/01/28(日) 11:41:38.50ID:/ypN0hd6M >>39
hashは値に対してユニークじゃないけどいいの?
hashは値に対してユニークじゃないけどいいの?
51デフォルトの名無しさん
2018/01/28(日) 14:41:11.23 そりゃハッシュ衝突用のフィールドくらい作ってるだろうよ
質問にないことは心配しなくていいよ
質問にないことは心配しなくていいよ
52デフォルトの名無しさん (ワッチョイ f723-g7kd)
2018/01/28(日) 15:09:59.60ID:RaXbFAH70 心配してるんじゃなくてバカにしてるんだよw
53デフォルトの名無しさん (ワッチョイ bab3-dVd5)
2018/01/28(日) 15:44:58.16ID:C2Jb//yt0 バカにしようとして失敗してるとしか見えないけど w
54デフォルトの名無しさん (ワッチョイ bbb3-rgA5)
2018/01/28(日) 20:33:36.08ID:NzqukFwp0 Impliment.h
class Impliment
{
public: base;
};
Interface.h
class Interface
{
class Impliment
{
public: base;
};
Interface.h
class Interface
{
55デフォルトの名無しさん (ワッチョイ bbb3-rgA5)
2018/01/28(日) 20:42:03.84ID:NzqukFwp0 すいません。途中で書き込んでしまいました。
以下のようなクラスを作ったのですが、
derivedがImp::baseを継承しているため、
インクルードの順番が固定されてしまいます。(Impliment.hが先でないといけない)
こういったクラスは使う人から見て嫌がられるでしょうか。
ご意見をいただけるとありがたいです。
Impliment.h
class Impliment
{
public:
class base {}
};
Interface.h
template<class Imp>
class Interface
{
private:
class derived : public Imp::base {}
}
以下のようなクラスを作ったのですが、
derivedがImp::baseを継承しているため、
インクルードの順番が固定されてしまいます。(Impliment.hが先でないといけない)
こういったクラスは使う人から見て嫌がられるでしょうか。
ご意見をいただけるとありがたいです。
Impliment.h
class Impliment
{
public:
class base {}
};
Interface.h
template<class Imp>
class Interface
{
private:
class derived : public Imp::base {}
}
56はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-rgA5)
2018/01/28(日) 20:56:07.47ID:Xl/BPHGJ0 >>55
「XXの実装とインターフェイスが分かれている」ということをユーザが意識しないといけないのは抽象化の不足だと思う。
分離した形のデザインで開発するのはかまわないけど、ユーザに対してはなるべく隠すのが望ましい。
#include<Implement.h>
#include<Interface.h>
と書いたヘッダファイルを用意しておく程度のことでもだいぶんマシになる。
(インクルードガードはしておくこと)
「XXの実装とインターフェイスが分かれている」ということをユーザが意識しないといけないのは抽象化の不足だと思う。
分離した形のデザインで開発するのはかまわないけど、ユーザに対してはなるべく隠すのが望ましい。
#include<Implement.h>
#include<Interface.h>
と書いたヘッダファイルを用意しておく程度のことでもだいぶんマシになる。
(インクルードガードはしておくこと)
57デフォルトの名無しさん (ワッチョイ f723-g7kd)
2018/01/29(月) 02:50:08.46ID:gQcv+kbG0 >>55
普通は interface.h の冒頭で implement.h をインクルードしておく
普通は interface.h の冒頭で implement.h をインクルードしておく
58デフォルトの名無しさん (ワッチョイ efef-WRop)
2018/01/29(月) 05:39:18.37ID:+mqzfkB+0 >>55
このコードだけならインクルード順が逆でも問題ない。
このコードだけならインクルード順が逆でも問題ない。
59デフォルトの名無しさん (ワッチョイ bbb3-rgA5)
2018/01/30(火) 20:17:26.27ID:fsahOVUj060デフォルトの名無しさん (ワッチョイ 16e7-fPTX)
2018/01/30(火) 21:08:08.01ID:VkcoBYQV0 Implement入れ替えさせたいならユーザーに適当な所で
template Interface<MyImplement>;
って書かせりゃいいだけじゃないの?
template Interface<MyImplement>;
って書かせりゃいいだけじゃないの?
61デフォルトの名無しさん (ワッチョイ ba34-0fOh)
2018/01/30(火) 21:19:19.29ID:Lbh+cCVN0 typename imp::base
62デフォルトの名無しさん (ワッチョイ 9fbd-CNA0)
2018/02/04(日) 11:20:04.76ID:r6E1M8790 質問ですが
「このクラスはバイト列としてコピーできる」ということを明らかにするために
明示的にコピーコンストラクタを書くとして、
どう書けば処理系に依存することなくデフォルトのコピーコンストラクタ以上の性能になることを保証できますか
(もしくは、「このクラスはバイト列としてコピーできる」ということを明示する構文はありますか)
「このクラスはバイト列としてコピーできる」ということを明らかにするために
明示的にコピーコンストラクタを書くとして、
どう書けば処理系に依存することなくデフォルトのコピーコンストラクタ以上の性能になることを保証できますか
(もしくは、「このクラスはバイト列としてコピーできる」ということを明示する構文はありますか)
63片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdbf-vcz1)
2018/02/04(日) 11:26:54.06ID:i7yJvuTcd >>62
MyClass(const MyClass&) = default;
MyClass(const MyClass&) = default;
64はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-wbgk)
2018/02/04(日) 11:36:31.71ID:H9FebDBN0 デフォルトのコピーコンストラクタはメンバのコピーコンストラクタを起動するので、
そのクラス (に属するオブジェクト) 全体がバイト列としてコピーするわけではない。
trivially copyable class の要件を満たすように書けばバイト列としてコピー可能と保証される。
コンストラクタの書き方だけでは保証できない。
そのクラス (に属するオブジェクト) 全体がバイト列としてコピーするわけではない。
trivially copyable class の要件を満たすように書けばバイト列としてコピー可能と保証される。
コンストラクタの書き方だけでは保証できない。
65デフォルトの名無しさん (ワッチョイ ffd7-wbgk)
2018/02/04(日) 13:04:56.23ID:WecC8o2P0 memcpyするコピコンをユーザー定義すればええやん
66デフォルトの名無しさん (ワッチョイ 9fbd-CNA0)
2018/02/04(日) 13:46:35.82ID:r6E1M879067デフォルトの名無しさん (ワッチョイ 9fbd-CNA0)
2018/02/04(日) 13:47:37.01ID:r6E1M8790 訂正
誤:バイト列としてのコピーが可能でないコード
正:バイト列としてのコピーを不可能にするコード
誤:バイト列としてのコピーが可能でないコード
正:バイト列としてのコピーを不可能にするコード
68デフォルトの名無しさん (ワッチョイ 1f7e-wbgk)
2018/02/04(日) 13:47:46.54ID:HBpG+TPK0 >>62
std::is_trivially_copyable<T>がtrueになるように書いて
https://cpprefjp.github.io/reference/type_traits/is_trivially_copyable.html
トリビアル型とは何かは検索して
std::is_trivially_copyable<T>がtrueになるように書いて
https://cpprefjp.github.io/reference/type_traits/is_trivially_copyable.html
トリビアル型とは何かは検索して
69デフォルトの名無しさん (ワッチョイ 1f7e-wbgk)
2018/02/04(日) 13:52:58.38ID:HBpG+TPK0 >>66
なおさらtype_traitsで条件に合わなければコンパイルを失敗させればよい
なおさらtype_traitsで条件に合わなければコンパイルを失敗させればよい
70デフォルトの名無しさん (ワッチョイ 9fbd-CNA0)
2018/02/04(日) 14:08:05.83ID:r6E1M8790 >>69
おk
おk
71はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-wbgk)
2018/02/04(日) 16:47:05.72ID:H9FebDBN072はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-wbgk)
2018/02/04(日) 17:24:06.38ID:H9FebDBN0 流れをぶった切って質問するんだけど、
配列の一部をとる参照とかって作れない?
実際にはコンパイルが通らないけど、やりたいことはこんな感じ。
int a[3];
int (&b)[2] = static_cast<int (&)[2]>(a);
配列の一部をとる参照とかって作れない?
実際にはコンパイルが通らないけど、やりたいことはこんな感じ。
int a[3];
int (&b)[2] = static_cast<int (&)[2]>(a);
73デフォルトの名無しさん (ワッチョイ 9fa2-wbgk)
2018/02/04(日) 18:06:17.19ID:B+seqFts0 reinterpret_castすれば?
74デフォルトの名無しさん (ワッチョイ 7723-Us3F)
2018/02/04(日) 18:22:52.47ID:HJ1AdVlZ0 ポインタにして剥がせばいい
75デフォルトの名無しさん (ワッチョイ 1f7e-wbgk)
2018/02/04(日) 18:28:31.26ID:HBpG+TPK0 配列型はポインタではないので途中からとかない
76デフォルトの名無しさん (ワッチョイ bfe7-j4Dg)
2018/02/04(日) 18:55:06.41ID:i/oNqC3f0 一応うまく行ったけど規格で保証された挙動かどうかはよくわからない
https://ideone.com/wVzc6b
https://ideone.com/wVzc6b
77デフォルトの名無しさん (ワッチョイ 9fcb-qyJP)
2018/02/04(日) 19:14:07.38ID:NcR26d4z0 でもポインタにしてしまうと困るシチュエーションなんてありうるの?
マクロの中でsizeofしてるとか?
マクロの中でsizeofしてるとか?
78デフォルトの名無しさん (ワッチョイ ffd7-wbgk)
2018/02/04(日) 20:30:26.18ID:WecC8o2P079デフォルトの名無しさん (ワッチョイ 9fbd-CNA0)
2018/02/05(月) 23:20:37.74ID:y5vbQcAP0 メンバのコピーコンストラクタを起動すべきところをmemcpy()しかしない手製コピーコンストラクタで済ませようとしたら破滅が訪れる
MyClass(const MyClass&) = default; なら勝手にやってくれるのでその心配が無いので安心
MyClass(const MyClass&) = default; なら勝手にやってくれるのでその心配が無いので安心
80デフォルトの名無しさん (ワッチョイ 9f23-Us3F)
2018/02/05(月) 23:28:20.73ID:QTKEhMlZ0 しかしまあ >>68 なんていう便利なモノがあるとは
フラフラこういうスレ読んでるのもためになるなあ
フラフラこういうスレ読んでるのもためになるなあ
81デフォルトの名無しさん (ワッチョイ ffd7-wbgk)
2018/02/06(火) 07:54:17.35ID:CtmFRYuD082デフォルトの名無しさん (ワッチョイ ff8a-phf3)
2018/02/06(火) 08:05:48.85ID:cp/uvOeq083デフォルトの名無しさん (ワッチョイ 7723-Us3F)
2018/02/06(火) 08:27:38.08ID:rGp9SuaC084デフォルトの名無しさん (ワッチョイ ffd7-wbgk)
2018/02/06(火) 09:14:20.61ID:CtmFRYuD0 バイト列コピーが = default; なわけねーだろアホ
85デフォルトの名無しさん (ワッチョイ 7723-Us3F)
2018/02/06(火) 11:45:28.85ID:rGp9SuaC086デフォルトの名無しさん (ワッチョイ 7723-Us3F)
2018/02/06(火) 11:48:04.39ID:rGp9SuaC0 そもそも「どうコンストラクタを書けば」ってのを質問してるんで
バイト列コピーでコンストラクタを書けってのは単に>>65の珍解答に過ぎない
バイト列コピーでコンストラクタを書けってのは単に>>65の珍解答に過ぎない
87デフォルトの名無しさん (ワッチョイ ffd7-wbgk)
2018/02/06(火) 11:51:41.68ID:CtmFRYuD0 すまんが日本語でたのむ
88デフォルトの名無しさん (ワッチョイ 7723-Us3F)
2018/02/06(火) 11:54:37.03ID:rGp9SuaC089デフォルトの名無しさん (ワッチョイ ffd7-wbgk)
2018/02/06(火) 12:36:57.61ID:CtmFRYuD0 元質問: デフォルトのコピーコンストラクタ以上の性能
おまえ: デフォルトより遅くならないこと
よく読めをそのまま返す
おまえ: デフォルトより遅くならないこと
よく読めをそのまま返す
90デフォルトの名無しさん (ワッチョイ 9fe1-pzKJ)
2018/02/06(火) 12:57:03.34ID:bHMYZ9Vj0 以上っていうのは等しいかまたはそれを越えるという意味だぞ
91デフォルトの名無しさん (ワッチョイ 7723-Us3F)
2018/02/06(火) 14:01:35.47ID:rGp9SuaC0 そもそも memcpy は前者の性能保証も後者の仕様の保証もどちらも満たしてない
仕様が保証されてるなら多分性能的に大丈夫だろうという程度
間違いを認めると死ぬ病気なんだろうからもうこれ以上は言わない。
仕様が保証されてるなら多分性能的に大丈夫だろうという程度
間違いを認めると死ぬ病気なんだろうからもうこれ以上は言わない。
92デフォルトの名無しさん (ワッチョイ ffd7-wbgk)
2018/02/06(火) 14:38:54.29ID:CtmFRYuD0 バイトコピーでmemcpyより高性能な手段を1つでも例示したらどうなんだ
> 間違いを認めると死ぬ病気なんだろうから
ああ、おまえがか
> 間違いを認めると死ぬ病気なんだろうから
ああ、おまえがか
93デフォルトの名無しさん (ワッチョイ ff8a-uMb5)
2018/02/06(火) 18:18:02.35ID:cp/uvOeq09462 (ワッチョイ 9fbd-CNA0)
2018/02/06(火) 22:02:19.27ID:MckGyr3K0 memcpy()より速いコピー手段Xが仮にあったとして
論理的にmemcpy()で済むケースについてコンパイラが提供する
デフォルトのコピーコンストラクタがコピー手段Xにならない理由がわからん…
個人的には「=default;」と書いたら最高性能なんなら毎回手でmemcpy()とか書きたくないカンジ
論理的にmemcpy()で済むケースについてコンパイラが提供する
デフォルトのコピーコンストラクタがコピー手段Xにならない理由がわからん…
個人的には「=default;」と書いたら最高性能なんなら毎回手でmemcpy()とか書きたくないカンジ
95デフォルトの名無しさん (ワッチョイ ffd7-wbgk)
2018/02/06(火) 22:06:49.77ID:CtmFRYuD0 >>94
class A {
public:
A() {}
A(A const&) { std::cout << "aho"; }
};
class B {
public:
A a;
B() = default;
};
int main()
{
B b, c = b; //this will call you.
}
class A {
public:
A() {}
A(A const&) { std::cout << "aho"; }
};
class B {
public:
A a;
B() = default;
};
int main()
{
B b, c = b; //this will call you.
}
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★2 [蚤の市★]
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ ★2 [蚤の市★]
- 【テレビ】粗品「THE W」バッサリ「おもんない、レベル低い」審査員就任で「日テレが“血の海”に…」 [湛然★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- 死にてえやつこい
- 【朗報】アメリカ、貿易赤字が市場予想を超える大幅縮小WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
- 【東京新聞】「偽サッチャー」「自滅的」「時代遅れ」高市首相の経済政策を海外メディアが酷評www [718678614]
- 【悲報】維新の政治資金でガールズバー、高市首相「良いか悪いかは国民の皆さまが判断されること」 [115996789]
- 中国人、ガチ超正論。「日本人がアイヌに対してやったことを『問題ない』とするなら、中国が日本人に同じことをしても文句ないだろう?」 [314039747]
- 【悲報】女性「スタバで癒やされに来たのに、小汚いおっさんがいたあ!!😭」 [769050516]
