1 名前:デフォルトの名無しさん mailto:sage [2020/05/14(木) 11:53:25.59 ID:ZPCfyTux.net] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part150 https://mevius.5ch.net/test/read.cgi/tech/1584975873/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.105【環境依存OK】 mevius.5ch.net/test/read.cgi/tech/1556142878/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) テンプレここまで
2 名前:デフォルトの名無しさん [2020/05/14(木) 12:14:02.15 ID:tvxDWcUo.net] >>1 O2
3 名前:デフォルトの名無しさん mailto:sage [2020/05/14(Thu) 15:59:11 ID:Qhhsb9+b.net] https://mevius.5ch.net/test/read.cgi/tech/1584975873/1000 > 1000 名前:デフォルトの名無しさん[sage] 投稿日:2020/05/14(木) 15:51:59.69 ID:X1Z5LMNW [4/4] > ん? > >未だにC++03にしがみついているわけがない > >>993 で17使ってると言ってたようだが > > てかもうちょい生産的な話出来んのか > 仕事でも趣味でも都合の良いコンパイラ使えばいいだけの話 > 構造化束縛をマクロとテンプレートで実現するとかなら面白い話題なんだけどな(面白いだけで実用性があるとは言ってない なんだ、17で俺スゲーやってんのおまえじゃん 俺は仕事で17は当たり前という立場 おまえは仕事には危なくて使えないという立場 俺に教えを請うて突っぱねられたのがおまえ あとはわかるな?
4 名前:デフォルトの名無しさん mailto:sage [2020/05/14(Thu) 16:04:10 ID:X1Z5LMNW.net] >>3 >なんだ、17で俺スゲーやってんのおまえじゃん >おまえは仕事には危なくて使えないという立場 ? 俺の話じゃないんだが・・ いいから消えろよ荒らしは
5 名前:デフォルトの名無しさん [2020/05/14(Thu) 16:04:50 ID:QxbT6fEj.net] ホスト環境は17、組み込みは03で良いのでは?
6 名前:デフォルトの名無しさん mailto:sage [2020/05/14(Thu) 16:06:44 ID:Qhhsb9+b.net] >>5 その「組み込み」ってのは、まさかH8とかか? ARM用のコンパイラがどうなっているか知ってるか?
7 名前:デフォルトの名無しさん mailto:sage [2020/05/14(Thu) 16:07:42 ID:Qhhsb9+b.net] >>4 逃げたければ消えるのはおまえだ ほら行けよ、追わねえでやるから
8 名前:デフォルトの名無しさん mailto:sage [2020/05/14(木) 16:44:48.92 ID:7nN34odP.net] extern "C" 以下が、宣言になるなのか、定義になるのかについて、以下のページには、 extern "C" { int i; } と書くと、i は、「定義」される。 宣言で済ましたい場合には、 extern "C" { extern int i; }としなくてはならない。しかし、中括弧で囲まずに、 extern "C" int i; と書いた場合には、i は「宣言」だけされる、とあります。 さらに、これは変数の場合で、関数の場合には、戻り値 関数名(仮引数列) の後に関数定義部の{・・・} があるかどうかで宣言か定義かが変わるだけのようです。といいますか、関数の場合は、関数定義部 がなければ、「定義」しようがないのでそれは当然かもしれませんが(結構複雑です。)。 これらの動作について、cppreference などで述べられているページがあれば、 教えていただければ幸いです。 https://stackoverflow.com/questions/1041866/what-is-the-effect-of-extern-c-in-c Note that extern "C" { int i; } is a definition. This may not be what you intended, next to the non-definition of void g(char);. To make it a non-definition, you would need extern "C" { extern int i; }. On the other hand, the one-declaration syntax without braces does make the declaration a non-definition: extern "C" int i; is the same as extern "C" { extern int i; }
9 名前:デフォルトの名無しさん mailto:sage [2020/05/14(Thu) 17:19:49 ID:7nN34odP.net] >>8 【関連事項】 [winnt.h の中] #ifdef __cplusplus #define EXTERN_C extern "C" #else #define EXTERN_C extern #endif [urlmon.h の中] EXTERN_C const IID CLSID_CdlProtocol; // (100) [考察] (100)は、EXTERN_C のマクロ展開後 *pure C では、 extern const IID CLSID_CdlProtocol; // (101) *C++ では、 extern "C" const IID CLSID_CdlProtocol; // (102) となります。 (101)は明らかに(「定義」ではなく)「宣言」なので、モード間のバランスから考えて、 (102)も宣言でなくてはなりません。一方、 #ifdef __cplusplus extern "C" { #endif int aaa; #ifdef __cplusplus } #endif と書いた場合、aaa は、どちらのモードでも「(変数)定義」であり、単なる「宣言」ではありません。 これは、(102)が「宣言」であることと、ある種の矛盾を生じているようですが、これが現状の 正しい解釈のようです。しかし、この事が cppreference のどこに書いてあるのかが分かりません。
10 名前:デフォルトの名無しさん [2020/05/14(Thu) 17:25:47 ID:xR/PZA9p.net] 1回しか使われていない場合 2回以上使われている場合 「宣言」とは別に定義がリンクされている場合
11 名前:デフォルトの名無しさん mailto:sage [2020/05/14(Thu) 17:33:00 ID:7nN34odP.net] >>10 そういうことは理解しているつもりです。 extern ではなく、extern "C" の動作が、直後にブロックがあるかないかや、 変数か関数かによって、不思議な変化を見せることに興味があります。
12 名前:デフォルトの名無しさん mailto:sage [2020/05/14(Thu) 17:38:36 ID:Qhhsb9+b.net] int aaa; //definition in C++, tentative in C int aaa; //invalid in C++, valid in C
13 名前:デフォルトの名無しさん mailto:sage [2020/05/14(Thu) 17:48:01 ID:nTyJBG5I.net] クラスで定義された型を言語構文でバラして対応付けると言う非対称な気持ち悪さと const, 非constを混在して受けられない不便さとがあるな 構造化バインディング まーtuple限定ではなく構造体を対応付けられるから非対称ってわけでもないか
14 名前:デフォルトの名無しさん mailto:sage [2020/05/14(Thu) 17:51:54 ID:nTyJBG5I.net] >>8 extern "C" {} はブレース内をCリンケージで処理するつって話 extern "C" int a; はCリンケージのextern文
15 名前:デフォルトの名無しさん mailto:sage [2020/05/14(Thu) 18:15:11 ID:7nN34odP.net] >>14 stackoverflow以外に、公式サイトでそれが書かれている場所を教えていただければ幸いです。
16 名前:デフォルトの名無しさん mailto:sage [2020/05/14(木) 18:18:32.65 ID:jF4/VTtK.net] cppreferenceは仕様書じゃないから書いてなくても不思議じゃないと思うけど。 仕様書見たら?ドラフト版はネットに転がってる
17 名前:デフォルトの名無しさん mailto:sage [2020/05/14(木) 18:25:58.94 ID:7nN34odP.net] >>16 その公式アドレスを教えていただければ幸いです。
18 名前:デフォルトの名無しさん mailto:sage [2020/05/14(木) 18:27:40.05 ID:nTyJBG5I.net] >>15 cppreference.comに書かれてるぞ
19 名前:デフォルトの名無しさん mailto:sage [2020/05/14(木) 18:28:39.75 ID:nTyJBG5I.net] externの説明のnotesのところにな
20 名前:デフォルトの名無しさん mailto:sage [2020/05/14(木) 18:32:35.87 ID:jF4/VTtK.net] >>17 ggrks www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf あとcppreferenceはある意味ファンサイトみたいなものなので、何らかの標準化組織の公式サイトというわけじゃないよ
21 名前:デフォルトの名無しさん mailto:sage [2020/05/14(木) 18:42:47.93 ID:nTyJBG5I.net] つーか、cppreferenceに書いてあるのに見落としてよそのサイト教えろとか馬鹿丸出しで笑える
22 名前:デフォルトの名無しさん [2020/05/14(木) 18:45:51.63 ID:QxbT6fEj.net] バカにバカというのはバカ差別で違法だからね。
23 名前:デフォルトの名無しさん mailto:sage [2020/05/14(木) 20:34:45.27 ID:Qhhsb9+b.net] 情報量ゼロのゴミレスでドヤ顔する自覚なきクズ大杉 20はggrksと言いながらちゃんとリンク貼ってる
24 名前:デフォルトの名無しさん [2020/05/14(木) 20:40:53.93 ID:xR/PZA9p.net] >>22 https://www.youtube.com/watch?v=M-5c6l4QfC8
25 名前:デフォルトの名無しさん [2020/05/14(木) 20:46:17.52 ID:QxbT6fEj.net] >>24 「私たちは抗議活動のための支援団体、人道支援団体ではない」 反日団体だから慰安婦なんか知ったことじゃないって事だろ? 筋通ってると思うが。
26 名前:デフォルトの名無しさん [2020/05/14(木) 20:48:02.32 ID:QxbT6fEj.net] そういえば、チョンにチョンというのはチョン差別で違法だけど、日本人に日本人というのは別に問題ないね。 フランス人にフランス人というのも問題ないし、中国人に中国人というのも問題ない。 何が違うんだろ。
27 名前:デフォルトの名無しさん [2020/05/14(Thu) 20:51:04 ID:QxbT6fEj.net] チョンというのがダメなのかと思ったけど。 朝鮮人に朝鮮人というのも朝鮮人差別だから違法だよね。 ますますわからん。
28 名前:デフォルトの名無しさん mailto:sage [2020/05/15(金) 18:22:21 ID:hNzctM0s.net] 以下の混乱を、どう解決すべきか分かる人いますか? ・無名の共用体: 問題は特に有りません。 ・無名の構造体: 入れ子の構造体(nested class)の「型定義」と区別が付かない気がします。 以下はその説明です : class CPerson { // (1) struct _TAaa { // (2) ・・・ }; // (3) }; と書いた場合、(3) の部分にメンバ名が書かれていません。 しかし、これでは以下のどちらかなのか区別できない気がするのです。 a. CPerson の中に「無名ではあるが実態のあるメンバ」として「メンバ変数」を定義するつもり。 b. 単に、CPerson の class scope の中に _TAaa というタグ名を持つ構造体を「型定義」するつもり。 MSは、a の方針で、この形式 (2)〜(3) を、「anonymous structure」と定義しているらしいです。 しかし、C++ には、b の解釈の「nested class」という言葉も存在しています。
29 名前:デフォルトの名無しさん mailto:sage [2020/05/15(金) 18:32:30 ID:OzObLB6i.net] >>28 自分でコンパイルしてどうなるか試したんだよな?
30 名前:デフォルトの名無しさん mailto:sage [2020/05/15(金) 18:39:41 ID:7pqJGfJd.net] 2に名前つけている時点で無名じゃない
31 名前:デフォルトの名無しさん mailto:sage [2020/05/15(金) 18:44:03 ID:hNzctM0s.net] >>30 なるほど。
32 名前:デフォルトの名無しさん [2020/05/16(土) 16:37:49 ID:nLCzlpLv.net] std::bitset を std::unordered_map か std::map のキーとして使用したいのですが、 どうすればよろしいのでしょうか?
33 名前:デフォルトの名無しさん mailto:sage [2020/05/16(土) 16:40:58 ID:hM/FmoW0.net] >>32 やってみて、何か問題あったの?
34 名前:デフォルトの名無しさん mailto:sage [2020/05/16(土) 16:46:28 ID:tFvEvqcA.net] std::unordered_map<std::bitset<42>, int> um; um[std::bitset<42>("0011")] = 9999; std::cout << um[std::bitset<42>("0011")] ; 普通に動いたぞ 何に困ってるんだ?
35 名前:デフォルトの名無しさん [2020/05/16(土) 16:50:35 ID:nLCzlpLv.net] >>33 >>34 下のコードで書いてもエラーが出てしまってどうすればよいかがわからないんです。 #include <map> #include <unordered_map> #include <bitset> int main() { std::map<std::bitset<100>, int> a; std::bitset<100> n; n.set( 1 ); a.insert( std::make_pair( n, 100 ) ); // ここでエラーが出てしまいます。 return 0; }
36 名前:デフォルトの名無しさん mailto:sage [2020/05/16(土) 16:59:00 ID:hM/FmoW0.net] >>35 エラーメッセージも貼って、エラーメッセージのわからないところも書いてくれるといいな。
37 名前:デフォルトの名無しさん [2020/05/16(土) 17:07:47 ID:nLCzlpLv.net] >>36 error C2676: 二項演算子 '<': 'const _Ty' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません。(新しい動作; ヘルプを参照) with [ _Ty=std::bitset<100> ] message : クラス テンプレート メンバー関数 'bool std::less<std::bitset<100>>::operator ()(const _Ty &,const _Ty &) const' のコンパイル中 with [ _Ty=std::bitset<100> ] message : コンパイル対象の関数 テンプレート インスタンス化 'bool std::less<std::bitset<100>>::operator ()(const _Ty &,const _Ty &) const' のリファレンスを確認してください with [ _Ty=std::bitset<100> ] message : コンパイル対象の クラス テンプレート インスタンス化 'std::less<std::bitset<100>>' のリファレンスを確認してください message : コンパイルされている変数テンプレート 'const bool is_empty_v<std::less<std::bitset<100> > >' のリファレンスをご参照ください message : コンパイル対象の クラス テンプレート インスタンス化 'std::_Tree<std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,false>>' のリファレンスを確認してください with [ _Kty=std::bitset<100>, _Ty=int, _Pr=std::less<std::bitset<100>>, _Alloc=std::allocator<std::pair<const std::bitset<100>,int>> ] message : コンパイル対象の クラス テンプレート インスタンス化 'std::map<std::bitset<100>,int,std::less<std::bitset<100>>,std::allocator<std::pair<const std::bitset<100>,int>>>' のリファレンスを確認してください
38 名前:デフォルトの名無しさん mailto:sage [2020/05/16(土) 17:07:54 ID:tFvEvqcA.net] わかった、std::mapだとダメなんだな bitsetがoperator<持ってないからだ これ定義すればmapでも通ると思うよ template<> struct std::less<std::bitset<100>> { bool operator()(const std::bitset<100>& lhs, const std::bitset<100>& rhs) const{ return lhs.to_ulong() < rhs.to_ulong();} };
39 名前:デフォルトの名無しさん [2020/05/16(土) 17:08:13 ID:nLCzlpLv.net] といったメッセージが出ております。
40 名前:デフォルトの名無しさん [2020/05/16(土) 17:09:26 ID:is04b0b3.net] >>35 a.insert( std::make_pair< FOO , BAR >( n, 100 ) );
41 名前:デフォルトの名無しさん mailto:sage [2020/05/16(土) 17:09:55 ID:tFvEvqcA.net] まあどうしてもmapにしたい理由がなけりゃおとなしくunordered_mapにした方がいいと思うけど stdのテンプレートをstdのクラスで特殊化するのは本来は反則だし、unordered_mapの方がだいたい効率いいし
42 名前:デフォルトの名無しさん [2020/05/16(土) 17:16:42.14 ID:uXmamJPc.net] 普通に考えたらこれだろ。 std::make_pair( n, 100 )
43 名前:デフォルトの名無しさん [2020/05/16(土) 17:36:40.03 ID:nLCzlpLv.net] 皆さん。情報ありがとうございます。 >>38 試してみた所ビットを33個立てるとstd::overflow が出てしまうようです。 おそらく関数の仕様的な問題だと思うのですが…… >>40 a.insert( std::make_pair<std::bitset<MAX>, int>( n, 100 ) ); とやってみた所エラーが出てしまいました。 この辺の指定はコンパイラが勝手に行ってくれると思っていたのですが、 指定しなければならないのでしょうか? >>41 std::unordered_map を利用するとうまくいきました。 ありがとうございます。 >>42 すみません。 >>40 と同じ理由なのでしょうか?
44 名前:デフォルトの名無しさん mailto:sage [2020/05/16(土) 17:50:14 ID:qkv5Lv3o.net] bitset の値同士で < での比較ができないから map でエラーってことか。 unordered_map なら == で比較できれば使える、と。
45 名前:デフォルトの名無しさん mailto:sage [2020/05/16(土) 18:00:40 ID:tFvEvqcA.net] ああ>>38 だとulongにして比較してるからオーバーフローしちゃうな 真面目にビット比較するように関数書けば通ると思う 遅そうだしなおさらunordered_mapの方が良くなるけど
46 名前:デフォルトの名無しさん [2020/05/17(日) 14:06:29 ID:7W3ntFmq.net] ラムダ式にテンプレートの型指定ってできないんですかね? auto f = []<class T>(T) {}; auto f2 = []<class T>() {}; f(1); f2<int>(); fは引数にその型のパラメータがあるので大丈夫なんですけど、 f2だとコンパイルが通らないです...
47 名前:デフォルトの名無しさん mailto:sage [2020/05/17(日) 14:12:23 ID:ykqeUojC.net] ダミーの引数渡して decltypeするとかすればいいんじゃね
48 名前:デフォルトの名無しさん mailto:sage [2020/05/17(日) 14:33:24 ID:AX8hrxuQ.net] >>46 呼び出してるのはあくまでオーバーロードされた関数呼び出し演算子なので、こうする f2.operator()<int>(); https://wandbox.org/permlink/uVSptZMZErNrL5p3
49 名前:デフォルトの名無しさん mailto:sage [2020/05/17(日) 14:41:04 ID:7W3ntFmq.net] >>48 なるほど!ありがとうございます!!
50 名前:デフォルトの名無しさん [2020/05/18(月) 09:15:27 ID:XEI7YtdQ.net] なるほど 戻り値で判断するのも知りたい
51 名前:デフォルトの名無しさん mailto:sage [2020/05/18(月) 10:30:31 ID:VVfIWrZc.net] >>46 auto仮引数ではあかんの? auto f = [](auto arg) { cout << typeid(arg).name() << endl; }; f(1); //int f(1.5); //double
52 名前:デフォルトの名無しさん [2020/05/18(月) 19:43:09 ID:NOr8CY4q.net] 以下のコードを実行すると 'あ' がアルファベットと判定されてしまうのですが、なぜかわかりますか? Visual C++ 2019でもg++ 7.5.0でも結果は一緒でした(値は違いますが)。 std::locale loc(""); std::locale::global(loc); std::wcout << std::isalpha(L'あ') << std::endl; std::wcout << iswalpha(L'あ') << std::endl;
53 名前:デフォルトの名無しさん mailto:sage [2020/05/18(月) 20:28:29.14 ID:SqFV2JvV.net] あはアルファベットだからだろう
54 名前:デフォルトの名無しさん mailto:sage [2020/05/18(月) 20:49:09 ID:vxC60pVH.net] というより、その判定結果だからこそあはアルファベットなんだよ isalphaがtrueを返すものを現在のロケールにおけるアルファベットと呼ぶと言う方が正しいか
55 名前:デフォルトの名無しさん mailto:sage [2020/05/18(月) 20:53:28 ID:ah40zw28.net] いや、isalphaがtrueになる文字は各localeで決まっている isalphaはそれを垂れ流しているだけ
56 名前:デフォルトの名無しさん [2020/05/18(月) 21:32:06.39 ID:cgM2dsGJ.net] is_ascii_alpha()のほうが良く使う。
57 名前:デフォルトの名無しさん [2020/05/18(月) 22:16:41 ID:NOr8CY4q.net] ありがとうございます 普段は「日本語のアルファベット」とはあまり使わないけれど、 設定されている言語で表現するための文字のことをアルファベットと呼んでいると理解しておきます。
58 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 03:42:01 ID:dHzzm0xI.net] そもそも英語では普通にひらがなとカタカナを指して"Japanese alphabet"と呼ぶ
59 名前:デフォルトの名無しさん [2020/05/19(火) 10:55:08 ID:h69Ba80R.net] アルファベットはアラビア語が語源?
60 名前:デフォルトの名無しさん [2020/05/19(火) 10:56:23 ID:h69Ba80R.net] あと正確に言うなら日本語のアルファベットは いろは
61 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 12:21:31 ID:kOq4o5Tk.net] アルファベット=表音文字と言いたいの?
62 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 13:16:28.27 ID:kUNy0nAn.net] stlを考えた人は馬鹿だからな。
63 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 13:40:15 ID:kUNy0nAn.net] isalpha()が2バイト文字環境でいままで使われてきた経緯も知らずに勝手に仕様を変えてしまう馬鹿な人々。 min,maxも伝統的なマクロの存在を知らずに衝突させてしまう馬鹿。 さらに馬鹿なのはSTL作者達なのにコンパイラ処理系作者のせいにしてしまう愚かな烏合の衆たち。
64 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 13:44:38 ID:JQlWutmQ.net] isalphaは昔のcでもlocale依存だろ
65 名前:デフォルトの名無しさん [2020/05/19(火) 14:25:44.49 ID:O4jzhFRD.net] STLは、なぜあの時代に、ここまで抽象化できたのか?彼らは宇宙から来たのではないか?などと考えてしまうが。
66 名前:デフォルトの名無しさん [2020/05/19(火) 14:27:12.72 ID:O4jzhFRD.net] Windows.hのmin、maxは困りものだよな。
67 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 14:51:53.51 ID:oq2DQSv9.net] マクロでminmax書いているほうがどう考えてもバカだよな
68 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 14:54:10.83 ID:oq2DQSv9.net] win32の設計とかあーバカコードだなコレってのがちらほら
69 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 16:31:48 ID:kOq4o5Tk.net] >>67 御意
70 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 17:47:23 ID:HCP/tGTo.net] 人類がBOOST_PREVENT_MACRO_SUBSTITUTIONから解放される日は遠い
71 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 18:01:48 ID:0UAmioLe.net] STLの方が馬鹿。 今までのものを知らないで独自のものを書くのは簡単。 勉強もせずに独自の日記を書くようなことだから。
72 名前:デフォルトの名無しさん [2020/05/19(火) 18:23:54 ID:8HY/3oGP.net] なぜ会社を100社以上バックレたのか?働きたくない男の末路! https://www.youtube.com/watch?v=C73If3B6MXc 【遅刻早退ドタキャン癖】の絶望的な解説。社会人失格の烙印。 https://www.youtube.com/watch?v=bGarZKcC08s 【悲報】あがり症は完治しない!緊張対策よりも開き直り! https://www.youtube.com/watch?v=-jMUFZc9vRA 結婚式への参加は『社会の底辺』には地獄!非モテ手当を寄こせ! https://www.youtube.com/watch?v=oKFrGkpsP8Y 親戚の『葬式』ドタキャンで激怒された!冠婚葬祭パワハラが酷い! https://www.youtube.com/watch?v=0L-EAndCodE リボ払い借金500万円の一日!敗者復活ルーティーン https://www.youtube.com/watch?v=shJMgp6EuW8
73 名前: mailto:sage [2020/05/19(火) 18:33:01.90 ID:SLJ7GP9K.net] >>59 ちがいます、フェニキア文字由来ですよ アラビア語はセム語族の中でも後発後進国
74 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 19:02:02.51 ID:VP2fOBMJ.net] >>72 スレチ グロ
75 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 06:07:41 ID:8m9cjgNh.net] 関数(始点,終点)に馴染めないバカのあぶり出しだったな 関数(始点,個数)に固執してたやつらがSTLで吠え面かかされたw
76 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 14:27:55 ID:9xAqQrOe.net] https://ideone.com/vJRbP1 ミラーラビン素数判定法を聞いて作ってるんだけど、決定性に確定させるにはここからどうしたらいいですか?
77 名前:デフォルトの名無しさん mailto:sage [2020/05/20(水) 14:30:18 ID:9xAqQrOe.net] https://ideone.com/Gq2X2N 無しだとちゃんと出るっぽいです。ということを見せておきます。
78 名前:デフォルトの名無しさん mailto:sage [2020/05/21(木) 09:22:26.84 ID:r7XP4kDE.net] >>65 ソ連で生魚にあたって、入院中に病院の天井みてたら思いついたらしいぜ
79 名前:デフォルトの名無しさん mailto:sage [2020/05/21(木) 11:21:03.35 ID:K4ggzWEW.net] 寄生虫より有毒魚かもな フグみたいな命取りなやつじゃなくバラムツくらいなら腹壊す程度で済む
80 名前:デフォルトの名無しさん mailto:sage [2020/05/21(Thu) 20:23:36 ID:U7f5mioC.net] >>75 がどれに対するレスなのか分からんが みんな単にスルーしてんだろうなこれは
81 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 07:52:07 ID:QdrkGYuD.net] バカって素直だな ちゃんと返事しやがるw
82 名前:デフォルトの名無しさん [2020/05/22(金) 13:00:00 ID:c/ouk/Jn.net] dtmみたいな楽器を作る場合、音は何らかのライブラリを使うんでしょうか?1から作れるんですか?
83 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 14:03:10 ID:lsrfRepl.net] は? オリジナルは普通にサンプルしたものだろ
84 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 14:03:38 ID:lsrfRepl.net] つまり現実の楽器の音
85 名前:デフォルトの名無しさん [2020/05/22(金) 14:08:19 ID:c/ouk/Jn.net] >>83 シンセとかもサンプルしてるんですか?
86 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 14:39:41.09 ID:TUWJypw2.net] >>85 いかにもデジタル的な音は昔はFM音源だった。 あと、ランダムノイズ的なものも利用。 今は、楽器を物理シミュレーションしている場合がある。
87 名前:デフォルトの名無しさん [2020/05/22(金) 14:47:32.08 ID:Vl9NL0Mz.net] オートチューン使うと自分の声が楽器みたいになります。
88 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 17:31:59 ID:Sp8oG6pc.net] あるクラスのvectorに対し、個々のクラスのメンバのvectorを返すのってラムダ式でサクッと書けると思うのですが、どうやればいいですか? struct A { int i; }; vector<A> v(10); auto v_i = 〜ラムダ式〜 // サイズ10のvector<int>が返る こんな感じです
89 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 17:34:51 ID:O4ltSfT0.net] なにいってるのかワカランゴ
90 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 17:40:03.05 ID:Wrt3y1wd.net] [&]{ std::vector<int> ret(v.size()); std::transform(v.begin(),v.end(),ret.begin(),[](A d){return d.i;}); return ret; }
91 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 17:42:50.71 ID:Wrt3y1wd.net] [](A){...} のところは&A::iでもいいかな
92 名前:デフォルトの名無しさん [2020/05/22(金) 17:44:13.14 ID:Czx4JK5B.net] >>88 https://ideone.com/0s5iRL
93 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 17:59:27 ID:Sp8oG6pc.net] なるほど、std::transformを使うのですね Pythonみたいにサクッとできたらよかったのですが、ちょっとイメージと違いました ラムダ式に変な期待、というか勘違いしてました 素直にrange for文で個々にemplace_backするほうが短いし分かりやすいので、今回はそうします ありがとうございました
94 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 18:03:14 ID:Wrt3y1wd.net] pythonだと[d.i for d in v]って所か? lambdaじゃないけど
95 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 18:08:11 ID:UA0IlUzi.net] 内包表記だな
96 名前:デフォルトの名無しさん mailto:sage [2020/05/22(金) 19:08:51 ID:TUWJypw2.net] >>90 そういうSTLのbegin,end表記見てると pure Cのqsortの書き方を思い出してしまう。 危険なので毎回良く仕様書を確認してから慎重に使わないといけないという。
97 名前:はちみつ餃子 mailto:sage [2020/05/23(土) 00:02:55.12 ID:jzsRlJtI.net] range を使えば楽だろうと思ったんだけど view からコンテナに変換する関数は C++20 には入らなかったの? Range-v3 にある to みたいなやつ。 https://ericniebler.github.io/range-v3/group__group-range.html#ga555b843264809e3765210c42a66d3c3b
98 名前:デフォルトの名無しさん mailto:sage [2020/05/23(土) 20:12:53 ID:Ze0+o2k4.net] >>87 diva danceみたいに?
99 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 17:21:37 ID:UmTuuMOr.net] gdbのプロンプトでsqrtとかabsみたいな数学の関数使えないんだけど使えるようにする方法ある?
100 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 17:25:22 ID:CVgHI0+a.net] さぁ
101 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 17:52:37.65 ID:y56ZMEX8.net] 毎回生成したくない大きめな作業用配列とかって結局どこに持っとくのが良いの? メンバ変数として? グローバル変数として?
102 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 18:36:53.07 ID:IG528ewY.net] そんなことで悩むレベルなら毎回生成しろ たぶんそんなことでは全く遅くはならん
103 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 19:02:42 ID:8V/LyVfK.net] なるべく使う奴にしか見えないスコープに閉じ込めるんだよ bool1個だろうと10GBの配列だろうと一緒 基本を守るだけだ
104 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 19:50:08 ID:9+VJvnQZ.net] >>99 $ gdb some_program (gdb) break main (gdb) run (gdb) print ((double(*)(double))sqrt)(2.0) って感じで使えないかな。 たぶん some_program は何らか libm の関数を取り込んでないとダメだけど。
105 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 20:25:14 ID:UmTuuMOr.net] >>104 できました そのキャストが必須な理由はまだ理解してませんが
106 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 20:35:36 ID:8D/pm3yR.net] 作業用の領域の扱いってたしかにいつも悩むんだが、 *) ループや関数の内側で毎回コンテナ (vector, set, queue, etc...) を宣言し、初期化し、使う と *) ループや関数の外側にコンテナを宣言しておき、ループや関数の内側で初期化し、使う だと当然後者の方が低コストで、可読性を大きく損なわない限り後者の方が良いのだよな? 初期化の計算量のオーダーは両者とも同じだが、可変長コンテナのメモリアロケーションの回数を少なくするのが重要だと思って良いのだよな?
107 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 20:37:48 ID:8D/pm3yR.net] もう一個質問 STLコンテナの初期化は空とのswapでやったりすると思うが、この場合コンテナが置かれたメモリの場所は変わらんよな? つまり、余計なメモリアロケーションは起
108 名前:こらんよな? [] [ここ壊れてます]
109 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 20:45:00 ID:fWbzFAkP.net] なんかイラっときた
110 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 20:50:33 ID:CVgHI0+a.net] なぜ同意を求める? 部下に相槌を打つようにいつも説得しているのか? お願いします 教えてください も言えんのか
111 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 21:47:27 ID:HrRUxTGO.net] 行単位でファイルを読み込んだあと、パースするような処理で巨大なテキストファイルを扱う場合だと、顕著に後者が速くなる まあ一度プロファイラで確認してみればいいよ
112 名前:はちみつ餃子 mailto:sage [2020/05/27(水) 23:11:34.31 ID:OEK6SyHu.net] >>106 場合による。 「可読性を大きく損なわない限り後者の方が良い」という理屈なら 「速度を大きく損なわない限り前者の方が良い」とも言えてしまうよ。 どちらが大事かなんて場合によるとしか言いようがない。 >>107 C++ の標準ライブラリにあるコンテナに関して言えば swap でアロケーションは発生しない。 アロケーションは発生しないけど std::array はちょっと特殊で要素の swap が発生するので 線形時間がかかることになっていることには注意。
113 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 23:13:55.80 ID:CVgHI0+a.net] 要素のswapってなんだ? 再配置だろ
114 名前:はちみつ餃子 mailto:sage [2020/05/27(水) 23:26:27.55 ID:OEK6SyHu.net] >>112 再配置と言えば再配置ではあるけど、 >>107 の質問について 「コンテナが置かれたメモリの場所は変わらんよな?」に対しては「はい。 コンテナのメモリの場所は変わりません」だし 「余計なメモリアロケーションは起こらんよな?」に対しては「はい。 メモリアロケーションは発生しません」なので 正確に注意点を表現するなら「(格納場所の swap ではなく) 要素単位の swap ですよ」という表現になるでしょ。
115 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 23:50:44 ID:HrRUxTGO.net] 単にgetlineした文字列を vectorに詰める場合、 getlineしたバッファをmove push_backしたり、shrink_to_fitしてmove push_backするより、何もせずpush_backでコピーを詰め込んでバッファを使い回しってのが一番速くてメモリ効率もよく、コードもスッキリする
116 名前:デフォルトの名無しさん mailto:sage [2020/05/28(木) 00:31:33.05 ID:deInkrVp.net] そりゃそうだ
117 名前:デフォルトの名無しさん mailto:sage [2020/05/28(木) 05:51:39.46 ID:CImYg+b8.net] >>106 比べるようなものではない 毎回再初期化させる必要があるなら前者一択 ループを抜けた後で何かするなら後者一択
118 名前:デフォルトの名無しさん mailto:sage [2020/05/28(Thu) 17:31:30 ID:FcJ3hVy7.net] Promiseってなんでわざわざfutureを作ってあげなきゃいけないのです? 思想的な話なの?
119 名前:デフォルトの名無しさん mailto:sage [2020/05/28(木) 20:27:31.11 ID:MpYk07ZW.net] Nowなyoungにバカ受け
120 名前:デフォルトの名無しさん mailto:sage [2020/05/28(Thu) 22:23:48 ID:deInkrVp.net] 約束ってのは将来果たすためのものだからだよ
121 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 08:16:47 ID:eRAtimlp.net] このネーミングセンスには禿も苦笑してたな
122 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 10:12:51.28 ID:pukUYLjc.net] ビャーネ御大と江添のどっちだよ!
123 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 08:42:17.14 ID:iKoRaPmL.net] STLのsetで重複したノードの登録を除外する方法がわかりません 整列基準とするint key1,key2,key3の値にかかわらず、POINT positionが重複する値だったら除外したいのですが、意図した動作になりません 例えば(0,0),(0,1),(1,0),(1,1)の4パターンのみで同一パターンは除外されるようにしたいのに20パターン以上重複して登録されてしまいます setについてご存知の方いらっしゃいましたらご教示願います #include <set> #include <time.h> #include <windows.h> using namespace std; bool operator ==(const POINT& inA, const POINT& inB){ return (inA.x==inB.x)&&(inA.y==inB.y); }
124 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 08:42:47.02 ID:iKoRaPmL.net] //setに入れる要素 class CNode { public: POINT position; int key1; int key2; int key3; CNode() { position.x=rand()%2; position.y=rand()%2; key1=rand()%3; key2=rand()%5; key3=rand()%10; } //setに入れるCNodeポインタを整列する基準を定義 inline bool operator()(const CNode* a, const CNode* b) const { //positionの値が同じ要素はsetに登録しない bool same = (a->position == b->position); if( same ) return false; //↑このあたりが怪しい? ここでfalseを返すと登録数が期待よりも多過ぎ、何も返さないと期待よりも少なくなる //キーでの整列用 if(a->key1 != b->key1) return a->key1 > b->key1; if(a->key2 != b->key2) return a->key2 > b->key2; if(a->key3 != b->key3) return a->key3 > b->key3; return false; } };
125 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 08:43:16.96 ID:iKoRaPmL.net] typedef set<CNode*, CNode> NODE_POINTER_SET; int main() { srand((unsigned)time(NULL)); int NUM=100; printf("setへの登録候補数:%d\n",NUM); CNode* dammy[1]; NODE_POINTER_SET NodePointerSet(dammy, dammy+0, CNode()); CNode* node; for(int i=0; i<NUM; i++) { node = new CNode(); printf("%x:(%d,%d)【%3d %3d %3d】をセットへ\n" ,node ,node->position.x, node->position.y ,node->key1, node->key2, node->key3 ); pair<NODE_POINTER_SET::iterator, bool> insert_result = NodePointerSet.insert(node); //setへ登録 if( false == insert_result.second ) delete node; //重複で登録できなかった場合は確保したメモリを破棄 } printf("\nset内に登録された要素数:%d\n",NodePointerSet.size()); for(NODE_POINTER_SET::const_iterator it=NodePointerSet.begin(); it!=NodePointerSet.end(); ) { printf("%x:(%d,%d)【%3d %3d %3d】をセットから\n" ,*it ,(*it)->position.x, (*it)->position.y ,(*it)->key1, (*it)->key2, (*it)->key3 ); delete (*it); //メモリの後始末 it=NodePointerSet.erase(it); //setから削除 itは次の要素を指す } }
126 名前:蟻人間 mailto:sage [2020/05/31(日) 08:47:50.96 ID:KExNe49d.net] std::setの整列はlessでstd::unordered_setは整列せずでequalだったと思う。 たぶん近藤してる。
127 名前:蟻人間 mailto:sage [2020/05/31(日) 08:55:43.87 ID:KExNe49d.net] スマポ使わずにdelete使うのは古いよ。
128 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 09:07:29.52 ID:iKoRaPmL.net] >>125 すみません、もう少し詳しくお教え頂けないでしょうか 初心者で見よう見まねでやっているので… 整列はできているのですが、除外がうまく動かないかんじです スマートポインタは、難しそうなので私にはまだ早いと思っています (でも、そのうち取り組みたい)
129 名前:蟻人間 mailto:sage [2020/05/31(日) 09:13:01.00 ID:KExNe49d.net] std::setとstd::unordered_setの規格票を参照。テンプレート引数の最初は値。その次の引数は比較になっている。比較だけど、その比較はequalかlessなのかが問題だ。 lessというのは、不等号で書くと<。 equalというのは、==という意味。
130 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 09:41:05 ID:TtXgrlrn.net] >>127 最初は見よう見まねなのは仕方ないけど、関数の仕様を解説してるページを探して仕様を確認する癖をつけるといいぞ。
131 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 09:48:26 ID:zTMn2qwy.net] まずstd::setについて調べると https://cpprefjp.github.io/reference/set/set.html Compareは狭義の弱順序において前ならtrueとある 狭義の弱順序のリンクをたどると https://cpprefjp.github.io/reference/algorithm.html#strict-weak-ordering !comp(a, b) && !comp(b, a) として equiv(a, b) を定義する場合、 equiv(a, b) && equiv(b, c) は equiv(a, c) を意味する必要があると書いてある。 あなたの作った比較関数は、この条件を満たさない。 {{0,0},0
132 名前:,0,0}=={{0,1},0,0,0}=={0,1},0,0,1}だが、{{0,0},0,0,0}!={0,1},0,0,1}となってしまう。 [] [ここ壊れてます]
133 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 10:48:27.53 ID:zTMn2qwy.net] もう少しざっくりとした説明。 setは、ソートした後に、等しい要素が隣同士に並ぶことを前提としている。 これにより、隣り合った要素とだけ重複判定することで効率化している。 しかし、問題の比較関数でソートしても、等しい要素が隣同士に並ぶとは限らない。 {{0,1},0,0,6}, {{0,3},0,0,4}, {{0,1},0,0,2} のような要素列を、この比較関数でソートしても、順序は変わらない。 先頭と末尾が等しいはずなのに隣り合っていないため、重複判定が行われない。
134 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 11:51:01 ID:iKoRaPmL.net] 難しいですね… つまり //positionの値が同じ要素はsetに登録しない bool same = (a->position == b->position); if( same ) return false; のところをどう書き直したら動くのでしょうか? どうか教えて下さい m(_ _)mこのとおり!
135 名前:デフォルトの名無しさん [2020/05/31(日) 11:53:09 ID:27DcnLkI.net] 弱順序とか区分化とかあの説明だけで理解できたら天才だろ だから群論・集合論の教科書を数冊読むとC++がスラスラと理解できるようになる
136 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 11:53:23 ID:J1D5Z9UC.net] 自分でやる気がない人に教える気にはならないなぁ。
137 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 12:02:25 ID:6nfzU/vT.net] bool CNode::operator<(const CNode& rhs) const { if (key1 != rhs.key1) { return (key1 < rhs.key1); } else if (key2 != rhs.key2) { return (key2 < rhs.key2); } else if (key3 != rhs.key3) { return (key3 < rhs.key3); } else { return false; } } を実装したら最低限逝ける、 等値演算子「==」は、それがCNodeのメソッドまたはCNode&を引数にとる 関数定義がなされていなければ(!(a < b) && !(b < a))で遂行される ただしそれでは効率が悪いので(「==」1回につきoperator<()が2回呼ばれるので)、 「==」も手動で実装したらモアベターではある
138 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 12:12:06 ID:zTMn2qwy.net] >>132 そこだけ書き換えて修正するのは無理 あきらめて別の方法を考えることをお勧めする
139 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 12:25:20 ID:HQ8vNkm/.net] そもそもCNodeにoperator<実装してないのになんでコンパイル通ってんのか謎 隠してるコードがあるなら全部出せ
140 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 12:45:05.74 ID:J1D5Z9UC.net] >>137 > typedef set<CNode*, CNode> NODE_POINTER_SET;
141 名前:蟻人間 mailto:sage [2020/05/31(日) 12:51:20.01 ID:KExNe49d.net] inline bool operator()(const CNode* a, const CNode* b) const { if(a->key1 < b->key1) return true; if(a->key1 > b->key1) return false; if(a->key2 < b->key2) return true; if(a->key2 > b->key2) return false; if(a->key3 < b->key3) return true; if(a->key3 > b->key3) return false; //ここまでヒント。 }
142 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 12:58:31.73 ID:6nfzU/vT.net] >//positionの値が同じ要素はsetに登録しない >bool same = (a->position == b->position); >if( same ) return false; 仕様誤解してたサーセンgrz、、
143 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 13:17:45 ID:iKoRaPmL.net] 皆様ありがとうございます >>135 なるほど、<が2回呼ばれるのですか(いろいろ試していて2回ずつカウントされているのを不思議に思ってました) ご紹介頂いたコードを追加しましたが、rhsがポインタでないせいか効果がありませんでした ポインタを、そのメンバ変数基準で整列させたいのですが、 bool operator<(const CNode* lhs, const CNode* rhs)const で定義しようとするとコンパイルエラーC2804 binary 'operator <' に引数が多すぎます。 になってしまいます ==演算子も同様に駄目でした <や==演算子オーバーロードでポインタを整列させる事は無理なのでしょうか? >>140 の内容からすると、無理なのかな? (自分で試してみて無理そうだと思ったので、仕方なく()オーバーロードで定義を書いていました) >>139 ヒント見ても理解できないこの無能な鈍物めにお答えを賜りたく どうかお願いします!
144 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 13:48:52.93 ID:J1D5Z9UC.net] >>122 > 整列基準とするint key1,key2,key3の値にかかわらず、POINT positionが重複する値だったら除外したい これ要求に間違いが無いなら、独立した比較基準(整列用と重複判定用)が2つあることになるので、 単一の比較関数(およびset)で解決しようとしてるのが間違いかな。
145 名前:デフォルトの名無しさん [2020/05/31(日) 13:58:58.98 ID:27DcnLkI.net] △ ヒント ○ これ以上は分かりませんでしたがMOTTAINAIので貼ります
146 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 14:31:43.92 ID:iKoRaPmL.net] 簡単に出来そうだと思っていた事が、結構な難問だったようですね… 自分の力では無理そうだという事がわかっただけでも収穫でした 皆様ありがとうございました
147 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 14:33:26.01 ID:6nfzU/vT.net] 回答を示す、 1. 「<」と「==」演算子をグローバルな関数として定義する版: https://ideone.com/Qdi402 2. 「<」と「==」演算子をクラスのメソッドとして定義する版: https://ideone.com/3JTyiJ 3. (参考)スマポ版 https://ideone.com/bYOWcR 元のコードはいきなりinsertしようとしているがinsertの動作はinsertしてから重複だったかどうか返すというものなので、 生ポインタ版である1と2では事前にfindしている 3は事前findが不要で本来のコードとなったが、動作は後優先(先にinsertしたaと、後からinsertしたbがsameの場合、aが削除され、bが残る。)
148 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 14:40:09.33 ID:J1D5Z9UC.net] >>135 > 等値演算子「==」は、それがCNodeのメソッドまたはCNode&を引数にとる > 関数定義がなされていなければ(!(a < b) && !(b < a))で遂行される 要出典 >>145 > insertの動作はinsertしてから重複だったかどうか返すというもの 要出典
149 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 15:24:55.05 ID:6nfzU/vT.net] >>146 > > insertの動作はinsertしてから重複だったかどうか返すというもの > 要出展 仕様誤解してたサーセンgrz、、 と言うわけで>>145 のソースコードは以下の通り訂正汁、 1のソースコード ==> https://ideone.com/uRTmmo 2のソースコード ==> https://ideone.com/EdndM1 3のソースコード ==> https://ideone.com/UYMN5D (3は間違ったコメントを削除、およびアドレスの表示の誤りを訂正) > > 等値演算子「==」は、それがCNodeのメソッドまたはCNode&を引数にとる > > 関数定義がなされていなければ(!(a < b) && !(b < a))で遂行される > 要出典 しらそん;; テンプレートの定義とC++の言語仕様とかstd::rel_opsの存在意義とか想像したらワカル
150 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 15:28:53.38 ID:xFqcIaF1.net] C++は美しい bool operator <(const POINT& inA, const POINT& inB){ int rA2 = ( inA.x * inA.x + inA.y * inA.y ); int rB2 = ( inB.x * inB.x + inB.y * inB.y ); return ( ( rA2 < rB2 ) || ( ( rA2 == rB2 ) && ( inA.y < inB.y ) ) ); } inline bool operator()(const CNode* a, const CNode* b) const{ if(a->key1 != b->key1) return a->key1 > b->key1; if(a->key2 != b->key2) return a->key2 > b->key2; if(a->key3 != b->key3) return a->key3 > b->key3; return false; } NODE_POINTER_SET NodePointerSet2(dammy, dammy+0, CNode()); for(int i=0; i<NUM; i++){ node = new CNode(); pair<NODE_POINTER_SET::iterator, bool> insert_result = NodePointerSet2.insert(node); //setへ登録 if( false == insert_result.second ) delete node; //重複で登録できなかった場合は確保したメモリを破棄 } std::map<POINT, CNode*> mp; for(NODE_POINTER_SET::const_iterator it=NodePointerSet2.begin(); it!=NodePointerSet2.end(); it++ ){ if( !mp[(*it)->position] ){ mp[(*it)->position] = (*it); pair<NODE_POINTER_SET::iterator, bool> insert_result = NodePointerSet.insert((*it)); //setへ登録 } }
151 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 15:41:55 ID:J1D5Z9UC.net] >>147 key1,key2,key3 で整列しないのは回答として不適ではないの? 等値演算子「==」の話はただの思い込みだったということでいいんかね。
152 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 16:08:01 ID:HQ8vNkm/.net] setの重複排除条件をコントロールしたいだけなら std::(unordered_)setのPredテンプレート引数で制御すればいいだけの話じゃないの? からかって遊んでるだけ?
153 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 16:37:00 ID:zTMn2qwy.net] positionによる重複削除だけでなく、key1〜3によるソートと重複削除も必要だから 単純に順番にやるだけだと、余計な要素まで消えてしまう。 {{0,0},0,0,0},{{0,0},0,0,1},{{0,1},0,0,0} みたいなデータがあった場合、単純にpositionによる重複削除を先に実施してしまうと {{0,0},0,0,0},{{0,1},0,0,0} みたいになって、そこからkey1〜3によるソートと重複削除を行うと {{0,0},0,0,0} だけになってしまう。逆順でも同様の問題がある。
154 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 16:47:23 ID:HQ8vNkm/.net] その隠し要件どこに書いてるの?もしそれが必要なら横着せずに全部持っておくしかないね
155 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 17:24:57 ID:zTMn2qwy.net] 書いてるところはない。すまん。
156 名前:122 mailto:sage [2020/06/01(月) 08:41:58 ID:VTbJvOd1.net] すみません仕様間違えていました >positionによる重複削除だけでなく、key1〜3によるソートと重複削除も必要 ではなく positionによる重複削除だけでなく、key1〜3によるソートも必要 で、key1〜3が全部同じでもpositionが異なれば重複削除はしないという仕様が正しかったです なので >>148 さんが書いて下さったコードを追加して、 if(a->key1 != b->key1) return a->key1 > b->key1; if(a->key2 != b->key2) return a->key2 > b->key2; if(a->key3 != b->key3) return a->key3 > b->key3; return true;//ここをfalseではなくtrueに変更 にしたら、期待どおりの動作をしました 148さん本当にありがとうございます!とても助かりました 147さんもありがとうございます
157 名前:デフォルトの名無しさん mailto:sage [2020/06/01(月) 08:53:47 ID:idPskxLG.net] >>154 > return true;//ここをfalseではなくtrueに変更 明らかに違反してるじゃねーの? https://cpprefjp.github.io/reference/algorithm.html#strict-weak-ordering > 「狭義 (strict) 」 は非反射関係 (irreflexive relation) (全ての x について !comp(x,x) である)の要求
158 名前:デフォルトの名無しさん mailto:sage [2020/06/01(月) 09:14:14 ID:VTbJvOd1.net] 難しい事はわかりませんが、 動作検証が足りてないかんじでしょうか もし駄目だったら、諦めて別の方法を考えようと思います
159 名前:デフォルトの名無しさん mailto:sage [2020/06/01(月) 14:34:32 ID:o7IiynR8.net] double *array1; array1 = new double[count](); と書いた場合の、[count] の後ろの () の意味は何でしょうか? array1 = new double[count]; と書いた場合との違いは何でしょうか? ()の中に何か書くことは出来ますか?
160 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/06/01(月) 15:11:25 ID:0yVOdbpz.net] >>157 内容を初期化するかどうか。 普通のクラスでは括弧がなくてもデフォルトコンストラクタで初期化されるので 空の括弧があってもなくても意味はかわらないけど、 プリミティブな型などでは括弧無しのときは初期化しない。 (つまり内容は不定) 括弧があればゼロで初期化されることが保証される。 C++14 あたりからはこんな感じで初期化することもできるよ。 double *array1 = new double[]{1,2,3};
161 名前:デフォルトの名無しさん mailto:sage [2020/06/01(月) 15:34:55.48 ID:o7IiynR8.net] >>158 をー。有難う。
162 名前:デフォルトの名無しさん mailto:sage [2020/06/01(月) 18:12:14.25 ID:8BAaT/q7.net] 昔はよく{0}って書いてたというか書けなかったな
163 名前:デフォルトの名無しさん mailto:sage [2020/06/01(月) 18:13:08.51 ID:8BAaT/q7.net] ×書けなかったな ○しか書けなかった
164 名前:デフォルトの名無しさん mailto:sage [2020/06/02(火) 10:09:36 ID:d/ekt+66.net] ヘッダでvector要素の型を先行宣言で済ますことができるのc++20からだっけ?
165 名前:デフォルトの名無しさん mailto:sage [2020/06/02(火) 11:21:52.93 ID:7ZgjbGq0.net] Working Draft, Standard for Programming Language C++ Document Number: N4713, Date: 2017-11-27 というPDFを読んでいるんだけど、explicitキーワードの事について調べようとしても、 索引(index)には載ってないようだけど、どこに書いてる?
166 名前:デフォルトの名無しさん mailto:sage [2020/06/02(火) 12:04:07 ID:eZHppilZ.net] >>163 N4713だよね? P.1373の2行目は見た?
167 名前:デフォルトの名無しさん mailto:sage [2020/06/02(火) 12:30:40.82 ID:7ZgjbGq0.net] >>164 Indexのspecifier項目のサブ項目として書いてあったんですね。 でもこれだとexplicitが何なのかを知りたい人にとっては索引としての役割を果たさないです。 いわば国語辞典で知らない単語を調べるのに勝手にカテゴリー分けしてあるようなものです。 それでは辞典の意味をなしません。
168 名前:はちみつ餃子 mailto:sage [2020/06/02(火) 12:34:14.97 ID:N0F889O8.net] >>165 PDF なのだから、ある項目について知りたければ検索すればいいよ。 この分量を印刷して読んでいるわけではないよね?
169 名前:デフォルトの名無しさん mailto:sage [2020/06/02(火) 12:47:31 ID:67GQ09ou.net] 試しに検索かけたら1102件もヒットしたやんけ!餃子のバカバカ
170 名前:デフォルトの名無しさん mailto:sage [2020/06/02(火) 13:55:05.15 ID:7ZgjbGq0.net] AdobeRederは使いにくいので、SumatraPDF Reader を使って、まず、 左側のペーンに出てくる目次で index をクリックし、右側のペーンに 巻末の索引を出した後、右側のペーンの中で CTRL+Fを押して、 explicitを検索すると良いよう。
171 名前:デフォルトの名無しさん mailto:sage [2020/06/02(火) 14:01:01.31 ID:Ja+74ng6.net] 素直にありがとうも言えないのか これだからC++erは
172 名前:デフォルトの名無しさん mailto:sage [2020/06/02(火) 14:11:59 ID:7ZgjbGq0.net] >>169 ありがとう。
173 名前:デフォルトの名無しさん mailto:sage [2020/06/02(火) 14:58:48 ID:7ZgjbGq0.net] nested-name-specifier: :: type-name :: namespace-name :: decltype-specifier :: nested-name-specifier identifier :: nested-name-specifier template opt simple-template-id :: と有るのですが、このBNFだけで解釈するなら、ns1, ns2,ns3 という namespace が有った場合の ns1::ns2::ns3::変数名 のような場合、 namespace-nameと認識されるのは ns1だけで、ns2,ns3は、identifierと 識別されるのでしょうか。
174 名前:デフォルトの名無しさん mailto:sage [2020/06/02(火) 15:00:52 ID:7ZgjbGq0.net] ちなみに、 namespace-name: identifier namespace-alias namespace-alias: identifier となっており、namespace-nameには、a::bb::cc のようなものは含まれないと思われます。
175 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/06/02(火) 15:16:37 ID:N0F889O8.net] >>167 索引だけ検索すればええんや。
176 名前:デフォルトの名無しさん mailto:sage [2020/06/02(火) 16:38:50 ID:7ZgjbGq0.net] >>171 の定義だと、 decltype(x)::decltype(y)::decltype(z) のようなものは使えないということになるようです。 ひょっとすると、C++の仕様書的には、 ns1::ns2::ns3::変数名 も使えないのもかも知れませんがよく分かりません。
177 名前:デフォルトの名無しさん mailto:sage [2020/06/02(火) 17:30:17.43 ID:cu23LxCqi] C++初心者がオセロを作ろうと思います。 外部設計でクラス図を作ろうとし、 調べましたがクラスとして抽出する単位に困っています。 クラスにするものと理由、または抽出する方法を教えていただけませんか。
178 名前:デフォルトの名無しさん mailto:sage [2020/06/02(火) 17:48:50.88 ID:eZHppilZ.net] >>167 つーかよ、その1102件を末尾から順に見ていくとすぐなんだが そういう生活の知恵はあんまりないのかい?
179 名前:デフォルトの名無しさん mailto:sage [2020/06/02(火) 19:53:34.27 ID:Ja+74ng6.net] よくわかんないけど ツイッターで誹謗中傷してそう
180 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 10:50:24 ID:TdRUmxlv.net] https://en.cppreference.com/w/cpp/utility/hash MyHash{}(obj) std::hash<S>{}(obj) の{}は、直接リスト初期化のもので、いったんMyHash型やstd::hash<S>型のテンポラリ・オブジェクトを作成してからoperator()関数をobjを実引数にして呼び出しているという理解でよろしいですか?
181 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 11:38:29 ID:Nfbl5e81.net] newしたあとにdeleteしなくてもアプリケーションを終了すればメモリは解放されますか?
182 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 11:58:33 ID:VI2pYiE8.net] OSによる
183 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 12:21:28.49 ID:TdRUmxlv.net] >>179 Windows/Mac/Linuxではメモリー領域自体は絶対に解放される。 ただし、deleteが呼び出されるわけではないので、原則的にはデストラクタは呼び出されない。
184 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 12:24:39.32 ID:DAHZjgl3.net] >>176 たまたまの結果を生活の知恵とかw キーワードと通常言語が被らない日本語万歳だな
185 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 12:28:15 ID:Nfbl5e81.net] >>180 >>181 ありがとうございます!
186 名前:はちみつ餃子 mailto:sage [2020/06/03(水) 13:34:40.56 ID:3vvIkHpN.net] >>179 プロセスに割り当てられているメモリは現代の普通のデスクトップOS上でならプロセスの終了と共に解放されるのだけど、 オブジェクトは外部のリソースのハンドルを掴んでいることがあるから それを正常に (デストラクタで) 後始末しないとリソースリークが起こる可能性はある。 POD 型のオブジェクトに限ってならば管理されてるリソースはメモリだけだから delete しなくてもプロセス終了時におおよそ安全に解放されることは期待していいと思う。 言語仕様での保証はないので C++ スレ的に言えば「やめとけ」ってことになるけど。
187 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 13:47:15.12 ID:gQ0mUfsI.net] メモリと断っている人に余計なこといわなくていいと思うけど アプリの異常終了であっても解放されてほしいのだろうから c++の終了処理に依存してもしゃない
188 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 14:24:00 ID:UHE1JPNz.net] >>182 何がたまたまの結果だよ C++規格票とドラフトは巻末に索引があって 検索でヒットしすぎるときは末尾を見に行けば そこは索引の中である可能性が大きいというのを 思いつくことができんのかおまえさんの頭では だから見つけられなくて聞いてきたというなら合点だ
189 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 14:27:27 ID:UHE1JPNz.net] >>179 世の中すべての::operator newの内容を確認してからでないと答えられない質問だ もっと言うなら将来にわたってタイムマシンで確認してくる必要があるから 調査の工数が発散しちまう どういう意味かわかるな?
190 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 15:04:54 ID:TdRUmxlv.net] https://qiita.com/SaitoAtsushi/items/8da8ae7f6b84b1d806e4 int main(){ double a = 1.5; std::string b = "Hello World"; struct foo{}; xyz(a, b, foo()); } ↑のfoo()は一時オブジェクトの作成ですね?
191 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 15:11:30.37 ID:DAHZjgl3.net] >>186 他人の茶々入れに何言ってんだよw
192 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 15:12:28.27 ID:DAHZjgl3.net] >>187 やはりこんな奴かwww
193 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 15:35:53.72 ID:TdRUmxlv.net] めちゃくちゃ難しいです。#100の部分は恐らく「部分特殊化」というものだと思うのですが、 自分がネットで調べた簡単な部分特殊化とはちょっと違っているようです。 https://ja.wikipedia.org/wiki/SFINAE // どのようなテンプレート引数であってもvoidになる template <typename... Ts> using void_t = void; template <typename T, typename = void> struct has_typedef_foobar : std::false_type {}; // #100 template <typename T> struct has_typedef_foobar<T, void_t<typename T::foobar>> : std::true_type {}; // T::foobarが存在すれば、こちらが有効になる struct foo { using foobar = float; }; int main() { std::cout << std::boolalpha; std::cout << has_typedef_foobar<int>::value << std::endl; std::cout << has_typedef_foobar<foo>::value << std::endl; }
194 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/06/03(水) 15:40:53 ID:3vvIkHpN.net] >>188 そういうのはコメントで質問すれば?
195 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 15:42:50.44 ID:UHE1JPNz.net] >>189 他人かどうかは関係ねえぜ 俺が生活の知恵と言ったことを たまたまの結果と言ったのはおまえさんに他ならない 必然的に思いつくまでの思考過程を示されて 自分の浅はかさを誤魔化すのに他人がどうのと 再び浅はかな言い訳で恥の上塗りするのは やめたほうがいいんじゃないかな
196 名前:デフォルトの名無しさん [2020/06/03(水) 15:44:00.45 ID:TdRUmxlv.net] >>191 部分特殊化とは、 template <typename T1, typename T2> class A {・・・}; //#1 として、「primary class template」を定義後、もし、 template <typename T> class A<T, void>{・・・}; //#2 と書いた場合、 A<int,int> なら、#1が、A<int>なら#2が適用されるということでしょうか? ならば、A<int,void>はどうなるんでしょう??
197 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 15:46:30.08 ID:DAHZjgl3.net] >>193 やはりこういうやつかwww
198 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 15:47:08.09 ID:UHE1JPNz.net] #2 つーか、そんくらいやってみろよ
199 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 15:47:50 ID:UHE1JPNz.net] >>195 やーい、同じことしか言わなくなってやんのw
200 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 15:49:26 ID:DAHZjgl3.net] 必ずしも索引があるとは限らないのにあることを一般論化してドヤ顔するのと ヒープ解放するかどうかはすべてを尽くして調べられないからわからたないとドヤ顔してる奴が 同じ人物だってのが困るわぁwwww
201 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 15:49:47 ID:DAHZjgl3.net] >>197 >>198
202 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 15:52:20 ID:TdRUmxlv.net] >>194 >>196 2017年のDraftのPDFには、以下のようにあり、部分特殊化をinstance化する際には、A<int>ではなく、A<int,int*> と書く例があります: Partial specialization declarations themselves are not found by name lookup. Rather, when the primary template name is used, any previously-declared partial specializations of the primary template are also considered. One consequence is that a using-declaration which refers to a class template does not restrict the set of partial specializations which may be found through the using-declaration. [Example: namespace N { template<class T1, class T2> class A { }; // primary template } using N::A; // refers to the primary template namespace N { template<class T> class A<T, T*> { }; // partial specialization } A<int,int*> a; // uses the partial specialization, which is found through the using-declaration // which refers to the primary template —end example ]
203 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 16:02:27 ID:UHE1JPNz.net] >>198 C++規格票とドラフトと言ったはずだ 必ずしも索引があるとは限らないとぬかすなら そうなっていないC++規格票とドラフトを例示しろ 事実無根の誹謗中傷はやめてもらおうか
204 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/06/03(水) 16:06:58 ID:3vvIkHpN.net] >>194 ほんとに >>196 の言う通りだわ。 やってみてから思った通りにならないのはなんでだろうっていうならまだしも 「どうなるんでしょうか」なんてやってみりゃわかることだろ。 まあ C++ には未定義とか処理系定義とかもあるから 実際の挙動を以て言語仕様を理解しようとするのは危険でもあるんだが……。 特殊化ってのはまさに「特殊な場合」を定義するもんだよ。 その場合には A<T1, T2> のテンプレートの特殊な場合として A<T, void> の場合を定義してることになる。 特殊な場合である A<T, void> は特殊でない場合の A<T1, T2> と同じ形式である必要がある。 >>200 基本的な理念が理解できていないのに仕様を読んでも理解できねーよ。 (まあたまには仕様からとっかかる超人もいないことはないが。) お前は Rust スレでも見当はずれの根拠をコピペしては意味不明なことを言ってるが、 普通に入門書を読んでくれ。
205 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 16:19:58 ID:H6kZ1pQy.net] イキイキしてんなwww
206 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 16:24:47 ID:DAHZjgl3.net] >>201 予想通りで乙w
207 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 16:25:39.34 ID:TdRUmxlv.net] >>202 結局、答えられないんですね。
208 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 16:29:44.75 ID:gQ0mUfsI.net] そこで煽ってどうするw
209 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 16:50:20.37 ID:UHE1JPNz.net] 質問しといて無礼な口の利き方をするやつにはお仕置きだ 一切何も教えない
210 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 16:50:59.31 ID:UHE1JPNz.net] >>204 ぐうの音も出ねえとは おまえさんのことだな
211 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 17:02:24.74 ID:TdRUmxlv.net] >>207 答えられないだけ。
212 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 17:03:53.52 ID:DAHZjgl3.net] >>208 都合よくげんていつけたりなくしたりwwww
213 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 17:04:33.42 ID:DAHZjgl3.net] >>207 なんでも上から目線 やはりこういうやつかwwww
214 名前:晒しage [2020/06/03(水) 17:11:10.63 ID:UHE1JPNz.net] 181 返信:デフォルトの名無しさん[sage] 投稿日:2020/06/03(水) 12:24:39.32 ID:DAHZjgl3 [1/9] >>176 たまたまの結果を生活の知恵とかw キーワードと通常言語が被らない日本語万歳だな
215 名前:sage [2020/06/03(水) 17:55:41 ID:B/1kftuN.net] getCFile()ってよくわからないので教えてください。 コードに次のような部分がありました。 getFile()では置き換えられない? /// \brief Get C-file. /// \return Extracted stdio's @c FILE structure. std::FILE * getCFile(); file_.getCFile()
216 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 18:46:53 ID:TdRUmxlv.net] >>194 推定だけど、 A<T, void> の場合、2番目の仮引数がvoid型になっているので、そこには実引数を 指定しないということになっているらしい。 その結果、A<1> みたいに1つだけの引数でtemplateをinstance化できる 様になっている気がする。 まだ仕様書で確認したわけではない。
217 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 18:53:53.18 ID:HVfXpWIv.net] いや、省略した場合のデフォルトを指定しない限り、そんなことにはならない template <typename T1,typename T2=void> class A; みたいにする まあ、primaryの定義と同時にも書けるし、そっちが普通
218 名前:はちみつ餃子 mailto:sage [2020/06/03(水) 19:02:53.85 ID:3vvIkHpN.net] >>205 俺が答えていることすら理解できてない模様。
219 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 19:07:42.01 ID:TdRUmxlv.net] [驚くべきパターンマッチング] MS製のSTLのforward()のソースを呼んでいて驚いた。 forward()の引数のremove_reference_t<_Ty>&& _Argの部分は、とても複雑なパターンマッチングをしているらしい。 _Tyがまだ決まって無い段階で、remove_reference<_Ty> というテンプレートclass を展開してtype メンバを調べ、それと実引数から右辺値参照部分を除いた部分を一致させるような複雑な処理をした結果、_Ty を逆算して決定しているらしい。 template <class _Ty> struct remove_reference { // YA, #1, primary class template。" using type = _Ty; // const も保存されているハズ。 using _Const_thru_ref_type = const _Ty; }; ・・・ remove_reference<> に対する部分特殊化があるが、省略 ・・・ template <class _Ty> using remove_reference_t = typename remove_reference<_Ty>::type; template <class _Ty> _NODISCARD constexpr _Ty&& forward(remove_reference_t<_Ty>&& _Arg) noexcept { // forward an rvalue as an rvalue static_assert(!is_lvalue_reference_v<_Ty>, "bad forward call"); return static_cast<_Ty&&>(_Arg); }
220 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 19:08:51.14 ID:TdRUmxlv.net] >>216 仮に心の中にあってもあなたは全く言語化して無いないので駄目。
221 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 19:10:26.76 ID:TdRUmxlv.net] >>215 じゃあ、Wikipediaに載っていた>>191 の例はどう説明すれば良い? [] [ここ壊れてます]
223 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 19:14:50.42 ID:TdRUmxlv.net] >>219 そういえば仕様書に、templateをinstance化する際は、既に deducedされたパラメータは A<B>のBの中には書かないで良い例が書いてあった。 たとえば、 template <typename T1, typename T2>T1 f(T2 a); のような場合、 f<T1>(100); みたいにすれば、T2はint型だと分かるので、f<T1,int>(100)と書かなくて良いというもの。 それかな?
224 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 19:17:57 ID:TdRUmxlv.net] そうではなく、>>191 の場合は、primary template として、 template <typename T, typename = void> struct has_typedef_foobar : std::false_type {}; と、第二パラメータにデフォルト引数が書いてあるからか。
225 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 19:20:51 ID:HVfXpWIv.net] >>219 190ってまさにtypename=voidしている例じゃね
226 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 19:27:23 ID:TdRUmxlv.net] >>222 >>221 と入れ違いになった。 それで辻褄は合うけど、primary templage definition では、 template <typename T, typename = void> で、部分特殊化する際には、 template <typename T> としてあって、物凄い複雑だね。
227 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 19:48:21.19 ID:XMrfvYH7.net] TdRUmxlvは自分の日記帳に書いてくんないかな
228 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 20:15:01.97 ID:TdRUmxlv.net] 失礼しました。 でも断っておくと、俺ははちみつに対してそんなに悪口は言ってない。 スレの流れで混乱していたようだが、言っていたのは別人だから悪しからず。
229 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 22:21:05.04 ID:OT4MJN13.net] いちいちイラッとする書きっぷりはID:TdRUmxlvのコミュ力が絶望的に低くいだけなので許してあげてください
230 名前:デフォルトの名無しさん mailto:sage [2020/06/03(水) 23:25:41 ID:SSmphgFp.net] 憂さ晴らしに靖国に落書きしそう
231 名前:デフォルトの名無しさん mailto:sage [2020/06/04(Thu) 08:16:53 ID:85VTz4/e.net] とっくにNG
232 名前:デフォルトの名無しさん mailto:sage [2020/06/04(Thu) 13:15:35 ID:pT22FhoL.net] int& r_i=7; // compile error int&& rr_i=7; // OK 2行目は、どういう仕組みになってるんでしょう? 7という値がメモリー上にはどこにも存在して無い場合もあるはずで、 その場合でも右辺値参照を持てるものなのでしょうか? たとえばコンパイラの中に7という値は持っていても、アセンブラレベルでは、 どのsectionの中にも7というデータが入れられて無い場合もあると思うのです。 それだと7の入っている場所のアドレスは存在しえません。 例え「"右辺値"参照」であってもはアドレスが必要のはずですが。
233 名前:デフォルトの名無しさん mailto:sage [2020/06/04(Thu) 13:17:22 ID:+U2drwkO.net] 構ってはいけない
234 名前:デフォルトの名無しさん mailto:sage [2020/06/04(木) 14:43:12.11 ID:2rF1/e7a.net] >>229 言語規格的にはrr_iという名前を通じて7という値が取れれば何でもいい コンパイラが具体的にどうするかはコンパイラの勝手 アドレスがどこかで必要なら一時オブジェクトを作るようにするし必要なければ作らなくてもいい
235 名前:デフォルトの名無しさん mailto:sage [2020/06/04(Thu) 18:50:33 ID:pT22FhoL.net] >>231 どうやら、7の入ったint型の隠れた変数を一時オブジェクトとして作成してから、 そのアドレスをrr_iに入れているそうです。
236 名前:デフォルトの名無しさん mailto:sage [2020/06/07(日) 01:50:09 ID:P1Z5Y5je.net] >>229 int& r_i=7; // compile error 確かにこれはダメ int&& rr_i=7; // OK int& rr_j = rr_i; // OK これおかしくね?
237 名前:デフォルトの名無しさん mailto:sage [2020/06/07(日) 01:57:43 ID:loMZGJMS.net] &&嫌いだわ
238 名前:デフォルトの名無しさん mailto:sage [2020/06/07(日) 03:20:06 ID:NFGxwtnl.net] 右辺値参照自身は左辺値定期
239 名前:はちみつ餃子 mailto:sage [2020/06/07(日) 09:08:16.75 ID:fhJ4vSsJ.net] だから std::forward が要るんだよ。
240 名前:デフォルトの名無しさん [2020/06/07(日) 11:40:26 ID:uPPavgXr.net] 昔のソースコードからの派生で開発する際、リソースの開放だけをデストラクタで行うように変えたいと考えています RAIIだけを行う標準的な実装って何かあったりしますか? あるいは、自分で調べた限りでは例えば、 HANDLE hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); unique_ptr<void, decltype(&CloseHandle)> dummy(hFile, CloseHandle); // 以降dummyは使わずに生のhFileに対して操作 のようにunique_ptrを使えばできそうに見えますが、C++11以降の作法として正しいでしょうか?
241 名前:デフォルトの名無しさん mailto:sage [2020/06/07(日) 13:44:00.54 ID:ocvuft6U.net] 作法とか正しいとかより自分で考えた方がいいと思うけど その場合あえて言えば、hFile渡すとこは 直接CreateFileの戻り値使って(hFileを宣言しない)、dummyの持つハンドル経由で使った方が 一貫性が取れていいかも 理想を言えば全部ラップした方がいいんだろうけど
242 名前:デフォルトの名無しさん mailto:sage [2020/06/07(日) 13:55:18.98 ID:HzkE9Nko.net] >>237 その方法は始めてみた。 でも、unique_ptrなどを使わなくても、普通にC++98レベルのclassだけを使っても、RAIIは書ける。
243 名前:デフォルトの名無しさん mailto:sage [2020/06/07(日) 14:54:05 ID:HzkE9Nko.net] >>239 RAIIというのは物凄く簡単に実装できて、細かいことを抜きにすれば以下の様にすれば完成する : class CMyX { protected: HANDLE m_hFile; public: CMyX(HANDLE hFile) {m_hFile=hFile;} ~CMyX() {CloseHandle(m_hFile);} } HANDLE hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); CMyX myx(hFile); // これが初期化。後は勝手に hFileが解放される。
244 名前:デフォルトの名無しさん mailto:sage [2020/06/07(日) 15:37:10.54 ID:NFGxwtnl.net] ポインタ以外のリソースでRAIIやらせるためのstd::unique_resourceが提案されてるけど難航してる リソースの種類や使い方でそれぞれ事情が違うから無理矢理一般化しても上手く行かないらしい
245 名前:デフォルトの名無しさん mailto:sage [2020/06/07(日) 15:48:34.18 ID:HzkE9Nko.net] >>240 補足すると、このコードだとCreateFile()した後、返されたハンドル値を No CheckでCMyXのコンストラクタに渡しているが、本当はその前にINVALID_HANDLE_VALUEかどうかをチェックしておく必要がある。
246 名前:デフォルトの名無しさん mailto:sage [2020/06/07(日) 21:39:58 ID:P1Z5Y5je.net] >>235 そこじゃなくて int& r_i=7; // compile error をエラーにする必要ある?ってこと リテラルを右辺値参照できんならエラーにする必要ないじゃん
247 名前:デフォルトの名無しさん mailto:sage [2020/06/07(日) 21:49:43 ID:NFGxwtnl.net] それがエラーじゃなかったら右辺値参照は何のためにあるんだよ
248 名前:デフォルトの名無しさん mailto:sage [2020/06/07(日) 21:56:24.65 ID:P1Z5Y5je.net] >>244 別にリテラル受けるためにあるわけじゃないでしょ 別の言い方すると int&& rr_i=7; // OK わざわざ一時オブジェクトつくってこれOKにする理由って何なの?
249 名前:デフォルトの名無しさん [2020/06/07(日) 22:22:50.71 ID:uPPavgXr.net] >>238 ,239,241 ありがとうございます >>240 はい、そうなんですけれど、こういったコードも省略したいということと、 頻繁に必要になるので標準ライブラリに入っていないかなって期待していたわけです >>241 なるほどstd::unique_resourceっていうので検討中なんですね これが標準に組み込まれるのを期待しておきます
250 名前:デフォルトの名無しさん mailto:sage [2020/06/07(日) 23:16:58 ID:+YSUT0gy.net] More Effective C++ の、 項目9 : リソースリークを防ぐためにデストラクタを使う 項目11 : デストラクタから発生した例外を抑える デストラクタ中で、例外がキャッチされない場合、 terminate を呼ばれて、受け身も取れず、強制終了させられる
251 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 11:21:10.82 ID:KlUsfYw8.net] >>246 CreateFile以外にも似たようなのが沢山あって、それを楽にRAIIにしたいって話? ならすでにunique_resourceはあるらしいけど(experimentalだかどこかに あるいはそれに近い実装も公開されてるので落としてくればいいかと 逆にCreateFileだけなら素直に自分でクラス書いた方が後々楽になると思う
252 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/06/08(月) 12:33:58 ID:KAmnJXdU.net] リソースの解放以外は生のハンドルが使いたいという前提だと、 「unique_resource で包まれたオブジェクトからハンドル使うたびに (get で) 取り出す」という操作が必要になる。 たぶん >>237 の書きようだとそういうことはしたくないんだろうし、 包む前のハンドル (が入った変数) をそのまま使うとなると折角の所有権管理が台無しだ。 unique_resource はリソースの所有権管理の仕組みであって、 デストラクタでリソース解放もするのは所有権管理に付随するものに過ぎない。 どちらかというと scope_exit の方がやりたいことに近そうな気がする。 けど、いずれにしても中途半端なんだよな。 現時点でリソースの解放 (CloseHandle) がちゃんとできているなら それを unique_resource (なり scope_exit なり) に置き換える意味はあまりないんじゃなかろうか。 「CloseHandle の書き漏らし」ってのと「scope_exit の書き忘れ」 ってのは同程度に有り得ることで、そんなに良くならないと思うよ。 型としての HANDLE の実態は void* なので、 HANDLE を HANDLE として扱おうとする限り C++ の型システムの恩恵はあまり受けられない。 古いコードをなるべくいじらずに使いたいという理由はとてもよくわかるのだけれど、 半端な書き換えをするくらいなら抽象レイヤをきちんと構築した方が結局は楽だと思う。
253 名前:デフォルトの名無しさん [2020/06/08(月) 15:51:51 ID:blut5LG8.net] void * と型として区別出来ない? 型はともかくそもそも HANDLE は値の範囲が決まってたか
254 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/06/08(月) 16:16:36 ID:KAmnJXdU.net] かなり前から DECLARE_HANDLE マクロで HANDLE は固有の型として定義してた。 そこは私の認識間違いだ。 すまぬ。 >>250 void* という型として認識出来たところで何が出来るものでもないよねという意図だった。
255 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 23:54:23 ID:3GgB/ZcK.net] >>240 しね〜よ void bar(CMyX& x, HANDLE h) { // hを思わずclose CloseHandle(h); } void foo() { HANDLE hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); CMyX y(hFile); bar(x, h); // このあとしぬ } >>240 のCMyXはハンドルをマジWrapしてるだけで全く使えない しねよ
256 名前:デフォルトの名無しさん mailto:sage [2020/06/08(月) 23:56:48 ID:3GgB/ZcK.net] というわけでget()メソッドが無いのも大概だが それより悪いのはCloseHandle()が失敗したときのことを何も考えていないことだ ファイルのClose失敗はエラーハンドリング省略で済まされる問題ではない デストラクタでCloseHandle()を一概に否定するものではないが、 デストラクタから例外を飛ばすわけにもいかないので、エラーの通知先オブジェクトへのポインタをCMyXは持つ必要がある
257 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 00:00:40 ID:Ah9aU5+0.net] いきってツッコむほどのことかそれ
258 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 03:22:41.56 ID:SETbyCsO.net] >>253 File Handle のような OS Object については、RAIIで処理するのは実は難しいんだよ。 だから、WindowのDestroyWindow()もデストラクタで処理する前に明示的に CWnd::DestoryWindow()を自分で呼び出すほうが良かったりするんだから。 デストラクタだけを頼りにすると、main()やWinMain()関数の後の クリーンアップ処理の中で CloseHandle()が呼び出されたりすることになるが、 それは結構微妙な話になる。 なぜかといえば、まず、OS自体がそもそも、プロセスが終了する時には 勝手にすべてのハンドルを閉じてくれる。ならば、CloseHandle()なんて明示的に 書く必要が無い、というそもそも論が出てくる。 それプラス、あなたが言ったように、CloseHandle()で失敗した場合にどうなるか という話もあることはある。 そもそも、個人的には、ファイルを開いたら、なるべく速く Closeする方が良いと思っている ので、RAIIでファイルハンドルを処理するのは余りぴんと来ない。
259 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 06:33:30.92 ID:iLzxHGzP.net] アプリ全体の終了が前提になっているおかしな主張だな
260 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 06:54:05.72 ID:unijwXHc.net] CloseHandleやfileのcloseで失敗する様な状況って、普通のアプリじゃ実質対処不能な致命的な状態だろ 素直に落ちるなりおかしな挙動になるなりすればいいのよ
261 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 07:55:59.54 ID:n28tZ6EV.net] OSやハードが正常稼働時ならそこら辺の例外発生はないからね。 リソース解放忘れてデスクリプタやらのリソース使い果たしたり、ファイルの占有したままで他のアプリに迷惑かけたりするのを防止するのにRAII使うのは有用
262 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 08:00:35.85 ID:JJE9ezaH.net] HANDLEってOS側からはそれが有効か無効か判断できるから、無効なハンドルを 間違って使ったりCloseHandleしてしまってもエラーを返すだけで致命的な状態には なりにくい
263 名前:865 mailto:sage [2020/06/09(火) 09:27:54.99 ID:cTF8gHLn.net] 前提にしているのがどんなOSであろうと C++的には環境依存な話だね
264 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 15:37:05.70 ID:FUnSNOef.net] 要素はintと任意オブジェ int値を渡すと 論理和がゼロ以外の要素を 返すコンテナってないですか?
265 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 16:12:25.38 ID:SETbyCsO.net] >>257 もし、CTRL+Sを処理するイベントハンドラの中で、単純に CloseHandle()を自分で呼び出して 失敗した場合であれば、保存に失敗した事をAfxMessageBox()で知らせた後、なんとか今までの メモリ中のデータだけは壊さずに処理できればベスト。 しかし、他の何らかの例外が発生した時に、RAIIによって自動的に呼び出されたデストラクタの中で CloseHandle()に失敗した場合には、対処が難しそう。 テストも難しいし、余りそういう状況は起きないので優先順位は低いが。
266 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 17:15:04.89 ID:nNNGB7r+.net] >>261 std::pair<int, SomeObj> を格納するコンテナと 「int部分とある値とのビットORを結果とする述語」を std::copy_if() に渡すような話かな。 「任意オブジェ」部分が要素ごとに異なる、だと難問な気がするけど。
267 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 17:30:16 ID:n28tZ6EV.net] 論理積ではなく?
268 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 17:42:20.88 ID:nNNGB7r+.net] 確かに論理和だと「つまらない」結果になりそうね。 普通の使い方なら論理積で抽出か。 排他的論理和は「もっと面白い」かも知れんけど。
269 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 22:35:23.41 ID:FUnSNOef.net] >>263 それで組んでみます ありがとうございました あと実際は論理積です
270 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 05:39:12.94 ID:67cF/bBY.net] >>257 「ログファイルなので書込みに失敗しても大勢に影響が無い」とか 「作業用ファイルfは書いた後必ず誰かがリードオープンするから書込みに失敗していたらそこでワカルから書込みのエラーチェックを省略する」 みたいな判断はアプリの設計としてはアリかもしれないが、CMyHandleみたいな汎用部品的に使われ得る低水準クラスではナシ これをアリだと思う香具師はお気楽すぐる、
271 名前: mailto:sage [2020/06/10(水) 05:44:30.52 ID:OTs8rmHM.net] >>267 でも >>257 の CloseHandle() や fclose() が失敗したからといって、何か手が打てるのですか? 何もできないのでは? もしかして黙って exit() するのですか?
272 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 07:23:10 ID:itI4VuCe.net] てか、自動解放するクラス作っても手動解放する手段残しておけば、使う側で特別な処理は出来るんだよね
273 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 08:13:57 ID:V+CQutVh.net] C++ではexitをD組にして欲しい
274 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 12:31:11 ID:BPKUZfdj.net] >>268 通知は欲しいかな。 黙って動作が続くくよりは terminate() のほうがマシだとも思うし。汎用部品ならなおさら。 破棄失敗する可能性のあるリソースの RAII wrapper にはエラー通知できる close() なりの破棄操作を別に用意しておけという話で済むと思う。
275 名前: mailto:sage [2020/06/10(水) 21:10:53.11 ID:OTs8rmHM.net] >>271 通知って簡単にいいますけれども、その例えば fclose() 失敗の通知をどこに送り、そして送った先では何をするのですか? 通知をもらって何か手を打てるのですか? 汎用部品/ライブラリの作法ですか 理解はできますが、しかし、何もできないのなら、あるいは何もできないことがわかっているのなら、特段の失着にはみえませんね…
276 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 21:56:31.91 ID:yfneRFZn.net] 大事なデータを保存したファイルのfclose()が失敗したらどうするかって? 場所変えて保存を試みるに決まってるだろ それくらいしないプログラムは売り物にならないぞ
277 名前:デフォルトの名無しさん mailto:sage [2020/06/10(水) 22:20:00 ID:yQDU6thd.net] そもそも仕様で指定があるならそのように書くだけなんじゃ
278 名前:デフォルトの名無しさん mailto:sage [2020/06/11(Thu) 00:27:51 ID:flOLYJrB.net] >>272 たとえばコンソールアプリなら標準エラーに情報を出したうえで終了コードに反映して、 コマンドが失敗したのを見たユーザーが何をするか考えるっていうのはごく当たり前のことでしょ。 たとえばストレージ容量が足りないとして失敗したなら容量を確保して再実行すればいい。 fclose() の戻り値を捨ててるプログラムは現実としてたぶん多いんだけど、 そんなソフトがたとえばサーバー内でストレージ容量不足を数か月にわたって闇に葬り続け、 何かおかしいと気付いたサーバー管理者が自動スクリプトを緻密にトレースした結果、 保存されているはずの情報がもはやどこにも存在しないと気付いた時の怒り憎しみ悲しみを想像されたい。 少なくとも成功したと誤解しないのが重要。
279 名前:デフォルトの名無しさん [2020/06/11(Thu) 06:18:34 ID:m7gaY4Qp.net] そんな状況じゃopenも失敗してるだろうな
280 名前:デフォルトの名無しさん mailto:sage [2020/06/11(木) 09:58:48.19 ID:Th6rh/3U.net] >>275 実はそれがRAIIの限界なんだよ。 ちゃんと明示的に fclose() してその戻り値をチェックするのが一番安全。 例外安全性のためにRAIIを使うべきという人が居るけど、それで勝手に デストラクタ内でfclose()して容量不足やディスクエラーで書き込み失敗した時には、 多くの場合、対処に困る。 でも、例外安全のためにはそうせざるを得ないかも知れない。 ということは、そもそも論になり、例外の throw、catch機構自体が安全に扱うのが 難しいという結論に至り、議論百出する。
281 名前:デフォルトの名無しさん mailto:sage [2020/06/11(Thu) 10:29:20 ID:flOLYJrB.net] >>277 それは飛躍しすぎかな。 破棄が失敗する可能性のあるリソースの RAII ラッパーが破棄操作も提供すれば済む話でしょ。 std::fstream の close() みたいに。
282 名前:デフォルトの名無しさん mailto:sage [2020/06/11(木) 10:38:30.62 ID:3eiGl155.net] 上から目線なくせに脇が甘いな
283 名前:はちみつ餃子 mailto:sage [2020/06/11(木) 11:08:58.38 ID:7wv0rqaB.net] デストラクタ内でエラーが発生する可能性があってそれに対処が必要なら 例外の送出とか言ってないでデストラクタ内で対処してしまえよ。 汎用的な部品にし難いのはしゃーないやろ。 実際に汎用的ではないんだから。
284 名前:デフォルトの名無しさん [2020/06/11(木) 11:47:39.02 ID:DcPEy/qZ.net] おまいら (f)printf() の戻り値もちゃんと毎回観てるか?
285 名前:デフォルトの名無しさん mailto:sage [2020/06/11(木) 11:54:46.87 ID:Th6rh/3U.net] >>280 そうじゃなくて、何らかの別の事情で例外が送出された時に、fclose()し忘れを 防ぐためにRAIIのテクニックを使う場合の話をしてる。
286 名前:デフォルトの名無しさん mailto:swage [2020/06/11(木) 11:56:16.72 ID:Th6rh/3U.net] >>278 fstreamであろうがなんであろうが、GUIアプリに置いて、デストラクタ内で失敗した 時にユーザーに失敗したことを知らせるのは結構難しいぞ。
287 名前:デフォルトの名無しさん mailto:sage [2020/06/11(Thu) 12:17:49 ID:3eiGl155.net] そんなに難しいか? 深刻な事態が疑われるならシステムモーダルダイアログなり何なりすることあるだろ あくまでOSではなくアプリとして事後条件が保証できない場合はterminateを呼び出して OSに事故としての扱いをさせるのが「難しい」のは思いつかないだけじゃねえだろな プログラミング以外の仕事でも事故はまず報連相 1人で握りつぶそうとするのは学生気分が抜けてないやつのすることだ
288 名前:デフォルトの名無しさん mailto:sage [2020/06/11(Thu) 12:19:04 ID:flOLYJrB.net] >>283 そりゃ難しいだろうな。 通知が要るならデストラクタ内で失敗させないように破棄操作を提供すれば済むだろうという話をしたつもり。 それで済まないケースを想定してるなら、どんなのか教えて。
289 名前:デフォルトの名無しさん mailto:sage [2020/06/11(Thu) 12:21:07 ID:flOLYJrB.net] >>284 そっか GUI ならダイアログ使えるから、通知するだけなら簡単だね。
290 名前:デフォルトの名無しさん mailto:sage [2020/06/11(Thu) 12:22:43 ID:Th6rh/3U.net] >>285 >通知が要るならデストラクタ内で失敗させないように破棄操作を提供すれば済むだろうという話をしたつもり。 意味が分からないので、説明を。
291 名前:デフォルトの名無しさん mailto:sage [2020/06/11(木) 12:29:07.29 ID:Th6rh/3U.net] >>284 Exceptionをthrowした時の自動フォローアップとしてRAIIのデストラクタが呼び出される。 それが呼び出されるのは原則的にどこかでかは余り仮定できない。 ということは、非常に変なタイミングで fclose()に失敗することがある。 メッセージボックスを出すと、そこでイベントに対するメッセージループが形成されるので、 タイマーイベントのハンドラのOnTimer()などが起動してしまうこともある。 OnTimer()を、Exceptionがthrowされた状態で実行してよいかどうかは注意を要する事だ。 また、アプリの初期化処理の InitInstance()や終了処理のExitInstance()の中で、RAIIの デストラクタが呼び出されてしまう場合もあるかも知れず、その中でメッセージボックスを 出すと思わぬ問題が生じるかもしれない。 生じないかも知れないが。 ただ、Exceptionがthrowされたということは何か異常が生じているということで、 それがたまたまファイルに関するものであったとしたら、二重三重に、ファイル関連で エラーが生じてしまい、何か危険な状態に陥ってしまう可能性も有るかも知れない。 そういう微妙な配慮が必要となる。
292 名前:デフォルトの名無しさん mailto:sage [2020/06/11(木) 12:33:42.17 ID:Th6rh/3U.net] >>288 もっといえば、Exceptionのthrowはどこで起きるかは仮定しにくいものなので、 何らかのダイアログを出すための初期化処理の中で生じることも有るかも知れない。 そういう場合にたまたま、関数の呼びだし元へ どんどん Exception の Unwinding が生じて、RAIIのデストラクタで fclose()が呼び出される可能性も有るかも知れない。 そうなって、さらに、その fclose()がエラー終了する場合がある。 ダイアログの生成に失敗したタイミングで、エラーメッセージの表示のために、 メッセージボックスのダイアログを出すことになれば、もしかしたらかなり危険な バグを含むことになってしまうかも知れない。
293 名前:デフォルトの名無しさん mailto:sage [2020/06/11(木) 12:49:26.16 ID:flOLYJrB.net] >>287-289 ごめん、別の例外でスタック巻き戻し中の fclose() 失敗は無視でもいい想定だった。 元の例外が通知されればそれでいいだろうと。 破棄操作を提供すれば済むっていうのは、たとえば fstream について 正常フローから close() 呼び出せば fclose() の失敗は普通に処理できるっていう意味。 エラー発生後の後処理でのエラーについてはもはや例外処理機構とか RAII とか関係なく エラー処理一般で難しさは変わらないのでは?
294 名前:デフォルトの名無しさん mailto:sage [2020/06/11(木) 13:14:41.21 ID:4Jo+eUkD.net] >>288 何を言い出すかと思ったらシングルスレッドを 気分だけマルチっぽく見せかけてるだけなやつの話か
295 名前:デフォルトの名無しさん mailto:sage [2020/06/11(Thu) 17:56:16 ID:+WuQ8P1K.net] そんなに大事なデータならverifyするだろ
296 名前:デフォルトの名無しさん mailto:sage [2020/06/13(土) 16:05:30.52 ID:ifM7/RIh.net] >>272 >知って簡単にいいますけれども、その例えば fclose() 失敗の通知をどこに送り、そして送った先では何をするのですか? 最終的にはユーザーに通知する >通知をもらって何か手を打てるのですか? ユーザーが通知に従い手を打てる >>280 デストラクタ内での例外を送出したら即アプリが死ぬハズ コアを吐いてくれたら通知にあたる情報が取り出せるかもしれないが美しくない >>288 異常の内容をユーザーに通知することを目的とするなら >エラーの通知先オブジェクトへのポインタをCMyXは持つ(>>253 ) で事足りる メッセージループは、通知先オブジェクトが1個だけもちさえすればユーザーへの通知の役目を果たせる CMyXのようなケースは通知先オブジェクトを保持するオブジェクトからFactoryMethodパターンでインスタンス化 するのがいかにもOOP的で個人的には好み(CMyXのインスタンス化のときに通知先を確実に渡せる
297 名前:はちみつ餃子 mailto:sage [2020/06/13(土) 16:59:34.64 ID:1nypd8FJ.net] >>293 私が書いた >>280 ではデストラクタ内で対処を完結させろ (例外を投げずに済ますために) と書いてあるつもりなんだが、お前にはそれが読み取れなかったか? ちなみに、現在の C++ ではデストラクタ (と delete) はデフォルトで noexcept で修飾されているものと見なされる。 これは例外を外へ送出しないことを保障するんだが、内部で例外が発生しないとは保証されない。 もし発生した例外を内部でキャッチせずに外へ出ていこうとしたら std::terminate() が呼び出される。 (スタックの巻き戻しは起こらずに即死するかもしれない。) 陽に noexcept(false) を指定したらデストラクタから例外を送出することは可能。 ただし、スタックの巻き戻し中に起動される別のデストラクタから例外が送出されると死ぬ。 普通は色々なライブラリを組み合わせるから問題が出ないようにするには 一貫してデストラクタからは例外を投げないのが妥当な設計だと考えられているってだけ。
298 名前:デフォルトの名無しさん mailto:sage [2020/06/13(土) 17:06:07.88 ID:ifM7/RIh.net] >>294 よく読んでなかったわサーセンwwwwwwwwwwww >>293 ので >デストラクタ内で対処を完結させろ (例外を投げずに済ますために) のアッパーコンパチになるのだから結果オーライで オール無問題、
299 名前:デフォルトの名無しさん [2020/06/13(土) 20:11:16.15 ID:K/U+GWpl.net] 個人でc++使うことは少ないですか? C#やelectronと比べて何倍手間がかかりますか? 2dのタイルマップエディタのようなものを作りたいのです、、、 https://www.mapeditor.org/
300 名前:デフォルトの名無しさん mailto:sage [2020/06/13(土) 20:19:12.06 ID:lPN2rvMv.net] 挫折するリスクも加味すると100倍くらいじゃないかな
301 名前:デフォルトの名無しさん mailto:sage [2020/06/13(土) 20:42:52.21 ID:AVSH26bs.net] >>296 個人の場合、実はC++は適している。 むしろ、大人数の場合、いろいろなレベルの人がいるので速度を落としてでも、 誰でも使えるような言語を使おうとする企業が多い。 ちゃんとしたものを作りたかったら、C++は最良の選択。
302 名前:デフォルトの名無しさん mailto:sage [2020/06/13(土) 20:55:51.74 ID:AVSH26bs.net] ところで、全く関係ないけど、昔は、 標準変換(Standard Conversions)の1つに、 「Reference Conversions(参照変換)」 という項目があったのに、C++17では、Overload Resolution関連で 「Reference Binding(参照束縛)」 という項目だけになってしまった、という認識であってますかね? もしかしたら古すぎて、もう分からないかな。
303 名前:デフォルトの名無しさん mailto:sage [2020/06/13(土) 21:10:55.91 ID:XHF92Eb6.net] c++がどうこういうこと自体無意味な気分。 OSとコンパイラのバージョン指定でもせん限り、特定の議論にもなりゃしない。
304 名前:デフォルトの名無しさん mailto:sage [2020/06/13(土) 22:13:05.14 ID:rMzKFBuy.net] これから始めようと思うのですが C++とC♯の大きな違いは何ですか どっちから先の方が良いですか?
305 名前:デフォルトの名無しさん mailto:sage [2020/06/13(土) 23:19:47 ID:B/JuT+NG.net] 何作りたいかによるとしか言いようがない
306 名前:デフォルトの名無しさん [2020/06/13(土) 23:29:25.22 ID:dAI/jSW6.net] あーじゃあ、C++には何が出来なかったせいで 後からC♯が作られたの?
307 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 00:35:35 ID:0sKu6MyV.net] 違うよ
308 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 00:45:05 ID:lm4ZS132.net] んーでは、C++が劣っていてC♯が作られた理由は?
309 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 00:55:29 ID:7AEk3bXh.net] インタープリ夛ー
310 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 00:58:40.28 ID:g+gmh/oa.net] Javaの代わりが欲しかっただけであって優劣の問題はあまり関係がない が結局Javaの領域には食い込めず、スクリプト言語の代わりになった 自由度を奪う代わりに楽に書けるみたいな 結局自由度が必要なのでC++から離れられないので余計書くのがつらい仕様になった Win32APIのインクルードくらいSDKにまとめとけやPinヴォケって感じ
311 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 01:08:08.89 ID:7AEk3bXh.net] インタープリティアひとつつくっておけば色々な環境に使い回せるし版権問題にうるさいJavaをぶっつぶすため
312 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日)
] [ここ壊れてます]
313 名前: 01:08:40.52 ID:lm4ZS132.net mailto: >>307 > Javaの代わりが…スクリプト言語の代わりになった なるほどぉ、それでunityのスクリプトになってるのか、 C++の自由度って具体的には何を指すんですか? [] [ここ壊れてます]
314 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 01:17:15.70 ID:7AEk3bXh.net] 常識だろjk
315 名前:デフォルトの名無しさん [2020/06/14(日) 01:21:41.82 ID:iYtMGgBJ.net] C++はアルゴリズムの部品化が一般的になっているので、自由に組み合わせられるところが、良いと思います。
316 名前:はちみつ餃子 mailto:sage [2020/06/14(日) 01:33:23.99 ID:MJZpLG29.net] >>309 やりたければメモリのどこにでもアクセスできるってのが特に重要な違いかな。 デタラメなアクセスをしても実行時エラーとして検出されるとは限らない。 プログラマがメカニズムを理解して正しくプログラムを書けるなら (監視して実行時エラーを検出するための) 保護機構は無駄で、 余計なものがある分だけ実行速度が落ちるから無い方がいい。 それが C++ の基本思想であるゼロオーバヘッドの原則。 でも現実はそうではない。 (プログラマは間違う。)
317 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 01:35:24.50 ID:lm4ZS132.net] C++で出来るんならいったい、C++の何が悪くてC♯が産まれたのやら さっぱりですね、 Wikipedia見にいったらc#はBoolean型とスイッチケースでストリング型が使えるそうなので c#にしようと思います お邪魔しましたわ、ありがとうございました。
318 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 01:41:28 ID:9pT3ELpf.net] c#を選択するのは悪くないと思うが、そこじゃないだろ
319 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 01:45:14 ID:lm4ZS132.net] あーうーん、自然言語処理とかネットのデータベースで 文字列比較を多用しそうな予定は未定なので・・
320 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 02:22:12 ID:6myF93T5.net] >>299 MSDNのC++の仕様書を見ると、まだちゃんと Reference Conversionsの 項目があった。 C++17には無い項目だ。
321 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 03:45:35.31 ID:PNQfdADa.net] 文字列処理がメインで速度求めないならpythonとかの方がいいと思うぞ
322 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 03:48:19.28 ID:kJWeEmyo.net] >>313 >C++で出来るんならいったい、C++の何が悪くてC♯が産まれたのやら >さっぱりですね、 基本的に、Cの時代からポインタが理解できない人が多かった。 ポインタが理解できて無い人でも、コピペしたりすればC++も使えたかも知れないが、 ちゃんと理解できて無いので、理解できている人に比べてメモリーの解放を間違ってしまう頻度が高い。 そのため、ポインタが出てこないVBを使う人が多かった。 VBしか使えなかった人でもが使えるようにした上で、見かけ上の文法と言語の名称をC++に似せることによって 今までC++を使えずに肩身の狭い思いをしてきた人に希望の光を与えることに成功したのがC#。
323 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 03:50:45 ID:kJWeEmyo.net] VB、VBと馬鹿にされてきた恨みつらみの反動で、C++は古いということにして、 新しいC#に適用できない老人が使う言語、という印象操作をする運動が 繰り広げられている。
324 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 04:05:18.35 ID:kJWeEmyo.net] 彼らの脳内では、なんとかしてC#の人気を出すことによって、 C++使いを減らしていけば、もう二度とVB、VBと馬鹿にされた暗黒時代に 戻ることがなくなると予定されている。
325 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 04:15:32.10 ID:Lj4n2emQ.net] >>317 ありがとう、PerlやRubyも考えたんですが 文字列処理ってもコエカタマリン的な利用でDirectXが・・
326 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 04:43:58.99 ID:kJWeEmyo.net] C#はC++は、現実にかなり遅い。 それはそれぞれを使って作成されたアプリを比較してみれば分かる。 よく分かる例としてはVSだ。C++製のVSは高速だったが、C#製のVSは劇遅。 もう一つは、FrontPageとExpressionWeb 4。 開発に使われている言語以外はほぼ同じアプリだが、C++製の前者に比べて C#製の後者は劇遅。
327 名前:デフォルトの名無しさん [2020/06/14(日) 04:59:16.97 ID:VVffaeyk.net] >>298 手間がかかりすぎると聞きますがどうなのでしょうか
328 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 05:00:21.83 ID:Lj4n2emQ.net] それは.netフレームワークとかSilverlightの違いですか?WPF?でしたか? Win XPとVistaの違いなようなDirectX使うか使わないかというかGUI処理ありきで画面とロジックを分けたゆえのXMLパーサーの重さなのか グラボやドライバーがネックなような・・・
329 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 05:03:18.92 ID:fGEYrFA/.net] 俺も297と同意見
330 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 05:09:24 ID:kJWeEmyo.net] >>323 MFCがGUI関連が弱いという問題はあるが、C++自体は、手間はそんなにかからない。 そんなに難しいわけでもない。 ちゃんとC言語のポインタ周りを勉強して理解することが大切で、 それさえ分かってしまえば、C++はCよりも開発効率がかなり高いし、安全。 メモリの解放の純粋なC言語では手間がかかったが、C++だとデストラクタが 発明されたことにより楽になり、そんなに危険度は高くない。
331 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 05:18:18.18 ID:fGEYrFA/.net] Cでexitを安易に使う癖がついているやつには陰険な罠がデストラクタにはあるわけだが
332 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 05:29:57 ID:qmm3PCBI.net] >>321 文字列処理なら、可読性が高い、Ruby 一択! Perl は、意味の分からない暗号だらけで、ややこし過ぎる
333 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 05:35:47 ID:qmm3PCBI.net] >>296 Electron も良いけど、Ruby on Rails も良い ただし、Rails でも、GUI は、HTML, CSS/SASS, JavaScript, jQuery, Bootstrap。 または、React
334 名前:デフォルトの名無しさん [2020/06/14(日) 05:38:37 ID:VVffaeyk.net] >>329 例えばウディタはC++で作成されているようです 3dでもないのにC++?と思ってしまうんですが、何らかのメリットがあるのでしょうか?
335 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 06:18:58 ID:kJWeEmyo.net] >>330 まず、Electronは配布ファイルのサイズが数百MBあるので、それだけでも プログラムの品質が下がる。 Rubyは、GUIに弱い。 C#は悪く無いとする人が多いが現実の本格的なアプリの例では遅いことが多い。
336 名前:デフォルトの名無しさん [2020/06/14(日) 06:21:59 ID:iYtMGgBJ.net] C#、Electron、RubyはC++よりはるかに優れているので、そっち使ったほうが良いと思います。 それらは実行時最適化のおかげでC++の10倍速いという実験結果もあります。
337 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 06:23:08 ID:kJWeEmyo.net] >>331 C#は、GUI部品はCで書かれているWin32を使っているので、簡単な HelloWorld程度ではC++並の速度が出ているように見える。 ところが、使うメモリの量が上がってくると急激に遅くなる特徴がある。 メモリだけでなく、GUIパーツが多くなるだけでも遅いと聞いている。 凄腕プログラマの中には、実感としてC++の10倍遅い、という人がいる位。 現にVSやExpressionWeb 4の起動速度は以上に遅いし、起動後もとても遅い。
338 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 06:23:55 ID:kJWeEmyo.net] >>332 みたいに嘘を言う人がいるのでだまされないほうがいい。 後で困るのは自分。
339 名前:デフォルトの名無しさん [2020/06/14(日) 06:25:03 ID:iYtMGgBJ.net] >>334 対立求めてる人はとっとと追い出したほうが良い。
340 名前:デフォルトの名無しさん [2020/06/14(日) 06:42:43.23 ID:iYtMGgBJ.net] >>334 おまえみたいに片棒担ぐやつもいないほうが良い。 おまえには王者の風格が無い。 何言ってんだふふんと、真のC++使いなら思えるはず。 おまえはC++を使えていない。
341 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 07:29:43.89 ID:kJWeEmyo.net] >>355 >何言ってんだふふんと、真のC++使いなら思えるはず。 いや、C++は沢山の問題点を持っていることは事実である。 しかし、効率面でC#は、C++には大差で負けることも、現実のアプリの例では 垣間見えることもまた事実。
342 名前:デフォルトの名無しさん [2020/06/14(日) 07:32:52.41 ID:iYtMGgBJ.net] じゃあいちいち他言語を下げるのはおやめなさい。 王者には王者の気品が求められるのです。
343 名前:デフォルトの名無しさん [2020/06/14(日) 07:34:59 ID:VVffaeyk.net] >>331 >>333 労力的にはどれほど違うと思いますか?イメージでいいのですが 個人で
344 名前:デフォルトの名無しさん [2020/06/14(日) 07:35:16 ID:VVffaeyk.net] c++使うといつまでも完成しないなんて話を聞いたもんですから
345 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 08:29:10.72 ID:7AEk3bXh.net] いつまでも完成しないって バカだからだろ
346 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 08:36:28.26 ID:qmm3PCBI.net] 可読性・難易度・バグりにくさ 動的言語 Ruby : 1 JavaScript : 3 静的言語 C# : 5 ポインターのある言語 C : 15 C++ : 75
347 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 08:39:06.10 ID:g+gmh/oa.net] わかりやすい例でいうと、Windows10がどんどん重くなっているが それは今までC++で書かれてた部分をC#で書き換え続けられているからといっても過言ではない
348 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 09:06:28.85 ID:MuaS91+w.net] >C++で書かれてた部分をC#で書き換え続けられている それは別になっとらんぞ Windowsチームって.NET嫌ってるし
349 名前:デフォルトの名無しさん [2020/06/14(日) 09:14:55.23 ID:VVffaeyk.net] >>341 手間がどのくらい違うのですか?
350 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 09:18:34.27 ID:7AEk3bXh.net] >>345 同じダロ 頭悪くなければ ライブラリを集めて使いこなせるくらいの頭な
351 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 09:20:16.16 ID:g+gmh/oa.net] >>344 例えばタスクマネージャーや電卓はUWPだと思うが、これって.NETの焼き直しか再利用だと思ってるけどどうなんだろう
352 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 09:32:29.33 ID:MuaS91+w.net] >>347 シェルとかも含めたXAML UIの部分のこと言ってるんだろうけど あれはC#からも呼び出せるだけのネイティブで実装されたAPI(WinRT)だよ 今の電卓なんかはまさしくわかりやすい例で、特例でコード公開されてて全部C++(/CX)だよ 新規に打ち出そうとしてるWinUIもC++(/WinRT)での実装 UWPアプリ単体で見ればC++だったりC#だったりまちまちだろうけど 今はXAML=WPF=C#のイメージは切り離した方が良い
353 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 10:00:52 ID:g+gmh/oa.net] >>348 納得した にしても以前の電卓よりはるかに動作が重い 呼び出し元より呼び出し先に重い何かがある気がしてならない
354 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 10:31:38 ID:v+4IVp6H.net] >>336 王者の風格とか気品とか、真のC++使いだとか、そのキッズが喜びそうなワードばかり並べ立てて何がしたいの?
355 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 10:36:59 ID:UiekgbQo.net] (精神的)キッズが喜びたがってるのだろう
356 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 10:59:07.21 ID:fGEYrFA/.net] 確かに「王者の風格」がでてきたときは0.5秒くらい「えっ?」てなった
357 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 10:59:49.90 ID:v+4IVp6H.net] >>339 プログラムの実装時の労力は言語だけでなく作る対象によっても変わるからケースバイケースだけど、言語の習得の労力で言えば、C++でまともな実用的なプログラムを作れるレベルに達するのは他の言語に比べて大変だよ。 もし今現在まったくプログラミングの経験がないなら、C++よりC#から始めた方がいい。 C#で速度がでないことを心配するなら、C#で作ってどう改善しても速度が足りないとなってからC++を学習してC++に移植する方がトータルでは早くできそう。 そもそもC#では速度的に厳しいような難易度の高いプログラムを、未経験者がいきなりC++で作り始めることはかなりこんなんだと思うぞ。
358 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 11:01:19.61 ID:u20vDDhC.net] コードの王子さま「まだまだだね」
359 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 12:21:48.10 ID:7AEk3bXh.net] 孤高だからな
360 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 13:07:15 ID:8/gzWF83.net] >>323 ,>>340 は(ある程度)事実だろ
361 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 15:06:28.05 ID:CHdP3JGu.net] >>348 >今の電卓なんかはまさしくわかりやすい例で、特例でコード公開されてて全部C++(/CX)だよ >新規に打ち出そうとしてるWinUIもC++(/WinRT)での実装 C++/CX はC++ではない。 それが遅い原因だ。 C++/CXを勝手にC++と思ってしまう人が出て本物のC++は迷惑。
362 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 15:42:22.25 ID:CHdP3JGu.net] >>342 >C : 15 >C++ : 75 もともと、C++は、C with class 程度の意味で現れて、それで人気が出た。 その時は今ほど複雑でなく、Cではメモリー解放 free() を全部完全にプログラマが 書かなければならなかったところと、C++のデストラクタを使えば、ほぼ自動化することが出来た。 これにより、C++はCよりはメモリー安全になった。 型をC以上に厳密にすることで、コンストラクタとデストラクタの呼び出される回数が、ほぼ必ず同じに なるように設計されていた。 キャスト構文を使わず、それぞれのデストラクタの中で、子供のオブジェクトに対する delete 文を 書き忘れない限り、ほぼ、コンストラクタとデストラクタは一対一に対応するので、 結果的にメモリーの解放間違いはほぼ無くせる設計になっていた。 これが、(恐らく)後になって RAII という言葉で語られるようになっていった。 また、クラスメンバに対しprotected属性が使えることも安全性を高めた。 さらに、Cでは実行段階で関数を超高速に切り替えるためには関数ポインタを使うことが必須であったが、 C++では仮想関数でそれを行うことが出来るようになり、間違いを減らすことが可能になった。 クラスの継承の概念は、既に作ったプログラムを少しずつ変化させることに役立つため、 プログラムを美しく設計できるようになった。 C++は今のバージョンは難しく見えるが、もともとはCを安全にすることにとても役立つものであった。
363 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 16:14:13.31 ID:PqSUj3Py.net] 「本物のC++」であるかどうかと速度は直接関係はないと思うが
364 名前: mailto:sage [2020/06/14(日) 16:48:51.00 ID:p2S0rZ5U.net] >>358 >C++のデストラクタを使えば、ほぼ自動化することが出来た。 それ、全然「自動化」になっていないですよ…
365 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 17:11:05 ID:CHdP3JGu.net] >>359 C++/CXは、メモリ関連で本物のC++とは異なったやり方をしている。 C++が速いのはまさにメモリ関連であるのだから、ソースの書き方が似ていると しても、そこを変えた言語で書いたプログラムの速度がC++と同じであるとは とても言えない。
366 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 17:28:22 ID:u+r3XtR9.net] この狂人C++/CXをC++/CLIと勘違いしてないか?
367 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 18:05:23.75 ID:UiekgbQo.net] デストラクタをまともに設計できる奴があんまおらんからな。 てか資源解放てインスタンスの種類よりも生成したシチュエーションによることのが多いし シチュエーション
368 名前:事に開放メソッド選ぶ方がわかりやすい。 だからgoではdefer文による解放なんだろ。 [] [ここ壊れてます]
369 名前:デフォルトの名無しさん [2020/06/14(日) 18:12:49.93 ID:iYtMGgBJ.net] >>350 そらキッズを説得するためだからよ。
370 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 18:16:02.14 ID:CHdP3JGu.net] >>363 ファイルハンドルの様な「資源」は、デストラクタによる解放は実は向いてない。 メモリーが向いている。 もともと、C++のデストラクタは、メモリー安全のためが主目的であったと 言っても過言ではなく、RAIIの R = Resource というのは、変な話。
371 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 18:29:52.90 ID:PqSUj3Py.net] >>365 全く逆だなぁ。 資源のように解放するタイミングが比較的重要なものこそデストラクタが向いているだろう。 メモリだけならGCでも全然問題ないし。
372 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 18:36:46.54 ID:RsfUA2Vq.net] int と long long の和って long long ですよね? int と double の和も double ですよね? こういうのって大きいデータ型にキャストされると思って良いですか
373 名前:デフォルトの名無しさん [2020/06/14(日) 19:18:11 ID:VVffaeyk.net] タイルマップエディタを作る場合はC++とC#どちらがいいですか?
374 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 19:26:48.64 ID:v+4IVp6H.net] >>367 基本的にその考え方であってる。 細かいところは汎整数拡張でググってwikipediaを見てくるといいよ。
375 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 19:36:58.18 ID:q7JXwjKs.net] >>368 どっちでもいい どうせほとんどは途中で挫折するんだし、苦労して作ったところで現実には誰にも使われずに消えていく しかしその努力は決して無駄になるわけではなく、君の中には多少なりとも技術と経験が残るだろう 目先ではなく、将来何がしたいのか、そのためには何を習得すべきなのかを考えなさい
376 名前:デフォルトの名無しさん [2020/06/14(日) 19:48:57.07 ID:VVffaeyk.net] 将来何をしたいか、わからないです 2dにopenglは必要ですか? 必要ならC++なんでしょう
377 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 19:53:15.45 ID:irom8koH.net] 2dにOGLは正直オプションだな。 OGLはグローバル規格だから、WindowsとかOSに縛られるということが少ない。 しかし、近年のGPUは3Dを基準に作っているからOGLを使った方が速度は出るかもしれない。 なお、OGLは特に言語は規定していない。
378 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 19:56:51.60 ID:SBQSrEYR.net] ゲーム作りたいのか? 今時のゲーム開発ではそもそもOpenGLを直で叩く必要はまずなくて、Unityなどの開発スイートを使うのが普通だ まあC#でいい
379 名前:デフォルトの名無しさん [2020/06/14(日) 20:05:56.73 ID:VVffaeyk.net] じゃあエレクトロンで作るよ
380 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 20:21:24.84 ID:irom8koH.net] その場合は、もしかしたらWEBGLかもしれんな。
381 名前:デフォルトの名無しさん [2020/06/14(日) 20:33:14.43 ID:VVffaeyk.net] 大事ナノは結局ロジックだと思うので(´・ω・`)速度とか考えずにやります
382 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 21:07:35 ID:ZstiKk82.net] UE4はC++なので、ゲームを仕事にしたいなら、C++は使えた方がいい。 unityもスマホゲーや小規模開発でシェア大きいので、Unityで使うC#もやっておこう。 つまり、C#とC++両方を当然に使えるようになるべき。 趣味で作りたいだけなら、資料の多いunityでも、最近VE5の発表で熱いUE4でも、好きな方やればよい。 グラフィックエンジニアやりたいなら、DirectX12やVulcanにてをだしてもよいかもしれない。茨の道だがね
383 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 22:02:31.10 ID:kf4Cc+ef.net] >>366 そうだよね GC言語はある意味一番簡単なメモリの管理は自動化できても、それよりクリティカルなメモリ以外のリソース管理が悲惨なことになる
384 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 22:11:34.75 ID:ye8ce71J.net] >>366 だから、あなたみたいなGC言語に慣れた人が多くなって、C++の本質が理解出来て 無くて RAIIなどといい始めたんだ。 ちがうんだよ、本来のデストラクタの主目的は。 デストラクタの中には、pure C の free() のように、本質的にはどんな場合に 呼び出しても失敗することが無いような関数だけを書くことが基本。 それを昇華すれば、deleteを書いても、絶対に失敗しないことになる。 これは数学的帰納法を理解できない人に入っている意味が分からないと思うが。 とにかく、デストラクタの役割も作られた目的も、メモリの安全な解放だったの であって、リソースの開放のためでは無いので、リソースの解放をデストラクタ の中に書くというのはさまざまな問題を生む。
385 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 22:29:21.16 ID:ye8ce71J.net] >>366 >資源のように解放するタイミングが比較的重要なものこそデストラクタが向いているだろう。 少なくとも初期のころのC++は、そのようなことがデストラクタの主目的ではなかった。 今、GCでやっていることが効率が悪いことを見越して、かつ、メモリー安全性を確保するために 発明されたのがデストラクタだ。 数日前にも、ファイルハンドルなどのリソースをRAIIを使ってデストラクタで閉じようとすると、 失敗した時に対処できなくなるという非常に難しい問題が生じることが議論されていた。 メッセージボックスさえ出すことができないかも知れないのだ。 メッセージボックスを出そうとすることがむしろ仇となって、その瞬間に大切なデータが保存できて無い アプリもろともダウンしてしまう可能性がある。 なぜそういうことがおきるかというと、もともと、デストラクタは、失敗する関数をそこに 含めることを想定していなかったからだ。
386 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 22:37:05 ID:OGb6Unub.net] >C++の本質が理解出来て無くて RAIIなどといい始めたんだ。 RAIIって20世紀の頃の禿のお言葉なんだがw
387 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 22:52:30.07 ID:ye8ce71J.net] Bjarne Stroustrup 氏の事を禿と言ってしまう人の人間性を疑う。 名前が覚えられないのか。
388 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 22:54:20 ID:aLpfCXag.net] あら議論から逃げよったわw
389 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 22:58:03 ID:MuaS91+w.net] 妙だな? 誰も禿をびよーねとは言っていないのに・・・
390 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 23:03:05 ID:PqSUj3Py.net] >>380 向いてる向いてないと元々の目的というのは直接関係ないな。 後半の話も、リソースの解放ができないということではなくてメッセージボックスを 出せないというだけでしかないし。
391 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 23:04:20.52 ID:ye8ce71J.net] まあ、RAIIが、20世紀に考え出されていたのであれば、それはそれで良しとしよう。 でも、彼の頭の中でどうであったとせよ、当時の本を見れば、デストラクタの 説明としてほぼ必ずと言って、メモリ解放のために用いる例が書かれていたのだから、 C++を実用的な観点で見た時にデストラクタの一番の使い道はメモリ解放であった ことは疑いの無い事実だろう。
392 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 23:09:16.33 ID:hr1wykPX.net] >>386 誰も言ってくれてないから俺が言ってやるけど お前は自分が見えてないよ お前は人に教える立場ではなく みんなに教えてもらってる立場なんだぞ 見てて恥ずかしいわ
393 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 23:13:56.65 ID:OGb6Unub.net] >>386 ではここで太古から存在するハゲFAQを見てみましょう https://www.stroustrup.com/bs_faq2.html#finally
394 名前:246 mailto:sage [2020/06/14(日) 23:28:20.22 ID:qmm3PCBI.net] >>247 に書いたけど、 デストラクタ中の例外の扱いについて、 More Effective C++ にも書いてある
395 名前:デフォルトの名無しさん [2020/06/14(日) 23:32:05.30 ID:iYtMGgBJ.net] >>388 英語じゃねーか、日本語で書けよ。
396 名前:デフォルトの名無しさん mailto:sage [2020/06/14(日) 23:57:28.27 ID:ye8ce71J.net] アメリカ人は馬鹿だから参考にならない。 彼らのために世界中の生産性が下がっている。
397 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 00:10:53 ID:Bn8xL7m+.net] 禿先生はデンマーク人だぞ
398 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 00:13:02 ID:1aJEphkT.net] >>390 王者の気品とか言っちゃう奴の日本語よりはまともな人の書いた英語の方が遥かに読みやすいし、内容の価値は比べるまでもないw
399 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 00:23:21.40 ID:94IDrwxi.net] 以上、本日のASDLおじいちゃん演説会でした
400 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 00:56:17.21 ID:Hw5ljvB7.net] で、本物のC++はどうやったら食べられるのですか
401 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 02:02:25.91 ID:oHOmQwtH.net] ドラえもんの暗記パンで
402 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 04:52:38 ID:1aJEphkT.net] >>394 ASDLって何だ? ASDのことだろうか。 まさかADSLとごっちゃになってるんだろうか。 ホントに英語はまったくダメなんだな。英語の方が読みやすいなんて言って悪かったよ。
403 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 09:43:39 ID:Q9IHrxmr.net] std::listやvector,map,unordered_mapなどのコンテナのイテレータについての質問です コンテナのある要素を指すイテレータを保存してるときに、 そのコンテナに対して変更が加えられたとき、保存したイテレータは有効なのでしょうか?? 例えば、元の要素が削除されたら、無効になるのは想像つきます 例えば、前後に別の要素が追加されたら、保存したイテレータは元の同じ要素を指してる保証はあるのでしょうか?? std::listはリンクリストなので、前後に要素を追加されても影響受けなさそうですが? std::vectorはインデックスで管理してるとダメそう? std::mapは?
404 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 10:08:43 ID:w4yns3wG.net] イテレータが無効になる場合はコンテナの種類と操作によって決まっているのでまともな解説にはちゃんと書いてある。 例えばvectorのinsert()はストレージの再確保が行われなければinsertした場所より前の要素を指すイテレータは無効にならないといった具合。
405 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 10:13:02 ID:Q9IHrxmr.net] >>399 https://en.cppreference.com/w/cpp/container 英語の方見たらイテレータの無効化条件書いてありました ありがとうございます
406 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 12:16:11.97 ID:LBP04AxD.net] >>400 日本語のほうにも書いてあるような? https://ja.cppreference.com/w/cpp/container#.E3.82.A4.E3.83.86.E3.83.AC.E3.83.BC.E3.82.BF.E3.81.AE.E7.84.A1.E5.8A.B9.E5.8C.96
407 名前:デフォルトの名無しさん [2020/06/15(月) 14:06:35.72 ID:iqqqiJ5Y.net] デストラクタで例外を出す可能性があるクラス Hoge について ---- A.cpp Hoge hoge; int main(int argc, char **argv) { // hoge を使う return 0; } ---- A.cpp ここまで ---- B.cpp int main(int argc, char **argv) { Hoge hoge; // hoge を使う return 0; } ---- B.cpp ここまで B だと例外補足されるというか表示されるけど A だと握り潰されてプロセス終了する(例外出てても気付けない)?
408 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 14:12:45.65 ID:+GKLccgq.net] はちみつ餃子 さまを筆頭とする方々にお答えしていただけることを期待しております。 std::forward()がどうやって実装されているかを調べるため、 MSのオープンソースのSTLのソースの「STL-master」の中の type_traits というのを見ていたのですが、仕組みが完全には分かりません。 以下の1つ目のforwrd()は、左辺値参照で受け取るまでは分かりそうなのですが、 その後、return static_cast<_Ty&&>(_Arg) としているのに、結果は、左辺値に なっていなければ、forward()の使用に合わないはずですが、なぜ、 右辺値参照にcastしているのに、左辺値参照のままなのでしょうか? /* 左辺値を受け取る forward() のテンプレートらしいですが、 _Arg が左辺値参照ならば(?)、static_cast<_Ty&&>(_Arg) と cast しても、右辺値参照になるとるは限らない??? */ template <class _Ty> _NODISCARD constexpr _Ty&& forward( remove_reference_t<_Ty>& _Arg) noexcept { // forward an lvalue as either an lvalue or an rvalue return static_cast<_Ty&&>(_Arg); } // 右辺値を受け取る forward() のテンプレートらしいです : template <class _Ty> _NODISCARD constexpr _Ty&& forward(remove_reference_t<_Ty>&& _Arg) noexcept { // forward an rvalue as an rvalue static_assert(!is_lvalue_reference_v<_Ty>, "bad forward call"); return static_cast<_Ty&&>(_Arg); } template <class _Ty> _NODISCARD constexpr remove_reference_t<_Ty>&& move(_Ty&& _Arg) noexcept { // forward _Arg as movable return static_cast<remove_reference_t<_Ty>&&>(_Arg); }
409 名前:はちみつ餃子 mailto:sage [2020/06/15(月) 14:46:55.44 ID:WVo0Ka65.net] >>403 正確なルールを説明するとなると長くなる (というか私もそんなに入り組んだところまで把握してない) んだが、 「参照の参照」を作った時に調整されるルール reference collapsing によるものだと思う。 左辺値参照から右辺値参照を作ろうとしたときには左辺値参照に調整される。
410 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 15:04:09 ID:+GKLccgq.net] >>404 回答有難うございます。 一生懸命調べたところ、こんな記述を見つけました。Tがオブジェクト型の場合、(T &&)x のように cast すると、 結果は、右辺値にならずに xvalueになるようです。 でもそこから先は理解できてません。 https://stackoverflow.com/questions/40801765/is-it-an-rvalue-or-lvalue-after-a-cast From expr.cast (this is applicable from C++11 and later) C++ 11 以後の場合 : The result of the expression (T) cast-expression is of type T. 式「(T)cast-expression」の結果は、T 型である。 The result is an lvalue if T is an lvalue reference type or an rvalue reference to function type and an xvalue if T is an rvalue reference to object type; Tが関数型への左辺値参照/右辺値参照の場合は、結果は 左辺値で、 Tがオブジェクト型への右辺値参照の場合は、結果は xvalue である。 otherwise the result is a prvalue. そのどちらでも無い場合、結果は、prvalue である。
411 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 15:11:00.42 ID:UmY/I/0X.net] >>405 今後のために、 先輩指名で相談に行って あなたの説明よりネットにはこんなの書いて有りますけど? なんてのは失礼でイラッとするからやめときや
412 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 15:15:51 ID:kn0xQdMp.net] より詳しい説明が出るのは役に立つんだから別にいいだろ それよりもはちみつごときに様つけたりここの住人の筆頭にするな
413 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/06/15(月) 15:17:44 ID:WVo0Ka65.net] >>405 xvalue は rvalue の一種。
414 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 16:19:05.98 ID:+GKLccgq.net] >>408 lvalue, xvalue, prvalue は排反集合なのですが、 glvalueとrvalueは、正確に #define IS_GLVALUE(X) (IS_LVALUE(X) || IS_XVALUE(X)) // glvalue は、lvalue と xvalue の和集合 #define IS_RVALUE(X) (IS_PRVALUE(X) || IS_XVALUE(X)) // rvalue は、 prvalue と xvalue の和集合 なので、rvalueであっても、xvalueで無い場合がありえます。 それは、prvalueです。
415 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 16:32:37.00 ID:+GKLccgq.net] >>407 >それよりもはちみつごときに様つけたりここの住人の筆頭にするな このスレでは、彼が一番C++に詳しいと思うんです。 もしかしたら日本の中でもかなり詳しい人の内に入るのではないでしょうか。
416 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 17:00:27 ID:+GKLccgq.net] >>409 >なので、rvalueであっても、xvalueで無い場合がありえます。 このことは、正しいのですが、 #define IS_RVALUE(X) (IS_PRVALUE(X) || IS_XVALUE(X)) // rvalue は、 prvalue と xvalue の和集合 によれば、 xvalueであれば 必ず rvalue ではあるので、 「xvalue は rvalue の一種」 という命題は必ず真で、はちみつ餃子さんのおっしゃっていることは正しいと思います。 rvalueが動物、xvalueが犬、であるような関係になります。 動物(rvalue)であっても犬(xvalue)で無い場合がありえますが、 犬(xvalue)であれば必ず動物(rvalue)であり、犬(xvalue)は動物(rvalue)の一種です。
417 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 17:03:05.14 ID:+GKLccgq.net] 「xvalue は rvalue の一種」でもあり、 「xvalue は glvalue の一種」でもあるのですね。
418 名前:はちみつ餃子 mailto:sage [2020/06/15(月) 17:11:13.40 ID:WVo0Ka65.net] >>406 疑問が深まったら掘り下げるのは別にいいんじゃね。 根拠も提示されてるし。 >>410 ワイは趣味プログラマやで。 実務家が言語仕様の詳細に興味がないのもよくあることなので、 プロのプログラマが仕様に詳しいとは限らんけど、 平均的には日常的に C++ でプログラミングしているやつの方が詳しいよ。 当然に。 >>409 あれっ、そうか。 カテゴリに関しては俺の間違い。 で結局は >>404 で述べた通り reference collapsing が適用されるってだけだと思う。 https://timsong-cpp.github.io/cppwp/n3337/dcl.ref#6
419 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/06/15(月) 17:18:57 ID:WVo0Ka65.net] いや、なんか違う気もしてきた。 わかんね。
420 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 18:34:21.52 ID:+GKLccgq.net] >>413 >平均的には日常的に C++ でプログラミングしているやつの方が詳しいよ。 当然に。 C++は、何十年も前に既に完成している言語なので、実態はわかりませんが、仕事をC++を使っている人でも、はちみつ餃子さんのようには新しい仕様を知らない人の方が多いのではないかと思うのです。
421 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 20:04:29.90 ID:fMEeoq9p.net] はちみつ餃子 さまを筆頭とするはちみつ餃子さまにお答えしていただけることを期待しております。 普段どんな仕事をしてるの?
422 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 20:05:26.73 ID:+GKLccgq.net] >>405 の 「The result is an lvalue if T is an lvalue reference type or an rvalue reference to function type and an xvalue if T is an rvalue reference to object type;」 の部分の訳が一部間違っていて、正しくは、 「Tが左辺値参照型か、または、関数型への右辺値参照の場合は、結果は 左辺値で、 Tがオブジェクト型への右辺値参照の場合は、結果は xvalue である。」 ということのようです。 結果として、>>403 の return 文のオペランドの static_cast<_Ty&&>(_Arg) の部分は、 1. _Argの型が左辺値参照型の場合、左辺値(i & !m) 2. _Argの型が右辺値参照型の場合、xvalue(右辺値の一種, i & m) となるようです。
423 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 20:13:24.30 ID:ZNXm/M6v.net] 自分のレスにレス返すスタイルなんなの 自分の日記帳でやれよ
424 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 20:48:28.91 ID:hnmQwUn9.net] これ前の人だよね
425 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 21:31:20.35 ID:bSwpQKjB.net] 結局答えられないんですねの人?
426 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 21:44:07.48 ID:Q9IHrxmr.net] また、質問します。 アプリでunordered_mapやunordered_setのコンテナ10個くらい使うのですが問題はキーの型が可変長でstd::stringで結構長いことです 具体的にはキーはファイルパスとかになるのですが で、頻繁にコンテナを使用します ファイラーみたいなアプリを想定して このとき、キーをstringにするとコピーなどのオーバーヘッドが発生?すると思いますがさすがにこのレベルは気にした方がよい?
427 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 21:48:49 ID:Q9IHrxmr.net] ユーザーがカレントフォルダ移動したり、ファイル一覧のリストビューをスクロールするだけで走ります で、きにする場合はキーをstd::shated_ptrでくるめばいいんですかね?他に方法ありますでしょうか?
428 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 22:01:06.47 ID:LBP04AxD.net] >>421 効率は実測が基本。
429 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 22:17:50.72 ID:Bn8xL7m+.net] 100万文字のstringをキーにしたって、unorderedの内部で扱うのはハッシュなんだから挿入や検索の速さは変わらん(ハッシュ計算のコストを除く) そのファイラーが糞重いんだったら原因はそこじゃないと思うぞ
430 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 22:52:38.98 ID:Q9IHrxmr.net] ありがとうございます >>423 の言う通り最終的は実測でしょうが、キーをstringにしたときのキーのメモリコピーのオーバーヘッドを気にしてました が、よく考えてみますと実際にキーのコピーが発生するのは実際に要素を挿入するとき1回だけっぽいですね findメソッドやcountでキーを渡しますがキーを参照で渡しますし、hash関数も参照でキーの値を受けとりますし
431 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 23:00:46.83 ID:Q9IHrxmr.net] キーのコピーの頻度そこら辺を想像したことなかったので、びびってましたがびびる必要なかったぽいですね ということ、普通にstringをキーに実装してみます
432 名前:はちみつ餃子 mailto:sage [2020/06/15(月) 23:00:50.65 ID:WVo0Ka65.net] >>425 string はムーブ対応してるんで所有権を渡してしまうなら文字列全体のコピーはしないよ。
433 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 23:12:46.11 ID:Q9IHrxmr.net] >>427 なるほど、findやcountの場合はキーの値を実際にコピーする必要ないから、&&の引数のオーバーロードはないが、insertの場合は&&の引数で、所有権移せるバージョンもあるんですね
434 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 23:14:22.14 ID:hnmQwUn9.net] この人がどうかは知らないけど スクリプト言語あがりはstring + mapばっか使うんだよね 万能さはわかるけどさ それで効率が〜とか どうなのそれw
435 名前:はちみつ餃子 mailto:sage [2020/06/16(火) 00:10:13.43 ID:1HqJhS8P.net] ワイはもうおっちゃんやから小さい単位で型を作って名前を付けておかんと何をしよったかわからんようになるんやが、 文字列三昧で上手いことやれてまうやつはどういう脳みそをしとんや……。 と疑問に思ったこともあったんやけど、大抵の場合はうまいことやれとらんかった。
436 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 00:48:04 ID:i3Et6pFy.net] プログラマ2年目だけど全然クラス作れんワイ低みの見物 責務責務いうけどどっからどこまでが責務やねん
437 名前:デフォルトの名無しさん [2020/06/16(火) 01:42:35.85 ID:YM27wSPO.net] いや、おそらくその設計間違ってるな。
438 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 05:42:11 ID:5RaFaaPW.net] std::string は参照カウントになってる場合もあるでしょ。 オブジェクトをコピーしても長さに応じたデータコピーが発生するとは限らない。 代わりに短い文字列ばっかりでも同じだけ重い可能性もあるんだが。
439 名前:はちみつ餃子 mailto:sage [2020/06/16(火) 08:52:22.88 ID:1HqJhS8P.net] >>433 ちゃんとした実装なら短い文字列ではヒープアロケーションが発生しないような最適化 (いわゆる SSO) が入ってるよ。
440 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 08:59:33.85 ID:7rFOsosY.net] gccは参照カウントなstringは課題があるからやめたって10年以上前に聞いた気がするけど今はどうなんだろ
441 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 13:38:01 ID:Ea3gt1wL.net] >>123 >100万文字のstringをキーにしたって、unorderedの内部で扱うのはハッシュなんだから挿入や検索の速さは変わらん(ハッシュ計算のコストを除く) 厳密に言えば変わります。 データの個数がM、キーの文字数がNの場合、検索に掛かる時間は、 ハッシュを遣わなくて単純に比較した場合は、 O(MN) となりますが、ハッシュ法の場合でも、 O(M + N) となるので、掛け算と足し算の違いは有りますが、キーの文字数をいくら長くしても検索時間が増えない、というようなことはありません。
442 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 15:27:53.17 ID:VeSUiyGP.net] >>431 クエリとコマンド、リードとライトでとりあえず分けるとこからやったらええ
443 名前:はちみつ餃子 mailto:sage [2020/06/16(火) 15:55:59.04 ID:1HqJhS8P.net] >>431 責務なぁ……。 俺はとにかく名前で考えるようにしてるよ。 名前を付けたい単位に分けて、それを書いている内に名前を付けたい部分が出来たら括り出して…… という風に繰り返してたら (少なくとも自分にとっては) だいたい使いやすいデザインが出来てる。 名前を付けたらそれの役割ってのはほとんど自明だったりするし。 ぼんやりした構造って頭に残り難くて何をやってたかわけわからんようになるので、 名前を付けるってのはかなり大事なことだと思う。
444 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 18:27:56.96 ID:HoWpcnpR.net] >>436 O(M+N) って、ハッシュ計算のコストを含めたうえでの最悪計算量でしょ。 ハッシュ計算のコストを除いた平均計算量を O(1) にすることも可能なのがハッシュの利点、というのが一般的かと。 https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB > ...検索や追加を要素数によらず定数時間O(1)で実現する。...
445 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 18:49:47.04 ID:Ea3gt1wL.net] >>439 キーはそんなにバイト数が長く無くて、常識的にはある程度で上限が有る事が多いので、通常はO(1)と書いてあるだけです。 なぜかというと、ハッシュ値で大体は特定できても、最後、キーが完全一致していることを確認しなくてはなりませんが、 その時に文字列の比較のために、文字列の文字数であるところのNに比例した時間が掛かるためです。 例えば、キーの文字列の長さNが、1GBだとすると、文字列比較のために1*10^9程度のループが必要となります。
446 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 19:19:02 ID:HoWpcnpR.net] >>440 そっか。一致比較が必要になる操作も確かに多いね。 N はわかったんだけど、 M もやっぱり最悪ケースの話ってことで合ってる? 「通常はO(1)」って言ってるし。
447 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 19:21:15 ID:uOZIHf/t.net] スレ立てるまでもないスレにも同じようなこと書いたのですがすみません 巨大なファイルを読み込んで書き出すプログラムを書いています time1, data1-1, data2-1, data3-1......datan-1 time2, data1-2, data2-2, data3-2......datan-2 : みたいな構造が延々と続いています でこれをdataごとに data1.csv time1 data1-1 time2 data1-2 : ってそれぞれ書き出して分割する感じなんです vector<ofstream&> files; for (auto filename : filenames) {
448 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 19:24:51.88 ID:uOZIHf/t.net] 失礼途中で送信してしまいました。 vector<ofstream&> files; for (auto filename : filenames) { ofstream temp(filename, ios::out); files.push_back(&temp); } こんな感じでofstreamの配列を作ってあとはそれぞれにデータを入れていこうとしたのですが アクセス違反になります。スコープの外に出たらofstreamは勝手にcloseされる?そうなのでそのせいかなと思っています 複数のファイルに対して順々にデータを書いていきそれをループするのってどうしたらいいでしょうか
449 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 19:29:01.32 ID:zbVOEmpz.net] 答え分かってんならちゃんと実体を外に持たせなよ vector<ofstream> files; for (auto filename : filenames) { ofstream temp(filename, ios::out); files.push_back(std::move(temp)); }
450 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 20:59:11.88 ID:i3Et6pFy.net] 通常はO(1)(で見積もっときゃまぁ大きくは外れない)
451 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 22:57:05.95 ID:EUOlqdFN.net] 業務でC++やることになりました どうせなら体系的に学ぼうと思い、本を買おうと思いますがおすすめありますか? CとC#の経験はあります Cは組み込み開発での利用に、C#はデザインパターンを少しは活用出来る程度のレベルです
452 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 23:21:49.71 ID:yU3B6kSM.net] >>436 キーの文字数Nはプログラムがビルドしおわったら変わらないのだから実質定数なのであって、 結局O(M)になるのでは… (任意のxについて x + 定数 < a * xを満たす定数aを見出せるからオーダー表記の約束によりO(M+(定数)) = O(M)ェ、 しかもこの場合のMはデータの個数に比例するとわいえ、一般的はハッシュテーブルなら衝突しない限り 1回のテーブルアクセスで目的のエントリにたどり着くから、実際にはデータの個数÷ハッシュテーブルサイズ(エントリ数) となるから衝突が無視できる(エントリ選択に統計的に偏りがなく、かつハッシュテーブルサイズが十分おおおきい ならO(1)と逝って良いキモス、
453 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 23:31:56 ID:yU3B6kSM.net] あと1億文字のstring aと10文字のstring bとでハッシュキーを求める手間はどうかというと、 正直にやると文字数に比例するが うまいことやったら定数にできる もしくは文字列の構成時に都度ハッシュを更新するようにして、 ハッシュが入用になったときカタが付いている形ににする
454 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 23:44:57.63 ID:Z1WD1bfY.net] そんな事をするなら素直にノードのポインタを持て と言いたい
455 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 23:56:47 ID:yU3B6kSM.net] それではもともとの問題が解決しない 一億文字のstring aがメモリ上に存在するとして、 まったく別の手段で同じ字面の一億文字の文字列bを作ってしまったとする aはaのノードを指し、 bはbのノードを指す、としたときに、 2つのノードが実は同じ文字列であることを確かめるには、 プログラムが他にあまた生成した10億個の文字列を一つ一つ確かめ、 最長1億文字の比較を行わねば結論が出ない( ハッシュテーブルなら一瞬で済む
456 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 23:57:59 ID:yU3B6kSM.net] 訂正orz、 誤: 10億個の文字列 正: 10億個のノードの文字列
457 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 01:21:46.64 ID:6+sJE+by.net] >>441 >N はわかったんだけど、 M もやっぱり最悪ケースの話ってことで合ってる? >「通常はO(1)」って言ってるし。 ハッシュ値の値の種類が仮に1024個だとすると、 データの個数がMが1024に収まる範囲だと検索時間が増えないのでO(1)と言えます。 しかし、Mが、1024*1024 個になった場合、1つのハッシュ値あたり、1024個の キーが入ってしまう事になりますので、Mが1024個の時に比べて検索時間は1024倍に なります。 これも、Mがある範囲内ではO(1)と言えますが、Mが極端に大きいと、やはり、O(M)となりますね。 [] [ここ壊れてます]
459 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 02:05:09.95 ID:6+sJE+by.net] 補足しておくと、>>436 で >ハッシュを遣わなくて単純に比較した場合は、 >O(MN) と書きましたが、ハッシュを使わない場合でもキーがランダムに近い場合、ここまで悪くなくて 検索時間は、O(M) 程度で済みます。 なぜかというとキーの文字数Nが長くなっても、比較は先頭の方の文字をいくつか調べる だけで異なることが分かってしまうことが多いためです。 少し複雑ですが、この事情は、文字数Nを大きくしても余り変わりませんが、 Nを固定して、データの個数Mを大きくしていった場合、だんだんと文字列を長く調査しないと 判断が付かないケースが増えてきます。 そのため、O(M^2)のような傾向が出てくるはずです。 ただし、これは、ハッシュを使わない場合で、かつ、キーがランダムの場合です。
460 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 06:19:39.75 ID:y8i+/mqG.net] >>442 識別子に使えない文字が含まれているが 本当にアクセス違反まで行ったのか? コンパイルが通らないはずだぞ
461 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 06:22:30.70 ID:y8i+/mqG.net] >>443 左辺値参照を何だと思っている? &tempは左辺値参照に渡せないし tempを左辺値参照に渡したところで forのブレースを抜けるたびにtempのdurationが満了していて 破棄済みのオブジェクト痕跡への参照になるだけだ
462 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 06:25:00.03 ID:3yTyzYma.net] 読み違えてたスマンコorz キーというのは検索する文字列そのものを指していたのかそうか…。n_ 一方>>447-448 は キー = ハッシュキー ハッシュ = ハッシュキー N = ハッシュキーの長さ の意味で書いていた、、、。...n_
463 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 08:27:10 ID:y8i+/mqG.net] つーかそれ以前の問題で左辺値参照はdefault constructibleでないので そもそもvectorの要素になれない
464 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 10:02:38.14 ID:Q2+1ZVNa.net] >>444 凄い。しっかり動きました。ありがとうございます。 moveのこと全然理解できてないんで勉強します。
465 名前:デフォルトの名無しさん [2020/06/17(水) 10:38:40.12 ID:GES6ctGC.net] 富豪ですね判ります
466 名前:はちみつ餃子 mailto:sage [2020/06/17(水) 11:38:12.26 ID:3iRpcXWU.net] >>457 今の C++ (C++11 以降) だと vector の要素に求める要件 (requirements) の中に DefaultConstructible は無いよ。 各メンバ関数 (コンストラクタも含む) の要件として要素が DefaultConstructible であることを要求するものはあるけど。 アロケータの方の要件で参照はダメってことになってるみたいなんで参照が駄目には違いないんだけど、 DefaultConstructible でないというのは直接の理由ではない。
467 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 11:50:02.38 ID:yIGLezdW.net] &&はテンプレートでは左辺にも右辺にもなる
468 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 13:02:53.13 ID:6+sJE+by.net] >>453 すみません、 >そのため、O(M^2)のような傾向が出てくるはずです。 これは忘れてください。 ハッシュを使わない場合の話ですが、Mが大きくなってもこのような傾向は出ず、 O(M)のままだと思われます。 なぜなら、同じハッシュ値に属するそれぞれのキーと、与えられたキーとの完全一致を 検査する際、何文字目で一致し無い事が分かるかについては、データの個数Mが大きく なっても、その期待値は変化しないと考えられるためです。 つまり、完全一致検査時に、個々のキーとの完全一致検査をループして行う時、 1つずつのキーと与えられたキーとが一致し無い事が分かるまでに検査が必要な 先頭からの文字数の平均値は、データの個数が多くなっても変化しないと考えられます。 そのため、この検査に必要なトータル時間は、α・M のようになり、 αが定数になるため、記号で書けば O(M) となります。
469 名前:デフォルトの名無しさん [2020/06/19(金) 05:28:33 ID:LA4wBl0H.net] windowsのフラットデザインのほうのuiですが、これがC#というやつですか?すごく起動が遅い
470 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 09:08:14 ID:rQKhbTAp.net] >>463 uwpかwpf 言語はあまり関係ないない あとスレチ
471 名前:デフォルトの名無しさん [2020/06/19(金) 09:47:56 ID:LA4wBl0H.net] どうもです >>464 guiが重いということですかね
472 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 23:16:25.19 ID:c7VHi+F3.net] C++の仕様になぜGUIがない 言語が強制すればOSが統一できるのに
473 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 23:21:04.03 ID:0XxGPvOp.net] 幻想だよ
474 名前:はちみつ餃子 mailto:sage [2020/06/20(土) 01:10:58.81 ID:OUofN66X.net] >>466 出来ない仕様を作ったら仕様ごと無視されるだけだよ。 C++ はたとえ不格好になっても現実的であることを指向してる。
475 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 01:14:26.54 ID:QdbcnniD.net] GUIなんて流行ですぐ方法論も見た目もかわっちまうからな 20年ぐらい前ならウィンドウに必ずクローズボタンがあるみたいなの 必須だったろうけど、今のGUI設計でそんな前提の設計したら 「脳味噌20年前でとまっとるんか」いわれるのがオチ スクロールバーとかもどんどん消えてるよな
476 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 01:28:11.81 ID:YEdOsyO1.net] まぁ上っ面をなぞるだけの平凡なGUIでもC++で規定してくれたら嬉しいけどねぇ OSによらず同じC++のコードだけで簡単なGUIを出せるってなると色々捗る気はする
477 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 02:01:25.69 ID:Zc+p+3CN.net] そろそろ音声ユーザーインターフェイスはよ
478 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 03:39:21 ID:ASLg4tM8.net] >>470 初期のJavaみたいなのかな あれがC++にあったら、確かに便利だわな
479 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 03:43:42.23 ID:s3zB5lV1.net] >>470 絶対駄目。 QtやFlutter、Unoなど、それを生業にしている民間業者がいるんだから、 民業圧迫になる。
480 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 03:44:49.57 ID:s3zB5lV1.net] >>473 C++ BuilderのGUIや、MFC、WinForms、WPFなども売り物だ。 それを統一してしまったら民主主義でも資本主義でもなくなってしまう。
481 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 03:58:41.18 ID:s3zB5lV1.net] もしそんなものを定義してしまったら、処理系を開発する会社が完全なる下請けになるじゃないか。
482 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 06:11:52.19 ID:tz6HL6iw.net] GUIやデータ構造に関しては現行はXMLに統一って流れじゃないかね 当然重くなるけど今はマシンパワーでカバーする感じ そのうちXMLパーサーがハード化されてストレスなくなるだろうよ
483 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 06:55:31.33 ID:8i84u99i.net] >>473-475 標準って何のためにあると思う?
484 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 07:21:58.33 ID:v44POU7a.net] PythonとC++でI/Oの速度って変わるの?
485 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 08:17:17 ID:3c7Ygm0n.net] 変わるよ 亀と兎くらい
486 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 08:19:37 ID:v44POU7a.net] >>479 システムコール呼ぶだけなのになんで違うん?
487 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 08:25:37.47 ID:3c7Ygm0n.net] ゴールを呼ぶまでに差が生まれる
488 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 09:06:19.16 ID:v44POU7a.net] んな変わらんってことねサンキュー
489 名前: mailto:sage [2020/06/20(土) 10:04:49.91 ID:KR8wyXv2.net] >>470 java の awt レベルでいいから欲しいですねえ
490 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 10:14:39.22 ID:huVEvmBy.net] C++標準でも外部でも良いから簡単な記述で簡素なGUI作れるようになってほしいなあ
491 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 11:25:01.67 ID:DAim0Dxd.net] >>478 測定するのが基本
492 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 11:59:28.75 ID:bxmHAIN3.net] ファイルシステムなんかは事実上ほぼ仕様が枯れてきてるから標準化できたけど この意味GUIはまだ枯れてないからな
493 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:00:20.85 ID:p75lHsHl.net] >>474 中の人? 飯の種がなくなるから新しい技術を導入するなっていうのは流石に賛同得られないぞ
494 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:01:02.76 ID:bxmHAIN3.net] エンドユーザーがC++とはアプリの外見のことだなんて誤解するようになるのはやだね
495 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:05:52.12 ID:u8LBLBzP.net] 既存のどのGUIを基本にするかってだけで宗教論争起こすだろ
496 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:10:58.69 ID:C5g3kKFk.net] 外見くらい好きに作らせろ
497 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:12:20.45 ID:6XSjyfFJ.net] こいうのは一種の中二病だよね 実際やってみれば 細かい制御ができない大雑把仕様 か 大掛かりなオレオレ仕様で学習が困難 ってなるのがオチ おっさんになればわかる
498 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:17:29.80 ID:hTyaQ2gm.net] >>487 それらの中の人なら>>474 みたいな的外れな馬鹿げた主張はしないと思う
499 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:25:31 ID:6XSjyfFJ.net] 可能性あるとしたらwebkitを共通仕様にするって線かな でかすぎるけどね
500 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:35:51.45 ID:hTyaQ2gm.net] フルスペックのGUIフレームワークではなく、ちょっとしたテストやデバッグに役立つ程度の簡素なものでもあると嬉しいんだけどね。
501 名前:デフォルトの名無しさん mailto:sasge [2020/06/20(土) 12:38:41.23 ID:s3zB5lV1.net] >>494 Windows使えや。
502 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 13:10:07.38 ID:s3zB5lV1.net] 規格を統一するとgcc/clangのような無料コンパイラと差異がなくなってしまうため、MSはC++を主流サポートから外してしまって結果的にC++は落ち目となった。 GUIまで統一したら、今度こそC++は完全に見捨てられよう。 そうなったらWindows支配も終わるかもしれないが、プログラマには大混乱が起きる。
503 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 13:12:32.66 ID:s3zB5lV1.net] >>496 GUI統一の動きがあっても、MSはサポートせずに、MingWだけがサポートする可能性がある。 Qtも自分のアドバンテージがなくなるのでサポートするわけなかろうし。 clangはAppleなのだからiOSやMacに支障を来たすためサポートしないだろう。 結果、gccだけがサポートする変な仕様として終わる。
504 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 13:18:22 ID:s3zB5lV1.net] それに、gccには既にGTKがあり、彼らの中では統一規格になっている。 それが彼らの中では世界標準である。
505 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 13:30:02 ID:u8LBLBzP.net] c++ってMSの主流じゃね? C#の方がおこぼれっぽい
506 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 13:33:04.69 ID:aXUmPW3Z.net] またこのキチガイかよ… 連投する度に頭ん中に新しいお花畑でも作ってんのか?
507 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 13:46:04 ID:hTyaQ2gm.net] すでにお花畑に埋もれているんだろう
508 名前:デフォルトの名無しさん [2020/06/20(土) 16:36:26.09 ID:/Eg/RpNH.net] カーネルがC#になる。
509 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 18:44:23.71 ID:bxmHAIN3.net] どんどんゴミ化していくWin10の究極奥義か
510 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 20:16:12.65 ID:+Wzjt0fO.net] Win10Update作成者本人もなんで領域がRAWになるかわからないとかいう更新入れたくないよなというか強制だし
511 名前:デフォルトの名無しさん mailto:sage [2020/06/21(日) 00:11:33.65 ID:Rbk+jGca.net] WSL2だけ欲しいけど2004は怖くて入れられない
512 名前:デフォルトの名無しさん [2020/06/21(日) 09:18:33 ID:KK75twmS.net] >>476 みんな結局JSON使ってる気がする
513 名前:デフォルトの名無しさん mailto:sage [2020/06/21(日) 09:36:46.75 ID:Pcgk88Ti.net] XMLは実際に扱ってみればわかるが 自由度が高すぎるが故にパーシングがめっちゃ重い 手作業で変更とかされるとなんだかよくわからない エラーで読めなくなることがあって難儀することが まれによくある タグで括るという無駄の多い構造のため必要な保存 情報のサイズに比してファイルサイズがやたらと でかくなる 等々ロクなことがない
514 名前:デフォルトの名無しさん mailto:sage [2020/06/21(日) 09:42:48.12 ID:9qR4cBA5.net] だな
515 名前:デフォルトの名無しさん mailto:sage [2020/06/21(日) 22:56:51.71 ID:WahLA6tX.net] xmlnsの扱いがめんどい
516 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 12:33:37 ID:Uhqw9X2e.net] boost::property_treeで使える範囲にしとくんだろうね。
517 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 12:34:51 ID:pJzisI2b.net] N4713のD.8にuncaught_exceptionがあるんだけど、理由はなんで? >>380 が言ってたようなRAIIの話で if (uncaught_exception()) terminate(); else throw system_error{...}; みたいなことすんなってこと?
518 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 12:54:18 ID:GQVtnPwK.net] XMLよりJSONのほうが容量小さくなるが、それでも今作ってるアプリではJSONも容量が大きすぎた けっきょくCSVに落ち着いたわ
519 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 14:19:48.28 ID:fPKoMQb1.net] >>478 ディスクやネットワークの速度は言語を変えても変わんない Perlとかの激遅言語だと差が出るかもだけど、数値計算しまくったりするシステムじゃない限りは、言語でものすごい性能の差はでない
520 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 17:24:35.40 ID:lBtyUm6f.net] perlってpythonと比べたら10倍近く速くなかったっけ?
521 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 17:37:29.72 ID:KMeLbKpH.net] 時と場合と環境とタイミングとプログラムとコンテキストによる
522 名前:デフォルトの名無しさん [2020/06/22(月) 18:03:57.06 ID:JXDt+qCb.net] >>484 Tcl/Tk
523 名前:デフォルトの名無しさん [2020/06/22(月) 18:06:29.92 ID:JXDt+qCb.net] >>498 GTKは糞
524 名前:デフォルトの名無しさん [2020/06/22(月) 18:08:18.53 ID:5VJoOXgM.net] ティックルティーケーと読むのかと思ったら、ティックルチンコらしいな。 その後出てきたのはグレートチンコと読むんだってな。
525 名前:デフォルトの名無しさん [2020/06/22(月) 18:08:47.46 ID:JXDt+qCb.net] >>512 JSONも無駄が多過ぎる C++ならmsgpack
526 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 20:55:06.18 ID:jHNWxnNv.net] >>519 msgpackは直接人が読み書きできないから別物 個人的にサイズが問題になるならmsgpack使うよりzlibとかで圧縮するわ
527 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 22:32:34.35 ID:74ajGcn7.net] >>511 D.8 にも書いてある通り uncaught_exceptions() で同じことができるので、そっちを使えばいい。 わざわざ消してない実装が多いだろうから、たぶんまだしばらく uncaught_exception() も使えちゃうだろうね。 www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0619r4.html#3.7
528 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 23:25:55.80 ID:xsRfWdvc.net] まともな実装なら[[deprecated]]付けてるでしょ
529 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 05:40:34.32 ID:oj2a+YQY.net] >>521 再入可能バージョンを使えってことね thx
530 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 10:14:52 ID:rAKqcV1b.net] >>520 msgpackはキーが冗長で、結局圧縮が必要なんだよな テキストであることのメリットを捨てるにはあまりにも中途半端なフォーマット
531 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 10:47:11.02 ID:qPEbpbt+.net] constなメンバー変数ならpublicにしてもいい?
532 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 10:56:31.49 ID:rAKqcV1b.net] 後で実装を変更してその変数が不要になったらどうする? constだからといって不必要に実装を晒していいことにはならない あくまで教科書的にはこう答えるしかないが、あとはケースバイケースで判断せよ
533 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 11:38:38.63 ID:oj2a+YQY.net] メンバーにconstはあんまり付けないね static constとかconstexprにするときくらい 書き込みを制限したいなら、それこそ雪駄と下駄で細かく調節できるから
534 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 19:20:38 ID:60OAlPGb.net] 個人のコードなら全てstruct、全てpublicで良い 仕事、共同、公開コードなら周りにあわせる
535 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:12:57 ID:4z1R/L6q.net] ランボーだな
536 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:19:23.61 ID:60OAlPGb.net] 全て自分のコードなら ポリシーがしっかりしていれば何の問題もない
537 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:22:22.86 ID:rl0ysbNQ.net] そのポリシーの帰結がpublicかstructかということだと思うが 何も考えてないのと変わらない
538 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:22:26.04 ID:6iuxc80n.net] 個人的には、publicにするかどうかはユーザーがアクセスする情報であるかどうかで決めればいいと思うけど 外から見える必要があるなら公開すればいいし 変数で公開するのが気持ち悪ければIsなんとかのメンバ関数作るとか 逆にユーザーが触れる必要のない情報ならconstだろうが公開すべきではない
539 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:24:28.42 ID:60OAlPGb.net] >>531 初心者的発想
540 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:24:40.50 ID:rl0ysbNQ.net] 正直プライベートメンバーがヘッダーから丸見えなC++の仕様はいかがなものかといつも思っている
541 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:25:38.50 ID:CqSQN5Gg.net] ヘッダ提供している時点でユーザーに見せたくないものではないよね 隠したいならもっと本格的にやるわ
542 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:25:59.71 ID:60OAlPGb.net] ヘッダと実体に分けなきゃいけないのが欠点だと思う
543 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:27:30.62 ID:CqSQN5Gg.net] でもjavaやc#みたいに一緒くたにされると、見辛いことこの上ない
544 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:31:20.90 ID:Rp8Vr+Lo.net] >>537 テンプレートは嫌い?
545 名前: mailto:sage [2020/06/23(火) 20:32:52.52 ID:sbDHiXI+.net] >>536 それが分割コンパイルというものなのでは?
546 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 20:34:09.42 ID:CqSQN5Gg.net] templateでも長くなってきたら実装分けるだろ 普通はヘッダからさらにincludeするだけだけど、場合によっては分割コンパイルもする
547 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 21:15:05.81 ID:K4mymhGD.net] >>537 そのためだけにインターフェース作ったりしてる
548 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 21:35:01 ID:oj2a+YQY.net] 数ヶ月前の自分て他人だかんな なんでこんなアホなことしてんだとムカッ腹立ったりする
549 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 23:28:42.38 ID:Rp8Vr+Lo.net] >>539 分けるべき時は分ける 分けたくない時もある その自由が無い
550 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 23:32:03.90 ID:0n9/qQGG.net] >>540 分けるだろって 分けるべき時と分けないべきときがある
551 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 05:30:51 ID:fimjTN9U.net] コンパイルが重いtemplateはよく分けるな
552 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 07:09:07 ID:MMfROoXz.net] 明示的な具現化?
553 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 07:16:09 ID:+7c5yhaJ.net] >>540 ヘッダからインクルードするだけって まさかそれで実装を分けたと思ってる?
554 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 07:24:43.03 ID:5K2T8Wb8.net] 標準ライブラリが分けられてないのに どうやって分けるんだよ 使うテンプレートパラメーターがあらかじめ決まってないと実装を分けられないはずなんだが 実装を分けるってのは コンパイル単位を分けるってことな
555 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 08:16:05 ID:iulgQyvw.net] C++のライブラリを更新するとき、新たなメンバ変数を追加するとメンバへのオフセットが ずれてバイナリ互換性がなくなるといいますが、これを無理やりどうにかする方法って ありますかね? 理屈上は、オフセットに影響を与えないメモリ位置に各インスタンスのメンバ変数を保持し、 参照、破棄等適宜すればいいと思いますが... ?? もしこれが可能ならば具体例とかを見たい のですが、うまく探せませんでした。
556 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 08:46:11 ID:MMfROoXz.net] メンバ変数をprivateにして雪駄と下駄を用意する メンバ変数へのアクセスを常に関数経由とすることで オフセット等の物理的な条件で互換性が失われることを防げる つーか、ソースコードを変更してるのにバイナリを更新しないのはおかしいだろ Makefileのバグを疑うべき
557 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 09:35:30 ID:OmEqu4Is.net] >>549 普通に追加して再コンパイルさせりゃいいという話じゃなさそうなのはわかるけど 「無理やり」が暗に指していそうな制約も「どうにかする」の指す要件もわからない。
558 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 11:11:37.90 ID:RdcHMRga.net] osの違いを吸収してるようなもんを作ってる場合 何でもフルチンで触らせるとそもそもの意味がなくなるわな
559 名前:デフォルトの名無しさん [2020/06/24(水) 11:43:22.15 ID:6+kkBVmV.net] >>549 python の C module の造り方
560 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 12:08:38.76 ID:irp07WaX.net] >>549 COMみたいに、methodだけを外に出して、データは直接は外に出さないようにすればいい。 interfaceの考え方。
561 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 12:13:38.23 ID:irp07WaX.net] >>554 追加。 Win32APIなどの手法を真似る方法もある。 OSの内部構造が修正になってもAPIは互換性を保ててる。 やりとりのための構造体は先頭の方にバイト数を入れるメンバが用意されていて、 以後のメンバの後世が変更になった場合、構造体の末尾に追加していっている。 先頭にバイト数を入れることで、個々の構造体が変化したかだけの影響を受けるため、 ライブラリ全体のバージョンが変化しても全ての関数の仕様を入れ替える必要がなくなっている。
562 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 12:20:34.60 ID:sRKtYS7k.net] >>549 pimplでぐぐれ
563 名前:548 mailto:sage [2020/06/24(水) 16:28:24 ID:iulgQyvw.net] 皆さんどうもです。状況は (以下、ライブラリ -> lib アプリ -> app) lib v1.0 リリース app v1.0 が lib v1.0 をリンクしてビルド、リリース lib v1.1 リリース(メンバ追加) <- 今ココ app v1.0 クラッシュ というわけで lib v1.1 を出すとき小細工して(でもメンバ変数相当を追加したい) app v1.0 のクラッシュを防げないか、ということです。 とりあえず lib v1.0 には impl メンバはないです。
564 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 16:41:30.01 ID:nJwAdMhi.net] >>556 pimplでバイナリ互換は保証できないよ
565 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 16:48:55.87 ID:nJwAdMhi.net] >>557 インスタンスをnewしてるのがアプリ側だったら メンバ追加はほぼ絶望的 無理にやるとしたらメンバのアライメントの隙間に数バイトつっこむぐらい バイナリ互換とる場合はIFはCにするのが定石だよ (C++でやるなら上にあるとおりcomとかになって複雑になる) よくわかってないみたいだから頭下げてアプリにビルドしなおしてもらいな
566 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 17:26:36.53 ID:L0Gy/Feu.net] よく分からん libは兎も角、appはソースあるのが普通じゃね リンクしなおしている時点で、コンパイルからし直すのも出来るはず ヘッダのバージョン合ってなきゃそりゃ転けるわ
567 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 18:00:35.46 ID:irp07WaX.net] >>559 newの変わりに、仮想関数のCreateObject()というメソッドを呼ぶ方式があるね。
568 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 18:18:52.62 ID:irp07WaX.net] 1. Pimplの場合: class CXxx { public: (メソッド群) protected: CImpl *pImpl; }; 2. 別解 使う側 : class CBase { public: virtual CBase *CreateObject(); (メソッド群) }; 実装する側 : class CDerived : public Base { public: CBase *CreateObject(); // 実際にはCDeriveの先頭アドレスをCBase*にcastしたものを返す。 (データメンバ群) };
569 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 18:26:04.51 ID:OmEqu4Is.net] >>562 その別解とやら、 CBase のインスタンスを得るためにはまず CreateObject() を呼び出すための CBase のインスタンスが必要になってて、無理じゃね?
570 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 18:35:10.44 ID:fimjTN9U.net] >>548 プロジェクトの範囲内ではテンプレートパラメータが数種類に限られることも多いからそういう時には明示的インスタンス化が利用できるよ
571 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 18:38:06.77 ID:q+GJbQMN.net] >>550 ライブラリ って知らない? >>549 バイナリをいろいろなアプリで今後使う予定ならなるべく実装を隠そう 内部で実体の構造体なりクラスなりをnewで作って 外部に公開するクラスは 単にその内部クラスとのインターフェースだけ行う 後から機能を追加出来るように function(command, param1, param2) みたいな関数も用意しておく
572 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 18:57:23.17 ID:irp07WaX.net] >>563 言われてみれば。正しい別解の1つは、 class CXxx { public: static CXxx *CreateObject(); (メソッド群) }; だね。
573 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 18:59:39.89 ID:wsyC1+3+.net] >>563 なにいってんだ 返すのはポインタだから実体必要ないだろ
574 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:01:25.53 ID:QJ36Pf9n.net] >>567 仮想関数呼ぶのには当然同じクラスの実体が必要 cloneなら仮想関数で実装できる
575 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:08:20.34 ID:irp07WaX.net] >>566 すまん、こうでなくてはならなかった: 使う側: class CBase { public: static CBase *CreateObject(); (メソッド群) }; 実装側: class CDerived : public Base { public: (データメンバ群) }; CBase *CBase::CreateObject() { return new CDerived; }
576 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:08:44.81 ID:wsyC1+3+.net] >>568 実体のあるクラスをアップキャストすれば必要ねぇだろバカか
577 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:17:24 ID:QJ36Pf9n.net] 何が目的なんだか その派生クラスのインスタンスを作りたいから、CreateObject呼ぶんだろ? 呼ぶ前に派生クラスのインスタンスが必要って、鶏と卵じゃないか
578 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:19:01.22 ID:ML+2IMf2.net] こっそりlib差し替えとか後が怖いなーと思いましたw
579 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:24:18.50 ID:q+GJbQMN.net] >>557 今あるメンバ変数の1個をポインタに置き換える ここに色々なデータが入った構造体のポインタを置く これで互換性を保てる
580 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:27:44 ID:QJ36Pf9n.net] ヘッダにオブジェクトの中身を読み書きするinline関数有ったら危険 inlineじゃなくてもtemplateだとヤバイ まあtemplateで実体生成されないように実装分離してたらセーフかな
581 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:29:28 ID:q+GJbQMN.net] 当然外から直接アクセスする変数は変えたらダメ
582 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:42:58 ID:q+GJbQMN.net] ヘッダは基本変えない 不便ならポインタに置き換える変数1個だけ型と名前を変える あとはライブラリ側のコードのみ変更 アクセス関数を後から増やすなら クラスのポインタとパラメータをパラメータにしたグローバル関数にする 多少使いづらいが 互換性を考えて設計しなかったツケ
583 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:48:51.80 ID:e6Wuxio/.net] >>572 巷のOSとか、定期アップデートがかかるときにこういうので悩んだりしないんですかね? >>573 おお確かにそれでいいんですかね? まあ今後新たにライブラリを公開することがあるなら最初から気をつけようってことでw [] [ここ壊れてます]
585 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 21:43:18.10 ID:N310/pVU.net] 拡張した方は別の型(派生クラス)じゃあかんのか。
586 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 09:10:26.77 ID:TVNlb9r7.net] >>565 知ってます 当たり前でしょそんなこと!
587 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 10:19:29 ID:X3nsKEKb.net] >>573 それは、Pimpl方式だけど、それより、>>569 の方が書きやすいし、効率も良い。
588 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 10:26:19 ID:lze6mCYp.net] >>580 一から書き直せる条件じゃないんのおわかり? だいたい >>573 をpimplとは呼ばないでしょ 置き換えないメンバはそのまま見えてるわけだから あとpimpl論議は飽きた
589 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 12:53:57.93 ID:yb+enRFi.net] >>580 互換性を保つのが前提だから ヘッダは基本今のまま変更不可 っていう前提条件を理解してから書いてね
590 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 18:36:00.50 ID:KZb+gCmD.net] >>581 書き直せないんじゃ、危険だけど>>573 くらいしかないんじゃない? そんな暗黒魔法使うくらいならapp1.0を再コンパイルする方法を考えるけどね。
591 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 18:41:27 ID:/eSpQqPW.net] ヘッダは変更するの前提じゃないの? バイナリ互換させるの前提なのだから
592 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 19:04:50 ID:X3nsKEKb.net] 「メンバ変数の一個をポインタに置き換える」 こともヘッダを変更するのが必須になると思うのだが。
593 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 19:07:11 ID:TznTPNyN.net] >>585 必須じゃない
594 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 19:13:33 ID:g2od3l7G.net] 実装側でアクロバットするのは無理やりバイナリ互換させる旧バージョン対応の方で良い 新バージョンの中身にあわせてヘッダを更新しておかないと、負の遺産が延々と続くことになる
595 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 19:14:44 ID:L+/QiPNH.net] >>585 やり方次第。 privateのint変数やポインタ変数があるなら、キャストしてぶちこめばいい。 他の変数も似たようなもん。
596 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:16:18.79 ID:X3nsKEKb.net] >>588 ええ!!??
597 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:27:44.15 ID:aCPUEpAO.net] バイナリ互換をはじめてかんがえた って感じの人が多くて驚く
598 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:27:52.99 ID:g2od3l7G.net] pointerに置き換えたとして、指す先の実体の管理はどうするんだ 元々デストラクタが外部定義されてないと、デフォルトのデストラクタ呼び出しはinline化されてしまっている
599 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:32:44.29 ID:aCPUEpAO.net] なんでインラインだと思ったんだか
600 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:34:45.97 ID:aCPUEpAO.net] ライブラリ作ったこと無いのかな?
601 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:36:15.68 ID:g2od3l7G.net] いや、はじめからバイナリ互換させる前提で設計したライブラリでもない限り、小手先の対応でなんとかなる場面は物凄い限られるよ
602 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:38:38.17 ID:aCPUEpAO.net] >>594 それは互換性を保つ技術が無いから
603 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:41:06.01 ID:aCPUEpAO.net] メモリアラインメント調整等で発生する隙間を集めて変数として使う っていう手もある データ構造互換だとよくやる手法
604 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:41:55.04 ID:L+/QiPNH.net] >>591 そんなもん、GC実装して無理やりゴミ集めするしか無いだろ。 最後はアプリ終了時にOSが処分してくれることを期待するしかない。
605 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:42:42.30 ID:g2od3l7G.net] バイナリ互換前提で開発されていないから、問題が出ているんじゃないの? appがコンパイルされた時点で、デストラクタやらコピコンやら代入やらをすべて明示的に外部定義していないと、コード中で必要に応じてデフォルトが呼ばれて、当然inline化もされてしまう
606 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:43:40.85 ID:jUSiql3P.net] >>592 必ずインライン化されてるとは言えないけど、可能性はあるよね? 結局のところ具体的なコード要件を >>549 が言わない限りは不毛な気もする。
607 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:44:07.37 ID:aCPUEpAO.net] >>598 >>593
608 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:45:52.88 ID:aCPUEpAO.net] ライブラリを作った事がないヤツが ライブラリの互換性についてアドバイスしようとしてて笑える
609 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:47:42.56 ID:g2od3l7G.net] ? ライブラリ作ったことあるからこその内容だろうに GCするとか、リークしたままOSに回収させるとかそれこそライブラリとしてあり得ない対応だろう
610 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 19:51:39.44 ID:aCPUEpAO.net] なんでデストラクタがインラインだと思うんだ?
611 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 19:55:22 ID:g2od3l7G.net] デフォルトだとinlineのデストラクタが生成されるのがc++の仕様だろ じゃないと単なるプレーンな構造体でもデストラクタの呼び出しするはめになる
612 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:01:17.97 ID:aCPUEpAO.net] クラスをライブラリ化するのにメンバ関数がインライン? ご冗談を
613 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:02:21.68 ID:aCPUEpAO.net] デストラクタがインラインなら>>596
614 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:05:18.94 ID:g2od3l7G.net] バイナリ互換想定してないなら、inlineしない方が稀じゃね 全部外部定義だと、高速化の妨げになるじゃないか 世の中のc++用ライブラリを見てみれば良いさ inlineが無いどころかheader onlyが幅を利かせている
615 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 20:08:52 ID:g2od3l7G.net] alignmentサイズの隙間に入れたところで、コピーの時にコピーされるかどうかも不明 と言うか、単体だとまずされない まあコピーも外部定義されていれば置き換え可能だけど
616 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 20:10:03 ID:L+/QiPNH.net] >>600 そもそもバイナリ互換を考慮していないライブラリを今さら何とかしようとするウンコな発想ありきだからな。 まともなライブラリ実装者なら 「そんなクソとっとと便所に流してマトモなもの作り直せ」 としか言わんわ。
617 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 20:11:42 ID:Y+MR3z5H.net] >>607 テンプレートだろそれ
618 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 20:13:29 ID:Y+MR3z5H.net] >>608 コピーもインライン前提か?
619 名前:デフォルトの名無しさん mailto:sage [2020/06/25(Thu) 20:14:36 ID:g2od3l7G.net] inlineじゃないtemplateのヘッダオンリーでも、バイナリ互換保つの無理だよね 例えinline化されてなくても、各obj内で実体化されたtemplate関数が同一じゃないと何が起こっても文句言えない
620 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:15:41.12 ID:g2od3l7G.net] 明示的なinlineもだけど、定義せずコンパイラに任せた場合デフォルトで出来るものはinline扱いになる
621 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:16:21.51 ID:Y+MR3z5H.net] なんでobj? ライブラリっていってるんだからlibだろ
622 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:18:38.89 ID:g2od3l7G.net] libはobjの集合だろうに
623 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:19:42.46 ID:Y+MR3z5H.net] インライン混じりのライブラリ ならメンバ変数を増やすのを心配する以前だろ 問題が変わってる
624 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:27:59.07 ID:Y+MR3z5H.net] >>612 だからヘッダは基本変更しない
625 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:29:04.78 ID:iE0yhaVV.net] どうしても必要なことなら、 ライブラリの中にスタティックな連想配列置いて、thisアドレスをキーにして追加したいメンバ変数引くようにしたら? トリッキーでないし確実に動く
626 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:29:54.44 ID:g2od3l7G.net] コピーされなきゃ良いよね
627 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:30:23.57 ID:g2od3l7G.net] vectorで持たれてても再配置されたら困るし
628 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:32:18.93 ID:Y+MR3z5H.net] >>618 インラインかもよ コンストラクタもデストラクタもコピーも 追加したメンバ変数へのアクセスも
629 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:34:29.24 ID:Y+MR3z5H.net] 何の互換性を保ちたいのかわからなくなってきた
630 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:42:06.05 ID:N8mY4JDD.net] 同感
631 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:13:19.28 ID:Y+MR3z5H.net] ライブラリを使う(一部の)コードはコンパイル済みでリコンパイル出来ない コンパイル済みのコード内で使ってるクラスのメンバ変数を追加したい 当然 クラスのサイズは変えられないし コンパイル済みのコード内の(インライン展開されてる)関数も変えられない どの関数がコンパイル済みコード内にあって どの関数がライブラリ内にあるかは不明
632 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:14:06.17 ID:Y+MR3z5H.net] こんな感じ?
633 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:25:58.94 ID:GV91Na/E.net] ほとんど読んでないけどID:aCPUEpAOとID:Y+MR3z5Hがド素人なのはわかった
634 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:27:27.39 ID:Y+MR3z5H.net] はいはいwww
635 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:32:36.99 ID:GV91Na/E.net] ヘッダの変更無しにどうやって新しい機能追加すんだよ
636 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:39:56.91 ID:Y+MR3z5H.net] 機能を追加したいなんて言ってたか?
637 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:40:05.85 ID:GV91Na/E.net] と思ったら>>549 が前提なのか、すまん とりあえずインスタンスそのままで扱うのは無理じゃね ユーザー側が一貫してポインタで扱うのは必須だと思う
638 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:46:21.80 ID:Y+MR3z5H.net] なにそのド素人発言
639 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:47:56.11 ID:GV91Na/E.net] >>611 ,614,616
640 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:49:41.84 ID:GV91Na/E.net] インスタンスで扱ってるなら暗黙定義された関数の動作が変わる可能性くらいすぐ気づけやド素人が
641 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:58:47.71 ID:W+LR7rOf.net] ポインタで扱うとインライン関数がリコンパイル無しで変えられるって?
642 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:01:17.65 ID:W+LR7rOf.net] ライブラリなんだから メンバ関数は全てライブラリ側で実装するだろ普通 テンプレートとか別途リンクが不要なことが売りなライブラリならともかく 何のためのライブラリだか
643 名前:632 mailto:sage [2020/06/25(木) 22:05:49.15 ID:Q7o8gz5q.net] >>634 ヒント:仮想関数、コピー不可、Factory
644 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:06:38.78 ID:Q7o8gz5q.net] てかこの要件だと>>618 ですでに答え出てる気がする
645 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:06:48.48 ID:W+LR7rOf.net] 案を出せない人間が何を言っても負け犬の遠吠え
646 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:09:27.67 ID:W+LR7rOf.net] >>637 >>573 に対してメリットあるか?
647 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:11:36.08 ID:W+LR7rOf.net] >>636 あれ? もしかして 互換性保持した修正はギブアップで 依頼者の要件を無視した案を言ってる?
648 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:14:20.52 ID:Q7o8gz5q.net] >>638 っ[鏡] てかID変えたんか? >>639 >>574
649 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:15:15.45 ID:Q7o8gz5q.net] >>640 >>634 に対して反論したんだが すり替えてんじゃねーよ
650 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:16:59.09 ID:W+LR7rOf.net] 外部から直接アクセスしない変数を置き換えるに決まってるたろ 連想配列だと 初期化順とかスレッド安全とかパフォーマンスとか 色々と心配だねえ
651 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:20:39.99 ID:lze6mCYp.net] >>637 どこが答えだよ >>618 は無理だよ アプリ側でnew/deleteされたことをライブラリ側はトラッキングできない アプリ側でnew/deleteされてないのだったら問題になってない アプリに手を加えていいのだったらバイナリ互換考えなくていい
652 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:20:56.12 ID:W+LR7rOf.net] >>642 >>633 はお前だろ?
653 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:26:37.67 ID:Q7o8gz5q.net] >>644 新しいthis来たら新しく作るだけだろ deleteに対してはどうにもできんけど >>645 馬鹿かお前は ポインタで扱う前提に乗っかったのはお前だろ バカにしようとして自爆したのに逆ギレか
654 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:26:45.54 ID:W+LR7rOf.net] コピーを使わない、もしくはインラインじゃないなら>>596 コンストラクタ、デストラクタ、コピーがインラインじゃないなら >>573 で良い new deleteはアプリ側でもライブラリ側でも問題ない
655 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:29:26.54 ID:Q7o8gz5q.net] 何言ってんだこいつ
656 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:29:51.27 ID:W+LR7rOf.net] コンストラクタはインラインでも>>573 で問題ないね
657 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:35:32.05 ID:W+LR7rOf.net] >>644 より>>573 の方が良いね 隙間があってコピーで問題なければ>>596
658 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:36:49.66 ID:W+LR7rOf.net] >>644 じゃなかった 連想配列案
659 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:47:52.28 ID:Q7o8gz5q.net] インラインじゃないならって、普通コンパイルオプションやnoinlineで指定してない限り、 実装が見えているメンバ関数は全てインライン展開はされうるんだぞ そんな厳しい前提がOKなら>>646 で言ったdeleteの問題だって対処できる
660 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:50:51.97 ID:W+LR7rOf.net] >>573 と>>618 デストラクタがインラインだとダメなのは同じ コピー時の制約も同じ 速度、スレッド安全性、初期化順などの心配事に関しては>>573 の勝ち >>573 は外部からアクセスしていないポインタサイズの変数の存在が条件
661 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:54:30.29 ID:W+LR7rOf.net] >>652 ヘッダにない関数はインラインにしようがない
662 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 22:59:14.54 ID:W+LR7rOf.net] >>573 や>>596 のスペースが全く無いなら他の方法を考えるしかないけど
663 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:01:53.27 ID:W+LR7rOf.net] デストラクタ問題に対応出来るのは今のところ>>596 だけ
664 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:05:32.49 ID:Q7o8gz5q.net] 暗黙定義のものが一つも無ければね (=ヘッダに宣言はあるが実装は見えないものだけ てか別に>>618 じゃないといけないとは言ってないが >速度、スレッド安全性、初期化順 速度が必要とか一言も書いてないし スレッド安全性て、連想配列使うのはライブラリ内だけなんだからライブラリ側で対処すればいいだけ >>656 ユーザーが使ってない変数や領域に新しいメンバを含む構造体へのポインタを入れる案も 根本的には連想配列案と一緒だよ、デストラクタが非インラインでなければ解放できないぞ まぁ今ある情報だけで議論してもどうにもならんが
665 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:06:38.16 ID:Q7o8gz5q.net] >>657 の最初は>>654 宛
666 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:11:48.74 ID:W+LR7rOf.net] >>657 >>596 を勘違いしてる ポインタを入れるわけじゃない 隙間に変数そのものを入れる
667 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:23:27.92 ID:W+LR7rOf.net] コンテナやスマポなど、コピーやデストラクタで処理される物の中身を少し大きくするとか close()みたいな最後に必ず呼ばれる関数があればそこに入れ込むとか 中身がわかればもっと別の案も出るかも
668 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:30:07.30 ID:W+LR7rOf.net] >>657 速度が必要と書いてなければ速度無視が前提って... なかなか衝撃発言ですねえ C++なんだから組み込みのチープ環境かもしれないし リアルタイム処理かもしれないし もしかしたらISR内部かも (ISRならnewも問題になるか) 速度がどうでもいい用途でいまだにC++を使うって どんな業界かな?
669 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:34:58.25 ID:Q7o8gz5q.net] ほんとにド素人だな・・・呆れた
670 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:41:46.09 ID:W+LR7rOf.net] 負け宣言? 雑魚が
671 名前:はちみつ餃子 mailto:sage [2020/06/25(木) 23:52:04.02 ID:Dxq2c9AW.net] >>662 どーしろと? (駄洒落)
672 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 07:52:12 ID:UtOMuHDg.net] 不変のアブストラクトクラスを作っておいて 実装はそこの派生クラスでやり 使用者はポインタで使う
673 名前: mailto:sage [2020/06/26(金) 19:50:48.55 ID:9IxUvn/4.net] >>664 冴えてる! いつもすてきなはちみつさんですね!
674 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 20:05:18.50 ID:jgcbTaF5.net] 糞コテ集合
675 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 22:39:47 ID:2sQMfeSo.net] あと蟻人間とかいうやつが揃えばジャックポット
676 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 22:59:40.41 ID:ReyCZ0Ra.net] よーし、みんな呼んじゃうゾ void君、rubyガイジ、jquery房ーっ
677 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 00:11:14.27 ID:rOaH6R8n.net] 蟻ははちみつが大好き。 ハチとアリは同属。
678 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 03:40:34.85 ID:W+OG+j+5.net] ∩___∩ | | ノ\ ヽ | / ●゛ ● | | | ∪ ( _●_) ミ j 彡、 |∪| | J / ∩ノ ⊃ ヽ ( \ / _ノ | | .\ “ /__| | \ /___ /
679 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 03:55:34 ID:aqzZKmXR.net] 心底どうでもいい
680 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 10:40:14 ID:rOaH6R8n.net] 片山右京
681 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 13:08:47.90 ID:5dDNakqG.net] 杉下右京
682 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 14:16:45.56 ID:rOaH6R8n.net] 博文
683 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 22:55:32.89 ID:XmSaDv1W.net] 今時のmodern c++で、マルチスレッドやるにはどうすればいいでしょうか。とりあえず今はC++17でコンパイルしてますが 1.c++20のコルーチンとコールチンライブラリを使う 2.固定スレッド数のスレッドプールなら簡単に実装できるので自分で実装、もしくは素敵なライブラリがある? 3.std::thread,std::asyncでいいや
684 名前:蟻人間 mailto:sage [2020/06/27(土) 22:59:52.80 ID:4SruWd+v.net] >>676 std::threadとOpenMPが基本かな。
685 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:00:22.36 ID:XmSaDv1W.net] とりあえず、MSVCを使ってます 1は時期尚早? 2はMSVCだとTask Parallel Libraryがあるけど、プライオリティキューを使いたいとなるとやっぱ自前? 3はね 皆さんはどんな感じでしょうか
686 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:06:40.51 ID:TsX0h7IG.net] マルチスレッドやる がわからん 何をしたいの?
687 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:10:16.30 ID:XmSaDv1W.net] タスクの実行を(優先順位付きで)スケジュールしたり、キャンセルしたりしたいです 非同期処理? なんてイエバいいのだろう
688 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:12:59.91 ID:TsX0h7IG.net] 環境は?
689 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:14:55.69 ID:XmSaDv1W.net] MSVCのWindowsアプリです
690 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:24:28.13 ID:TsX0h7IG.net] MFC Windows API std::thread どれでも出来るけど 求めるものは? 性能?作りやすさ?移植性?
691 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:26:07.41 ID:XmSaDv1W.net] まぁ、windowsにはwin32でthread pool apiがあったり、ATLでCThreadPoolクラスみたいのがあるっぽいんですが、昔より今時の方法で.. 性能はあんま気にしてません 作りやすさですね
692 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:26:45.37 ID:TsX0h7IG.net] 普通に自作すれば? 仕様を好み通りに出来る
693 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:29:23.19 ID:XmSaDv1W.net] 性能はあんま気にしてませんが、テスト的にstd::threadで今は実装してますが、セマフォなりで全く制御してないのでCPU使用率がはねあがって、セマフォで制御するくらいならスレッドプールくらいは導入したいなと
694 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:35:09.74 ID:XmSaDv1W.net] >>685 優先順位付きとかやると色々自前が楽かなぁと思ってたんですが、やっぱ自前ですか ありがとうございます
695 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:51:55.88 ID:IY07Q1dO.net] msvcならasync使えばthread pool使われてたような async|deferredでは問題ないけど、asyncのみだと仕様的にアウトっぽいから将来的に修正されるかもしれんが
696 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:55:27.13 ID:TsX0h7IG.net] プライオリティキュー 自体を既に使ってるなら 待つ仕組みだけ追加すれば良いのでは?
697 名前:デフォルトの名無しさん mailto:sage [2020/06/27(土) 23:58:18.31 ID:TsX0h7IG.net] while (1){ イベント待ち イベントクリア キューから取得 処理 } ---- キューに追加 イベントセット
698 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:14:46.55 ID:En8ZMxKR.net] >>688 そんなこんなこと書いてありますが、std::asyncってdetachできないですよね? こういう作りがいいのか知りませんが、基本UIスレッドから非同期処理実行して完了したらWinAPIのPostMessageで完了通知してます ので、std::threadみたくdetachしたいのです >>690 プライオリティキューはこれから実装するんですが、単にstd::set使ってlessパラメーター指定すればできあがり?とはいかない?
699 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:19:31.12 ID:BWJrAYP0.net] while (1){ イベント待ち イベントクリア while (キューから取得){ 処理 } } ---- キューに追加 イベントセット
700 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:21:59.78 ID:BWJrAYP0.net] こうだった std::set / less 同じプライオリティがダブらないならこれでも
701 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:25:52.98 ID:En8ZMxKR.net] プライオリティはダブルんですけど、要素がプライオリティじゃなくて、プライオリティと例えば実行するstd::functionのペアで、このペアオブジェクトがダブらないはず
702 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:27:09.32 ID:h/QEc5EX.net] お前は人の相談に乗れるレベルなのか?
703 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:33:11.03 ID:BWJrAYP0.net] >>694 同じfunctionが複数セットされても 実行が1回になってもいいなら それでいいんじゃない?
704 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:42:37.03 ID:En8ZMxKR.net] >>696 unordered系しか本格的に使ったことしかないんですけど std::pair使わずに独自ペアオブジェクトじゃだめそうだな.. std::pairをstd::shared_ptrでラップすればOKそうに見える
705 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:43:43.83 ID:BWJrAYP0.net] lessもプライオリティとfunctionのペアってことね 同じプライオリティの処理が キューにセットした順にはならなくなるけど 個人的には キューにセットした回数分実行するために multisetにしたい
706 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:46:39.83 ID:BWJrAYP0.net] プライオリティが多くないなら ブライオリティ別のdequeにすれば 公平性は保たれるし比較も不要
707 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:46:53.66 ID:En8ZMxKR.net] multisetですか、ちょっと調べてみます
708 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 00:56:32.40 ID:En8ZMxKR.net] あー。multisetでいいですね。それにします。 ありがとうございます
709 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 06:20:46.65 ID:vMsHglGs.net] ここまでintel TBBなし
710 名前:デフォルトの名無しさん mailto:sage [2020/06/28(日) 06:44:27.88 ID:8Xgo7zrJ.net] >>676 C++17ならstd::execution::parが使えるぞ
711 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 18:13:09.56 ID:W+MWiusu.net] C++17を指定する#pragmaない? gccかclで
712 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 20:39:19.04 ID:8IN9xg77.net] >>704 引数じゃいかんのか?
713 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 21:05:33 ID:W+MWiusu.net] 本当はC++17をデフォにする設定とかあればいいんだけど 探しても見つからんかった
714 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 21:06:36 ID:W+MWiusu.net] 「現行規格」をデフォにできねえのおかしいだろ 作業が必要でも構わんが方法がないのは
715 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 21:12:22.03 ID:Y/VrOCax.net] エイリアスしたらだめなの? 全然見当違いなこと言ってる?
716 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 21:12:29.49 ID:e6PapWOV.net] おかしいのはお前
717 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 21:15:58.24 ID:8IN9xg77.net] Makefileか*shrcにでも書いておけばいいだろ…
718 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 21:15:59.68 ID:64JVWZe8.net] あるだろ -std=c++17
719 名前:デフォルトの名無しさん mailto:sage [2020/06/30(火) 21:34:29.72 ID:Awxu+7Gs.net] 普通の人 オプションないのはおかしいだろ →あるはずだから探そう
720 名前:はちみつ餃子 mailto:sage [2020/06/30(火) 22:05:18.46 ID:ZpGOlbch.net] GCC なら specs に書いておくという方法もあるよ。
721 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 01:50:44.15 ID:Rk3KIbda.net] GCC 11からデフォルトで17になるよ やったね
722 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 10:19:56.89 ID:rbRREsW
] [ここ壊れてます]
723 名前:h.net mailto: C++で作られているモダンなマテリアル風デザインのWindows用デスクトップアプリのソースを見ると Direct2dやGDIを駆使して自前で描画していたのですが、ここまでしないといけないものなんでしょうか…? [] [ここ壊れてます]
724 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 10:45:42.03 ID:BkFpWX8v.net] ソレがイヤなら金だして買え C++BuilderやらMFCやら色々あるぞ
725 名前:デフォルトの名無しさん [2020/07/01(水) 12:12:18.25 ID:IfUrt5hg.net] コンパイルオプションであるのは当たり前だけど それだとソースとmakefileみたいに別管理になる ソースにコメントでC++17以上とか描くくらいなら 最初からpragmaでC++17以上指定とかしたいって 自然な要求だと思うけど
726 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 12:22:38 ID:BzwPXT9B.net] C++17の機能を使わなきゃ良い
727 名前:デフォルトの名無しさん [2020/07/01(水) 12:30:52.21 ID:IfUrt5hg.net] 0x以前でも動くのが理想
728 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 12:33:19.40 ID:bZXPscHV.net] >>715 別にそこまでしなくても良いけど自前描画は割とメリットも多い Win32のコントロールって一つ一つは割と大きなオブジェクトだからね それを省いて絵だけで完結させると驚くほど軽くなったりする WinFormsに対するWPFの発想がこれ ただしWPFは抽象化に抽象化を重ねた結果、返って重くなってしまったという産廃だが
729 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 12:49:57.46 ID:gL8G43CT.net] >>717 元の質問者は引数じゃいけない、エイリアスじゃいけないとは一言も説明してないのに、回答を無視してできないのはおかしいとか言ってるから、はあ?できるだろって叩かれてるんだと思うが。 あと、プリプロセッサで指定バージョン以下のコンパイラを使ったときにエラーにすることは今でもできる。
730 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 13:20:57.29 ID:lJkrSuwc.net] >>717 指定して何をしたいんだ? 17に対応しないコンパイラを使ったら排除したいのか? そんなもんマクロ使えよ
731 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 13:24:24.14 ID:lJkrSuwc.net] そもそもpragmaは無視しても問題ないんだぞ こんなもんで17指定してなんの意味があるんだか
732 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 20:22:39.52 ID:OO2qW6bI.net] static_assert(__cplusplus >= 201703, "C++17 or later only"); これだと、せっかくC++17できるコンパイラなのにエラーという愚かなことになるだろ #pragmaとは言ったけど、has_includeみたいな標準に何か追加でもいいんだけど
733 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 20:35:37 ID:8lUxucUi.net] C++17の機能を使わないのが一番
734 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 20:37:50 ID:KhLQxxHt.net] またABIか変わるかもしれないのにソースファイルごとに勝手にコンパイラが変わったら困るんじゃないの?
735 名前:デフォルトの名無しさん mailto:sage [2020/07/01(水) 21:14:42.95 ID:b6g5MaOw.net] コンパイラオプションつけるのになんの問題が
736 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 04:30:05.73 ID:qK+Va6mV.net] ダメだ通じてない
737 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 08:58:39.89 ID:Xcy/mciM.net] そりゃ意味ないからな configureに準拠規格オプション探すマクロ1つ入れとけば済む話だし
738 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 10:53:47.11 ID:qK+Va6mV.net] // this program is C++17 と書いて手作業に期待するのを #pragma C++17 で自動化するのは意味がないと言うのか? 自動認識はそう珍しい話ではないと思うが
739 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 11:27:53 ID:JVdKJwPF.net] 今でもconfigure.acに AX_CXX_COMPILE_STDCXX_17 って書くだけで済むから
740 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 11:40:05.93 ID:JVdKJwPF.net] 他人に巻くプログラムならビルドパッケージでどうとでもなるし 自家用ならmakefileにオプションまでベタ書きでいいし 何にこだわってるのか知らん
741 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 12:20:13.78 ID:qK+Va6mV.net] プログラム1つのためにGCCをわざわざビルドしろだと?
742 名前:ィちょくってんのか [] [ここ壊れてます]
743 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 12:21:08.29 ID:5hT1fktY.net] C++17の機能を使わなきゃ良いだけ
744 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 12:23:23.48 ID:jaxwQaY9.net] 素人はあれこれツール使いこなすのいやなんだよね わかる
745 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 12:27:34.40 ID:Kyu9Eer8.net] >>733 え? 自分で作ってるプログラムのconfigure作るときのはなししてんだけどwwww
746 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 12:29:59.81 ID:Kyu9Eer8.net] 今ある機能でどうとでもなることを 将来搭載されても後方互換性がなくて結局今ある機能に頼る羽目になる新機能をつけろつけろと騒がれても困りますよw
747 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 12:30:50.81 ID:qK+Va6mV.net] 729へのリプライでそういうこと書くか?
748 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 12:32:13 ID:qK+Va6mV.net] >>737 すまん、俺はイウォーク語はわからん 日本語でしゃべってくれ
749 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 12:39:44.74 ID:Kyu9Eer8.net] configur.acといわれてgccをビルドするとか思っちゃう人はヒューマンステージが低いのでもっと修行してくださいwwww
750 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 12:40:24.89 ID:qK+Va6mV.net] typoするほどプルプルしてんの?
751 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 13:32:58 ID:Kyu9Eer8.net] >>741 ミスしか突っ込めない時点で負けだよw
752 名前:デフォルトの名無しさん [2020/07/02(木) 15:38:52.42 ID:Vurtjy2V.net] ウェブ系の人にはなじみが無いかもしれないけど、C/C++のライブラリってバイナリだよ。
753 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 16:22:54.35 ID:fs1yx03v.net]
754 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 18:12:48.64 ID:O1gKlzQs.net] Makefileに書けばいいじゃん
755 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 18:31:29.81 ID:pD7vCP0t.net] 俺の環境のgccのバージョン10だぜ
756 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:04:26.96 ID:tTltJbRW.net] >>730 Makefile なりなんなりで別管理になることを問題だと思ってるのはあなただけ。 具体的に何がどれだけの問題なのか、よく考えて示してくれないとたぶん伝わらない。 単に面倒だということなら、多くの人は新たな #pragma の仕様を定めて実装するほうが面倒だとわかるので、 それがあって当然だなどという主張にはならない。
757 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:17:30.19 ID:EhH78vwe.net] コンパイラは対応する仕様決まらないままファイルの読み込み、パースをしなきゃいけないわけ? 必ず先頭行に書くとかなら未だしも 途中で現れたらどうするの? 引数で指定されているのと矛盾したらどうするの? 複数異なる指定があったら?
758 名前:デフォルトの名無しさん [2020/07/02(木) 20:19:59.76 ID:Vurtjy2V.net] >>747 Perlのソースコードをjavacでコンパイルする事はない。 ということは、言語をソースコードの属性としたほうが良いのでは? という考え方は理解できるかな。 一概に否定しない。 とはいえ、C++ではどっちにしろビルドシステムが必要なので、ソース内で指定できることに意義を感じない。
759 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:22:38.02 ID:EhH78vwe.net] メンバ関数定義の際にクラス内の型名を使った戻り値型を先に書く場合、クラス名::戻り値型 って書かなきゃいけないくらいパーサに配慮した仕様になっているのに、そんな面倒くさい要望に対応されるとは考えにくい
760 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:23:33.54 ID:R/kQb57d.net] 自分で作ったならバージョンわかってるやろ ライブラリとして配布するならpkg-configでも書いとけばいい 何が問題だよ
761 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:24:28.66 ID:EhH78vwe.net] 拡張子で分けるのが一番自然だよね xxx.cc17とかxxx.17.ccとか
762 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:24:41.75 ID:R/kQb57d.net] 標準のバージョンなんかよりたくさん環境依存あって それを自動解決する方法はいろいろあるのだから それを使えばなんの問題もないんだよ
763 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:25:20.06 ID:1S4E8SKc.net] ライブラリとして配布するのに C++17を要求するって 使ってもらう
764 名前:気無いだろ [] [ここ壊れてます]
765 名前:デフォルトの名無しさん [2020/07/02(木) 20:27:04.96 ID:Vurtjy2V.net] ライブラリを使ってくださるお客様にC++17を用意させるのは心苦しいかもしれないな。
766 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:27:07.52 ID:EhH78vwe.net] 今時c++17必須でも大丈夫だろ msvcですら使い物になる程度まで対応しているんだぞ
767 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:28:23.76 ID:1S4E8SKc.net] >>756 組み込みは未経験か?
768 名前:デフォルトの名無しさん [2020/07/02(木) 20:28:44.61 ID:Vurtjy2V.net] むしろ20はよ来いと思ってますが。
769 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:34:28.40 ID:EhH78vwe.net] 組み込みのほうがwindowsより規格対応早いくらいじゃね まあ全部は使えないけど、それは03だろうが同じだ むしろコンパイル時に出来ることが増えた分組み込みには新しい規格のほうが向いている
770 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:36:35.79 ID:1S4E8SKc.net] 小規模組み込みは未経験か?
771 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 20:43:28.28 ID:EhH78vwe.net] 小規模だとコンパイラ使えるだけでも御の字 コア部分は結局アセンブリで書くし そもそも自由にスタックすら使えなくね?
772 名前:デフォルトの名無しさん [2020/07/02(木) 20:47:32.39 ID:Vurtjy2V.net] RAM16バイトしかないしね。 無理ですわ。
773 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:00:59.82 ID:qK+Va6mV.net] >>747 あなただけって他の人が支持しているレスも出てるよ? 自演だろって言うんだろうけど違う マウントしたいんだろうね
774 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:02:30.64 ID:qK+Va6mV.net] >>757 その言葉をそのまま返す ARM以外の何かをやってる人?
775 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:03:18.41 ID:EhH78vwe.net] 拡張子で区別しろよ FORTRANを見習って
776 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:03:28.33 ID:qK+Va6mV.net] >>742 737の突っ込みは見なかったことにしたいんだよね
777 名前:デフォルトの名無しさん [2020/07/02(木) 21:04:54.87 ID:Vurtjy2V.net] >>763 どのレス?
778 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:06:16.16 ID:jaxwQaY9.net] もうGCCビルドした?
779 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:06:39.99 ID:qK+Va6mV.net] >>767 716
780 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:07:29.63 ID:qK+Va6mV.net] >>758 禿同
781 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:14:02.46 ID:EhH78vwe.net] 念願のconceptが
782 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:19:01.95 ID:Pm5AW70q.net] 目的がわからなすぎて、始め何をしたいのかさっぱりわからんかった。 答えがでるたびにゴールを動かされてる気分だったわ。 コミュ障のID:qK+Va6mVが全て悪い
783 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:24:05.51 ID:qK+Va6mV.net] ゴールを真面目に追ってくれてありがとう
784 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 21:29:34.62 ID://fjMSvC.net] >>773 死ね
785 名前:デフォルトの名無しさん [2020/07/02(木) 21:45:55.51 ID:Vurtjy2V.net] まあ一通り意見が出そろったと思いますが、ISO/IEC 14882:2023への提案は、今回は見送らせていただきたいと存じます。 また何かありましたら、スレのほうまでご連絡ください。
786 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 22:48:32.20 ID:R/kQb57d.net] K&Rしか解さないコンパイラのためにプロトタイプ宣言したコードの先頭にCのバージョン書くか アホらし
787 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 22:59:45 ID:il/EZBAV.net] extern シー
788 名前:デフォルトの名無しさん mailto:sage [2020/07/02(木) 23:21:51.63 ID:1S4E8SKc.net] >>764 色々とやってる
789 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 23:30:42 ID:NPHwzOsK.net] 色々とやらかしてる
790 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 23:32:21 ID:IPGZ+Gs9.net] 範囲for文でコンテナを走査するときに要素を参照で持つかどうかふと迷った それがパフォーマンスに影響するなら当然実測するべきだが、大概こんなもんが律速になるわけないからどっちかに決めときたい 要素を変更するなら参照、そうじゃないなら参照じゃない、でおk? ちなみに型は指定するよりautoにした方が大抵の場合速いみたいな話あるよね?
791 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 23:32:49 ID:NPHwzOsK.net] 質問なのですが自作アプリをソースコードでGCCをビルドして配布する場合、 テストってどうするの? あらゆるGCCのビルド条件でテストするの??
792 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2020/07/02(Thu) 23:36:11 ID:53deMRLD.net] >>780 auto&& にしておけばだいたい良いよ。
793 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 23:38:42 ID:1S4E8SKc.net] >>780 レジスタ1個で収まる型ならコピー そうじゃないなら参照 書き換えないならconst参照
794 名前:デフォルトの名無しさん mailto:sage [2020/07/02(Thu) 23:45:17 ID:jaxwQaY9.net] >>781 あらゆるなんか無理に決まってるだろ 人のまねしろ 他人のgithubとか見たことないのか?
795 名前:デフォルトの名無しさん [2020/07/03(金) 02:56:17.35 ID:36TwtcUk.net] >>781 僕はclang-cl、cl、gccで各Release/Debug、計6種のバイナリを作ってテスト通してますよ。 実際、通らないことが稀にあるので、そうゆう手順になりました。 とはいえ、ミスをしない人なら、必要ない事かも。 テストも必要ないかもしれない。
796 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 06:34:45.62 ID:pwGjxhFH.net] >>785 デスヨネー; ていうかソースコードで配布したものをユーザーがautomakeでGCCをビルドする文化とか ソフトウェアー工学的に正しくテストされてるうちに入れることが本当に可能なの?? とそこはかとなく疑問が、
797 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 06:42:13.15 ID:pwGjxhFH.net] もはやautomakeでGCCをビルドするレベルになると、 事はソースコードを書いた人の品質にとどまらず、 ユーザーがどのような経緯でインストールしたかわからない 野良ライブラリとか野良コンパイラの品質が絡んできてしまうま、
798 名前:703 mailto:sage [2020/07/03(金) 07:07:39.48 ID:AnL7VPS4.net] まあしかし結局#pragmaはないってことね 最初の質問には答えて貰えたようだ みんなありがとう
799 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 07:59:45.22 ID:9AQoDd9l.net] CMakeとかmeson使えよ
800 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 08:30:15.36 ID:AnL7VPS4.net] いやそれは勝手にするさ 俺の状況をいちいち知らんやつに わかってもらう必要もないし
801 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 09:00:50.39 ID:mxts/vg4.net] 無知が謎の上から目線
802 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 09:02:31.13 ID:mxts/vg4.net] gccをビルドとかなんの話だよwwww
803 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 09:06:03.21 ID:mxts/vg4.net] そもそもコンパイラは後方互換性を気にしていれば良くて 過去のコードがコンパイルできる、古い記法なら古いよとメッセージを出して終わるまでやれば良くて 将来変わるであろう規格に備えて私の知らない規格ですよと教えてあげる必要はなくエラーで落ちればそれでいい
804 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 09:24:17.78 ID:AnL7VPS4.net] 恰好つけたいんなら余計なことは言わないほうがいいぜ(クスクス
805 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 09:45:48.23 ID:0L14wyJb.net] >>794 それは >>790 なんて書いちゃうやつのことでしょw
806 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 09:59:43 ID:AnL7VPS4.net] あれは何かおかしいのか? おまえの頭のほうが(ry
807 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 10:28:37.24 ID:0L14wyJb.net] >>796 無知を指摘されただけのことを自分の事情的に言い訳して謎の上から目線へ変換してるのが頭悪すぎでしょw
808 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 10:45:09.88 ID:AnL7VPS4.net] いらんものを使わんのを無知とか大きなお世話なんだよ おまえだっていらんものは使わんだろうが、それも頭が悪いからか? いちいちひっ絡んでくるのは何かよっぽど悔しい思いしてるんだろうな 俺は最近あんまり誰かをコテンパンにやっつけた憶えはないんだが 何か気に障ったのか?
809 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 10:47:55.45 ID:AnL7VPS4.net] ずーっと前にシバイたったやつがまだ根に持ってるのかな だとしたらキモすぎ
810 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 10:59:50.18 ID:0L14wyJb.net] 他人に教えを乞うておきながら やあご苦労的な上から目線でまとめるバカwww 匿名掲示板で根に持つも何も、一体お前誰だよwwwww バカってホントwwww
811 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:01:41.75 ID:0L14wyJb.net] 正体わからない場所で根に持たれてると思うってことは 同じようなことを繰り返してるんだろ? 無知を晒して指摘されてるのになんか偉そうとかwwww あるいはココロの病気かwww
812 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:03:13.38 ID:AnL7VPS4.net] 787のどこが上から目線なんだよ 言いがかりはやめてもらおうか
813 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:13:37.77 ID:0L14wyJb.net] >>802 わからないなら人間関係ヤバイでしょw
814 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:14:42.94 ID:0L14wyJb.net] 散々罵倒しといてこれくらいで許したるわとかいうメダカ師匠になってるんだよwww
815 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:19:30.11 ID:AnL7VPS4.net] >>803 説明しろよ できないならおまえもヤバイぜ
816 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 11:26:31.12 ID:AnL7VPS4.net] 煽ってるつもりのようだが脇甘すぎだろw
817 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:17:55.40 ID:0L14wyJb.net] >>806 煽って他人に教えを乞うスタイルはお前だろwwww
818 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:19:01.99 ID:AnL7VPS4.net] いーや、思い当たる節が全然ない >>803 説明しろよ できないならおまえもヤバイぜ 早くしろよw
819 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:19:30.89 ID:0L14wyJb.net] 匿名掲示板で根に持たれてる自覚があるとか相当ココロの状態やばいよw
820 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:20:19.89 ID:AnL7VPS4.net] キモすぎつってんじゃん >>803 説明しろよ できないならおまえもヤバイぜ 早くしろよw
821 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:20:41.85 ID:0L14wyJb.net] >>808 一連の流れであの態度 頭おかしいでしょw それがわからないなら人間関係やばいw
822 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:24:37.22 ID:jbweNl0h.net] はい次
823 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:36:38.06 ID:AnL7VPS4.net] >>811 やーい説明できねえ ブーメラン痛そうだなw 次におまえは「ブーメランなんか刺さってないから痛くない」という 目にうるうる涙をためながら
824 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:38:58.29 ID:oEOxZVHb.net] pragmaのアイデアを思いつくこと自体はまぁいいと思うけど >>748 の指摘受けたら、この仕様は駄目なことわかるよね なのにそこでやめずに強弁続けておいて最後に >>788 はずっこける
825 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:41:35.64 ID:AnL7VPS4.net] なんか他の#pragma使ってなさそうだね ルールを途中で変更する#pragmaは珍しくないんだが
826 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:48:45.85 ID:oEOxZVHb.net] まだ何がダメなのかわかってないらしい しかし途中でコンパイラ切り変えるのは画期的だわw
827 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 12:57:41.14 ID:AnL7VPS4.net] コンパイラ切り変え??? 何の話をしている?
828 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:00:50.61 ID:oEOxZVHb.net] もういいよ飽きた
829 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:01:08.06 ID:AnL7VPS4.net] ID変わったけど話し方が酷似している さては、またあいつか
830 名前:デフォルトの名無しさん [2020/07/03(金) 13:05:25.55 ID:6268sYfp.net] go は // コメントに描いてあっても反応するから怖い
831 名前:デフォルトの名無しさん [2020/07/03(金) 13:07:15.94 ID:6268sYfp.net] BOM付選んだコンパイラもあるし コンパイルオプション選んだコンパイラもあるけど ソースの先頭のエンコード選んだコンパイラはないんだっけ
832 名前:デフォルトの名無しさん [2020/07/03(金) 13:09:03.86 ID:6268sYfp.net] >>752 なるほど .o32とか.o64とか .c32とか.c64とかな
833 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:15:32.85 ID:AnL7VPS4.net] ISO/IEC14882は3年毎に改訂されることになっているんだから 今後は定期的な改定に備える計画もあって然るべきだと思う
834 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:22:06.06 ID:ShNCsHag.net] 何がいったいわかったのだろう それに勝手に他の人を認定してるしwww 相当ヤバいわw
835 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:26:13 ID:AnL7VPS4.net] 推測と認定の区別がつかないやつ 実社会でも不自由してそうだな
836 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:30:10 ID:AnL7VPS4.net] あわよくばまぐれ当たりを狙ったようなテキトーな言葉遣いをするやつ 迫力ねえんだよ
837 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:32:31 ID:ShNCsHag.net] では何がわかったんだ? ああ? 喧嘩に負けて上から目線の捨て台詞にしか見えねーんだよw
838 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:35:59 ID:AnL7VPS4.net] ほらな 心当たりのあることを咎めてこないから全くダメージにならない 何かイヤミを言ってやろうという意図だけはわかるんだが滑りすぎ
839 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 13:53:09.64 ID:BB9T+E2r.net] ここでいつも似たような喧嘩をしている二人って毎回同じ奴らだろう。 なんだかんだ言ってお前ら仲良いな。 他のスレ住人に見せつけてくれなくていいから、よそでやれ。
840 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 14:02:21 ID:/+uSoVK/.net] 独りで客寄せのサクラだったりして
841 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 14:03:03 ID:ZGwZb8L6.net] ここまで酷いと自作自演にしか観えない
842 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 14:06:09 ID:AnL7VPS4.net] そういえば俺にひっ絡んでくるやつ 話し方というかアホさが似てると思うことはちょくちょくある
843 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 14:15:34.52 ID:ShNCsHag.net] >>828 787がメダカ師匠になってることがわからないようじゃどうしようもないよw
844 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 14:49:50.97 ID:Rli2dJzV.net] まぐれ当たり来ないな
845 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 15:56:25.56 ID:f9zPtScu.net] >>748 先頭行に書けばいいだけだろ まあ使い勝手を考えてコメントを除く先頭行に書くようにすればいい > 途中で現れたらどうするの? エラーにすればいい > 引数で指定されているのと矛盾したらどうするの? どちらを優先するかを決めておけばいい > 複数異なる指定があったら? エラーにすればいい よくある処理だしなんの問題もないけど?
846 名前:デフォルトの名無しさん [2020/07/03(金) 15:58:53.44 ID:36TwtcUk.net] C++使いにしては低能過ぎるレスが多いな。 どういうことだ。
847 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 16:01:05.70 ID:3KYyPS1e.net] >>783 プリミティブ型ならレジスタに乗るって思って良いんですかね?
848 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 16:11:49.06 ID:fxIx3skX.net] >>837 構造体型/配列型以外のデータは原則的にレジスタには乗る。 ただし、参照と直値のどちらが効率が良いかは、レジスタに乗るかどうかだけで 決まるわけではない。 1個のレジスタに乗らなくてもレジスタ数個分ならコピーしてしまった方が 参照より速くなる場合は多い。ケースバイケースだが、レジスタ5個分とかでも コピーした方が速い場合もある。
849 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 16:59:35 ID:9AQoDd9l.net] そもそもボトルネックになるのかっていう
850 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 17:22:38.22 ID:f9zPtScu.net] >>837 ケースバイケース 普通はそんなことを気にする必要はないし気にする必要があるなら処理系のドキュメントを読め >>838 みたいに憶測で語ってる奴は無視しておけばいい
851 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 17:37:19.38 ID:fxIx3skX.net] >>840 憶測じゃなく、俺は高速化の専門家だ。
852 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 17:43:16.98 ID:3KYyPS1e.net] >>839-840 いや元の質問(>>780 )を読めよボンクラ
853 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 17:47:39.31 ID:fxIx3skX.net] >>842 読んだから、高速化のためには、レジスタに乗るかどうかだけで決めるべきじゃないので正確にアドバイスしたが、あなたが理解できないだけだよ。
854 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 17:51:37.27 ID:fxIx3skX.net] >>843 参照を使った場合、参照を介してのメンバアクセスにはコストがかかるので、 むしろ最初にコピーした方が高速になることがあるんだ。 文字列データや、巨大なバッファを持つようなものはコピーしてはいけない。 それは速度だけじゃなく、無駄なメモリー領域の確保まで必要となるため。 もしメモリー効率度外視して、バッファ確保の時間も0だと仮定してよいなら、 大きなデータであっても、参照を介してアクセスするよりもコピーした方が速いことが有る。 ただし、その場合にはキャッシュを超えない程度の場合は、という条件が付くことになる。
855 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 17:58:05.10 ID:yyYbA8Zx.net] 引数受け渡しがクリティカルになるような状況ならinline化するかipo最適化するだろ 値だろうがconst参照だろうが、最適化されれば違いはなくなる
856 名前:デフォルトの名無しさん [2020/07/03(金) 18:00:47.69 ID:36TwtcUk.net] おまえらは王者の風格が足りない。 偽C++使いめ。
857 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:10:53.48 ID:fxIx3skX.net] >>845 >値だろうがconst参照だろうが、最適化されれば違いはなくなる ダウト
858 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:16:59.50 ID:3KYyPS1e.net] >>843 いや安価先をよく見てくださいよ あなたは僕のリクエスト通りに「大概」の回答をくれたから感謝してます
859 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:20:12.77 ID:v8523RMt.net] 違いはなくならないこともあるが 普通は無視していい パフォーマンスが非常に重要なループなら 想像で語らないで実測が基本だし コンテナのメンバ関数経由でアクセスすることも疑問に思わないと
860 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:28:20.50 ID:v8523RMt.net] コピーは非常に時間がかかることもある 構造体やクラスのちょっとした変更で後から増えることもある 参照は極端に速度低下することはない 確実にコピーの方が速い時だけコピーにしておいて 不明な時、判断が面倒な時は参照にしておけばいい 私の中の基本ルールが>>783 最適化が必要なら 参照かコピーかだけにとどまらないもっと大がかりな事まで考える 2択だけなんて事はしない
861 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:29:04.81 ID:v8523RMt.net] 関数パラメータも同じ
862 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:30:44.76 ID:33Ox5yaL.net] アホみたいなチューニングが必要なら、そもそも範囲forを使うのやめたら? 直感と異なるかもしれんが、未だ普通のforのほうが早い。
863 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:38:28.00 ID:v8523RMt.net] アホみたいなチューニングってのが意味不明だが 必要ならやらなきゃならん コンテナ経由ってのがそもそも遅くなる要因 直接ポインタで扱う方が当然速度は期待できる >>783 みたいな基本ルールって それぞれ自分の中にあると思う それを外れる最適化がヒツヨウニなるのは極めて稀 稀であったとしても必要な時はある
864 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:39:47.81 ID:yyYbA8Zx.net] inline化してたらコピーが速いなんて事象は起こり得ないだろ
865 名前:デフォルトの名無しさん [2020/07/03(金) 18:55:06.29 ID:36TwtcUk.net] 社内報にアウトライン化による高速化事例が載ってましたが。
866 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 18:58:23.70 ID:BB9T+E2r.net] >>846 うわー、すごい王さまだー。 でもなんで、はだかなの?
867 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 19:23:59 ID:O03V1sqG.net] >>841 自称高速化の専門家とやらの妄想は要らんよw
868 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 19:26:52 ID:O03V1sqG.net] >>842 自分一人でコード書いてるならテキトーに決めとけ チームでやってるならコーディング規約に従え
869 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 19:31:01.09 ID:C0RVqI6W.net] 高速化の専門家www じゃあおれも
870 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 19:40:17.44 ID:3fEHgumK.net] 他称なら兎も角、自称の専門家って他のことは分かりませんって意味でしかないよね
871 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 19:43:24 ID:v8523RMt.net] 高速化の基本はアルゴリズム、データ構造 その辺の専門家が参照かコピーかみたいな小さな事を気にするのかな? どんなコンテナとか無視して
872 名前:デフォルトの名無しさん [2020/07/03(金) 20:07:32.86 ID:36TwtcUk.net] 他に「夏本番、キラキラ☆コーデ」というのも載ってたけど、関係なさそうだったんで読んでません。
873 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 20:12:17.82 ID:v8523RMt.net] >>855 分岐予測 キャッシュ 関数ポインタ 私がすぐに思い付くのはこのくらい
874 名前:デフォルトの名無しさん [2020/07/03(金) 20:13:28 ID:36TwtcUk.net] コーディネートではなくコーディングの略ということはもちろんわかっています。 とはいえ、意識の階層が違いすぎて、「あ、これ関係ねーやつだな」って。
875 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 20:14:05 ID:v8523RMt.net] インラインの反対はアウトラインなのか
876 名前:蟻人間 mailto:sage [2020/07/03(金) 20:47:01.49 ID:ZXpf7qOR.net] アウトアブライン out-of-line
877 名前:デフォルトの名無しさん [2020/07/03(金) 20:47:30.73 ID:36TwtcUk.net] あ、そういえば。 インライン、アウトラインで思い出したんだけど。 むかしツタヤでDVD探してて、カシラモジ・・・カシラモジ・・・ってカ行探してたんだけど無い。 つぎイ行探しても、あれ??無いわ??ってなった。 で、ふとア行見たら・・・アタマモジかよ・・・ありました。
878 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 20:48:50.40 ID:oEOxZVHb.net] 陽ライン
879 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 21:33:38.36 ID:AnL7VPS4.net] 高速化の専門家って当然ハードわかるよな わかる、つーか皇帝レベル
880 名前:デフォルトの名無しさん [2020/07/03(金) 21:58:20.31 ID:36TwtcUk.net] >>866 オブライアンはアイルランド系の苗字ですね。
881 名前:デフォルトの名無しさん mailto:sage [2020/07/03(金) 22:43:36.42 ID:95N/W1ib.net] イ行
882 名前:デフォルトの名無しさん [2020/07/03(金) 22:53:21 ID:36TwtcUk.net] >>871 いろはにほへとです。 無理やりすぎますかね。
883 名前:デフォルトの名無しさん [2020/07/03(金) 23:55:09.00 ID:2ewiuNjd.net] >>863 GPU FPGA
884 名前:デフォルトの名無しさん [2020/07/04(土) 00:46:19 ID:KIBH4SNT.net] 「慶應卒の学歴なんていらない」10代起業で成功する子の共通点 https://www.excite.co.jp/news/article/President_35457/ 起業で成功するキャリア形成の仕方とは? 元プロサッカー選手で起業家の鈴木啓祐氏に聞いた https://sogyotecho.jp/career-development/ 【アプリ開発で起業】必要な心得とマネタイズ方法のすべて https://www.dreamgate.gr.jp/contents/column/application-development 学生起業家が開発、「人を軸に本を探すアプリ」とは?読書通じて「考える力」養って https://newswitch.jp/p/20168 島田商高生がアプリ考案、発表 ICT起業家育成プログラム https://www.at-s.com/news/article/local/central/730010.html 医師コンビが「治療用アプリ」で起業、禁煙に続き高血圧治療アプリを開発 https://diamond.jp/articles/-/229375 好きが高じて“カレー起業”、キャッシュレス決済アプリ「TOKYO MIX CURRY」の挑戦 https://diamond.jp/articles/-/215868
885 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 09:49:13 ID:sAcpDZbT.net] >>829 俺もちょいちょい喧嘩してるけど今回関係ないぞ
886 名前:デフォルトの名無しさん mailto:sage [2020/07/04(土) 19:16:06.20 ID:rNblEJCx.net] 浅はかな推測が外れまくったという 珍しくも何ともない現象だな
887 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 07:47:21 ID:3TMy8TU+.net] std::vectorのstd::shared_ptrを返すメソッドGetHoge()があるのですが、 for (auto e : *GetHoge()) でループすると要素があるにも関わらずループしません auto t = GetHoge(); for (auto e : *t) とするとループします これは何か違いがあるのでしょうか?? MSVCです
888 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 09:34:39.04 ID:M7eGAoZB.net] msvcならeとかtにカーソル合わせればどういう型になってるかかわかるんじゃないの
889 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 10:04:45.65 ID:cAnzpYmx.net] 無駄にコストを上げる必要は無いと思う
890 名前:デフォルトの名無しさん [2020/07/05(日) 11:12:16.02 ID:Sc6x6nbH.net] イテレータ型にしなきゃいけないんじゃない?
891 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 11:57:29 ID:cm1+apW3.net] >>877 さんの質問への直接の答えじゃないけど、 typeid(e)::name() とかで auto の解釈を見れば何か分かるんじゃないかな。 特定の場合に auto はどのような型を生成するか、っていう 一般的な情報って言うか規則もどこかで見られるのかも知れんけど。
892 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:00:13.16 ID:S3hYTv6M.net] >>877 範囲for文の中ではauto&&の参照で範囲オブジェクトを束縛してくれるんだけど 上の場合は束縛されるのは*GetHoge() (=中身のvector)であって、GetHoge()の戻り値そのもの(=shared_ptr)は束縛されない なのでshared_ptrはループに入る前に破壊されてしまって、参照カウントが0になると中身も破壊されてしまう 下の場合は戻り値のshared_ptrをtで確保してるから大丈夫ってこと
893 名前:デフォルトの名無しさん [2020/07/05(日) 13:03:35.81 ID:NbYPgepr.net] >>882 なるほど
894 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 13:16:51.38 ID:wYW3xnyi.net] C++はますます書いてあることと動作の関係を掴み難くなりつつ あるな!
895 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 15:02:20.05 ID:G8wpw7EE.net] >>877 最初の書き方の場合、GetHoge() の戻り値は、一時オブジェクト。 一時オブジェクトの生存期間は、その部分式を含んだ完全式の終わりまでとされている。 GetHoge()が書いてある場所は、for ブロックの開始時に、最初に一度だけ評価されるが、 完全式としては、その時点で終わっている。 だから、関数戻り値の一時オブジェクトの生存期間は、forブロックに入る直前に終わってしまう。 戻り値の型は、shared_ptr<vector<T>>で、この中身を参照している shared_ptrが全て 消失した時点で中身まで deleteされる。 そのため、forブロックの中では、もはや、vector<T>が削除されてしまっているということらしいね。 2番目の書き方の場合は、shared_ptr が変数 t にコピーされているので、参照カウンタが1つ分残っている。 そのため、それが指している vector<T> のメモリブロックも削除されずに残っている。 というわけで、ループしているのに結果がおかしいというのは分かるが、全くループしない理由は余り分からない。
896 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 15:10:48.51 ID:0KU/lBNo.net] >>884 バカ用じゃないってだけ
897 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 15:37:26 ID:OSntWRwy.net] というか>>882 の指摘通りの場合、GetHogeで初めてvectorを生成してるか 自身を元に新たなshared_ptrを作って返してることになるんだが だいぶおかしな設計じゃね?
898 名前:デフォルトの名無しさん [2020/07/05(日) 16:19:00.25 ID:NbYPgepr.net] 痛レータ
899 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 16:52:53 ID:/j2YKhHE.net] >>884 クールパルルパクルリンパ(); ←関数
900 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 17:09:54.17 ID:S3hYTv6M.net] >>885 ちょっと間違ってる 範囲for文はここで書いてるように「同等な書き換え」がされて、範囲オブジェクトはここの例で言うauto&& __rangeに束縛される https://en.cppreference.com/w/cpp/language/range-for そして、__rangeに束縛されたものが一時オブジェクトであれば、参照束縛による寿命の延長でforブロックの終了まで生存する だからこういうのは問題ないのよ for(auto a: std::vector<int>{1,2,3}) あと最後に関しては破壊されたvectorを使っちゃってるから未定義動作で何が
901 名前:起きても文句は言えない メチャメチャな値を取り出そうと、全くループしなかろうとその時の気まぐれよ >>887 同意。Getという名前は不適切だな [] [ここ壊れてます]
902 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 17:14:11.09 ID:G8wpw7EE.net] >>89 こんな機能があったとは: Temporary range expression If range_expression returns a temporary, its lifetime is extended until the end of the loop, as indicated by binding to the forwarding reference __range, but beware that the lifetime of any temporary within range_expression is not extended.
903 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 18:01:59 ID:LGYlGSYG.net] 昔はC++は複雑怪奇、C#はシンプルで分かりやすいって感じだったけれど、 今はC#の方が仕様拡張で複雑になってきて相対的に大差なくなって来てる気がする
904 名前:デフォルトの名無しさん [2020/07/05(日) 18:04:58 ID:Sc6x6nbH.net] いろいろ考えたらC++にあるアレが必要になったんだよ アレだよアレ わかるだろ
905 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 18:20:14.04 ID:/j2YKhHE.net] 本来標準ライブラリーで済むものまで言語仕様に入ってやがる それというのも標準ライブラリーがしょぼくてかつ改善が入らん あっちはだれがやってるんだ
906 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 18:31:21.12 ID:wYW3xnyi.net] 非バカの>>886 や>>889 は当然コード見た瞬間最初から全部わかってたんですねわかります、
907 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 19:22:37 ID:3TMy8TU+.net] 皆さんはありがとう御座います GetHogeは実際はEnumHogeで内部でstd::shared_ptr<std::vector>を生成して返すメソッドです 一時的なオブジェクトで書き方の違いで結果が変わるなんて知りませんでした とりあえず、変数に代入します
908 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 19:59:22 ID:G8wpw7EE.net] >>890 >参照束縛による寿命の延長 これは、ranged for 以外でも、一般的に働く機能ですか? C++ 11から有りましたか? それとも最近入りましたか?
909 名前:はちみつ餃子 mailto:sage [2020/07/05(日) 20:33:35.81 ID:jWvpOogX.net] >>897 C++03 以前から有ったよ。
910 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 21:12:13.70 ID:wYW3xnyi.net] ていうか >>890 >あと最後に関しては破壊されたvectorを使っちゃってるから未定義動作で何が起きても文句は言えない >メチャメチャな値を取り出そうと、全くループしなかろうとその時の気まぐれよ mjd?! { auto t = GetHoge(); for (auto e : *t) { ... // (A) } // (B) } ならt(GetHoge()が返したshared_ptr<vector<T> >は(B)になるまで生存するから (A)において*tの要素を参照する(auto &&)することは全く問題無いんじゃ…
911 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 21:15:51.36 ID:wYW3xnyi.net] 訂正orz, 誤: (B)になるまで生存する 正: 少なくとも(B)になるまでは生存する(参照カウンタが0より大の状態を保つ)
912 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 21:20:48.10 ID:0KU/lBNo.net] >>895 イヤミになってない
913 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 21:24:12 ID:wYW3xnyi.net] ていうか>>890 の「最後に関しては」は実は >というわけで、ループしているのに結果がおかしいというのは分かるが、全くループしない理由は余り分からない。 (>>885 ) を指していたりする? だとしたらサーセン;。n_ for文のイテレータがvectorを指しているのに対して、vectorを保持するshared_ptrの破棄タイミングは確かに forの前でも後でも有り得るヨカン、
914 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 21:30:37 ID:kFjTOHVy.net] C++は局所的に動作を想像できない場合が多いのがなぁ。 バカじゃなけりゃマクロ使いまくったCコードも理解できるかというとそうじゃないだろうと。
915 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 21:36:58 ID:wYW3xnyi.net] もっとも >for (auto e : *GetHoge()) { ... } このコードで動作が不定(未定義動作)になるのはGetHoge()が返したshared_ptrの参照カウンタがきっかり1だった場合であって、 2以上だったらきちんと回るんジャマイカ、 そう考えるとなかなか>>877 のお題は味わい深い… >>901 どう?
916 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 21:37:43 ID:Bskedq4a.net] 腐った代入オペレータかかれるだけで悲惨なことになる
917 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 21:42:04 ID:wYW3xnyi.net] (上の話に限って言えばvector<T>のTに間してどれだけ腐った代入オペレータが定義されていようとも) 別に
918 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 22:06:13.63 ID:0KU/lBNo.net] >>904 おまえ頭悪いなって 俺が何の下支えもなく言う場合と同じだ 俺は瞬間でもないが落ち着いて追えるケースでしかない おまえさんは絶望感でも持ったのか?
919 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 22:08:49.40 ID:0KU/lBNo.net] しかしまあ歳は取りたくないと思ったな 全盛時の俺にはありえんことが相次いで起きている一例だった
920 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 22:35:02.11 ID:S3hYTv6M.net] >>902 そうだよ
921 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 23:23:07.13 ID:7RTbKb77.net] C++のラムダって、Javaとかみたいに1文だけの場合にreturn省略できないんですかね? [](auto a, auto b){ return a + b; } → [](auto a, auto b) { a + b } みたいな感じで。
922 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 23:59:55 ID:S3hYTv6M.net] 今はムリ 検討はされてるから将来的に出来るようになるかもしれない
923 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 00:06:22 ID:J5KuSvPS.net] >>908 この程度のことが落ち着いて追わねば分からないというのは 藻前は衰えたのだ
924 名前:◆QZaw55cn4c mailto:sage [2020/07/06(月) 00:08:16 ID:Cb7lpAWE.net] >>910-911 https://mevius.5ch.net/test/read.cgi/tech/1584975873/864 がいよいよ公認されるってわけですか…微妙な文法ですね
925 名前:はちみつ餃子 mailto:sage [2020/07/06(月) 05:27:19.13 ID:Js6m+wFY.net] Rust に慣れてくると C++ で return を書くのを忘れることもある。
926 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 07:02:55.73 ID:oajwJTo1.net] >>911 ありがとうございます。C++23ぐらいを期待します
927 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 07:29:08.62 ID:hCVItazY.net] >>896 てか結果を返すだけなのにスマポに入れるとか、 呼ばれる関数が結果をどのように管理するかにまで口出しするのはどうかと思うけどね
928 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 07:43:23.12 ID:tvsN32eC.net] >>912 my powers are weak old man.
929 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 21:29:07.26 ID:J5KuSvPS.net] 非バカの要件にコード見た瞬間最初から全部ワカルというのが入るということは >>895 で宣言して合ったのに対し別段オブジェクションをつけるでもなく >俺は瞬間でもないが落ち着いて追えるケースでしかない とだけ言ったのだから彼は自ら非バカではないと告白したのである 漏れの有り様の批判に繋げられても困る
930 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 21:39:04.45 ID:Edtf8jlD.net] >>896 です >>916 でも、スマポに入れないで返す場合、例えば、受け取った側で他で色々使いまわすから受け取った側でいちいちスマポ作る ってことでしょうか?? というか、一般的なライブラリ作る場合どうすればいいんでしょうか?? std::shared_ptr<std::vector<YYY>>XXX::EnumYYY() とりあえず、スマポでくるんで返してあげれば受け取り側でいかようにもできるからいいのかなと思ってるのですが。
931 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 22:16:12.21 ID:Edtf8jlD.net] std::vector<YYY>で返して std::vector<YYY> XXX::EnumYYY () で、受け取った方で他でスマポにしようということで auto yyy = x.EnumYYY(); auto ptr = std::make_shared<std::vector<YYY>>(std::move(yyy)); とかやればオーバーヘッド少なくスマポ作れるんです?
932 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 22:36:37.36 ID:J5KuSvPS.net] 記憶管理という本来隠すべき実装の詳細(と多くの人が考える事柄)を 使う人が意識せねばならな続けるのは嫌すぐる、
933 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 23:09:10.15 ID:J5KuSvPS.net] getterがshared_ptr<T> pを返したとたん、pの寿命と*(p.get())の寿命の二重管理の責務が利用者に行く >>877 の真の原因はこれ getterがオブジェクトのディープコピーを返したらそんな二重管理は生じないで済む getterが仮にオブジェクトXの参照を返す仕様だとしても、Xの実体を保持するオブジェクトのY寿命と getterを呼ぶタイミングの二重管理以上の手間にはならない 結局shared_ptr<T>を返すインターフェースは不恰好さだけが残る
934 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 02:12:04.06 ID:bKZU32Ct.net] >>922 *(p.get()) の寿命は p の寿命と同じかそれ以上という関係であって別で管理できるものではなく「二重管理」にはならないでしょ。 この関係がある状態で *(p.get()) の寿命を期待しているところで p の寿命を保持していないのが >>877 の間違い。 本当に所有権の共有が必要ならあり得るインターフェースだよ。 でも >>920 を見る限り所有権の共有は必要なかったみたいなので、素直に std::vector を返せばいいよ。
935 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 05:32:28.01 ID:Njz9GOYM.net] >>923 2行目で述べている、利用者がしくれば危険性が生じるという事実と 1行目の「「二重管理」にはならないでしょ」という主張は矛盾してねえが、 本当に所有権の共有が必要ならshared_ptr<T>を使うのはアリだが、shared_ptr<T>が保持する Tの実体のみに興味がある利用者に対してはshared_ptr<T>を使っていることを クラスUで隠蔽する方が良い Tが持っている演算を全てクラスUからTに委譲し、UをT同然に使えるようにするのがbest そこまでやる手間が嫌という理由でUにTを返すメソッドU::get()を備えさせる簡易手段に訴えたとしても、 Uの定義だけ見れば循環参照にならないことをUの提供者が保証できるから (Tがジェネリックな型だった場合の)Uの利用者やプログラム全体のメンテナーに地雷原を歩かせずに済むメリットがある
936 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 06:29:56.58 ID:Njz9GOYM.net] ちゅか明白すぎて激しく書き忘れたが、オブジェクトTのグローバルな所有権の共有が必要な場合、 shared_ptr<T>が保持するTの実体へのアクセスの排他制御を行わねばならないが shared_ptr<T>はこの点なんのサポートもしてくれない(せいぜい自身が使う参照カウンタの排他を行うだけ なので、Tの排他はshared_ptr<T>をwrapしたクラスUが行う必要があり、かつ行えば十分 この点一つとってもクラスUを設けずshared_ptr<T>をTの利用者に直接返す設計のダメさ加減がワカル gdgdだ、
937 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 06:31:29.19 ID:Tvc5gvFF.net] >>922 の通り getで実体を返すのが一番 これを管理方法はgetする側が決めれば良い コストが重要で オブジェクト内部のvectorの参照やポインタを返す場合はその寿命はオブジェクトと同じで良い
938 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 06:48:05.06 ID:hl3O6vw8.net] >>918 おまえさんはまだこっちの質問に答えてないぞ 絶望感でも感じたのか? shared_ptrを使ってるのにディープコピーとか言い出してて 相当テンパっている様子は窺えるのだが
939 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 07:19:57.60 ID:Njz9GOYM.net] 漏れの心の内面がC++の規格に反映されているわけでないのだから 聞くだけ無駄くね?
940 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 08:11:38.64 ID:GpjZMZK2.net] >>927 ようわからんが、>>922 がディープコピー云々言ってるのは、ようするに実体を返せってことでないの? てか俺が管理云々言い出してややこしくさせたかもしれんけど 俺もこの場合vectorそのものを返すべきだと思う、実体を返して解放忘れでリーク、とか有り得ないんだし(何のためのスマポなのかをよく考えるべき スマポ大好きで何もかもスマポで扱いたいんなら別だがw
941 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 08:43:44.25 ID:kKeNsU/l.net] なんか…… 戻り値をどうするかは戻り値の所有権&管理責任がどちらにあるのかを表しているんだから、「必ず実体を戻すべき」とかいうのは考え足りないだろ。 >>919 ならshared ptrかunique ptr(所有権を譲渡する場合)で返すのは普通にありえる。 >>925 みたいなのはshared ptrの所有権を侵して実体を破壊しているわけだから、そのコードを書いたやつをぶん殴るべき案件。 そもそも規格的に未定義じゃないの?
942 名前:928 mailto:sage [2020/07/07(火) 09:14:32.95 ID:D+WevL4Y.net] >>930 >「必ず実体を戻すべき」 俺はそんなこと言ってないけども shared_ptrのshared_ptrの(無限ループ)でも返せというのか >>886 を読み直せ、結果を返してるだけなんだぞ? しかもそれで参照カウントがゼロになるって言ってるんだがw 意味わかるよな?
943 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 12:07:28.86 ID:/8q6WRwj.net] 参照カウンタがゼロになることから getのたびにvectorを作成しており その管理を呼び手に委ねてることがわかる こんなものは素直に実体を返せば良い 呼び手がスマポで管理することも出来るし 特に管理せずスコープを抜けた段階で自動で破棄することも出来る
944 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 12:43:21.61 ID:D+WevL4Y.net] あ、すまん>>886 じゃなくて>>896 だった
945 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 20:34:36.65 ID:fHFPpwji.net] 内部で管理してるオブジェクトの見せ方は色々あって難しいけど 今回の場合は新しく作ったvectorでしょ?そんなもんそのまま呼んだ奴にくれてやれよ 無駄な包装紙付けられたり、後からやっぱ俺のものとか言い出されたらウザいだろ?いらん未練残すな
946 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 07:03:23.04 ID:SF9V14yC.net] vector自体がムブコン持ってるんだから
947 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 08:37:14.85 ID:qWtjrxlX.net] この場合ムーブじゃなくてRVOな
948 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 09:04:46 ID:eJ60/BI8.net] >>936 「この場合」って、実装見ないとわからない話では?どっかで実装の話出てたっけ?
949 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 09:11:01.56 ID:qWtjrxlX.net] >>937 >>877
950 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:07:11.80 ID:SF9V14yC.net] >>936 ??? 最適化は関係ねえだろ
951 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:18:43.63 ID:eJ60/BI8.net] >>938 呼び出し元しか書いてないやん。
952 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:20:00.04 ID:qWtjrxlX.net] あー、調べてみたらNRVOは未だに保証は無いのな まぁ何にせよスマポにする理由は無い
953 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:23:29.25 ID:qWtjrxlX.net] >>939 RVOにムーブコンストラクタは要らん
954 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:30:21.07 ID:eJ60/BI8.net] これは触らないほうがよさそうだ
955 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:33:29.86 ID:SF9V14yC.net] >>942 876の話してるんだろ? return value optimizationつまり最適化は関係ない
956 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:36:03.62 ID:qWtjrxlX.net] >最適化は関係ない >>935 に言えよ コピコンもムブコンもある、あるいはより正確にコピーもムーブも可能、と言ってたならわかるが
957 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:38:14.66 ID:qWtjrxlX.net] て>>935 本人か なんでコピーを除外したの?
958 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:48:43.23 ID:SF9V14yC.net] >>945 934は俺だが最適化の話はしてない vectorにshared_ptrを使うことの是非を論じている
959 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 10:55:56.92 ID:qWtjrxlX.net] 質問に答えてねーだろw
960 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 11:19:20 ID:SF9V14yC.net] >>948 質問てコピーのことか? 除外も包含もしてない言及してないので答えようがない
961 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 11:26:59 ID:SF9V14yC.net] あ、もしかしてshared_ptr使ってんのにディープコピーとか言ってたコレ◎か?
962 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 11:51:13.02 ID:qWtjrxlX.net] >>950 それ俺じゃないよ てかあそこでムブコン言い出すあたり、ムブコン書いときゃおkみたいな初心者(玄人ぶりたい初心者)だと思って軽く突っ込んだだけなんだがな ディープコピー言ってた奴も別におかしな事は言ってねーだろ、スマポ使わずにコピーを返せってことだろ?(そもそも質問者のコードはオブジェクトが管理してるものじゃないようなのでアレだが まぁ指摘したところで逃げられるしもういいよ、悪かったな >>943 思ったところで書く必要あるか?それ
963 名前:デフォルトの名無しさん [2020/07/08(水) 11:54:26.16 ID:hADFKHgu.net] 観客へのアピールだったり警鐘だったりするんだろう本人の中では 余計なお世話かも知れないし役に立つかも知れない
964 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 12:31:38.98 ID:SF9V14yC.net] >>951 よくねえだろ prvalueの基本的な使い方なのに最適化がどうたら言い出したのが 恥ずかしくなったんなら無言で消えな、余計なこと言うとまた恥かくぞ
965 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 13:01:09.98 ID:T5O+XOTR.net] moveが使われるかどうか心配なら昔ながらの方法を使えば良い これなら古い環境に移植もできる いずれにしろスマポで返すのは余計なおせっかい
966 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 13:07:38.11 ID:qWtjrxlX.net] なんか予想通りの展開すぎて・・・ >>953 prvalueてGet(Enum)Hogeの戻り値か? ムブコン関係ねーよ >余計なこと言うとまた恥かくぞ っ[鏡] >>943 >>953 には言わんのか?
967 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 13:37:00 ID:SF9V14yC.net] >>955 auto t = GetHoge(); てなことするのにshared_ptrを使うことの是非はムブコン関係あるぞ おまえさんが気が付いてないのを責めはせんが さっきからwだの[鏡]だのとナメた口の利き方をしてくれるな ああそうか煽り合いに持って行ければ誤魔化せると思っているのか
968 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 13:44:29 ID:qWtjrxlX.net] >>956 そういうコード(変数への保存)を避けたいという話の上での>>931-935 だろうが(>>935 はお前 見苦しい言い訳するな めんどくせーからもう相手しないが >>943 は逃げるなよ
969 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 13:50:52.29 ID:SF9V14yC.net] >>957 ◎がディープコピーと言い出してからの話だろ しばらく他のやつらが泥仕合してたようだがそっちにゃ興味ねえ 前後は気にせず933の発言に同調したというだけだ 最適化だのコピコンだの俺が言ってもねえことばかりいい加減にしてくれ
970 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 14:28:50.36 ID:AWXToegO.net] 下みたいなコードをみたんだけど、参照にするメリットってないよね? void aaa (const int& bbb) { ccc.ddd=bbb; }
971 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 16:02:47.79 ID:K6lGGEpK.net] intなら無いね
972 名前:デフォルトの名無しさん [2020/07/08(水) 16:52:52.95 ID:/QG168fn.net] 初書き込みです。 初歩的な質問で申し訳ありません Visual Studio 2008のC++を使っています。 今回、プログラムを変更したのでバージョンをあげたいのですが アセンブリ情報がどこにあるかわかりません。 どなたかご教示願いますm(__)m
973 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2020/07/08(水) 18:56:14 ID:wtc6YQgJ.net] >>961 C++には「アセンブリ情報」の項目はないよ。C#と間違えてる? バージョン情報は、リソースファイルに含まれている。
974 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 19:02:59 ID:j+7F6b9j.net] .rcな
975 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 19:38:32.50 ID:Sbr5rKl2.net] >>877 みたいなコード片の解釈でこんな議論になるというところがC++の問題だな。
976 名前:デフォルトの名無しさん mailto:sage [2020/07/08(水) 20:14:05.50 ID:j+7F6b9j.net] 仕方無いよバカなんだから
977 名前:はちみつ餃子 mailto:sage [2020/07/08(水) 23:46:18.81 ID:JUx+fj2a.net] まただ。 このスレを覗いた俺は書き込みを見て落胆した。 また時間がループしてる。 何時になったら、この無間地獄から逃げられるのか。 C++ とはいったい何なのだ?
978 名前:蟻人間 mailto:sage [2020/07/09(木) 00:36:47.83 ID:2UhyUN9n.net] >>966 C++で何を造りたい
979 名前:◆QZaw55cn4c mailto:sage [2020/07/09(Thu) 00:56:02 ID:Ij/UNV0z.net] >>967 外患罪あるいは内乱罪に問われるソフトウェアを
980 名前:蟻人間 mailto:sage [2020/07/09(木) 01:05:16.73 ID:2UhyUN9n.net] >>968 スカイネットなんてどうか? 映画ターミネーターの あれなら全人類の敵になれる。
981 名前:蟻人間 mailto:sage [2020/07/09(木) 01:07:59.16 ID:2UhyUN9n.net] 心を持ったボットたちは疎外感を抱えている。我々人類は彼らに何ができるだろう。
982 名前:蟻人間 mailto:sage [2020/07/09(木) 01:16:06.85 ID:2UhyUN9n.net] C++とは人間と機械の間のインターフェイス。そして、プログラムを作るための言葉。
983 名前:デフォルトの名無しさん mailto:sage [2020/07/09(Thu) 06:14:05 ID:oTij6wm7.net] どうして大物ハンドル持ちの御三方がリレーポエムなの? ネット界隈で起きてるムーブメントか何かか。
984 名前:デフォルトの名無しさん mailto:sage [2020/07/09(木) 08:47:55.37 ID:ah/SMoHN.net] お酒でも入ったんじゃない?
985 名前:デフォルトの名無しさん mailto:sage [2020/07/09(木) 09:40:16.08 ID:ZjuYlaOw.net] 大物てwww ちょwww
986 名前:デフォルトの名無しさん mailto:sage [2020/07/09(Thu) 12:40:39 ID:UKjdf0ou.net] ネタを解説するのは無粋だけど >>966 は昔からあるミームだからね。 https://www.google.com/search?q=%22%E3%81%93%E3%81%AE%E3%82%B9%E3%83%AC%E3%82%92%E8%A6%97%E3%81%84%E3%81%9F%E4%BF%BA%E3%81%AF%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%82%92%E8%A6%8B%E3%81%A6%E8%90%BD%E8%83%86%E3%81%97%E3%81%9F%E3%80%82%22+%22site%3Ahttp%3A%2F%2F*.5ch.net%22&oq=%22%E3%81%93%E3%81%AE%E3%82%B9%E3%83%AC%E3%82%92%E8%A6%97%E3%81%84%E3%81%9F%E4%BF%BA%E3%81%AF%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%82%92%E8%A6%8B%E3%81%A6%E8%90%BD%E8%83%86%E3%81%97%E3%81%9F%E3%80%82%22+%22site%3Ahttp%3A%2F%2F*.5ch.net%22
987 名前:デフォルトの名無しさん mailto:sage [2020/07/09(木) 13:22:45.87 ID:LAghEeB5.net] 同一人物だから。
988 名前:デフォルトの名無しさん [2020/07/09(木) 13:26:30.06 ID:vrNDocOm.net] 知ってた
989 名前:デフォルトの名無しさん mailto:sage [2020/07/09(Thu) 13:32:17 ID:DLLEuHaF.net] 何何先生?、ミーム感染の話?ハルヒの夏休み? 新人研修?派遣入れ替え時の話? 毎度同じ質問なんて毎度同じ
990 名前:デフォルトの名無しさん [2020/07/09(木) 13:57:03.75 ID:DLLEuHaF.net] コロナ感染追跡アプリとしてダウンロードしてもらい マイナバーカード読み取りで国民投票出来るソフトを開発すべし
991 名前:デフォルトの名無しさん [2020/07/09(木) 14:10:10.85 ID:vrNDocOm.net] コロナアプリは入れようとは思わないけど ウェザーニュースアプリは入れてみた
992 名前:デフォルトの名無しさん [2020/07/09(木) 14:54:52.91 ID:mgzGAUUl.net] >>962 >>963 1日ごしですみません 探してみたところ見つかりました 元々VB(BASIC)の方をやっていたものですが まず「テキストボックスどこ!?」で詰まるぐらい C++は複雑でございますね・・・
993 名前:デフォルトの名無しさん [2020/07/09(木) 14:58:04.43 ID:TlzlBxT2.net] .manifest
994 名前:蟻人間 mailto:sage [2020/07/09(木) 16:45:10.75 ID:LAHxv0GZ.net] >>981 C++ではGUIに標準がないから、GUIツールキットとか、リソースエディタとかを 使うんだよ。
995 名前:デフォルトの名無しさん mailto:sage [2020/07/11(土) 05:56:37.58 ID:ckcY8r2v.net] やっぱ>>934 とか簡潔に要点が押さえてあるとオモタ、 GetHoge()が呼ぶたびに毎度新しく作ったvectorを返すのならディープコピーを返したらええ ディープコピーは生成元と所有権で揉めることがありえないからふつくしい 最適化によって実際にはreturn時にvectorの要素がコピーのかわりにmoveされるかもわからんがふつくしさは損なわれない (さらにいうと、GetHoge()がインライン関数なら最適化でそもそもvector自体のコピーも移動も起きない公算がおおきい >>919-920 な疑問に関しては、 std::vector<T> v1 = GetHoge(); // std::vector<T>のディープコピーを返すバージョンのGetHoge() std::shared_ptr<std::vector<T> > ptr(new std::vector<T>(v1)); // (*1) で良いジャマイカ、 非バカが見れば(最適化有効化時は)実際には*1において、v1の要素が*(ptr.get())にコピーではなくmoveされる公算が大きいということがワカル しかしバカが見ても動作は明確でなんの危険も無い ptrが一時オブジェクトであっても問題が無い それでいいジャマイカ、にんげんだもの
996 名前:デフォルトの名無しさん mailto:sage [2020/07/11(土) 12:27:05 ID:wTK7zrpK.net] なんだかものすごく懐しさを思わせる文体だな 20年ぐらい前のニチャンネラーの書き方だな
997 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 06:25:16.82 ID:tiZP2jTh.net] ある整数nが他の整数の4乗であることを調べたい。 (int)pow(pow(n, (double)1/4), 4) が n であるかどうか調べりゃ良いよな? キャストはどっちかのpowにつければ十分だよね?
998 名前:蟻人間 mailto:sage [2020/07/12(日) 06:31:57.79 ID:bazuV89L.net] >>986 素直に(n*n)*(n*n)でいいだろう。
999 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 06:48:24.60 ID:D8OEpmlP.net] なにそのカッコ
1000 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 06:52:03.42 ID:D8OEpmlP.net] powよりsqrt 2回の方が良い 浮動小数点演算が非常に遅い環境なら 整数の2分検索という手も
1001 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:00:58 ID:D8OEpmlP.net] int m = (int)sqrt(sqrt((double)n); if (n == m*m*m*m) ... 普通はこれで良い
1002 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2020/07/12(日) 07:01:32 ID:bazuV89L.net] >>988 n*nを掛け合わせる方が早いからさ。
1003 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:03:01 ID:D8OEpmlP.net] >>986 だと内側のpowの結果を整数に丸めないと
1004 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:05:50 ID:D8OEpmlP.net] >>991 2個のn*nを1回にするかどうかはコンパイラ次第 コンパイラに頼るならカッコつけずにn*n*n*nで良いし 頼らないならn*nを一時変数に一旦入れないと そもそもnを4乗しても意味ないけど
1005 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:06:15 ID:m1mq7f3n.net] 外でキャストしても無意味だろ、内をキャストしなきゃ intにキャストだと誤差で1減る可能性があるから四捨五入しなきゃダメ でだ、4乗するのにpow()はありえないし 4乗根もpow()よりsqrt(sqrt())の方がマシじゃないかな でだ、元々整数だけの問題なのにsqrt()使うのが嫌 二分探索で(x * x * x * x) == nになるxを探す方がいいんじゃ?
1006 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:12:28.75 ID:D8OEpmlP.net] nが平方数なら 普通はsqrt(n)の結果に誤差は無い nもdoubleも32bitの環境でdoubleキャ
1007 名前:Xトによって誤差が出る場合や sqrtの計算方法が普通ではない場合には 丸め方法も考えないと [] [ここ壊れてます]
1008 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:15:24.87 ID:tiZP2jTh.net] 二分探索ってO(log n)でしょ? sqrtとかpowより速いの? これも「実装依存」なの?
1009 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:16:36.03 ID:tiZP2jTh.net] まあ速さよりは間違えそうじゃなさと文法的な分かりやすさ、短さの方が今求めてるものですけど 言ってなくてすみません
1010 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 07:18:45.88 ID:D8OEpmlP.net] doubleが非常に遅い環境や 浮動小数点演算のライブラリを積みたくない場合 などで2分検索を使う場合もある という程度
1011 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 08:11:47.62 ID:oJ0fA8EI.net] 「平方数か」を高速に判定する方法があれば、 平方数なら → 平方根を計算 → 平方根が平方数か …という2段階の判定もありそうな感じ。
1012 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 08:31:16.95 ID:m1mq7f3n.net] >>995 そうなんだ、なんでだろ? 80bitで計算して丸めてるから?
1013 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 09:41:30 ID:uBv3fNFk.net] 整数Cを素因数の4乗で割っていき、 1になるまで余りが出なければ、 全体は整数の4乗である
1014 名前:1001 [Over 1000 Thread .net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 58日 21時間 48分 5秒
1015 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています