[過去ログ]
C++相談室 part164 (1002レス)
C++相談室 part164 http://mevius.5ch.net/test/read.cgi/tech/1683600652/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
934: デフォルトの名無しさん (ワッチョイ 8e01-tEca) [sage] 2023/10/22(日) 23:26:18.52 ID:XK8cC57k0 >>933 できないんだよ http://mevius.5ch.net/test/read.cgi/tech/1683600652/934
935: デフォルトの名無しさん (ワッチョイ 5d01-46Vy) [sage] 2023/10/22(日) 23:33:55.26 ID:tZaS4o4u0 >>934 ??? どんなコードで問題出てるの? http://mevius.5ch.net/test/read.cgi/tech/1683600652/935
936: デフォルトの名無しさん (ワッチョイ 8e3b-xUKY) [] 2023/10/23(月) 01:32:53.76 ID:sueaiNV30 >>935 https://wandbox.org/permlink/n0KXbXrmLzHDl6KU 次のコードがコンパイルできない struct A { A(int) {} A(const A&) = delete; }; int main() { std::vector<A> v = { 1, 2, 3 }; } http://mevius.5ch.net/test/read.cgi/tech/1683600652/936
937: デフォルトの名無しさん (ワッチョイ 1998-awtI) [sage] 2023/10/23(月) 05:17:34.59 ID:RG/DfB7W0 >933, >>935 https://www.google.com/search?q=initializer_list+move クソ回答する前にググれよ http://mevius.5ch.net/test/read.cgi/tech/1683600652/937
938: デフォルトの名無しさん (ワッチョイ 5d01-46Vy) [sage] 2023/10/23(月) 09:29:50.40 ID:9KLj8HWs0 >>936,937 あれ? $ cat test.cpp #include <iostream> using namespace std; struct A { A () {cout << "construct" << endl;} A (const A &p) = delete; A (A &&p) {cout << "move" << endl;} }; void func (initializer_list <A> p) { cout << "func" << endl; } int main () { A a0; A a1; func ({move (a0), move (a1)}); return 0; } $ g++ test.cpp $ ./a.out construct construct move move func http://mevius.5ch.net/test/read.cgi/tech/1683600652/938
939: デフォルトの名無しさん (ワッチョイ 5d01-46Vy) [sage] 2023/10/23(月) 10:27:22.01 ID:9KLj8HWs0 だめかなぁ... #include <vector> struct A { A(int) {} A(const A&) = delete; A(A&&) = default; }; std::vector <A> construct (std::initializer_list <A> p) { std::vector <A> result; for (auto itr {p.begin ()}, end {p.end ()}; itr != end; ++ itr) result.push_back (std::move (const_cast <A &> (*itr))); return result; } int main() { std::vector<A> v = construct ({ 1, 2, 3 }); } http://mevius.5ch.net/test/read.cgi/tech/1683600652/939
940: デフォルトの名無しさん (ワッチョイ 4eda-CTkJ) [sage] 2023/10/23(月) 11:36:11.62 ID:OKLUF2xV0 >>936 コピコン消したいなら代入オペレータ用意してやらんとダメだろ http://mevius.5ch.net/test/read.cgi/tech/1683600652/940
941: デフォルトの名無しさん (ワッチョイ 1a20-ANn9) [sage] 2023/10/23(月) 13:23:41.68 ID:1EMVV/4H0 initializer_list<A&&>が作れないから波括弧初期化できないって話か なるほどね http://mevius.5ch.net/test/read.cgi/tech/1683600652/941
942: デフォルトの名無しさん (ワッチョイ 19f4-awtI) [sage] 2023/10/23(月) 19:21:53.26 ID:RG/DfB7W0 initializer_list作るとこまでは出来てもムーブで取り出せないのよ だからvectorのコンストラクタにinitializer_listで渡すとエラー出るし、>>939のように const外して一つずつ突っ込むとかしなきゃいけなくなる ムーブ可能にする提案は出てるらしいけど https://cpplover.blogspot.com/2014/11/2014-10-pre-urbana-mailings-n4160-n4169.html?m=1 http://mevius.5ch.net/test/read.cgi/tech/1683600652/942
943: デフォルトの名無しさん (ワッチョイ 1909-awtI) [sage] 2023/10/24(火) 05:35:10.47 ID:RZM2X1OT0 https://wandbox.org/permlink/h9ZXqkhA56d7EOYP std::vectorだからどうしようもないけど、自作クラスならinitializer_listよりも可変長テンプレートをオススメしたい これならコピー不可(ムーブのみ)なクラスでも集成体初期化出来る (ただしコンセプトかenable_ifでAまたはAに暗黙変換可能な型に限定すべき、enable_ifでもメタプログラミングで条件式作れる) http://mevius.5ch.net/test/read.cgi/tech/1683600652/943
944: デフォルトの名無しさん (ワッチョイ 1909-awtI) [sage] 2023/10/24(火) 05:38:03.34 ID:RZM2X1OT0 あ、すまんコメントのとこだけどis_convertible_vの引数は逆だった http://mevius.5ch.net/test/read.cgi/tech/1683600652/944
945: デフォルトの名無しさん (ワッチョイ 1909-awtI) [sage] 2023/10/24(火) 05:42:10.71 ID:RZM2X1OT0 もう一つ訂正すまん、集成体初期化じゃないな一様初期化かリスト初期化かorz http://mevius.5ch.net/test/read.cgi/tech/1683600652/945
946: デフォルトの名無しさん (スッップ Sd9a-SL8W) [sage] 2023/10/24(火) 08:43:43.05 ID:NeqpGeoJd 教訓 std::vectorは使い物にならない http://mevius.5ch.net/test/read.cgi/tech/1683600652/946
947: デフォルトの名無しさん (ワッチョイ 5d01-46Vy) [] 2023/10/24(火) 11:05:08.48 ID:B30+3CR30 >>946 何で? http://mevius.5ch.net/test/read.cgi/tech/1683600652/947
948: デフォルトの名無しさん (ワッチョイ 999f-dytz) [sage] 2023/10/24(火) 11:09:20.45 ID:AiEp9cgJ0 もうC++の仕様拡張はもう限界なんだよ あっちを立てればこっちが立たずが毎回問題になる http://mevius.5ch.net/test/read.cgi/tech/1683600652/948
949: デフォルトの名無しさん (ワッチョイ 5558-8kgw) [] 2023/10/24(火) 11:19:38.47 ID:1IilAibW0 std2 作ってゼロからやり直さないと C++はどうにもならんね http://mevius.5ch.net/test/read.cgi/tech/1683600652/949
950: デフォルトの名無しさん (ワッチョイ 4eda-CTkJ) [sage] 2023/10/24(火) 11:40:18.75 ID:nK1YbT6/0 iostreamの二の足を踏みそうだ http://mevius.5ch.net/test/read.cgi/tech/1683600652/950
951: デフォルトの名無しさん (ワッチョイ 5d01-46Vy) [sage] 2023/10/24(火) 12:18:26.26 ID:B30+3CR30 >>946,948-950 具体的に議論しようぜ http://mevius.5ch.net/test/read.cgi/tech/1683600652/951
952: デフォルトの名無しさん (ワイーワ2 FF62-6i8i) [sage] 2023/10/24(火) 12:59:19.46 ID:2UheMrybF >>946 deque の方が常に良いことが多いと思う initializer_list でうまくいかんときは make_tuple か tie でごまかしたことがある気がするけど あれも move じゃなくて copy だったかな 最近は Rust の方がその辺は楽な気がするな http://mevius.5ch.net/test/read.cgi/tech/1683600652/952
953: デフォルトの名無しさん (ワッチョイ 5d01-46Vy) [sage] 2023/10/24(火) 13:10:28.54 ID:B30+3CR30 >>952 initializer_listでmoveできない問題なら>>939で良いのでは? template化して関数名短くすれば使い心地は{}と そう変わらんと思うが? http://mevius.5ch.net/test/read.cgi/tech/1683600652/953
954: デフォルトの名無しさん (ワッチョイ 8eca-ANn9) [] 2023/10/24(火) 22:26:14.45 ID:0fDOryx60 文字コード周りだけは決着つけてくれ! http://mevius.5ch.net/test/read.cgi/tech/1683600652/954
955: デフォルトの名無しさん (ワッチョイ ba48-g88S) [sage] 2023/10/26(木) 08:51:51.55 ID:+j1jszqL0 chatGPTが今ダウンしているので質問します 以下のC++コードでfirst->secondとなっている部分がよくわかりません vector<pair<int, int>> A(N); for(auto& [x, y] : A) cin >> x >> y; unordered_map<int, int> X, Y; for(auto& [x, y] : A){ x = X.try_emplace(x, X.size()).first->second; y = Y.try_emplace(y, Y.size()).first->second; } try_emplaceはPair<iterator,bool>を返すオーバーロードがあるので firstまではわかるもののそこからさらにsecondとすると何がおきるのでしょうか http://mevius.5ch.net/test/read.cgi/tech/1683600652/955
956: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 8e3e-exru) [sage] 2023/10/26(木) 09:25:01.17 ID:oN20rU1J0 >>955 格納しているのがペアなんだからペアの second 側が得られるってだけ。 イテレータは operator* や operator-> をオーバーロードしていて 要素へのポインタであるかのように扱えると考えていい。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/956
957: デフォルトの名無しさん (スププ Sd9a-Cy5w) [] 2023/10/26(木) 22:18:49.00 ID:eAGx217zd 単に入れ子になってるだけ ポインタの先の要素がまたポインタで指してるだけ http://mevius.5ch.net/test/read.cgi/tech/1683600652/957
958: デフォルトの名無しさん (ワッチョイ ba48-g88S) [sage] 2023/10/27(金) 08:11:42.47 ID:IlYWK5hg0 >>956-957 ありがとうございました。 iteratorを返したらそのiteratorに対してさらにsecondを呼び出しているのですね http://mevius.5ch.net/test/read.cgi/tech/1683600652/958
959: デフォルトの名無しさん (ワッチョイ 5101-CP9B) [] 2023/10/29(日) 23:41:12.89 ID:JPy8qBbk0 C++モジュールについて ・CMakeが3.26で実験的対応、3.28で正式対応 ・g++は対応状況が良くないが、2024年第二4半期に対応できるとKitwareは考えている ・VS2022最新版内臓のCMakeバージョンは3.26 ・Clangとclはモジュールに対応している http://mevius.5ch.net/test/read.cgi/tech/1683600652/959
960: デフォルトの名無しさん (ワッチョイ 13ad-c8RC) [sage] 2023/10/30(月) 13:05:26.07 ID:bW5EQkS/0 Cスレで話題になっててちょっと疑問を質問 自分はgotoって全く使わないで書いているんだけど実際のところどうなんだろう https://learn.microsoft.com/ja-jp/cpp/cpp/goto-statement-cpp?view=msvc-170 「可能な限り、goto ステートメントより break、continue、および return ステートメントを使用することをお勧めします。 ただし、break ステートメントはループの 1 つのレベルのみを終了するため、深い入れ子のループを終了するには goto ステートメントを使用する必要がある場合もあります。」 俺も深い入れ子のループを抜ける方法として ・ループ部分を関数化してreturn ・breakで抜けて if(/* 抜けた理由を再度評価 */) break; を繰り返す (※後述) ということをしている けどgotoで抜けるほうが楽だろうなと思うんだけど、まあ単純なバグ(プログラマーの見落とし)を除いてどういう問題があるんだろうか for ( i = 0; i < 10; i++ ) { printf_s( "Outer loop executing. i = %d\n", i ); for ( j = 0; j < 2; j++ ) { printf_s( " Inner loop executing. j = %d\n", j ); if ( i == 3 ) break; // 内側のループ抜け } if ( i == 3 ) break; // 外側のループ抜け } http://mevius.5ch.net/test/read.cgi/tech/1683600652/960
961: デフォルトの名無しさん (アウアウウー Sad5-g+2W) [] 2023/10/30(月) 13:37:46.82 ID:xnp7PI6ya >深い入れ子のループを終了するには goto ステートメントを使用する必要がある場合もあります って描いてあるしそれが問題とは言ってないんじゃないか http://mevius.5ch.net/test/read.cgi/tech/1683600652/961
962: デフォルトの名無しさん (ワッチョイ 297c-tLJy) [sage] 2023/10/30(月) 14:24:40.02 ID:eEth4IuV0 とりあえずダイクストラ大先生の例の論文読もうぜ http://mevius.5ch.net/test/read.cgi/tech/1683600652/962
963: デフォルトの名無しさん (ワッチョイ 13ad-c8RC) [sage] 2023/10/30(月) 15:01:52.03 ID:bW5EQkS/0 まあ問題あるならそもそも導入されるはずがないわけで問題ないのは分かるんだけど 「可能な限り〜お勧めします。」と言うように使用を推奨しない理由は何なのかなと 例えば特定の処理が飛ばされて動作しなくなる場合があるとかなんかな?と http://mevius.5ch.net/test/read.cgi/tech/1683600652/963
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 39 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.012s