C++相談室 part141
: デフォルトの名無しさん [sage] 2019/02/22(金) 03:07:43.52:MgOIx7iK 次スレを立てる時は本文の1行目に以下を追加して下さい。 !extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part137 (正しくはpart138) ttp://mevius.5ch.net/test/read.cgi/tech/1535353320/ "> ttp://mevius.5ch.net/test/read.cgi/tech/1535353320/ C++相談室 part139 ttps://mevius.5ch.net/test/read.cgi/tech/1538755188/ C++相談室 part140 ttps://mevius.5ch.net/test/read.cgi/tech/1547326582/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.103【環境依存OK】 ttps://mevius.5ch.net/test/read.cgi/tech/1530384293/ ■長いソースを貼るときはここへ。■ ttp://http://codepad.org/ ttp://https://ideone.com/ [C++ FAQ] ttp://https://isocpp.org/wiki/faq/ ttp://http://www.bohyoh.com/CandCPP/FAQ/ (日本語) ----- テンプレ ここまで ----- - VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured : デフォルトの名無しさん [] 2019/02/22(金) 05:33:28.83:7jsMxmv+ Cの場合は #define BIT(n) (1<<n) if(data & BIT(3)){ data &=~BIT(3); } みたいなやり方をするんだが、C++の場合は#defineは使わない方がいいらしいけどどういう書き方が 一般的なのだろう。 : デフォルトの名無しさん [] 2019/02/22(金) 05:43:25.43:kNNcPZDM inlineにしてる。 : デフォルトの名無しさん [sage] 2019/02/22(金) 05:45:32.03:9HNz13T8 そういう場合にマクロ使うなと言われるのは、単にインライン関数にした方がややこしいバグを産みにくいってだけ 別にどっちでもいい : デフォルトの名無しさん [] 2019/02/22(金) 05:51:49.61:kNNcPZDM そろそろonline関数も必要だよな。 : デフォルトの名無しさん [sage] 2019/02/22(金) 06:59:58.96:uV/D6RzS マクロ関数 BIT() の部分、マスク生成をinline関数にするか、 引数を2つ取って、整数値の指定ビットを落とした値を返すinline関数にするか、 if ~ の部分まで含めて、変数の指定ビットを落とすinline関数にするか…。 と思ってちょいと考えたら、この場合は if 不要と気づいた。 最初から 0 か、ビット操作の結果か、いずれにせよ data の bit3 は 0 になるね。 本筋とは関係ない部分だけど。 : デフォルトの名無しさん [] 2019/02/22(金) 08:00:05.86:7jsMxmv+ inline関数ですか? constexperでも関数は作れると思いますが、inlineの方がベターなのでしょうか? constexper int BIT(int bitno){ return 1<<bitno;} usingを使ってこんな書き方ができますが、マクロの変換はできないのでしょうか? using Func = int(*)(int); あとtemplateはあまり使ったことがないですが、なんかマクロ変換に使えそうな気がします。 : デフォルトの名無しさん [sage] 2019/02/22(金) 08:17:36.02:9HNz13T8 constexprは暗黙的にinlineつくからconstexprでもいい using Funcの部分は根本的に勘違いしてると思う それの場合intを受け取りintを返す関数のポインタの"型"に Funcという別名つけてるだけやで : デフォルトの名無しさん [sage] 2019/02/22(金) 08:29:39.37:9HNz13T8 あと前スレ PCゲームやスマホゲーでも、STL使おうが使わまいが標準のヒープを直接は使わないことはよくあるよ コンシューマへの移植性やパフォーマンスのためにカスタムのメモリマネージャ作ってるメーカーなんてザラにある PCだから/メモリ有り余ってるからお仕着せのライブラリを適当に使うだけでいい、と思ってるなら何も分かってない : デフォルトの名無しさん [sage] 2019/02/22(金) 08:34:10.02:nGlWTBX9 現実の開発では、とりあえず動くようにしてから余った時間で最適化したほうが速くなるんだけどね : デフォルトの名無しさん [sage] 2019/02/22(金) 08:39:17.41:nqPCiyAK まぁオブジェクトコードから臭いを嗅ぎ取った事は 無いな、感じられる人は耳鼻科行った方が良いかと : デフォルトの名無しさん [sage] 2019/02/22(金) 09:28:57.73:15zpzt8/ スレ跨ぐなカス いつゲームの話なんかしたんですかねえ??????? それともゲームしか入ってないんですか????????? : デフォルトの名無しさん [sage] 2019/02/22(金) 09:55:02.52:n7WbXSSq だけど、俺前スレじゃないよ : デフォルトの名無しさん [] 2019/02/22(金) 17:51:49.69:PtH+29Wq 「C」からって限定条件なら tcl/tk + canvas はありだと思うが 別に tcl の勉強しなくても使えるし : デフォルトの名無しさん [sage] 2019/02/22(金) 19:08:44.27:zu/11utG Cから tcl/tk はどうやって使うの? : デフォルトの名無しさん [] 2019/02/22(金) 19:16:25.53:kNNcPZDM ワイドスタジオ使っちゃえば? : デフォルトの名無しさん [sage] 2019/02/23(土) 10:20:57.99:zem2FMDi void ff() { std::packaged_task<int()> pt([](){std::this_thread::sleep_for(std::chrono::seconds(5));return 0;}); auto fut(pt.get_future()); std::thread th(std::move(pt)); th.detach(); //int v(fut.get()); } 上記のように、taskの完了を待機せず、packaged_taskの寿命が尽きても実行時にエラーも出ないのですが このようなプログラムはありですか : デフォルトの名無しさん [] 2019/02/23(土) 11:42:14.30:+DV3f+Dk そいつにリソース占領させてみればいい : デフォルトの名無しさん [sage] 2019/02/23(土) 12:14:03.42:zem2FMDi 解決しました : デフォルトの名無しさん [] 2019/02/23(土) 18:45:10.43:3YtKndGk 紅蓮弐式のほうが強い。 ハイ論破。 : デフォルトの名無しさん [] 2019/02/24(日) 14:23:19.37:YwY0sV++ C++ を使っても綺麗にならない C++ を使ってる意味が無い : デフォルトの名無しさん [] 2019/02/24(日) 19:25:23.97:iK4D+UQi C++に綺麗さを求めるの初めて見た。 : デフォルトの名無しさん [sage] 2019/02/24(日) 20:13:55.34:+qyzr+Wj 最低でもインデントくらい揃えてほしいけどな : デフォルトの名無しさん [sage] 2019/02/24(日) 21:31:26.79:BOQZpNHf 揃えさせられるPythonの読みにくさを見るとある程度柔軟な方がいい : デフォルトの名無しさん [sage] 2019/02/24(日) 23:59:09.46:haqs87u6 お、おう : デフォルトの名無しさん [] 2019/02/25(月) 00:01:28.93:Jz0DexUX つまりJavaか。 : デフォルトの名無しさん [sage] 2019/02/25(月) 01:25:43.15:Jktx5+0Z なんでやねん : デフォルトの名無しさん [sage] 2019/02/25(月) 01:34:14.73:1EOktSCH ランタイム速度最速を謳ってバカに新機能の実験台になってもらう。 それがc++ : デフォルトの名無しさん [sage] 2019/02/25(月) 06:06:13.74:pgIYnQ9M ん? 普通に求めるでしょ? 見栄えとかアルゴリズムとか : デフォルトの名無しさん [sage] 2019/02/25(月) 06:43:23.26:AQp51hox Most elementary use of C++ : デフォルトの名無しさん [sage] 2019/02/25(月) 07:14:51.09:RhTHp1T7 多分そういう意味じゃない : デフォルトの名無しさん [] 2019/02/25(月) 07:40:11.99:4l/+z2Zp 古いサイトとか見てるとグローバルな関数に::ってつけるこだわりがよくわからん ::CreateProcessとかさ : ◆QZaw55cn4c [sage] 2019/02/25(月) 08:14:06.58:0evRXBiA 自分の定義した関数にはつけず、win32api には付けて区別しています… : デフォルトの名無しさん [sage] 2019/02/25(月) 09:12:10.78:RhTHp1T7 公式「バランス調整はVIP部屋を参考にする」 桜井「○○の使用率ガー」 ↓ アホ「調整はVIPの使用率できめるらしい」←???? : デフォルトの名無しさん [sage] 2019/02/25(月) 09:12:42.56:RhTHp1T7 誤爆 : デフォルトの名無しさん [sage] 2019/02/25(月) 10:45:46.00:rMTHv0xs 大規模開発ならスコープ明示するのはよくやること std省略NGのとこも珍しくないしな : デフォルトの名無しさん [sage] 2019/02/25(月) 12:17:07.75:y5m/9TYH だから綺麗さなんて曖昧な表現だけだと突っ込まれるって話 : デフォルトの名無しさん [] 2019/02/25(月) 18:50:34.75:Jz0DexUX では評価関数を。 : デフォルトの名無しさん [sage] 2019/02/25(月) 23:50:43.17:sPAFtFpG double の 999999998 と 999999999 の積が正しい答えである 999999997000000002 じゃなくて 999999997000000000 になります なんででしょうか double の範囲に余裕でおさまってますよね? : デフォルトの名無しさん [sage] 2019/02/26(火) 00:18:43.14:belfWXD5 仮数部の最大値9007199254740992を超えているから : デフォルトの名無しさん [sage] 2019/02/26(火) 00:20:50.15:H+xdnOpD つ 有効桁数 : デフォルトの名無しさん [sage] 2019/02/26(火) 00:22:22.81:kx+LOcr9 10^300 とかまで大丈夫だって思ってはいけないのですね 初めて理解しました : デフォルトの名無しさん [] 2019/02/26(火) 14:43:31.98:8+7ktUtN 桁落ち : デフォルトの名無しさん [sage] 2019/02/26(火) 15:56:22.96:5MxkS3P7 浮動小数点は元々、誤差があるから、大雑把な数値でよい 正確な数値を求める場合は、整数型か、decimal を使う : デフォルトの名無しさん [sage] 2019/02/26(火) 16:22:19.66:aKbIPEAT 同じ関数で、MFC 版と Win32 版があることがあり、混乱が生じて、 切り分けの難しい不具合を生じる可能性を避けるため、そうしている。 C++だと、実引数を省略することもできる場合があり、その場合、Win32版を 使っているつもりが、MFC版が勝手に呼び出されて、動作が自分の思ったものと 少し違ってしまう可能性があるかもしれない。この時、コンパイラは何の 警告も出してくれないかもしれない。それを避けたいため、絶対に Win32版を呼び出したい場合には、:: を付けることがある。 : デフォルトの名無しさん [] 2019/02/26(火) 19:26:51.90:7oeDt7bv DoxygenがモダンC++に対応していないんだけど、何か代わりの物はありますか? : デフォルトの名無しさん [sage] 2019/02/26(火) 22:24:56.64:t7v3BAso キーボードのPageUpとPageDownの使い方が判りません、他のボタンも。 : デフォルトの名無しさん [] 2019/02/26(火) 23:24:35.69:S/5yarce C++のthreadってOSの無いマイコン環境でも動作するんだろうか? threadが使えるってことは、ハードウエア的に最低でもタイマー割り込みを使う必要が あるんじゃなかろうか? そうするとそういうタイマーなどのハードリソースはすべて自前で 用意するというのが前提のマイコンではどうするんだろとふと疑問に思った。 : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/02/27(水) 01:13:25.57:FtVEDFBt どうにもならんのじゃない? 仕様に完全準拠した処理系 (ライブラリ) は提供できんってだけだろ。 : デフォルトの名無しさん [] 2019/02/27(水) 01:32:45.56:apYcTfdI effective Modern C++ / Scott Meyersには C++11の偉業として C++の平行対応作業の大部分がコンパイラ開発側が負担する形で実現されたおかげで、標準 規格としてC++の歴史上はじめてどのプラットフォームでも動作が変わらないマルチスレッドプログラム の開発が可能となりました。 と書かれている。 「どのプラットフォームでも」と書かれているがOSのないマイコンだってプラットフォームだからそれを含まない と可笑しいとおもうが、、 : デフォルトの名無しさん [sage] 2019/02/27(水) 01:37:31.77:3Jl+ieqT そこは、対応しているプラットフォームでは、という前提がつくのは自明だと思うぞ、 : デフォルトの名無しさん [sage] 2019/02/27(水) 01:59:24.57:VmfRF6bC 例えば何に対応してないの? : デフォルトの名無しさん [sage] 2019/02/27(水) 09:01:57.37:MitD/HmJ そもそも、マイコンにスレッドなんてあるのか? main 関数しか無いのでは? : デフォルトの名無しさん [sage] 2019/02/27(水) 09:20:12.60:fYEBa3GD マイコンには関数も変数も無いだろ 機械語セットのどこにも関数とか変数とかの命令は無いじゃん 変数が存在してるように見えるのはコンパイラのおかげ : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/02/27(水) 12:06:10.51:FtVEDFBt C/C++ というのはそういうランタイムサポートが期待できない環境、いわゆる「ベアメタル」でも使い物になる システムプログラミング言語であるというのがキモの言語だろ。 フルセットで使える環境なら std::thread という共通インターフェイスを使ってねというだけのことで、 リソースが限られたアーキテクチャでもフルセットが使えるべきというほどのもんではない。 : デフォルトの名無しさん [sage] 2019/02/27(水) 12:51:06.39:Gf38Q9uK (組み込みの)マイコンでは、普通、single thread なんじゃないかな。 マルチスレッドを使えるOSを作るのは結構複雑。 そういうOSをマイコンに作れば使えるようにはなるだろうけど、そこまでは やってないことも多いと思う。そもそもマルチスレッドはプログラミングが 複雑になり予想も難しくなるのでバグが入り易い。カメラや炊飯器が誤動作して も困る。 : デフォルトの名無しさん [] 2019/02/27(水) 14:09:36.66:+TCpifLa mainが無いのもあった気がする : デフォルトの名無しさん [] 2019/02/27(水) 15:17:57.76:6BQDuKk1 PCよりテヘロジニアス化(専用機をCPUに統合)が進んでるので、GPGPUみたいな感じってネットで読んだことあるな。 : デフォルトの名無しさん [sage] 2019/02/27(水) 15:37:08.27:HrTieKXO どんなマイコンを想像してるのか知らんけど組込みOSならメモリー数KB程度から動作する ttp://https://www.eforce.co.jp/products/microc3c mainなんて単なるC言語とかのお約束だからスタートアップルーチンに手を入れられるなら変えることはいくらでもできるよ : デフォルトの名無しさん [sage] 2019/02/27(水) 15:48:15.61:jy5tl2qf サービスなんてエントリーポイント2つあるし : デフォルトの名無しさん [sage] 2019/02/27(水) 18:55:35.12:BQO9B3mv template<class T> int print(T v) { printf("%d",v);// intの場合 printf("%lf",v);// doubleの場合 } printfを使うことは必須なんですが、どうすれば実現できます? : デフォルトの名無しさん [sage] 2019/02/27(水) 19:11:05.97:qHrg9QHU 特殊化しよう : デフォルトの名無しさん [sage] 2019/02/27(水) 19:14:17.63:lylxu9As typeidで分岐すれば : デフォルトの名無しさん [] 2019/02/27(水) 19:17:04.78:ZZbXSlBN 戻り値の型をautoと書くとオーバーロードを認識しなくなるとかです。 : デフォルトの名無しさん [sage] 2019/02/27(水) 19:23:09.27:lylxu9As auto戻り値なんてメリットあるか? : デフォルトの名無しさん [sage] 2019/02/27(水) 19:31:54.53:EHh9wz5w コンパイル時の条件で型が変わるときはautoで済ますと楽 : デフォルトの名無しさん [sage] 2019/02/27(水) 19:43:36.93:1o0vhyUy 単純にオーバーロードすれば? : デフォルトの名無しさん [] 2019/02/27(水) 19:53:26.31:ZZbXSlBN decltype使うときとかです。 : デフォルトの名無しさん [] 2019/02/27(水) 19:56:24.14:ZZbXSlBN std::enable_if<>を使うと超長くなるんだけど、doxygenは戻り値の型の欄を改行してくれないので、関数名や説明の欄が横一文字とかになってしまいそうです。 何とかしてほしいです。 : デフォルトの名無しさん [] 2019/02/27(水) 20:23:21.57:Lz5cBdad constexpr auto succ(auto num) { return ++num; } : デフォルトの名無しさん [sage] 2019/02/27(水) 20:31:28.87:ajs1Ye6I %lfて…わかってやってる、ワケないよな : デフォルトの名無しさん [sage] 2019/02/27(水) 20:40:31.82:G+GrvvOb printf("%s", std::string(v).c_str()); : デフォルトの名無しさん [sage] 2019/02/27(水) 20:45:05.91:G+GrvvOb ミスった std::stringじゃなくてstd::to_stringが正しい : デフォルトの名無しさん [sage] 2019/02/28(木) 07:48:59.08:nAsBylgf なるほど、まず文字列に変換、統一してから %s で表示か。 の「テンプレート関数の特殊化」を教える例題って説も納得いくけど、 std::string の変換関数の好例でもあるな。 %lf は規格で認められてる変換指定だね、一応。 間違って使う奴があまりに多いので現状追認で追加された、 という経緯らしいけど。 どうやら C90 では未定義、C99以降は %f と同様みたい。 : デフォルトの名無しさん [] 2019/02/28(木) 12:32:13.81:yyOtWed3 %06d とか %7.3f とかできなくなるやん : 72 [sage] 2019/02/28(木) 13:07:02.05:g9ECmttI 質問主がデフォルトの書式だからとりあえずそのままで書いた 型ごとに書式を指定するなら上にもあるように特殊化するしかないな : 74 [sage] 2019/02/28(木) 15:32:45.18:nAsBylgf 自分で書いといてアレだけど、 C++に含まれるCの標準関数ってどうなってるんだろ? Cの規格に追従して自動的に更新されてくのか、 ある時点で分裂したら再統合されるまで離れる一方なのか。 後者だとしたら、C99以降でprintf()の%lfが正当になったとしても C++に関してはどのバージョンでも未定義、って危険があるな。 : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/02/28(木) 16:24:48.52:KlP/6TOW 今のところつかず離れずを維持してる。 C++ 中の C 関数は「この C 規格を参照」という感じで明記しているので、 ある程度になると状況を見て参照先を変更するってだけ。 まあ関数についてはそれでいいとして、 その他のところも記法は統一して欲しいよなぁ。 C の _Noreturn と C++ の [[noreturn]] はどっちかに統一するのじゃ駄目だったんかなぁ? とか。 : デフォルトの名無しさん [sage] 2019/02/28(木) 17:54:53.03:zeNaE6xz vector<object*> v がありまして、んでobjectクラスはメンバ変数int numを持ってるとします このときですねv.at(1)->num, v.at(2)->num,....v.at(n)->numでvをsortしたいなーってのがあるんですけど上手い方法無いもんでしょうか 全然思いつかなくて : デフォルトの名無しさん [sage] 2019/02/28(木) 18:01:05.88:3CdGs56r そう言うのは好みだからどっちかが大人になって折れるかよほど力の差があるとかでないと統合は無理 : デフォルトの名無しさん [sage] 2019/02/28(木) 18:07:46.80:zeNaE6xz ですが解決しました。失礼しました。 ttp://https://stackoverflow.com/questions/16366978/stdsort-on-a-vector-of-class-pointers こちらですね : デフォルトの名無しさん [] 2019/02/28(木) 18:41:06.34:IByT54N8 英語だ!!! : ◆QZaw55cn4c [sage] 2019/02/28(木) 20:13:33.80:FII1Vkt+ 確か double に対応する書式指定は "%f" であって "%lf" ではない、という記憶がありますが : デフォルトの名無しさん [sage] 2019/02/28(木) 20:22:30.93:SJVUajxC K&Rのfloatは引数にするとdoubleに昇格するというルールが残っているのでしょう : デフォルトの名無しさん [sage] 2019/02/28(木) 23:35:18.37:IM+bn+eP 本質ではなく、どうでもいいところにしか突っ込めないんだなw : デフォルトの名無しさん [sage] 2019/02/28(木) 23:37:27.00:ufQTgCzR プロトタイプ宣言されたfloat引数にはfloatで渡すけど 可変引数にはfloatは渡せないままなんだな何故か : デフォルトの名無しさん [sage] 2019/02/28(木) 23:45:49.79:SJVUajxC va_list にそんな制限あったっけ? : デフォルトの名無しさん [sage] 2019/02/28(木) 23:51:53.97:LhFhdmbG 可変長引数関連はスタック周りを弄るコードを「マクロで」wrapしたものだから C言語と互換性を持たせるためには仕様の詳細まで引き継ぐしか致し方なかったんじゃないの知らんけど C++専用のva_listを名前を変えて作ったら解決したかもしれんが 知らんけど ただしそうしたとしたら、extern "C"したのにC言語から呼ばれへん 何で!?となってプチ大混乱が生じそう 知らんけどな… : デフォルトの名無しさん [sage] 2019/02/28(木) 23:53:46.30:LhFhdmbG printf()ではdoubleを出力できるのに、 scanf()ではfloatしか受け取れない(doubleをスキャンする機能が無い)というのは C言語の七不思議のうちの一つ : デフォルトの名無しさん [sage] 2019/02/28(木) 23:56:03.03:SJVUajxC MSDNの関連記事 読んでない ttp://https://msdn.microsoft.com/ja-jp/magazine/dn913181.aspx : デフォルトの名無しさん [sage] 2019/03/01(金) 00:15:41.73:fP7U0W+N しかしさすがにscanf()でdoubleをスキャンできるようにする近代化は一筋縄ではいかなさげ : デフォルトの名無しさん [] 2019/03/01(金) 13:14:40.93:ozM8zBQ9 えっ : デフォルトの名無しさん [sage] 2019/03/01(金) 19:20:57.20:HVxvwZsK 不定長引数関数ならば、という縛りがつきます : デフォルトの名無しさん [sage] 2019/03/01(金) 19:21:39.88:HVxvwZsK 普通に書式"%lf" でできるのではないですか? : デフォルトの名無しさん [sage] 2019/03/01(金) 19:33:29.87:WfqePbUu それ何処の世界のC言語の話? : デフォルトの名無しさん [sage] 2019/03/01(金) 20:08:46.93:WfqePbUu 規格に書いてあるよ : デフォルトの名無しさん [] 2019/03/02(土) 10:59:08.67:+L4gK20K 出鱈目ばっかり書き込むスレですか? : デフォルトの名無しさん [sage] 2019/03/02(土) 11:55:35.34:0O78HlO0 できた!できたわ素敵!!!11!! : デフォルトの名無しさん [sage] 2019/03/02(土) 12:04:22.76:0O78HlO0 ところで質問なのですが代入やコピー構築時に所有権を移動するクラスFooを造りたいのですが、 Foo::Foo(Foo& rhs) : m_p(rhs.m_p) { rhs.m_p = NULL; } // 引数が非constのコピコン Foo& Foo::operator=(Foo& rhs) { m_p = rhs.m_p; rhs.m_p = NULL; return *this; } // 引数が非constの代入演算子 を定義して、VS2010とかで警告レベルを4に引き上げると C4239TypeからType&への変換です という警告が出るのです これはFooのムーブコンストラクタを定義したら直るので初めてムーブコンストラクタを定義したいのですが、そこで質問 Q1. ムーブコンストラクタにおいてはコピーされる側の変更はマジで不要? つまり、所有権移動が絡む今回のFooの場合でも次の書き方でおk? Foo::Foo(const Foo&& rhs) : m_p(rhs.m_p) { } Q2. ムーブコンストラクタにおいてコピーされる側を変更しても(実行効率以外は)無害? つまり、所有権移動が絡む今回のFooの場合でコピコンにならって次の書き方をしても安全? Foo::Foo(Foo&& rhs) : m_p(rhs.m_p) { rhs.m_p = NULL; } : デフォルトの名無しさん [sage] 2019/03/02(土) 12:09:49.85:0O78HlO0 訂正orz 誤: 生: 誤: コピーされる側 正: ムーブされる側 : デフォルトの名無しさん [sage] 2019/03/02(土) 12:23:27.09:LLfR4tsY rhsにNULL入れてるってことはrhsのデストラクタで解放されたら困るってことでしょ 一時オブジェクトだろうが何だろうが破棄されるときにデストラクタは走るから、 その例だとNULL入れる必要はある というかその例は綺麗にムーブを使うべき例 : デフォルトの名無しさん [sage] 2019/03/02(土) 12:37:35.01:0O78HlO0 >rhsにNULL入れてるってことはrhsのデストラクタで解放されたら困るってことでしょ なるほど確かに… ていうか鋭い >というかその例は綺麗にムーブを使うべき例 ホンマや(゚Д゚;)ムーブコンストラだけで動いたわdクス、 : デフォルトの名無しさん [sage] 2019/03/02(土) 12:51:51.79:0O78HlO0 実験してから質問せいやというご批判があるかもしれないので釈明 実験はした しかしコピコンが定義されているとムーブコンは呼ばれなかった(から、のQ1のムーブコンでもちゃんとイゴイタ)のである : デフォルトの名無しさん [] 2019/03/02(土) 14:47:21.97:66qf4QbX えw 実験するのめんどくさいから質問してたわw ダメだったんだ、ごめんなさい。 : デフォルトの名無しさん [sage] 2019/03/02(土) 15:15:55.45:oy0Ht86m コンパイルエラーがとれなくて困ってます ■ ヘッダー側 template<class T> class Test { public: Test(void (*func)(T)) {} Test(void (*func)(const T&)) {} }; typedef Test<int *> TestPtr; // テンプレート引数がポインタ型 ■ 呼び出し側 static void func1(int *x) {} static void func2(const int *x) {} void main() { TestPtr test1(func1); // OK TestPtr test2(func2); // コンパイルエラー } VC2008だと以下のエラーになります。 1 番目の引数を 'void (__cdecl *)(const int *)' から 'void (__cdecl *)(T)' に変換できません。 func2みたいにconst付けるとなんでダメなんでしょうか? : デフォルトの名無しさん [sage] 2019/03/02(土) 15:52:41.75:0ZOGECoI 実験もせずに待つって、マナー以前に自分のためにならんだろ 答えが返ってくるまでボケっとしてんのかと 関数ポインタは引数の型が違うと別の型になる : デフォルトの名無しさん [] 2019/03/02(土) 15:54:45.54:uEwpVDqh VC++でmsado15.dllをインポートしようとしても参照されずエラーになるのですが原因は何でしょうか? : デフォルトの名無しさん [sage] 2019/03/02(土) 16:25:34.65:gxSP/QDn それだけでわかるか。エラー内容くらい書け : デフォルトの名無しさん [] 2019/03/02(土) 16:41:21.42:uEwpVDqh C:\Program Files\Common Files\system\ado\msado15.dll に対応するエディターはありません。 このファイルの種類(.dll)のアプリケーションがインストールされていることを確認してください。 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー (アクティブ) E1696 ソース ファイルを開けません "C:/Users/owner/Documents/Visual Studio 2017/Projects/20190227/20190227/Debug/msado15.tlh" 20190227 C:\Users\owner\Documents\Visual Studio 2017\Projects\20190227\20190227\Source.cpp 6 ソースは以下の通り #include <stdio.h> #include <tchar.h> #if (WINVER >= 0x0601) // Windows 7 以降 #import "msado60.tlb" no_namespace rename("EOF", "adoEOF") #else #import "C:\Program Files\Common Files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") #endif : デフォルトの名無しさん [sage] 2019/03/02(土) 17:30:18.82:oy0Ht86m なるほど。 typedef Test<const int *> TestPtr; にしたらコンパイル通りました!どもです! : デフォルトの名無しさん [] 2019/03/02(土) 18:12:08.54:uEwpVDqh 必要かどうかわからなかったのですが regsvr32.exeでmsado15.dllを登録 その後いろいろいじってビルドしてみるとコンパイルできました。 ただし出力ができませんでしたがコンパイルはできたのでとりあえず良しとします。 msado15.dllのようなDLLはC(VC)++で扱うのは難しいですね。 インテリセンスが働きませんから… : デフォルトの名無しさん [sage] 2019/03/02(土) 18:48:27.86:Gk4CLPf8 「c++ import dll」で検索! : デフォルトの名無しさん [sage] 2019/03/02(土) 20:32:59.25:YCnAoXOq マクロは名前空間無いからな : デフォルトの名無しさん [sage] 2019/03/02(土) 22:58:26.16:9ABljqhX はじめまして。 C++でスケジューラのようなものを作りたいのですが、 相談に乗っていただけますでしょうか? C++/MFCのMDIを使用して、ウィンドウ内に複数のウィンドウを配置したいと思っています。 一つのウィンドウにはリスト形式でタスクの一覧を、別のウィンドウでは ガントチャート形式でタスクの時間ごとにグラフを描画し、その他のウィンドウは各情報を表示出来ればと思っています。 そこで、上記のようなものを作るにあたって、 タスク一覧のウィンドウとガントチャートのウィンドウへドラッグ&ドロップで行き来したいのですが、 そもそもそのような事は可能でしょうか? また、チャートの描画をするにあたって、グラフは2Dで描画しようと思っているのですが、 2Dのグラフィックライブラリ等を利用した方が簡単に実装出来るでしょうか? もし良いライブラリ等があればご教示いたければ幸いです。 私自身、開発言語はC++かC#しかまともに使用した経験がないのですが、 実行環境のスペックがあまり高いものを準備出来ないので、 Core2Duo/メモリ2G程度、良くても型落ちのi3程度で、 実行速度も考慮したくC++を選択した次第です。 もし最適な言語や、開発手法があれば教えていただけると嬉しいです。 無知な部分が多いと思いますが、皆さんの意見をお聞かせ頂ければと思いますので、よろしくお願いいたします。 : さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/03/02(土) 23:07:26.95:HH5zv832 それなら、OLE D&Dを実装することになる。具体的には、IDataObject, IDataSource, IDropTargetインターフェースの実装。 : デフォルトの名無しさん [] 2019/03/02(土) 23:32:17.29:4PbQivqk c++でテンプレ使って実装を別ファイルで隠す場合、 // h ////////////////////////////////////////////////// template<typename T> class cls { public: template<typename U> U func(); private: T var = 0; }; // cpp1 ////////////////////////////////////////////////// template<> template<> char cls<char>::func<char> { return var; } template<> template<> int cls<char>::func<int> { return var; } template<> template<> char cls<int>::func<char> { return var; } template<> template<> int cls<int>::func<int> { return var; } // cpp2 ////////////////////////////////////////////////// template<typename T> template<> char cls<T>::func<char>(){ return var; } template<typename T> template<> int cls<T>::func<int>(){ return var; } template<> class cls<char>; template<> class cls<int>; ////////////////////////////////////////////////// cpp1みたいに全部型指定していく場合はビルド出来るんだけど、 cpp2みたいに別けて型指定していくと出来ない。 cpp2みたいな事を実現可能な方法って無いですかね? そもそも書き方が間違ってる? : さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/03/02(土) 23:37:15.79:HH5zv832 ヘッダーで特殊化の方法を指定しないといかんとちゃう? 知らんけど。 : デフォルトの名無しさん [sage] 2019/03/02(土) 23:45:00.12:0O78HlO0 cls::func()の定義を U cls::func() ではなしに、 void cls::func(U& x) とかにすればおkなキモス、 なおそうするとテンプレートの特殊化以前に関数のオーバーロードで解決できてしまうヨカン、 void cls::func(char& x) { x = (char)var; } void cls::func(int& x) { x = (int)var; } void cls::func(double& x) { x = (double)var; } void cls::func(std::string& x) { x = std::string(var, '0'); } ... いくらでも作れる……! : さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/03/02(土) 23:54:10.30:HH5zv832 IDataSourceじゃなくてIDropSourceだ。ごめんを。 : デフォルトの名無しさん [] 2019/03/02(土) 23:59:54.93:4PbQivqk 特殊化の方法、、、私の知識では分からないですね、、、 hを、 template<typename U> void func(U& dest); cppを、 template<typename T> template<> void cls<T>::func(char& dest){ dest = var; } としてみましたが、状況は変わらずでした。 これ、全組み合わせを書かなきゃダメなんですかね? template<T, U> みたいなのを、 template<T, int> みたいな感じで一部だけ型指定していくのは無理、 というのは見た事があります。 : さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/03/03(日) 00:04:53.16:KlFuUPR7 特殊化を知らない? : デフォルトの名無しさん [sage] 2019/03/03(日) 00:12:10.08:ET38y2ec cpp2の翻訳単位内で完全に実体化させないとどうやっても外からはよべないので 少なくともcpp2の中ではそのように書かないといけないと思う : デフォルトの名無しさん [sage] 2019/03/03(日) 00:24:16.88:kd4WdA4I 確実にcppに実体作りたきゃ明示的インスタンス化は個別にしなきゃ駄目だろ : デフォルトの名無しさん [sage] 2019/03/03(日) 00:24:32.19:1zX/ygG4 この場合の特殊化は、どのような記述になるのでしょうか? なるほど、やっぱり無理なんですかね? これ、元となっているのは、 // h ///////////////////////////////////////////////// template<typename T> class cls { public: int func(); private: T var; }; // cpp //////////////////////////////////////////////////// template<typename T> int cls<T>::func(){ return var; } template class cls<char>; ///////////////////////////////////////////////////////////// みたいな感じで func() に戻り値の型指定を追加したいな、 って事でやりはじめたんですよね。 綺麗に書くのが無理そうならば、必要な物を全部書いていきます、、、 : デフォルトの名無しさん [sage] 2019/03/03(日) 00:30:05.53:AQaNwhGs 要求仕様がいまいちよくわかっていないが(マテ (1) 任意の型Tの値cls::varから任意の型Uの値を得たい(一種のconverterクラスを作りたい) (2) 変換関数cls::func()の実装は隠蔽したい ということならこんなんでど(ry ttps://ideone.com/1Fh8sg : デフォルトの名無しさん [sage] 2019/03/03(日) 00:38:22.33:1zX/ygG4 やっぱりそういう物なのですかね 仕様はそんな感じです ただ、func() の戻り値をテンプレ使用でなんとかする方法が無いのかな、と サンプルもありがとうございます : デフォルトの名無しさん [sage] 2019/03/03(日) 00:49:52.61:AQaNwhGs >func() の戻り値をテンプレ使用でなんとかする方法が無いのかな、と func()の戻り値をテンプレにしつつ実装は「完全に」隠蔽したい(ヘッダファイルに書くわけにいかない)となると やっぱコアとなる変換関数は、必要なTとUの全組み合わせについて「完全に」「非テンプレートで」書かないといけない希ガス (なぜなら、テンプレートのままcppに書いたら他のcppから呼べない(現行コンパイラはテンプレートの分割コンパイルに対応していない (2)の隠蔽の要求を多少緩和して、template<class U> void conv(int src, U& dst) { ... } を ヘッダファイルに書いても良いということならUを返すcls::func()をconv()を1個書いたらできるようにはなる ※ 個人の感想です ※ コードには個人差があります : デフォルトの名無しさん [sage] 2019/03/03(日) 00:57:11.45:1zX/ygG4 となると、現在のやり方でコードを完全隠蔽したいとなると、 全組み合わせをcppに書けって事になりますよね、、、 なるほど、了解いたしました 付き合って頂いた皆様、ありがとうございます : デフォルトの名無しさん [sage] 2019/03/03(日) 01:15:53.21:AQaNwhGs スマンは言い過ぎたかもしれん… 全組み合わせをcppに書く作業をそのcppの中でテンプレートを定義して省力化することは可能かもしれん ただし、そのcppの中で定義したのと同じシグネチャ(名前+引数)でユーザーコードが別のテンプレート関数を定義でもしたら、 ODRに違反することになる(この場合実際に変な挙動になる危険性が大きい)ので全体を無名namespaceで囲う必要がありそう 無名namespaceの中から選択的に関数をエクスポートできるのかは正直知らん あんまりテンプレート絡みで無茶はやりたくナサス : デフォルトの名無しさん [sage] 2019/03/03(日) 01:30:06.83:kd4WdA4I 定義は共通でして template int cls<char>::func<int>(); みたいなのを使う分だけ書けば良い ただ、今回の場合クラス内テンプレート関数の特殊化しようとすると怒られるからさらに工夫が必要 : デフォルトの名無しさん [sage] 2019/03/03(日) 01:33:24.30:ET38y2ec ああ、確かに 使わない関数テンプレートをcppで定義してそれの明示的インスタンス化を通してやれば省力化できそう この場合その使わない関数テンプレートを内部リンケージにしても、その中で実体化要求されたテンプレートのリンケージには影響はないはず : デフォルトの名無しさん [sage] 2019/03/03(日) 02:24:28.96:5EsDLzeQ Visual Studioで通ってもgccで通らなかったりするからテンプレートの実体化は厄介。 : デフォルトの名無しさん [sage] 2019/03/03(日) 02:47:42.46:dVINV85+ もはやコンパイラありきの言語 : デフォルトの名無しさん [sage] 2019/03/03(日) 02:53:02.86:kd4WdA4I VC++がC++擬きの別言語なだけだろ 今ごろになってやっと2 phase lookup対応させた structとclassが違うとリンクでこけるのも糞 : デフォルトの名無しさん [sage] 2019/03/03(日) 03:13:19.05:ET38y2ec VS2017以降のMSVCは許してあげてほしい・・・ : デフォルトの名無しさん [] 2019/03/03(日) 05:50:17.03:EorZPwcP えっ、何か革新的なことをしているの? C++は今までつかったことがなかったんだが、最近マイコンの開発に使ってから かなり気に入っている。これならPCでも使えるかもと今考えているところ。 : デフォルトの名無しさん [] 2019/03/03(日) 06:33:00.88:ChZC+e8W 組み込み用途だとC++よりCの方が融通効くと思うんだが 最近の組み込みはひょっとして随分恵まれてるのか : デフォルトの名無しさん [sage] 2019/03/03(日) 07:57:12.43:EUJr/Yte お前さんの認識が古いだけ 数KBメモリーとモダンなプロセッサならC++で開発は普通にできる : ◆QZaw55cn4c [sage] 2019/03/03(日) 10:05:41.46:OccEVyH1 ふと思ったんですが、Java でデコレーターを記述するのに BufferedReader br = new BufferedReader(new InpustStreamReader(System.in)); などと、new したオブジェクトのポインタを取っておかず、new したまま放置してしまう書き方がありますが、 スコープ内で new したオブジェクトは、スコープを外れるときに C++翻訳系が自分で delete する、と決め打ちしてしまうと、互換性で問題がでるでしょうか? : デフォルトの名無しさん [sage] 2019/03/03(日) 10:18:54.68:0vjeZZiI そのポインタを別の場所にコピーしてたらどうなる? 頭悪すぎだろ : ◆QZaw55cn4c [sage] 2019/03/03(日) 10:23:45.41:OccEVyH1 では、あからさまに new したポインタを捨ててしまっている記述に限り自動で delete する、というのはどうですか? 目的は…classpath を共用したいのです、classpath はあらたに c++ で書くとして : デフォルトの名無しさん [sage] 2019/03/03(日) 10:26:03.14:0vjeZZiI そのポインタは渡した先でどうなってると思う? 頭悪すぎだろ : デフォルトの名無しさん [sage] 2019/03/03(日) 10:31:40.12:8Bef4COm よくわかんねえけど楽してJavaを移植したいってこと? Boehm GCでも使ってみたらどうだ : ◆QZaw55cn4c [sage] 2019/03/03(日) 10:35:18.92:OccEVyH1 new したポインタを捨ててしまっている記述に限り、処理系で delete する、と決めるのですから「ポインタを渡した先」というのは存在しないことになります C++ と Java で classpath ライブラリを共用したいのです! : デフォルトの名無しさん [sage] 2019/03/03(日) 10:35:19.96:oO/57lY2 make_uniqueがやりたいってことかね : ◆QZaw55cn4c [sage] 2019/03/03(日) 10:41:59.49:OccEVyH1 スマートポインタを導入せずとも、ナマポであっても classpath を共用できるようにならないものか そのためには c++ 処理系にどんな制限or追加を課せばいいか? : ◆QZaw55cn4c [sage] 2019/03/03(日) 10:47:25.17:OccEVyH1 内容を誤解していました、すみません あらためて回答します プログラマが new したポインタ値を変数に取っておく記述をした場合は、delete の責任はプログラマにあるものとし、処理系では何もしないものとします : デフォルトの名無しさん [sage] 2019/03/03(日) 10:53:36.82:rOejoJLo 遅レスだけど、テンプレートはcppに隠蔽しようとか考えない方がいいと思う dllとかにしたいなら別だけど・・ : デフォルトの名無しさん [sage] 2019/03/03(日) 10:59:02.77:kd4WdA4I javaでnewしているからってc++でnewするなって classpath共用が何を意味しているのかは分からんが : デフォルトの名無しさん [sage] 2019/03/03(日) 11:02:05.72:AQaNwhGs ・繰り返し構文とgotoの全廃 : デフォルトの名無しさん [sage] 2019/03/03(日) 11:24:20.63:0vjeZZiI だからさあ newして渡した先では殆どの場合はそれをフィールドに入れてるだろ 殆ど100%のケースでは「何もしない」に該当するんだよ : デフォルトの名無しさん [sage] 2019/03/03(日) 11:44:43.82:lodoh91K そのオレオレC++拡張の仕様を自分で決めて自分で実装して公開してみな。 万に一つもないと思うが、それを有用だと思って喜ぶ人がいるかもよ。 : ◆QZaw55cn4c [sage] 2019/03/03(日) 11:58:52.90:OccEVyH1 んんー、それは c++ 的な扱い(delete はプログラマの責任)でいいかと、私の思考に何が抜けているのかな?もう少し考えて見ます : デフォルトの名無しさん [sage] 2019/03/03(日) 12:18:50.69:kd4WdA4I 規格ではdeleteしないものをdeleteしたら互換性に問題が出る。 自動でdeleteしたかったらスマートポインタ使うべき 独自c++擬き想定しているならc++17使うのも当然okのはず 生のnew使わせるなんて今時のc++ではとんでもない悪手 : デフォルトの名無しさん [sage] 2019/03/03(日) 13:13:27.54:5kJ1RFDr VS2017は十分な出来なんだがテンプレートの展開中に内部エラーで転けることがあってそこだけは不満 : デフォルトの名無しさん [] 2019/03/03(日) 15:47:18.29:5EsDLzeQ shared_ptr でJavaやC#のガーベージ・コレクションとほぼ同じ役目が期待できるから別にいいのでは。 C++は、shared_ptrが正式採用されたC++11で別の言語になった印象すらあるわ。 : デフォルトの名無しさん [sage] 2019/03/03(日) 15:57:24.31:8Bef4COm 循環参照が検出できないからJavaプログラムの参照をそのまま置き換えればオッケーというわけでもない もちろんナマポよりは遥かにマシだけど : デフォルトの名無しさん [sage] 2019/03/03(日) 15:59:19.15:rOejoJLo 面倒だとは思うけど、時間あるなら再現するコードと共にバグ報告送ってやってくれ : デフォルトの名無しさん [] 2019/03/03(日) 16:11:53.27:E4UxtVYi unique_ptr<hoge> up0(new hoge()); や shared_ptr<hoge> sp0(new hoge()); と書いたときと unique_ptr<hoge> up1 = new hoge(); や shared_ptr<hoge> sp1 = new hoge(); と書いた時で 違いは生じますか? 生じるとしたらどんな違いですか? : デフォルトの名無しさん [] 2019/03/03(日) 16:19:53.78:D2G4oQ9F 副業解禁で激変する若者世代とマネージャー世代のキャリア観 ttp://https://www.businessinsider.jp/post-107782 フリーランスの職種20個の仕事内容と平均年収をわかりやすく解説 ttp://https://www.proof0309.com/entry/shokushu 時給1万円のバイトも。会社員向きのプチ副業を、“バイト芸人”が教える ttp://https://headlines.yahoo.co.jp/article?a=20190226-00127948-bizspa-bus_all 副業が「会社にバレる人」と「バレない人」の大差 ttp://https://headlines.yahoo.co.jp/article?a=20190303-00268007-toyo-bus_all 正社員の10%以上が副業 中には過重労働で体調崩す人も ttp://https://headlines.yahoo.co.jp/hl?a=20190227-00010000-wordleaf-bus_all 「副業で年2000万円稼ぐ男」に学ぶキャリア戦略 ttp://https://headlines.yahoo.co.jp/article?a=20190221-00266856-toyo-bus_all 加速する「副業社会」正社員の4割が「副業したい」 気になる収入はどれくらい? ttp://https://headlines.yahoo.co.jp/hl?a=20190218-00010001-danro-life おすすめ副業22選を現役フリーランスが解説【在宅も可能】 ttp://https://www.proof0309.com/entry/zaitaku-hukugyou 会社を辞めてフリーランスで働きたいあなたが知っておくべき10のこと ttp://https://www.businessinsider.jp/post-165731 フリーランスと会社員、働き方の根本的な差 広がる「雇用されない働き方」の課題とは何か ttp://https://toyokeizai.net/articles/-/263055 フリーランス人口は増える!今後は仕事もプロジェクト単位になる!? ttp://https://freelance.mts-career.com/population/ : デフォルトの名無しさん [sage] 2019/03/03(日) 17:35:34.30:8Bef4COm 直接初期化とコピー初期化の違いを説明するとクソややこしい話になるんだけど 結論から言えばその場合はどっちも全く同じ : デフォルトの名無しさん [] 2019/03/03(日) 17:53:40.63:E4UxtVYi make_shared使った方が良い? : デフォルトの名無しさん [sage] 2019/03/03(日) 19:22:53.95:8Bef4COm うん : デフォルトの名無しさん [] 2019/03/04(月) 04:26:14.48:FZO2lxM7 new 呼び出しが少なければ少ないほど精神衛生に良い。 : デフォルトの名無しさん [sage] 2019/03/04(月) 06:09:53.20:eTdHd+Gg 複数の関数の戻り値を足し合わせる処理で、それぞれの関数の戻り値をチェックしたい場合のすっきりする方法は何かありますか? std::string result; result += func1(a); result += func2(b); result += func3(c); の各func1,2,3の戻り値をresultに足す前に空でないかを確認したいのです (1つでも空があった場合はresultも空にしたい) 単純に一時変数を用意して一つずつ判定するしかありませんか? : デフォルトの名無しさん [] 2019/03/04(月) 06:27:48.33:iluilBaY typename Iterator::container_type::value_type こんな風に::で三個つなげるのは合法ですかね?? : デフォルトの名無しさん [sage] 2019/03/04(月) 06:31:54.66:nFXsjzZK エイリアス使えば : デフォルトの名無しさん [sage] 2019/03/04(月) 06:33:10.80:7Cz1/mIW funcN() を追加する直前の result.size() を記憶しておいて、 足した後に長さが増えてなかったら、今呼んだ funcN() の結果は空だった、 と判定することはできるか。 string から整数になるだけで、一時変数を使うのは変わらない上に、 処理内容が分かりやすくなるわけでもないけど。 : デフォルトの名無しさん [sage] 2019/03/04(月) 07:56:06.21:EZgqhZII 例外 : デフォルトの名無しさん [sage] 2019/03/04(月) 08:09:41.73:t1tsHTRA 合法 : デフォルトの名無しさん [] 2019/03/04(月) 15:31:21.38:V3vkr0fP unique_ptr<int> u(new int[2]{4, 5}); // OK (A) -> int * が作られる u.get()[n] でアクセス可能 *u だめ unique_ptr<int> u = make_unique<int>(6); // OK -> int * が作られる *u でアクセス可能 u[0] だめ unique_ptr<int[]> u = make_unique<int[]>(2); // OK (B) -> int [] が作られる u[n] でアクセス可能 *u だめ *u.get() 可能 unique_ptr<int *> u = make_unique<int>(2); // コンパイルエラー (C) unique_ptr<int *> u = make_unique<int *>(2); // コンパイルエラー (D) unique_ptr<int *> u(new int *); // ok -> int ** が作られる *u = &hoge あれば **u でアクセス可能 (C)(D)がエラーになる理由と (B)を(A)の様に同時に初期化したいとき どう書けば良いか知りたいです : デフォルトの名無しさん [sage] 2019/03/04(月) 17:39:35.24:rgTuscQv C 型が違う D int*が2から作れない : デフォルトの名無しさん [] 2019/03/04(月) 19:03:47.51:iluilBaY どうもありがとう。 : 165 [sage] 2019/03/04(月) 22:26:16.82:eTdHd+Gg ありがとうございます 結局こうすることにしてみました auto addString = [&result] (std::string&& temp){ if (temp.empty()){ throw 0; } result += temp; }; try{ addString(func1(a)); addString(func2(b)); ・・・ }catch (...){ return ""; } : デフォルトの名無しさん [sage] 2019/03/04(月) 23:05:47.73:IrD+1pkV void f() { static std::mutex mtx; std::lock_guard<std::mutex> lock(mtx); //何がしかの処理 } これっていいの? : デフォルトの名無しさん [sage] 2019/03/04(月) 23:25:00.41:tJNb7RRD C++11以降はセーフ、じゃなかったかな。 : デフォルトの名無しさん [sage] 2019/03/05(火) 00:17:46.56:w8adCz4V セーフなわけがあるか!!1111!11!!!!1! : デフォルトの名無しさん [] 2019/03/05(火) 00:55:28.26:Lvsoqpfj C++11だろうがなかろうが関係なくセーフだよ。 : KAC [sage] 2019/03/05(火) 01:01:35.52:zhV7s4kG 人によってセーフの定義が違ってたりしない? : デフォルトの名無しさん [sage] 2019/03/05(火) 01:03:06.00:w8adCz4V C++11以降はセーフになったらしい(キリ ttps://cpprefjp.github.io/lang/cpp11/static_initialization_thread_safely.html : デフォルトの名無しさん [sage] 2019/03/05(火) 01:04:55.09:w8adCz4V Double Checked Lockingはジャヴァのメモリモデルがうまく対応できてなくて騒ぎになったことがある技法 : デフォルトの名無しさん [sage] 2019/03/05(火) 01:11:12.97:w8adCz4V もし関数内static変数の初期化をDouble Checked Lockingを使わずにスレッドセーフにしようとしたら、 関数に入る度に毎回馬鹿正直にクリティカルセクションに入るために1000クロックぐらい捨てることになってしまうま スピンロックか何かの黒魔術で若干緩和する実装も有り得るかもしれんが基本は ジャヴァではなくてC++の処理系がdouble checked lockingする分には 処理系がサポートするネイティブなアーキテクチャのみ考えれば良いから 問題が生じることは無いはずでとりあえずはめでたいと思うが、 : デフォルトの名無しさん [] 2019/03/05(火) 01:34:00.08:Lvsoqpfj グローバルなスタティック変数のように実行前に初期化する仕様にいまさら変えられない事情でもあったか。 : デフォルトの名無しさん [sage] 2019/03/05(火) 01:38:41.08:w8adCz4V リンカにシンボルを渡す手段がイマイチ決め手に欠くキモス : デフォルトの名無しさん [sage] 2019/03/05(火) 01:40:59.82:w8adCz4V あと複数の翻訳単位間ではグローバル変数の初期化順序は保証されない(保証しようが無い)から そういう混乱を避けるために関数内staticは関数に入ったとき初期化されてホスイ 個人的には使わないから知らんが : デフォルトの名無しさん [] 2019/03/05(火) 02:16:13.00:VDry4yCP unique_ptr<int[]> u(new int[2]{6, 7}); : デフォルトの名無しさん [] 2019/03/05(火) 02:54:35.71:YOwkwz81 std::dynarray ってどこ行ったん? ttp://http://ezoeryou.github.io/boost-benkyokai-sapporo : デフォルトの名無しさん [] 2019/03/05(火) 03:25:14.57:VDry4yCP なんだろう この違和感 : デフォルトの名無しさん [sage] 2019/03/05(火) 04:45:14.68:mm49B1QN ライブラリを作るときは、hpp にはクラスの定義を、cpp には実装を書く、と理解しています。 クラスのメンバでない関数はどう扱うべきでしょうか。 hpp にプロトタイプ宣言を、cpp に中身を書く、というので合っていますか。 : デフォルトの名無しさん [] 2019/03/05(火) 04:47:10.42:VDry4yCP inlineは? : デフォルトの名無しさん [] 2019/03/05(火) 04:50:23.83:xaYVlIsQ なぜヘッダはクラス限定だとおもったんだ? それ以前にクラス以外では使用したことがないのか? : デフォルトの名無しさん [sage] 2019/03/05(火) 05:01:47.80:OG2z9OX5 宣言(Declaration)と定義(Definition)は用語なんで覚えといた方がいいよ : デフォルトの名無しさん [sage] 2019/03/05(火) 05:18:53.19:3HlR5qin ヘッダに書くのはクラスだから関数だからとかじゃなくて、複数の翻訳単位(≒cpp)で共通で使うかどうかで決まる 1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ : デフォルトの名無しさん [sage] 2019/03/05(火) 05:48:49.52:mm49B1QN inline なので(苦笑 ハ? 回答の体をなしていない。 > hpp にプロトタイプ宣言を、cpp に中身を書く というやり方は許容されるという意味か。 覚えました。それで? であれば、今私は複数の cpp ファイルを持つ予定はないので、ヘッダファイルは全く不要ということになります。 : デフォルトの名無しさん [sage] 2019/03/05(火) 05:55:22.28:3HlR5qin ライブラリなんだろ? 自分はcpp1つでも、他の人のcppで使わせるためのクラスや関数があるはずだ それをヘッダに書け : デフォルトの名無しさん [sage] 2019/03/05(火) 05:59:24.21:mm49B1QN その際、「プロトタイプ宣言はヘッダで、中身は cpp ファイルに」というルールかマナーか慣習はありますか : デフォルトの名無しさん [] 2019/03/05(火) 06:13:55.29:Lvsoqpfj 特にないから適当に他人のマネしとけばいいと思う。 : デフォルトの名無しさん [] 2019/03/05(火) 11:45:31.15:HwCl8Q1J >1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ staticは付けた方が良いですか?(苦笑 : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/05(火) 12:27:38.14:mHzXPPXa 内部リンケージにするには static を付けるよりも 無名の namespace に入れる方が良いやり方 みたいな雰囲気があるんだけど、 インデントが深くなるのがなんか嫌なんだよね。 インデントは文法に影響しないわけだから、 付けないという選択肢もとれるけど、 それはそれでなんだかなぁって感じだし、 結局は static を付けちゃうんよ。 無名 (unnamed) namespace って使う? : デフォルトの名無しさん [sage] 2019/03/05(火) 12:35:48.55:zIeyIuEy 関数よりファンクタの方が速いという情報を見たのですが、メンバ関数を入れ子クラスでメンバファンクタ化すると高速化が期待できますか? : デフォルトの名無しさん [] 2019/03/05(火) 12:41:35.39:xaYVlIsQ コンパイラ次第だろ 実験 : デフォルトの名無しさん [sage] 2019/03/05(火) 12:50:59.28:zIeyIuEy VC2017で試したのですがテスト用の関数が単純すぎるのかグローバルのインライン関数、クラスのメンバ関数、クラスのメンバファンクタで差異が見られませんでした・・・ : デフォルトの名無しさん [sage] 2019/03/05(火) 12:51:22.93:fI+Bf2nm どこに書いてもいいだろ 他人の書いたコードなんてどうせ誰も読まないし 読ませたいならドキュメントしっかりさせたほうがいい : デフォルトの名無しさん [sage] 2019/03/05(火) 15:12:40.70:pv9Sbimr その「ファンクタの方が速い」ってのは、一般的に関数ポインタを介するのと比較して、だよ 理由はインライン展開できるからであって、その実験で差異が出ないのは当然 : デフォルトの名無しさん [] 2019/03/05(火) 19:05:23.76:A2wr9SaM ストアドよりインデックスのほうが速いよってスレなかったっけ。 : デフォルトの名無しさん [sage] 2019/03/05(火) 20:02:38.14:zIeyIuEy なるほど ありがとうございます : デフォルトの名無しさん [sage] 2019/03/05(火) 21:56:22.01:+aoESyYJ 使う理由としてはメンバ関数を内部リンケージにしたらリンク速くなるかもという期待だけだな 実際速くなるか調べたことないけど 明示的にstaticとある方が読みやすいし、無名はデバッガで見たときクソ見辛くなるし c++はこういうダメ仕様多過ぎてうんざりだわ : デフォルトの名無しさん [sage] 2019/03/05(火) 22:06:02.21:fIhIM0AX 腐ったビルド戦略のせいで無駄なオブジェクトコードの重複を生じるのはゼロオーバーヘッド原則に反しないのか?は疑問だな 極一部のマニアしか使わない機能付けてオナニーしてる暇があったら、いいかげん時代錯誤なビルド処理の抜本的な見直しをやってほしい : デフォルトの名無しさん [sage] 2019/03/05(火) 22:21:06.27:R3KidTI1 メンバ関数の数はクラスのオブジェクト生成コストにどれくらい影響しますか? : デフォルトの名無しさん [sage] 2019/03/05(火) 22:30:58.04:+aoESyYJ まず自分で計測しろ : デフォルトの名無しさん [sage] 2019/03/05(火) 23:07:56.79:rlRU3gS5 数によるコスト差0だよ 計測したことあんの? : デフォルトの名無しさん [sage] 2019/03/05(火) 23:19:26.52:R3KidTI1 ありがとうございます というのもメンバ変数がなく多数の関数をまとめただけのクラスがあるのですが、次のどれがいいのか悩んでいまして (1) 全部static関数にする (2) クラスをnamespaceにして全部グローバル関数にする (3) 呼び出す場所で逐次インスタンスを作成する (4) 呼び出し側クラスでこのクラスのポインタをメンバとして持ち、コンストラクタでインスタンスを受け取るまたは生成する この場合のベストプラクティスはありますか? : デフォルトの名無しさん [sage] 2019/03/06(水) 00:13:14.35:twKwvQwO (1)か(2)を好みに応じて : デフォルトの名無しさん [sage] 2019/03/06(水) 00:17:08.38:URVwFrjm 特に何もないなら2 templateと組み合わせるなら1とか3は多用するけど4は無いな : 212 [sage] 2019/03/06(水) 00:21:02.86:pU9AS85W ありがとうございます (2)でやってみることにします : デフォルトの名無しさん [sage] 2019/03/06(水) 00:32:13.90:Uli2bEJM 1 は、どうして君はすべての関数を、static 関数にできると思ったの? static関数と、関数のライブラリ・モジュール化は関係ない 3, 4 は、どうして君は、関数を使うのにインスタンスが必要なの? インスタンスの関数は、他の言語ではメソッドと言って、 そのインスタンスのメンバ変数を使うものに対して、特別な名称を付けている。 つまり、各インスタンスで値が異なるもの メソッドは、一般的な関数とは異なる。 メソッドや一般的な関数と、関数のモジュール化は関係ない 例えば、Ruby では、 Math.log2( 8 ) #=> 3.0 このようにインスタンスを作らなくても、呼べる関数をモジュール関数と言って、 各インスタンスから呼ぶ関数を、メソッドと言って区別している : 212 [sage] 2019/03/06(水) 00:42:25.73:pU9AS85W そう言われるとそうですね オブジェクト指向ではmain関数以外全部クラス/構造体で作成するものだという先入観がありました : デフォルトの名無しさん [sage] 2019/03/06(水) 01:06:06.33:Riy5qgFP 無理矢理4にしたいケースを考えると、同じインターフェースを持つ関数群A,Bを場合によって切り替えて使いたい場合に敢えてインスタンスのポインタとすることもあるかな。今回の質問者の場合には当てはまらないだろうけど。 : デフォルトの名無しさん [sage] 2019/03/06(水) 01:10:14.42:MDLmYlCa >1つのcppの中でしか使わず外に見せないクラスや関数はcppの中でいいよ 名前無しでも何でも良いが、その場合はクラスはnamespaceの中に入れないと危険が危なすぐる… 同じ名前空間に属する同じシグネチャのFoo::func()が異なる関数として複数のcppで定義された場合、 どっちが呼ばれるか定まらない処理系が実在する(VC++2010とか 多分ODR違反で未定義動作なんだと思う : デフォルトの名無しさん [sage] 2019/03/06(水) 01:13:13.20:paKD8ls/ 曖昧さは、利点にも欠点にもなりうる。 namespaceのグローバル関数ではなくクラスのスタティック関数にすることで曖昧さがなくなりコンパイルエラーを避けられる場合がある。 : デフォルトの名無しさん [sage] 2019/03/06(水) 01:14:08.29:MDLmYlCa 訂正 CPPでクラスを定義する場合は無名namespaceに入れないと危険が危なすぐる、 無名namespaceは異なる翻訳単位間では別名として扱われるから安全 一方、名前付きnamespaceでは異なるCPPで偶然 同じ名前空間に属する同じシグネチャのFoo::func()が作られてしまう危険性を排除できない : デフォルトの名無しさん [sage] 2019/03/06(水) 01:21:31.24:MDLmYlCa そのクラスに非staticなメソッドを設けたとたん、 と同じ話でどのFoo::func()が呼ばれるかわからないという不正な動作をする危険性が生じる 驚くべきことに、VC++2010の場合リンカが何のエラーも警告も出さない それでいてしっかり変な動作になる(a.cppで定義したFoo::func()を呼んだつもりがb.cppで定義された同じシグネチャの別のFoo:func()が呼ばれる : KAC [sage] 2019/03/06(水) 01:53:40.57:tePy6oFI C/C++では、staticなどキーワードが全く違う複数の意味で使われるから注意な。 : 216 [sage] 2019/03/06(水) 02:00:53.56:Uli2bEJM Ruby では、関数名のバッティングを避けるため、2重に囲む。 module 内にclass か、class内にclassを作る module Net class HTTP end class FTP end end # インスタンス Net::HTTP.new Net::FTP.new : デフォルトの名無しさん [sage] 2019/03/06(水) 02:06:24.72:Riy5qgFP rubyボットはお呼びでないからもう巣に帰ってくれ : 216 [sage] 2019/03/06(水) 02:12:57.91:Uli2bEJM static みたいな複雑な概念を、初心者が理解するのは難しい スコープを限定する意味と、生成・破壊のタイミングの違いと、 2つの異なる概念を使うから、難しい C++ は、すべてのリソースの生成・破壊のタイミングを追っかけるだけでも、大変 ドワンゴ江添の本「C++11/14 コア言語」にも書いてあるけど、 呼ばれる関数を探索する方法に、Andrew Koenig が提案した、実引数依存の名前探索 (ADL)もある 実引数依存の名前探索とは、C++において関数呼出時に与えられた引数の型に依存して、 呼び出す関数を探索 (lookup)する仕組みのことである。 英語ではKoenig lookup、argument dependent lookup (ADL)、argument dependent name lookupなどと呼ばれる : デフォルトの名無しさん [sage] 2019/03/06(水) 02:46:55.34:Riy5qgFP の(1)はクラスのstaticメンバ関数のことを言っているのだか、やを見てるとそれを理解していないように思える。 いつも書籍や他人の発言を引用して〜〜では、という書き方ばかりしているのを見かけるが、自分の中に落とし込んで理解できてないならわざわざ書き込まないでくれ。 : デフォルトの名無しさん [sage] 2019/03/06(水) 04:34:02.55:3uIPjLtJ #激同 : デフォルトの名無しさん [sage] 2019/03/06(水) 06:59:23.47:3Q0pfzsC 質問(ネタ振り)に対して見当違いな返答は混乱の元ってのはその通りとして。 読者の立場では、話題が広がってくのは嫌いじゃない。 投稿者の意見として消化しきれてなくても、 参考資料として「誰それの書いたナントカって本では…」と 紹介してくれるのも有難いし。 その上で「あの著者/本は間違いが多い、例えば…」とか、 「記述が古い、新しい規格でもっと便利な機能が追加された」みたいな 追加情報(具体的なもの)が出てくればなお嬉しい。 : デフォルトの名無しさん [] 2019/03/06(水) 09:56:40.41:mg6kC0Yg SQLの話ですか(苦笑) : デフォルトの名無しさん [sage] 2019/03/06(水) 18:18:48.94:paKD8ls/ 名前なし名前空間を名前あり名前空間の中に作ることができる。便利ちゃあ便利。 namespace hoge { namespace { int foobar = 1; }; }; : デフォルトの名無しさん [] 2019/03/06(水) 21:53:00.33:paKD8ls/ 64bit環境で文字列ストリームクラスstd::ostringstreamのインスタンスのスタックサイズが、 gccで376バイト, VS2017で232バイトもあるんだがもっと小さくできるんじゃないの? ちなみに、std::string はgccとVS2017どちらも32バイト。 どうよ? : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/06(水) 22:13:52.26:7/fqDaVy std::ostringstream は文字列の一種というよりも入出力の系統だし、 std::basic_ostream を抱えているのでそんなもんちゃう? : デフォルトの名無しさん [sage] 2019/03/06(水) 22:36:11.10:cpQrrMgl 継承してるしデータとして保持しておくものでもないしな : デフォルトの名無しさん [sage] 2019/03/06(水) 23:24:49.53:TjQtzcPT 質問と関係ないけどスタックサイズって何かわかってないだろ : デフォルトの名無しさん [sage] 2019/03/07(木) 01:12:44.42:FDOfvyow このあとスタックがおいしくいただきました : デフォルトの名無しさん [] 2019/03/07(木) 01:36:59.97:7rstSYcJ ostream, ofstream, ostringstreamのスタックサイズはgccとVS2017でそれぞれ以下のようになる。 gcc: ostream=112, ofstream=264, ostringstream=232 VS2017: ostream=272, ofstream=512 ostringstream=376 どうよ? : 237 [] 2019/03/07(木) 01:39:26.14:7rstSYcJ 間違えた。gccとVS2017は逆です。 何が言いたいというと、組み込みで気軽に使えるC++を目指すならiostream周りを何とかしないとね、という話。 : デフォルトの名無しさん [sage] 2019/03/07(木) 01:41:48.62:1uoKMGSD 組み込みで気軽に使えるC++を目指してないしどこまで削れるかはベンダーの努力次第 : 237 [] 2019/03/07(木) 01:45:06.81:7rstSYcJ Cがコンパイル言語であるにもかかわらずprintf()系の構文解析でJITコンパイルする野暮ったさを解決すべく導入されたはずのiostreamがまったく活かされていないね。 : デフォルトの名無しさん [sage] 2019/03/07(木) 01:45:09.29:E2AqWV/D その程度のスタック消費でヒーヒー言うような組み込み案件でiostream使わんだろ : 237 [] 2019/03/07(木) 01:49:48.32:7rstSYcJ スタック消費でヒーハー言う組み込み案件に進出するのもC++のひとつの課題なのでは有馬温泉 : デフォルトの名無しさん [sage] 2019/03/07(木) 01:52:03.09:1uoKMGSD 組み込み界隈がC++を活用する目標があるのであってC++の目標ではない : デフォルトの名無しさん [sage] 2019/03/07(木) 01:56:44.60:E2AqWV/D from_chars to_chars使えって話だろ それかfmt : デフォルトの名無しさん [] 2019/03/07(木) 03:10:47.55:V0jGdMU/ class C : public std::function<int(int)>{}; というクラスを定義して、 int f(int i){ return i + 1; } void main() { C c = f; int i = c(1); } みたいな使い方って出来ないのでしょうか? functional のヘッダを読んでみましたがさっぱりでした : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/07(木) 03:21:15.84:fFrTWbSf やりたいのはこういうこと? class C : public std::function<int(int)>{ using std::function<int(int)>::function; }; : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/07(木) 03:25:38.52:fFrTWbSf めっちゃ雑にやったけど、 実際にはスライシングに気を付けてな。 : デフォルトの名無しさん [sage] 2019/03/07(木) 03:42:38.23:V0jGdMU/ すいません、 知識不足でそのusingが何を意味しているのか分かりませんが、 std::function<int(int)> と、 class C : public std::function<int(int)>{} を、 外側から同じように使いたいという感じです。 現在は、 class C { std::function<int(int)> F; }; みたいになっており、 C c; c.F = f; int i = c.F(1); と、こんな風に使われています。 std::function<int(int)> を継承させてしまい、.Fを消したい感じです。 : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/07(木) 04:00:06.05:fFrTWbSf 単純に class C : public std::function<int(int)>{} とした場合、当然だけどクラス C にデフォルトで定義されるコンストラクタは C::C(void); と C::C(const C&); だから、型が int (*)(int) であるような値を受け取る余地はない。 using std::function<int(int)>::function; を入れると基底クラス std::function<int(int)> のコンストラクタである std::function<int(int)>::function; をあたかも C のコンストラクタみたいにできる。 そんだけ。 public 継承してれば std::function<int(int)> の他のメンバはそのまま C のメンバとして 見えるからおおよそ期待する挙動になると思う。 : デフォルトの名無しさん [sage] 2019/03/07(木) 04:06:09.21:V0jGdMU/ なるほど、そういう意味だったのですね。 ちょっと試してみます。ありがとうございます。 : デフォルトの名無しさん [sage] 2019/03/07(木) 08:20:27.58:Yz7Qf/Kl 2ファイル同時に編集なんてしたらあっという間に食い潰しそうね : デフォルトの名無しさん [] 2019/03/08(金) 01:15:31.98:jsJl1WSX テンプレートで何とかなりませんかね。 : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/08(金) 02:12:42.20:7lrcs+kH 何が? : 237 [] 2019/03/08(金) 06:55:44.25:orP5LHkV が提示してくれた from_chars, to_chars をgccに導入するにはどうしたらいい? WSLのubuntuを使ってるんだけど規定でfrom_chars, to_charsの定義されたヘッダーファイルが入ってないっぽい。 : デフォルトの名無しさん [sage] 2019/03/08(金) 08:26:54.11:ZyNdKvhR たしか8.0でまだ整数しか実装されてない : デフォルトの名無しさん [] 2019/03/09(土) 11:07:13.09:jx9iLAiD C++テンプレートテクニック第三版っていつ出るんですかね? : デフォルトの名無しさん [sage] 2019/03/10(日) 00:54:12.40:3tC9wBDx 待っていても何も始まらない! 君が書くんだよ! : デフォルトの名無しさん [] 2019/03/10(日) 17:07:48.90:yzd/Af8M テンプレート引数がクラスでpush_back()メンバを持っているというようなことを検査することはできますかね? : デフォルトの名無しさん [sage] 2019/03/10(日) 17:10:17.73:2Qm7LFrM std::is_classとdetection idiomで可能かと : デフォルトの名無しさん [] 2019/03/10(日) 17:15:14.74:yzd/Af8M でてくしょんいでおむってどの本見ればわかりますかね? : デフォルトの名無しさん [] 2019/03/10(日) 17:16:33.87:yzd/Af8M decltype使えばいいのかな。 : デフォルトの名無しさん [sage] 2019/03/10(日) 17:18:14.94:2Qm7LFrM 載ってる本あるのかなあ どうやるのかだけなら、ここのサンプルコードを真似すればいいと思う ttp://https://cpprefjp.github.io/reference/type_traits/void_t.html : デフォルトの名無しさん [] 2019/03/10(日) 17:21:49.62:yzd/Af8M ありがとう。 ちょっと読んでみます。 : デフォルトの名無しさん [] 2019/03/10(日) 22:01:07.26:yzd/Af8M std::byteの使い方がよくわからない。 暗黙の何とかを避けるのに使うんだろか。 : デフォルトの名無しさん [sage] 2019/03/10(日) 22:11:27.82:2Qm7LFrM 単純にバイトを表現する型というのが必要となった char8_tと同じようなもん : デフォルトの名無しさん [] 2019/03/10(日) 22:30:00.78:yzd/Af8M ソケットやファイルの入出力に使うって事かな? : デフォルトの名無しさん [sage] 2019/03/10(日) 22:49:36.48:8hqMg5Px 1バイトサイズの整数のつもりでcharを使ったらstreamで困ることがあったりしたしね。 : デフォルトの名無しさん [] 2019/03/10(日) 23:15:04.53:yzd/Af8M enum class byte : unsigned char { }; ってなってる。 : デフォルトの名無しさん [sage] 2019/03/10(日) 23:21:10.96:6gF9+EwK そのベースの型は実装依存 型を取りだして使えってことなんだろうか : デフォルトの名無しさん [sage] 2019/03/10(日) 23:21:22.34:ketqiw2j なんでenum classなんだ? typedefと何が違うの? : デフォルトの名無しさん [sage] 2019/03/10(日) 23:31:19.81:2Qm7LFrM 暗黙の型変換ができない : デフォルトの名無しさん [sage] 2019/03/10(日) 23:54:49.98:vvRzWHgY こういうの行き過ぎた型安全に思えるけどね : デフォルトの名無しさん [sage] 2019/03/10(日) 23:57:35.21:6gF9+EwK でも過去にそれで何かあったんでしょ 使うかどうかは任意だしある分には困らない : デフォルトの名無しさん [sage] 2019/03/10(日) 23:57:38.91:ketqiw2j なるほど : デフォルトの名無しさん [sage] 2019/03/11(月) 00:01:39.15:4nU22VRt is_enum_vがtrueになるとか違和感しかない : デフォルトの名無しさん [] 2019/03/11(月) 05:30:01.20:pTTv+VC9 なんで uchar8_t uchar16_t uchar32_t にしないんだろな : デフォルトの名無しさん [sage] 2019/03/11(月) 05:58:05.15:mFqdzmI2 既存のライブラリと衝突しまくるだろそれ : デフォルトの名無しさん [sage] 2019/03/11(月) 11:02:11.57:9rO3q8tQ ひとりで全部作ってんのか? 誰か使い始めたらそれに巻き込まれるんだよ : デフォルトの名無しさん [sage] 2019/03/11(月) 13:49:05.84:kWR5MawD WPFってどうなの : デフォルトの名無しさん [sage] 2019/03/11(月) 19:42:26.86:OenRxSRY 塵 : デフォルトの名無しさん [] 2019/03/11(月) 22:05:24.43:XA5PtgcF getoptの標準化マダーチンチン(AA略 : デフォルトの名無しさん [sage] 2019/03/12(火) 07:17:28.89:dEFL2K0T void foo(std::function<void()> &&f){} int main(){ auto lamda = [](){}; foo(lamda); } なぜコンパイルできるの? : デフォルトの名無しさん [] 2019/03/12(火) 07:23:08.39:FSVt1tPQ オプションの渡し方がそもそも揺れてる : デフォルトの名無しさん [] 2019/03/12(火) 07:25:00.12:FSVt1tPQ int main() { return main(); } なぜコンパイルできるの? : デフォルトの名無しさん [] 2019/03/12(火) 11:46:00.90:6Uu2j9Xc int main(std::function<void()> &&f){ return main([](){}); } : デフォルトの名無しさん [sage] 2019/03/12(火) 20:22:26.93:dEFL2K0T すいません、低レベルのかたたちばかりでした。 聞くところ間違えました : デフォルトの名無しさん [sage] 2019/03/12(火) 20:30:56.16:Nd0ou12Q なぜc++ main return省略でググらないのか : デフォルトの名無しさん [] 2019/03/12(火) 20:43:58.42:X3QnQcuN getoptを標準化してしまうとハイフンで始まる変態ファイル名が鬼門になってしまうかな。 : デフォルトの名無しさん [] 2019/03/12(火) 20:46:35.39:Zu3OGTTs is_iterator、is_containerメタ関数はどうやったら作れるんでしょうね? : デフォルトの名無しさん [sage] 2019/03/12(火) 20:54:07.45:JuWddRAo SFINAEでググれ、でいいんだろうか : デフォルトの名無しさん [] 2019/03/12(火) 20:55:53.60:Zu3OGTTs スフィ姉は知っているんですが。 そのあとが。 : デフォルトの名無しさん [sage] 2019/03/12(火) 21:00:20.04:cgm/opRe iterator_traitsに通してメンバ型が得られるか確認する? *とか++とかの操作について確認する? containerはbeginとendでイテレータ取れるか確認する? : デフォルトの名無しさん [] 2019/03/12(火) 21:34:26.86:Zu3OGTTs template <typename T> using is_iterator = std::is_class<typename std::iterator_traits<T>::iterator_category>; これは使えますかね? : デフォルトの名無しさん [sage] 2019/03/12(火) 21:58:48.29:l3wdXFC4 ぐぐればstack overflowがひっかかる : デフォルトの名無しさん [sage] 2019/03/12(火) 22:01:23.70:JuWddRAo 使えますかねって・・自分で試せるだろ : デフォルトの名無しさん [sage] 2019/03/12(火) 22:12:53.32:6dDI1fa3 マウントしててワロス : デフォルトの名無しさん [sage] 2019/03/12(火) 22:34:48.05:3laDxwEs マウントは取りたいけど教えるのはめんどくさい : デフォルトの名無しさん [sage] 2019/03/12(火) 22:48:31.61:YKaKEG7g 結局はそれで何がしたいかによるんじゃね 標準のコンテナやそのイテレータで型分岐したいなら十分だけど、カスタム実装されたユーザー定義のイテレータがそのように実装されているかは分からんし まあiterator_traitsの特殊化も追加で書くようにすれば使えるか : デフォルトの名無しさん [sage] 2019/03/12(火) 23:06:42.78:cgm/opRe C++20からは一応イテレータはコンセプトがあるなあ コンテナは知らん : デフォルトの名無しさん [sage] 2019/03/12(火) 23:12:51.59:YKaKEG7g はダメな気がするな template<typename T,typename=void> struct is_iterator:std::false_type{}; template<typename T> struct is_iterator<T,std::enable_if_v<std::is_class_v<typename std::iterator_traits<T>::iterator_category>>>:std::true_type{}; : デフォルトの名無しさん [sage] 2019/03/12(火) 23:14:38.07:JuWddRAo ,297 アホか、何がマウントだボケ 自分で試しもせずに2chに丸投げとか普通にダメだろ iterator_traitsに与える型の要件(だけでいいかどうかはさておき)を満たすなら特殊化なんかいらんでしょ リファレンス見る限り、iterator_traitsの特殊化はポインタのためだけにあると思う : デフォルトの名無しさん [] 2019/03/12(火) 23:27:20.69:Zu3OGTTs どの本もそういう書き方になってるんだけど、その理由がわからない。 は呼び出し方によっていろいろ問題が起きるんだけど、その理由がわからなさすぎる。 その辺がスッキリわかる本はないですかね。 : デフォルトの名無しさん [sage] 2019/03/12(火) 23:39:14.10:YKaKEG7g 本は知らん SFINAEが使えるのは宣言部分 そこで置換失敗すると宣言そのものが無かったことになる : デフォルトの名無しさん [sage] 2019/03/13(水) 12:04:15.67:lxBl+sTZ マウントが取りたいだけで教える知識がないだけやねんw : デフォルトの名無しさん [sage] 2019/03/13(水) 12:37:00.35:mh4jyrHE そう 分からない質問には自分で試せ これがC++使ってる奴の特徴 : デフォルトの名無しさん [sage] 2019/03/13(水) 12:47:27.60:QLyGxm6u , そう思うなら自分が教えてやれば? : デフォルトの名無しさん [sage] 2019/03/13(水) 20:50:37.56:u/DrurAb 規約はあるけど「実装が規約」をやっちゃってる部分が多くて、 しかもコンパイラのバージョン依存がひどいってのがc++だからな。 規約は語れても実際にどう動作するか語れない輩も多いだろうね。 : デフォルトの名無しさん [sage] 2019/03/13(水) 21:07:13.50:QLyGxm6u そういう構図じゃないと思うよ : デフォルトの名無しさん [] 2019/03/13(水) 21:25:53.81:Z/ka/TFK どなたか iostreamの存在価値について熱く語ってくれないか。 : デフォルトの名無しさん [sage] 2019/03/13(水) 21:34:23.99:VRJ3bLEu いやだ : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/13(水) 21:38:23.77:xQTh8hgU ttp://https://www.google.com/search?q=%22iostream%E3%81%AE%E4%BE%A1%E5%80%A4%22 : デフォルトの名無しさん [] 2019/03/13(水) 21:55:23.80:780qHyAl VS2019って4月2日に出るのかな? : デフォルトの名無しさん [sage] 2019/03/13(水) 22:19:08.88:DKlmxwmb 米国時間4/2にローンチイベント行ってるから日本だと3日かな : デフォルトの名無しさん [sage] 2019/03/13(水) 22:44:27.53:mh4jyrHE だから分からないのにマウント取るのやめたら? : 290=301 [sage] 2019/03/13(水) 23:05:00.60:QLyGxm6u バカだろお前 ID:Zu3OGTTsはSFINAEでググれと言われてSFINAEは知ってると言ったろ その上での書き込み見ておかしいと思わんのか? それにで答えは出てるだろうが > だから分からないのにマウント取るのやめたら? お前のことだよ : デフォルトの名無しさん [] 2019/03/14(木) 18:41:51.50:qKfDR5xc 待ちどおしいね。 : デフォルトの名無しさん [] 2019/03/14(木) 20:57:09.31:HZIDFMYl このスレの住人は、新しいVisual Studioでどんなことに期待してるの? : デフォルトの名無しさん [sage] 2019/03/14(木) 20:58:50.91:30TndOaO マウントされないこと : デフォルトの名無しさん [sage] 2019/03/14(木) 21:00:03.79:O0o087YX 仕様通りに動いてくれりゃそれでいいわ。 : デフォルトの名無しさん [sage] 2019/03/14(木) 21:20:35.00:nuZulfE1 C++20の早期対応 : デフォルトの名無しさん [sage] 2019/03/14(木) 21:25:28.09:xC4JJLNw clang対応 : デフォルトの名無しさん [sage] 2019/03/14(木) 21:29:12.31:vJRyyCPl C#での使い勝手向上 : デフォルトの名無しさん [sage] 2019/03/14(木) 21:36:15.68:r+Z4K3kn フロントエンドをVSCodeにしてくれ : デフォルトの名無しさん [sage] 2019/03/14(木) 21:45:44.62:rlbQlqp5 メモリ喰わずに軽くなって… : デフォルトの名無しさん [] 2019/03/14(木) 22:54:08.60:qKfDR5xc 何個まで願い事聞いてくれるんだろ。 : デフォルトの名無しさん [sage] 2019/03/14(木) 23:13:56.40:3EvgP48J Expressを出してくれ : ◆QZaw55cn4c [sage] 2019/03/14(木) 23:19:01.48:NTAm4EVS MFC… : デフォルトの名無しさん [sage] 2019/03/15(金) 06:01:20.22:qA/WFgyI Windows formsのC++へ移植してmfcを完全に抹消してくれ : デフォルトの名無しさん [sage] 2019/03/15(金) 06:06:32.23:nvk7uoI+ オープンソース化 : デフォルトの名無しさん [sage] 2019/03/15(金) 08:11:25.59:2KXTO6ja 本当によくかけとるわ。 この人たちで標準委員やったほうがいいんじゃないかと思う。 ttp://https://ttsuki.github.io/styleguide/cppguide.ja.html : デフォルトの名無しさん [sage] 2019/03/15(金) 08:17:17.58:qA/WFgyI ゴミ : デフォルトの名無しさん [sage] 2019/03/15(金) 08:54:09.40:fLDhqMRG けっこう癖が強いよね。例外やpimpl否定したり。 : デフォルトの名無しさん [sage] 2019/03/15(金) 08:57:01.66:LNWMUSed 危険思想だなw ヤバすぎてヘドが出るw : デフォルトの名無しさん [sage] 2019/03/15(金) 09:06:08.50:Uugk/tx2 まあでかいプロジェクトはこんなもんだろう。 例外は実際よくないと思うわ。 : デフォルトの名無しさん [sage] 2019/03/15(金) 09:48:31.74:Af9j6Fb3 pimpl否定ってあったっけ? うちのプロジェクトも原則例外禁止 むかしは一律禁止だったけど : デフォルトの名無しさん [sage] 2019/03/15(金) 11:11:39.02:t9j+keaC 古くさいって言われてなかった? : デフォルトの名無しさん [sage] 2019/03/15(金) 11:55:34.06:E1i6RSEf googleのスタイルガイドは和訳が古くて英語版しか読まなくなって何年にもなるが追いついてるのか? : デフォルトの名無しさん [sage] 2019/03/15(金) 12:05:48.86:PdhXv0FK 例外無しとか小規模の組み込み以外で意味あるのかね? : デフォルトの名無しさん [sage] 2019/03/15(金) 12:37:29.90:hyh/CKnF 例外使った時点で疎結合もへったくれもなくなると思うわ。 能力的に幅のあるプロジェクトで使うには難しいよ。 : デフォルトの名無しさん [sage] 2019/03/15(金) 12:56:39.19:ng8+eCdq > 能力的に幅のあるプロジェクトで使うには難しいよ。 これには同意するけど > 例外使った時点で疎結合もへったくれもなくなると思うわ。 意味不明 例外以外の方法使っても似たようなことをする羽目になるだけ なら意図が明確な例外のほうがマシ : デフォルトの名無しさん [sage] 2019/03/15(金) 14:16:54.97:9vyMIRpZ 戻り値なら呼び出し元と呼び出し先の間の結合だけだが、例外はよりコールスタックの根本の方へ結合が及ぶことがある フレームワークのように、例外を使ってあえて中間をすっ飛ばしてコールスタックの上と下を結合させるケースもあるけどね : デフォルトの名無しさん [sage] 2019/03/15(金) 14:19:06.67:9vyMIRpZ 念の為補足するけど、Javaの検査例外みたいに常に直上での例外処理を強制するスタイルは戻り値と事実上等価だからここでは論外ね : デフォルトの名無しさん [sage] 2019/03/15(金) 14:31:16.21:yhzlHwio つまり標準ライブラリのほとんどを使うなと言うこと? : デフォルトの名無しさん [sage] 2019/03/15(金) 14:37:11.61:yhzlHwio そもそも例外使った方が疎結合になるだろうに : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/15(金) 16:00:22.80:q2a9nFaz 他の言語や過去の (例外をあまり想定していない) システムと接続することもあるし、 そういう全体のエコシステムを考えると例外がかえって面倒ということはあると思う。 C++ だけの (新規の) プロジェクトなら全く例外を使わないというのは極端なスタイルだと思うが。 : デフォルトの名無しさん [sage] 2019/03/15(金) 16:32:10.73:SB/vZ5dO 例外があると、それが理由で上下の階層が深いシステムになりがちだと思うよ。 節度があれば正直なんでもいいが、言語的にクソ設計を許さないのならその方がありがたい。 : デフォルトの名無しさん [sage] 2019/03/15(金) 16:54:37.47:oq4eakC3 c++じゃないところからc++のコード呼び出すなら例外外に出さないようにtry catchでラップするだけだし 逆で途中のコードが例外発生したために解放処理が飛ばされるってなら、raiiクラス化しろって話にならね? 通信経路でやり取りするなら相手が例外処理で実装されていようがされていなかろうがなんの関係もないし : デフォルトの名無しさん [sage] 2019/03/15(金) 17:57:31.19:BCAT3j7k 要は、メッセージングが至高ってことだな : デフォルトの名無しさん [] 2019/03/15(金) 18:59:44.81:0PFucV7H つまりJavaが至高。 : デフォルトの名無しさん [sage] 2019/03/15(金) 20:05:35.24:LNWMUSed 例外だしてどーすんの ミッションクリティカルで直せるの? 意味ないじゃん 例外使いたきゃ専用言語使えばいい : デフォルトの名無しさん [sage] 2019/03/15(金) 20:09:02.33:qA/WFgyI プログラミング言語の専門家に聞いて : デフォルトの名無しさん [sage] 2019/03/15(金) 20:37:29.42:ng8+eCdq > 他の言語や過去の (例外をあまり想定していない) システムと接続することもあるし、 > そういう全体のエコシステムを考えると例外がかえって面倒ということはあると思う。 もうそういう極端な例でしか反論できないことはわかったよw : デフォルトの名無しさん [sage] 2019/03/15(金) 20:59:33.43:UMZlK7qa 江添勝てなかったか・・ : デフォルトの名無しさん [sage] 2019/03/15(金) 21:09:50.31:2KXTO6ja 微妙に修正はされてる。 てかクソなc++本読むよりかよっぽど各機能の利点、問題点が簡潔に書けてると思うが。 : デフォルトの名無しさん [sage] 2019/03/15(金) 21:13:26.14:BCAT3j7k まだひっくり返る可能性はあると思うね : デフォルトの名無しさん [sage] 2019/03/15(金) 21:50:38.17:fLDhqMRG pimplに限った話じゃないけど、前方宣言とそれによる定義の隠蔽が推奨されていない。 : デフォルトの名無しさん [sage] 2019/03/15(金) 22:07:25.54:qA/WFgyI Googleはな : デフォルトの名無しさん [sage] 2019/03/15(金) 22:38:20.91:4qwaELjT 大規模なところでも例外禁止あるから mozillaもそうでしょ AAAなゲームスタジオでも多い 性能引き出したかったらそういう厳しい制約がいるんだよ : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/15(金) 22:40:04.57:q2a9nFaz グーグルのガイドラインが極端なのは当たり前だ。 超巨大なエコシステムで成り立ってるわけだし。 例外を使わない派がしばしばグーグルのガイドラインを持ち出すんだけど、 そのガイドラインにすら、最初から設計してたら違ったかもしれないという 文言があるので、 C++ を使った設計理念一般としての強い根拠にならんのよな。 私としては、一般的な C++ での設計の参考にするべきは標準ライブラリだと思う。 標準ライブラリはその言語の思想をよりはっきりと体現するものだし、 それに沿って作ったものは連携しやすくもある。 (昔からあるライブラリの一部は変な個所もあるが。) C++ はクソ設計でもどうにか形には出来るっていう方向性だと思う。 まともな設計ならそれが一番良いにきまってるけど、 それが期待できない場合が大半だという現実がある。 : KAC [sage] 2019/03/15(金) 22:48:06.41:rqfh3/aR 例外禁止とかの環境って、 newの失敗とか毎回チェックするの? : デフォルトの名無しさん [sage] 2019/03/15(金) 22:54:50.21:2KXTO6ja 規約を守る守らんってことにしか目がいかんのな。 やっぱ馬鹿ばっかだわ。 : デフォルトの名無しさん [sage] 2019/03/15(金) 22:54:57.62:12ZNVc6t newの失敗のチェックって何するの? null返ったかどうかのチェック? : デフォルトの名無しさん [sage] 2019/03/15(金) 23:03:42.33:L+hp7qbL 例外処理機構が無かったら、メモリ確保に失敗しても、 そこから過去のロールバックができない 自己流で、long jump するぐらいなら、例外処理の方がよい : デフォルトの名無しさん [sage] 2019/03/15(金) 23:09:45.82:12ZNVc6t いや、失敗したら駄目だろ。失敗しないのが正しい。 プログラミング言語如きが考慮すべき問題ではない。 : デフォルトの名無しさん [sage] 2019/03/15(金) 23:18:26.60:fLDhqMRG そのロールバックってのはCとmallocじゃできないようなものなのかな。 : デフォルトの名無しさん [sage] 2019/03/15(金) 23:25:12.09:qA/WFgyI new失敗とかコンピュータが壊れてるからチェックしても意味ない : デフォルトの名無しさん [sage] 2019/03/15(金) 23:27:22.88:qA/WFgyI 当然特殊なケースは除くからな 一応言っておかないと組み込みガー君とか宇宙線でエラーガー君が飛んでくるからな : デフォルトの名無しさん [sage] 2019/03/15(金) 23:37:27.23:WyRx2/31 >私としては、一般的な C++ での設計の参考にするべきは標準ライブラリだと思う。 設計ではなく使い方の参考に、という意味では賛成だけど テンプレートバリバリの設計はあまりにもコストがかかるというのを知っといて欲しい ああいうのは湯水のごとく時間をかけられるからやれるんであって : デフォルトの名無しさん [sage] 2019/03/15(金) 23:38:17.19:iTKvW/zw きみらはあれか、元記事とか全然読まずにコメントするクチか リンク元には「例外は全く新規のプロジェクトならデメリットよりメリットが優先するので使って良い。 ただ既存のグーグルプロジェクトは元々例外を想定していないのでこれに例外のパターンを導入する とリスクのほうが多いのでやめるべき。ただし Windows については例外がある(駄洒落ではない)」 と書いてあるんだがちゃんと読んだか。ちなみに駄洒落ではない、は俺が追加したのでなく元の文にある : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/15(金) 23:45:56.39:q2a9nFaz そんな極端な意味では言ってない。 手間が合理的な範囲内で「参考」には出来るよって程度の話。 : デフォルトの名無しさん [sage] 2019/03/15(金) 23:48:42.07:5dVML2o5 エラーにはリカバリーすべきものとそうでないものがある あとそのエラーが起こる頻度の違い リカバリーしないものはその時点で即死するのが正しい リカバリーするものでかつエラーが普通に起こるものはエラーコードで処理するのが正しい となると残りのリカバリーするものでかつたまにエラーがおこるようなのが例外にする価値があるエラー あと例外発生時のunwindが重いからそれでも問題にならないもの となるとあんまり使えるとこないんだよね そういうわけで最近例外なしの言語がでてきてる流れなんだろう : KAC [sage] 2019/03/15(金) 23:51:56.30:rqfh3/aR コンピュータが壊れない限りメモリ確保が失敗しない環境って凄いな。。。 : デフォルトの名無しさん [sage] 2019/03/15(金) 23:54:45.92:qA/WFgyI 出、出〜www 一名いらっしゃいましたwww : デフォルトの名無しさん [sage] 2019/03/16(土) 00:07:16.61:HR8X4dmV 例外ってcatchしなきゃ投げたその場で落ちてくれるのがこの上なく便利だろう 問題残したまま実行続けて別の関係ないところで落ちるのが最悪 runtimeで落ちて困るような用途でも、 ソースコードあるやつなら静的解析で例外発生箇所網羅出来そうなものだが 網羅できればリソースリークする危険な場所わかるし、対処も出来るのにね 逆にソースコード無いライブラリやダイナミックリンクする奴は、例外含めて外部仕様としてかっちり決まっているべきものじゃね : デフォルトの名無しさん [sage] 2019/03/16(土) 00:11:00.29:oXtW8C30 > 例外ってcatchしなきゃ投げたその場で落ちてくれるのがこの上なく便利だろう その場じゃなくstackが全部巻き戻ってからでしょ : デフォルトの名無しさん [sage] 2019/03/16(土) 00:15:00.35:U94TV9G4 >逆にソースコード無いライブラリやダイナミックリンクする奴は、例外含めて外部仕様としてかっちり決まっているべきものじゃね んなもんコンテナで隔離する以外使い道ねーわ。 : デフォルトの名無しさん [sage] 2019/03/16(土) 00:18:04.69:HR8X4dmV 仕様ってのは例外外に出すか出さないか、 出すなら出し得る例外の種類のリスト 出さないならエラー毎にエラーコードやら返し方やら決めるって話 : デフォルトの名無しさん [sage] 2019/03/16(土) 00:23:45.45:oXtW8C30 そうなんだよね 例外の仕組みわかってないやつは平気で動的ライブラリの界面に 例外使ったりするんだよね あと標準ライブラリ丸出しにするやつもしかり それ誰も互換性保証してねーから : デフォルトの名無しさん [] 2019/03/16(土) 00:24:47.11:UXq90ll9 核戦争を生き抜くには。 : デフォルトの名無しさん [sage] 2019/03/16(土) 00:24:57.90:HR8X4dmV まあ標準ライブラリの例外の使い方のおかしさも気になるが std::stoiで例外投げるバージョンしか無い上に何故かlogic_error扱いのinvalid_argumentやout_of_range投げる いや、これ出る状況普通runtime_errorだよね : デフォルトの名無しさん [sage] 2019/03/16(土) 00:29:24.58:cz3ooqCT >例外含めて外部仕様としてかっちり決まっているべきものじゃね そこを言語の機構で保証できない、動的言語みたいななあなあ状態なのが残念なところだね。 それをきっちり保証しようとした検査例外はそれはそれで扱いづらいところがあるし。 : デフォルトの名無しさん [sage] 2019/03/16(土) 00:29:25.98:U4afEAjj リカバリーするかしないか、頻度が高いか低いか、どちらもプログラム(特にライブラリ)を書いてる時点では 言い切れないから困るんですよねぇ。 : デフォルトの名無しさん [] 2019/03/16(土) 00:36:35.46:UXq90ll9 そこでプロパティ型なんですよ。 : デフォルトの名無しさん [sage] 2019/03/16(土) 06:11:19.71:7Yfqh0Zg 無限にnewできる理想郷に住んでるんだろw 相手しなくていいよ : デフォルトの名無しさん [] 2019/03/16(土) 06:46:32.47:TLiwIm0H 復旧不可能な例外もあれば、些細な例外もあるよね。 戻り値チェックで十分でしょと思うようなところで例外を投げるJava/C#みたいな流儀だと、いちいちキャッチするのが面倒。 : デフォルトの名無しさん [] 2019/03/16(土) 06:52:39.99:TLiwIm0H Cでは戻り値で判定できたはずのエラー種別が例外クラスで細かく分類されてしまったことで、 エラー処理で書かなければならないコード量が増えて例外のキャッチ漏れまで起きる危険性が生み出された。 : デフォルトの名無しさん [sage] 2019/03/16(土) 07:31:06.00:5/K53Ire その程度の知識で語ってる奴は戻り値方式でも処理漏れするだろw : デフォルトの名無しさん [sage] 2019/03/16(土) 07:35:15.72:/kg6KhNe 例外の嫌なところは 処理できない案件を低水準側に丸投げするところなんだよな… ユニックスのプロセスの死亡順序もそうだが、 計算機業界は常識が逆転してゐる… : デフォルトの名無しさん [sage] 2019/03/16(土) 07:38:02.24:/kg6KhNe というわけでおそらくアプリの設計シチュの99%ぐらいは 例外発生=プログラムの死亡 、とみなして良いはず ここまで割り切るならはじめて例外はお手軽で便利と言える : デフォルトの名無しさん [] 2019/03/16(土) 12:28:02.50:UXq90ll9 例外をキャッチしたらプランBに移行するのが、真の戦闘のプロ。 : デフォルトの名無しさん [sage] 2019/03/16(土) 12:49:25.73:V15J7n/y 例外なんてグローバル変数みたいなもの。 だから低レイヤで使うのは仕方ない : デフォルトの名無しさん [sage] 2019/03/16(土) 12:50:47.84:jRc2/nMs std::cin >> a; は入力を延々と待っている。 これ別スレッドから止めさせる方法はありますか? : デフォルトの名無しさん [sage] 2019/03/16(土) 13:10:50.41:V15J7n/y stdin閉じるとどうなる? : デフォルトの名無しさん [sage] 2019/03/16(土) 15:40:22.15:/kg6KhNe (組み込みはともかくアプリの場合は呼び出し元の方が高水準レイヤにあたるのではないかというツッコミが来ると思ったが 来なかったので黙っていよう… : デフォルトの名無しさん [sage] 2019/03/16(土) 17:27:11.59:/kg6KhNe プランBったって、プログラム起動時にあらかじめmallocしておいた何キロバイトかをfreeして ダイアログを出して[OK]で終了、ぐらいなんじゃ… : デフォルトの名無しさん [sage] 2019/03/16(土) 19:15:22.19:zOgp3uDK いや、プログラムでは、呼び出し側の方が高レベル、呼び出された側が低レベル なので、呼び出された側が例外を投げた場合、高レベル側の関数で処理できる ので適切。 : デフォルトの名無しさん [] 2019/03/16(土) 20:00:47.57:TLiwIm0H 多くの例外の基底クラスになる exception にエラーコード整数値を出力する関数があればもう少しC寄りのエラー処理ができたと思うのだが。 既存のexceptionメンバ関数 const char *what() だけでは扱いが困難。 : デフォルトの名無しさん [] 2019/03/16(土) 20:14:28.85:1JRLHvWf std:::to_string(); : デフォルトの名無しさん [sage] 2019/03/16(土) 20:14:39.74:w9XKSp7E 必要ならそういうクラスを定義するだけだろ : デフォルトの名無しさん [sage] 2019/03/16(土) 20:15:00.26:1JRLHvWf sage : デフォルトの名無しさん [sage] 2019/03/16(土) 20:39:18.42:cz3ooqCT ユーザーにエラー原因を示すだけならconst char*でも大して問題ないし、 catchした側でエラーコードによって何かするというのはたいていアンチパターン。 : デフォルトの名無しさん [sage] 2019/03/16(土) 22:15:57.75:HR8X4dmV 文字をwchar_tで処理しているプログラムだと例外文字列作るのが面倒 まあ詳細な情報出さずに固定文字列にしてしまえばいいんだけど : デフォルトの名無しさん [sage] 2019/03/17(日) 00:42:25.28:OzxlZzXh templateの使い道がいまいちわからん STLやboostみたいなものは非常に有益だが 同僚がドヤ顔でコンテナを作ったって自慢してたが、 stlのコンテナを使わずにそいつのコンテナを使う理由が無い : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/17(日) 00:46:12.21:aA4z/LNt 困ってないなら使わなくてもいいと思うよ。 困る場面がある人のための機能。 : デフォルトの名無しさん [sage] 2019/03/17(日) 00:48:31.10:UT79+Nc/ 同じコードをコピペしなくて済むから、作業量も減るし、保守も楽になる。 : デフォルトの名無しさん [sage] 2019/03/17(日) 00:56:16.88:NYZE0cFr せやな ただそれは作るものの需要の有無の問題だ : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/17(日) 00:58:29.44:aA4z/LNt 重複があることを事前に発見するのは難しい場合もあるから、 同じことを何度も書いている気がするなと思ったら どうにかしてまとめることを検討するという程度でもいいかもね。 同じことをしないようにする、いわゆる DRY 原則というものはあるけど、 一方で、それを意識するあまりしなくてよい抽象化層を設けるのも馬鹿らしいということで、 必要になってからやるという YAGNI という考え方もある。 こういうのは程度問題なので、なんでもほどほどにね。 : デフォルトの名無しさん [sage] 2019/03/17(日) 01:15:02.15:7ciqStwp テンプレート(のパラメータにおける型の自動推論)と 関数のオーバーロードの合わせ技によるコードのまとめ力は異常 : デフォルトの名無しさん [sage] 2019/03/17(日) 01:37:37.76:7ciqStwp 例えばストレージからintを読み込む関数、doubleを読み込む関数、unsigned charを読み込む関数を 同じ関数名と同じ引数の並び(例えばbool read(FILE* fp, <目的とする型>& x とか)ででオーバーロードしておけば、 template<class T1, class T2, class T3> bool read_x3(FILE* fp, T1& x1, T2& x2, T3& x3) { if (!read(fp, x1)) { return false; } if (!read(fp, x2)) { return false; } if (!read(fp, x3)) { return false; } return true; } でもって、オーバーロードを実装した任意の型3個の組み合わせについて読込関数が実体化される (実装されていない型に行き当たったらエラーになるからワカル これはn個の関数と1個のテンプレートを書いただけで、n^3パターンもののユースケースに網羅的に対応できたことになるからスゲー強力 ※ 個人の感想です : デフォルトの名無しさん [] 2019/03/17(日) 01:43:06.21:Jta37aFk そこはfpも抽象化でしょ。 intハンドル、FILE*、iostream、HANDLE などなど派生関係のないものをtemplate化できる。 : デフォルトの名無しさん [sage] 2019/03/17(日) 01:44:01.66:7ciqStwp なおこのテクをつきつめれば、テンプレートの特殊化というのは普通の意味では要らなくなるキモス、 むしろ特定の型の組み合わせについて自動展開を禁止したいときに使う (例えば可変長データのread関数を、データの先頭にデータの個数を書く約束で作ったとして、 個数を読み込む関数を整数のread(fp, x)に限定したい場合、個数の型をdoubleにした特殊化テンプレートを書いてわざとエラーにするとか、 : デフォルトの名無しさん [sage] 2019/03/17(日) 01:47:31.21:7ciqStwp FILE* fpは十分汎用的でしかも最大限高速なので他への代替の必要性はほとんど考えられないし、 サンプルコードでむやみに凝っても仕方が無い ※ 個人の感想です : デフォルトの名無しさん [sage] 2019/03/17(日) 01:58:32.33:ADoP4x2u テンプレートはヘッダに全部書かなきゃいかんのなんとかならんか? : デフォルトの名無しさん [sage] 2019/03/17(日) 02:06:35.73:NYZE0cFr 原理上どうにもならない : デフォルトの名無しさん [sage] 2019/03/17(日) 02:10:16.54:7ciqStwp テンプレートの分割コンパイルは一度実装されたが1年がかりの複雑な仕事になったし あまりに複雑すぎて普及に至っていないというようなことがプログラミング言語C++で読んだ記憶、 しかし、importキーワードがC++の予約語であるうちはまだ希望がある : デフォルトの名無しさん [] 2019/03/17(日) 02:10:32.44:Jta37aFk FILE* fp は 標準のfgetc()の実行速度が遅くて残念。バッファリングしている甲斐がない。 : デフォルトの名無しさん [sage] 2019/03/17(日) 02:26:35.34:UT79+Nc/ 使いたい型決まっているなら別にできるだろ? ヘッダで宣言だけ書いて、ソースで定義と明示的インスタンス化すればいいだけ : デフォルトの名無しさん [sage] 2019/03/17(日) 02:34:45.67:61bjcvzF 3大C++無限ループ話題 テンプレート実装の分割記述 getsetの実装 あと一つは? : デフォルトの名無しさん [sage] 2019/03/17(日) 03:18:11.89:4v9XGq5+ 多重ループの抜け方 : デフォルトの名無しさん [] 2019/03/17(日) 03:19:37.14:XP0TJBl2 STLにツリーがない理由を教えてください。 : デフォルトの名無しさん [sage] 2019/03/17(日) 04:14:30.81:OzxlZzXh あるクラスが非トリビアルなコピーコンストラクタをもっていることを検出したい そのクラスのメンバの型が非トリビアルなコピーコンストラクタを持っていたとしても。 : デフォルトの名無しさん [sage] 2019/03/17(日) 06:02:45.37:NYZE0cFr メモリが云々 : デフォルトの名無しさん [sage] 2019/03/17(日) 06:48:43.74:WBoQCy0z テンプレートを抜き出してヘッダーファイルを生成するプリプリプロセッサを作ればいい : デフォルトの名無しさん [sage] 2019/03/17(日) 08:23:20.60:h3PfG3Ac トリビアルコピー出来ないことを検出したいならis_trivially_copyableで充分だけどそれ以上のことがしたいの? : デフォルトの名無しさん [sage] 2019/03/17(日) 08:28:29.93:qh1L90Cw 糞抽象化の見本みたいなコードだなw。 そのうち使われなくなる種類のコードだ。 : デフォルトの名無しさん [sage] 2019/03/17(日) 08:33:05.90:NYZE0cFr 名人様一名いらっしゃいました : デフォルトの名無しさん [sage] 2019/03/17(日) 11:20:51.42:2Lg7N/Z5 > 個数の型をdoubleにした特殊化テンプレートを書いてわざとエラーにするとか、 そういうときはdelete指定が使えるんじゃね? というかis_floating_pointとかで弾いた方がいいとも思うけど : デフォルトの名無しさん [sage] 2019/03/17(日) 12:03:09.87:UT79+Nc/ x3とかつけない方が良くね? てかvariable template使うところだね : デフォルトの名無しさん [sage] 2019/03/17(日) 13:22:57.65:UT79+Nc/ variadicだた : デフォルトの名無しさん [] 2019/03/17(日) 13:42:47.24:XP0TJBl2 バリスティック・テンプルね。 : デフォルトの名無しさん [sage] 2019/03/17(日) 15:09:36.00:WBoQCy0z サンプルにまでマウントするとかw : デフォルトの名無しさん [] 2019/03/17(日) 15:29:33.79:XP0TJBl2 マウントの定義を教えてください。 : デフォルトの名無しさん [] 2019/03/17(日) 16:01:22.88:Ymi5ijHL 明確な定義があるわけじゃないけど、主に「勘違いした高卒が高等な他人を見下してること、もしくはその様」を指す語としてつかわれてんじゃないの : デフォルトの名無しさん [sage] 2019/03/17(日) 21:10:58.21:NYZE0cFr 意識高い系 : KAC [sage] 2019/03/17(日) 21:23:45.76:nO6ODsyT 猿などが優位だと主張するために 相手に馬乗りになること こういう場では、 相手に反論した(つもり)なら満足し、 反論を受けると過剰反応を示す奴をさすことが多い。 : デフォルトの名無しさん [sage] 2019/03/17(日) 21:42:19.60:2Lg7N/Z5 >相手に反論した(つもり)なら満足し、 >反論を受けると過剰反応を示す奴をさすことが多い。 その説明だと某クソコテしか思い当たらないんだが・・・w : ◆QZaw55cn4c [sage] 2019/03/17(日) 21:57:43.35:8PHb1ymW 誰? : デフォルトの名無しさん [sage] 2019/03/17(日) 22:22:05.53:VD3ReUoA オープンソース化されたWindowsの電卓を見たが、クッソ綺麗でモダンなコードだな : デフォルトの名無しさん [sage] 2019/03/17(日) 22:25:37.54:NYZE0cFr 多分7に入ってた電卓とは別物だな : デフォルトの名無しさん [sage] 2019/03/17(日) 23:22:31.89:0FN5yhQH あの手のコードって意味ないよな 無意味に11や14で追加された機能をなんかを使いたがるやついるわー そういったやつに限って仕事が遅い ウンチクはいいから、さっさと終わらせろよ : デフォルトの名無しさん [sage] 2019/03/18(月) 00:13:57.67:HNvbYtsL Windowsカーネルのオープンソース化待ってます : デフォルトの名無しさん [sage] 2019/03/18(月) 05:32:24.67:+E07qlDR sort関数の比較関数を、クラスのメンバ関数として定義すると invalid use of non-static member function というエラーが出ます。 なぜこれは禁止されるのでしょうか。 また、どうやって解決したら良いですか。 : デフォルトの名無しさん [sage] 2019/03/18(月) 05:33:36.55:HNvbYtsL エラーメッセージ読みなよ : デフォルトの名無しさん [sage] 2019/03/18(月) 06:41:53.05:8TZ/BLJn 理屈を知ってる人には当然だけど、初めての人は混乱する部分じゃないかな。 sort で使う比較関数は色んな形で宣言できるけど、宣言する場所によって エラーにならずに使える関数の形式が違うってやつ。 メンバ関数にした比較関数のプロトタイプ宣言はどんな感じ? : デフォルトの名無しさん [sage] 2019/03/18(月) 08:08:37.98:HNvbYtsL 非staticメンバをstaticのように使おうとしたときに出るエラーだからsortとか関係ない Class::funcをsortに入れたんでしょ Class().funcとするかfuncをstaticにするだけ : デフォルトの名無しさん [sage] 2019/03/18(月) 08:49:38.19:fJqFZa8b 今時はClass().funcでいけるんすか : デフォルトの名無しさん [sage] 2019/03/18(月) 09:58:55.92:7+YzgLjV Class::funcってstaticじゃないの? : デフォルトの名無しさん [sage] 2019/03/18(月) 10:42:04.28:9EOa0iNV ->*みたいな書き方の意義がわかったら一人前どすな : デフォルトの名無しさん [sage] 2019/03/18(月) 11:13:12.39:27d4/ixp ちなみにどんな意義があるの? : デフォルトの名無しさん [sage] 2019/03/18(月) 19:22:09.39:SgtRGl5R bool mycomp(string a, string b); です : デフォルトの名無しさん [sage] 2019/03/18(月) 20:05:14.79:c3AGzLzz 結局その場でラムダ式書くのが一番わかり易いんだよね : ◆QZaw55cn4c [sage] 2019/03/18(月) 20:09:56.80:e40iBeRc ttps://mevius.5ch.net/test/read.cgi/tech/1434079972/39 なんと! private なメソッドを呼び出せるのです! : デフォルトの名無しさん [sage] 2019/03/18(月) 21:20:34.54:lCR32A1k エクセルで使われているようなGUIにちょっとしたアニメーションをつけるには何使えばいい? : さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/03/18(月) 21:26:27.76:qJuL/kMQ タイマー : デフォルトの名無しさん [sage] 2019/03/18(月) 21:43:42.87:lCR32A1k 例えば四角形の座標の終点の値と移動にかかる時間をするだけでヌルッと動いてくれる機能があるやつがいいです : デフォルトの名無しさん [sage] 2019/03/18(月) 21:45:05.39:ok5NeesM 普通にcのsort関数使えばいいのに。 キャストしたら負けとでも思ってんのかね。 : デフォルトの名無しさん [sage] 2019/03/18(月) 21:59:25.97:MtU5H+Zb cocos2d : デフォルトの名無しさん [sage] 2019/03/18(月) 22:47:37.12:DisgVN8i std::initializer_list<int> l() { return std::initializer_list<int>{1,2,3}; } std::vector<int> v() { return std::vector<int>{1,2,3}; } int main() { for(auto i : l()){ std::cout << i << endl; } for(auto i : v()){ std::cout << i << endl; } } 0 0 0 1 2 3 なんで? : デフォルトの名無しさん [sage] 2019/03/18(月) 22:56:40.87:bBcTS09+ std::initializer_listはちょっと変わったクラスで、コピーやムーブしても中身が付いてこない 関数の戻り値にしてコピー省略とかが入ったとしても同様 : デフォルトの名無しさん [] 2019/03/18(月) 23:23:21.73:qPN/SC1k cのsort関数はアドレス連続性がないコンテナには使えないでしょ。 vector::sort()とCのsort()の速度はあまり変わらないので、わざわざCのsort()を使う理由がない。 : デフォルトの名無しさん [sage] 2019/03/18(月) 23:28:12.28:c3AGzLzz qsort「おっワイの出番か?」 : デフォルトの名無しさん [sage] 2019/03/19(火) 00:00:01.33:V3eHYYxi cのsortってラムダ渡せないし、ワザワザ面倒くさい記述してまで使う意味無いだろう。 : デフォルトの名無しさん [sage] 2019/03/19(火) 00:37:48.08:wfF3ncvB template<typename T> T func(T a){ } という関数の中身として、T が int なら a*2 を返し、T が double ならa/2 を返し、それ以外なら a を返す、という処理にしたい場合どう書いたら良いのでしょうか。 関数ごと特殊化する方法があるのは勉強したのですが、一行分の処理を特殊化するために関数ごと特殊化するべきなのでしょうか。 簡単化のため、必要さが全くない例になっていますがよろしくお願いします。 : デフォルトの名無しさん [] 2019/03/19(火) 00:43:22.56:fW/dBWxG STLが天才なのは分かったけど、遅くなりそうなのも分かってしまった。 : デフォルトの名無しさん [] 2019/03/19(火) 00:49:23.69:fW/dBWxG ttp://https://ideone.com/Oo65ND これでいいのか知らんけど。 : デフォルトの名無しさん [sage] 2019/03/19(火) 00:54:54.54:V3eHYYxi 簡単化しすぎて何を質問したいのかよくわからない その例の程度の処理なら、intとdoubleの関数をオーバーロードして、template関数でデフォルトの処理も書けばいい intとdoubleをどうしてもtemplate化したかったら特殊化で書けばいい 前後に長い共通処理がある場合の一部式だけ個別にしたいなら、関数オブジェクトで式を引数にとる補助template関数作って、上記手法で型毎にlambdaで式を変えて補助関数を呼び分ければいい : デフォルトの名無しさん [sage] 2019/03/19(火) 00:56:32.83:wfF3ncvB 特殊化する部分を関数として切り出して特殊化すれば良いということでしょうか。 : デフォルトの名無しさん [sage] 2019/03/19(火) 06:48:59.95:smCJKSpo まずは、エラーなくコンパイルが通って実行できるまで。 単純には、比較関数をクラスの外に出して「メンバ関数じゃない関数」にする。 たぶんソートしたいクラス中には比較する文字列以外のメンバもあるだろうから、 class myclass { public: string s; // 比較対象の文字列 int other; // それ以外のメンバ例 ... // 他にもメンバ色々 }; こんな感じだと思う。 比較関数は、2つの myclass 型のオブジェクトのメンバ s 同士を比較するから、 bool mycomp(const myclass& a, const myclass& b) { return a.s < b.s; // 辞書式の昇順 } : 468 [sage] 2019/03/19(火) 06:54:39.65:smCJKSpo あるいは の段階はすでに通過してて、 「今度は比較関数をクラスのメンバ関数にしてみよう」と思ったのかな。 bool mycomp(string a, string b); このプロトタイプでクラスの「staticでないメンバ関数」にすると、 その関数はクラスのオブジェクトを介して obj.mycomp((string)a, (string)b) という形で呼び出さなきゃならないのよ。 ところが std::sort() が比較関数を呼び出す場合は どのオブジェクトとも関係ない mycomp((string)a, (string)b) を呼ぼうとする。 「クラスのメンバだけど、クラスの個々のオブジェクトからは独立した関数」に するために、関数の宣言に static を指定する。 class myclass { public: string s; // 比較対象の文字列 int other; // それ以外のメンバ例 ... // 他にもメンバ色々 static bool mycomp(const myclass& a, const myclass& b); // 比較関数 }; (「改行多すぎ」につき、もう一回だけつづく) : 468 [sage] 2019/03/19(火) 06:57:01.64:smCJKSpo ( の続き、長々とすまぬ) 関数の定義(クラス定義の外に書く場合)はこんな感じ。 bool myclass::mycomp(const myclass& a, const myclass& b) { return a.s < b.s; // 辞書式の昇順 } myclass のメンバ関数だと明示するために myclass:: をつけることと、 定義の方には static をつけない、てところが注意点。 std::sort() で使う時は、 std::sort(std::begin(objs), std::end(objs), myclass::mycomp); 「比較関数には myclass のメンバ関数の mycomp() を使ってくれ」と明示。 …する必要が(俺の環境では)あるんだけど、myclass 同士を比較することから、 自動的に myclass のメンバ関数も候補に入れてくれても良さそうな気がする。 なんでダメなんだろ? : デフォルトの名無しさん [sage] 2019/03/19(火) 07:25:56.87:aaAbvqyx たかがソート一つ実行するのにこれってやっぱc++は失敗しとるわ。。 : デフォルトの名無しさん [sage] 2019/03/19(火) 07:30:30.93:/K8ycOQq どの言語も似たようなもんだろ : デフォルトの名無しさん [sage] 2019/03/19(火) 07:31:18.45:K4E5ztRO 丁寧に教えてくださりありがとうございます。 今のところは、に書かれているようにクラスの外に出す、という方針で対応しておりました。 クラスの中で static をつけて宣言をする、というのが元々やりたかったことに一番近いように思います。重ね重ねありがとうございます。 > std::sort() で使う時は、 > std::sort(std::begin(objs), std::end(objs), myclass::mycomp); > 「比較関数には myclass のメンバ関数の mycomp() を使ってくれ」と明示。 これは、mycomp() をクラス内で非static に宣言したときにも使えますか。 それとも、クラスの外で bool myclass::mycomp(const myclass& a, const myclass& b) { return a.s < b.s; // 辞書式の昇順 } 流に宣言、定義した場合に限りますか。 : デフォルトの名無しさん [sage] 2019/03/19(火) 07:33:59.57:LjcR+vA2 何のために非staticにこだわるんだ? メンバにアクセスしないならstaticつけとけよ : デフォルトの名無しさん [sage] 2019/03/19(火) 08:36:28.37:I3ez8Qch 比較関数をメンバ関数としてクラスに内在させるのが良くない 外部化するか、演算子オーバーロードする どちらかと言うと比較関数を作らずに大小関係を定義する言語だ 実は、関数やクラスの間の包含関係がある クラスを比較する関数はクラスの外部におかれるべきであって、メンバ関数にするのは筋が悪い クラス内部に置くなら大小関係の定義にすべきだ この手の階層関係は、規格書にもどんな教科書にも一切書かれてないけど、暗黙のうちに了解されている : デフォルトの名無しさん [sage] 2019/03/19(火) 09:31:11.81:wYd+ZeEZ 対称な演算子をインスタンスメンバにするのはセンス無いね : デフォルトの名無しさん [sage] 2019/03/19(火) 15:31:26.82:Pb8DX7io template <typename T> T func(T a) { if constexpr (std::is_same_v<T, int>) return a * 2; else if constexpr (std::is_same_v<T, double>) return a / 2; else return a; } : デフォルトの名無しさん [sage] 2019/03/19(火) 16:57:51.01:W9RsgnS5 namespaceを活用しろ : デフォルトの名無しさん [sage] 2019/03/19(火) 17:11:35.93:HTVBHQBE これの方が関数として切り出して特殊化するより好きな見た目です : デフォルトの名無しさん [sage] 2019/03/19(火) 21:29:30.46:bWZzZfFH それだと実行時に判断コストがかかるじゃん : デフォルトの名無しさん [sage] 2019/03/19(火) 21:29:55.51:QA3viZTS if constexprってtypeidで情報取ってきて比較するみたいなオーバーヘッドが0になりますか? : デフォルトの名無しさん [sage] 2019/03/19(火) 21:33:24.72:Nfgw9yWF おじさん久々にC++の仕事受けたんだけど 色々進化してて面食らってます 今、右辺値参照っての勉強中なんだけど ムーブコンストラクタとかはへーへーほーほー言いながら何となく分かり始めた んだけどさ、 int &&x = 2; // ok <-これだけ使い途が分からん ローカル変数の右辺値参照て何に使うん? 実験してみた限り、勝手にムーブとかしてくれるわけでもなさそうだし ローカル変数に&&付いてると何に使えてんな時便利なの? : デフォルトの名無しさん [sage] 2019/03/19(火) 21:34:25.38:/K8ycOQq 使わなくていい : デフォルトの名無しさん [sage] 2019/03/19(火) 21:40:02.75:kyorfls3 右辺値参照はほぼムーブコンストラクタのためにあると思っていいと思う 左辺値参照と同じように書けるというだけで、使うことはないかと : デフォルトの名無しさん [sage] 2019/03/19(火) 22:04:14.68:gYGT/BxR 変数宣言した右辺値参照そのものは左辺値という罠 極力そんな物作るべきじゃないね : デフォルトの名無しさん [] 2019/03/19(火) 22:05:37.07:8COf7JeC 俺今使い道思いついたんだけど披露してもいい? : ◆QZaw55cn4c [sage] 2019/03/19(火) 22:26:06.36:45LJYysD どうぞどうぞ… : デフォルトの名無しさん [sage] 2019/03/19(火) 22:37:18.08:xP6m0cDT if constexprは実行時コストゼロのはずだよ : デフォルトの名無しさん [sage] 2019/03/19(火) 22:53:01.58:bWZzZfFH ifがなんで実行時ゼロなんだよ : デフォルトの名無しさん [sage] 2019/03/19(火) 23:23:47.41:hIuEq8sX 赤っ恥 : デフォルトの名無しさん [sage] 2019/03/19(火) 23:26:12.29:/K8ycOQq if constexprにするとコンパイル時に評価されて特定の分岐のみが実体化される : デフォルトの名無しさん [] 2019/03/19(火) 23:38:47.81:zcFktSXp これですか。すごいね、これ。C++17からだけど。 constexpr if 文 ttp://https://cpprefjp.github.io/lang/cpp17/if_constexpr.html : デフォルトの名無しさん [sage] 2019/03/20(水) 00:20:58.62:wnXzlprR 回答ありがとう なるほど、文法上は書けるから仕様上厳密な定義はされてるけど、普通は特に使わないで良いのね : デフォルトの名無しさん [] 2019/03/20(水) 00:27:33.64:K21QzJf5 初心者がやたらとアスタリスク使ってポインタの参照値を得ようとするのに似た感じがある。 他言語に移植しにくいだろ、テンプレート化しにくくなるだろ、と小一時間。 : デフォルトの名無しさん [sage] 2019/03/20(水) 00:56:45.75:LskeNtBJ アスタリスク使ってポインタの中身取ったらあかんのか・・・ : デフォルトの名無しさん [sage] 2019/03/20(水) 03:19:15.41:abqqrm1b multimap よりも set の vector の方が便利なのですが、異端ですか? : デフォルトの名無しさん [sage] 2019/03/20(水) 04:26:37.96:LuG6mmni 別に : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/20(水) 04:53:08.98:K9L8gFp5 既に回答がついているとおり、 rvalue 参照はほとんどムーブのための機能。 ローカル変数的に使う理由はあんまりない。 テンプレート関数の仮引数や auto 変数として rvalue 参照 (の記法) が現れたときは 特殊な推論規則 (ユニバーサル参照) が適用されるというのは気を付ける必要がある。 : デフォルトの名無しさん [sage] 2019/03/20(水) 07:25:39.73:iA5XXTHz ローカル変数もそうだけどintみたいなオブジェクト性が低いものに使っても意味ないわな。 rustの古いチュートリアルのmoveの例がなぜかintでクソだったけれど最近は文字列型になっとった。 : デフォルトの名無しさん [sage] 2019/03/20(水) 08:44:38.76:LSg3zFHe オブジェクト性 : デフォルトの名無しさん [sage] 2019/03/20(水) 10:22:31.87:fk3FMvWg 考えうるメソッドが少ない=オブジェクト性が低い、とかじゃねえの int型の変数.length() とかは流石に意味不明に見える : デフォルトの名無しさん [sage] 2019/03/20(水) 10:40:09.36:LuG6mmni 言いたいことは分かるが聞き慣れない言葉を使っているということでは : デフォルトの名無しさん [sage] 2019/03/20(水) 11:01:00.31:9pRMZ9XY リテラルが右辺値ってのがよくわからんのだが 上の例のように右辺値参照でうけるとリテラルなのにそのアドレスがとれてしまう かつ書き換え可能 なので右辺値参照にリテラルいれるときは、一旦名前のない領域にコピーされていると理解している でもこれって通常の値の代入のときも名前のない領域にコピーしてからさらにコピーというセマンティクスなの? : デフォルトの名無しさん [sage] 2019/03/20(水) 11:29:19.49:sS5iHBwg 右辺値参照変数それ自体は左辺値だからね : デフォルトの名無しさん [sage] 2019/03/20(水) 15:37:27.50:oYbI5+uJ 右辺値を参照で束縛すると、その右辺値の寿命は束縛してる参照と同じところまで引き伸ばされる この点は左辺値参照も右辺値参照も一緒 : デフォルトの名無しさん [sage] 2019/03/20(水) 16:05:23.24:9pRMZ9XY それ に関係ある? : デフォルトの名無しさん [sage] 2019/03/20(水) 16:16:24.82:oYbI5+uJ どうして関係ないと思うの? : デフォルトの名無しさん [sage] 2019/03/20(水) 20:55:29.39:9pRMZ9XY 一見リテラルのアドレスが取れて書き換えられる、ように見えることに疑問を持ってる 言い方変えると 右辺値参照に代入するとき リテラルが右辺値でなくて、そのコピーが右辺値なのでは? そこに寿命がどう関係あるのかわからない : デフォルトの名無しさん [sage] 2019/03/20(水) 21:07:28.64:LskeNtBJ アセンブラレベルで言うなら、即値なのかdataセクションにあるのかの違いじゃないの : デフォルトの名無しさん [sage] 2019/03/20(水) 21:31:53.81:iA5XXTHz >オブジェクト性 コピーでも参照でも対してコストがかからんものというかそういうニュアンスなんだが 思った以上に伝わらんもんだな。 わかりやすいようにintと文字列を例に出してもこんなもんかもね。 : デフォルトの名無しさん [sage] 2019/03/20(水) 22:56:30.82:B8C8ZXR4 アドレスが取れたら右辺値ではないみたいな論調だな : デフォルトの名無しさん [sage] 2019/03/20(水) 23:15:02.74:oYbI5+uJ C++のリテラルというのは右辺値を生成する式なんだよ 「42」は値42を持つint型の右辺値を生成することを指示するリテラル 「"hello"」は中身が'h','e','l','l','o','\0'なchar[6]への参照を生成することを指示するリテラル プログラムが実行時に扱うのは「リテラル」じゃなくてリテラルが生成した右辺値だ その生成された右辺値は当然メモリ上にあっていいし書き換えられてもいい (その必要がないならコンパイラがそうじゃないように最適化してももちろんいい) 「コピー」だと思うから違和感があるんじゃない? リテラルなるものの実体が空の上やPCの隙間に隠れてるわけじゃないし、プログラムはそんなものは取り扱えない : デフォルトの名無しさん [sage] 2019/03/21(木) 00:07:41.99:2SUbybof リテラルは右辺値でない、が正しい? それなら半分なっとくだけど ググるとリテラルは右辺値という説明がでてくる : デフォルトの名無しさん [sage] 2019/03/21(木) 00:13:13.37:2SUbybof まだ半分なっとくできないのは、 上にも書いたけどリテラルで普通に代入するときも、 一旦右辺値を作ってから左辺にコピーする、というのかc++のセマンティクス? なんか無駄すぎて釈然としない : デフォルトの名無しさん [sage] 2019/03/21(木) 00:14:13.96:FPuzf0hs 牛からは牛乳が出るけど牛は牛乳じゃないだろ? そういうこと : デフォルトの名無しさん [sage] 2019/03/21(木) 00:20:16.95:FPuzf0hs リテラルってのは文法要素なの 演算子とかキーワードとかコメントとかそういうものの仲間なの 実行時にはそんなものは出てこない プログラムが扱えるのは「値」だけで、左辺値とか右辺値というのはその分類 int型の0x2Aという値を生成しろという命令をコンパイラに作ってもらうためにプログラマが書くものが「42」というリテラル さっきからずっとそこを混同してる : デフォルトの名無しさん [] 2019/03/21(木) 01:01:57.88:7qm1Whlz '\0' と L'\0' で違うしな : デフォルトの名無しさん [sage] 2019/03/21(木) 02:01:40.67:/XDYuiDC ,514 数値リテラルは右辺値。 ttp://https://timsong-cpp.github.io/cppwp/n4659/expr.prim.literal#1 右辺値で参照を初期化する際は一時オブジェクト(=名前のない領域)が生成され、 それが参照されるというルールになってる。 ttp://https://timsong-cpp.github.io/cppwp/n4659/dcl.init.ref#5.2 参照を初期化する際のルールは代入のセマンティクスとは関係ない。 int i; i = 42 の代入で一時オブジェクトは不要。 代入がユーザー定義された T::operator=(T const&) に解決されるなら、 引数の参照を初期化する際に一時オブジェクトが作られることはある。 : デフォルトの名無しさん [] 2019/03/21(木) 02:39:44.49:XdhJMiFj 即値になる場合があるから右辺値なのかね。 : デフォルトの名無しさん [sage] 2019/03/21(木) 08:57:30.01:YzD9JPpd そりゃ、代入の左辺にリテラルを置ける言語なんてまずないから。 : デフォルトの名無しさん [sage] 2019/03/21(木) 09:47:23.84:MFgTD1Yv コピーのコストを抑えつつ、二重に参照されないように元のオブジェクトを指す変数を無効にしたいってのが moveに期待される機能。 即値だったり呼び出しの引数にコンストラクタごと放り込まれた場合には 上記のような二重に参照されるようなシチュエーションにはならんのでmove受けする関数が定義されてれば その関数を呼びましょうってのがc++のmoveの取り扱い。 しかしこんなにもシンタックスが複雑で機能性も新しくてオーバーロードでさらに複雑になってるってのは やっぱよくないと思うわ。 テンプレートの都合でオーバーロードが必要なのもわかるが明らかにやりすぎ。 : デフォルトの名無しさん [sage] 2019/03/21(木) 23:38:07.17:/AmzWt7k 会社にもいるわ、そんなどうでもいいことをウンチクばっか垂れて一向に仕事が終わらないやつw 言語を設計するなら、必要かもしれんが大抵は不要 : デフォルトの名無しさん [sage] 2019/03/21(木) 23:48:46.46:4AnWSc+d 「だからC++スゲー俺スゲー」ってやつじゃないの?それ がそうだとは思えんが : デフォルトの名無しさん [sage] 2019/03/21(木) 23:52:29.07:MDPJmZ4F 最近は彼らもRustにマウント奪われて必死なんだよ : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/21(木) 23:53:05.57:uQDXDHVg 理屈がわかってないのに仕事が終わってるのもそれはそれで不気味じゃない? : デフォルトの名無しさん [sage] 2019/03/21(木) 23:56:55.88:MDPJmZ4F moveなんか理解してなくてもだいたいのC++の現場では仕事に支障ないよ : デフォルトの名無しさん [sage] 2019/03/21(木) 23:58:36.31:tdnDQnUt マジで?! それヤバくない?! : デフォルトの名無しさん [sage] 2019/03/21(木) 23:59:59.31:MDPJmZ4F 君はC++の30年の歴史を否定するのかい? : デフォルトの名無しさん [sage] 2019/03/22(金) 00:10:18.90:cT8zbTae templateも使うことは、OKだがtemplateを用いたクラスを作ることは禁止されている場合がおおい そもそも、設計段階で型が決定しないなんてことは、汎用ライブラリを書く以外はないだろ : デフォルトの名無しさん [sage] 2019/03/22(金) 00:22:46.08:aMVb4R4+ いやいや 決まっていてもそれが複数だった場合使うだろ あと普通にライブラリは作るものじゃ : デフォルトの名無しさん [sage] 2019/03/22(金) 00:54:33.33:wBHxe+dJ ていうか、普通に仕事をしていたら「ああここは処理共通だからまとめて・・ ・・あとここをこうしとけば拡張にも対応できるし・・まあ客が無茶振りして きたときの予防にそれなりに汎用性もたせとくか」とかやっているうちに いつのまにかライブラリができあがってる、これがプロの仕事だ : デフォルトの名無しさん [sage] 2019/03/22(金) 00:55:35.30:wNvbYX88 委託業務メインなの? : デフォルトの名無しさん [] 2019/03/22(金) 01:10:14.13:LxKdyD8r 定数って参照透過性があるよね。 C++はconstexprがあるのだから、関数型プログラミングを超える、定数型プログラミングという新パラダイムを提唱したいと思います。 : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/22(金) 01:14:02.50:6voZlles コンパイル時レイトレーシングとかやってる人もいるけど狂気の産物って感じがして C++ ぽくて良い。 : デフォルトの名無しさん [] 2019/03/22(金) 02:28:04.74:jw/5aFNH しーぷら一筋30年〜、速いの、上手いの、やっすいの〜 : デフォルトの名無しさん [sage] 2019/03/22(金) 02:37:28.24:M4ChOHMa >コンパイル時レイトレーシング 一応訊くけど、ああいうのはレイ当てる3Dオブジェクトのデータは 全てC++のソースに書かないといけないことは分かってる?(モデリングデータをファイルから読んでコンパイル時にレイトレするのは当然不可能) あの試み自体は面白いと思うけどね・・ 実用性や(ソフトウェアの)ユーザーの利益にならないことをもてはやさないで欲しいもんだが : デフォルトの名無しさん [sage] 2019/03/22(金) 06:24:27.94:j45II+ff プリレンダのゲームは大量にあるしレイトレーシングしとくのもその延長線上じゃない : デフォルトの名無しさん [sage] 2019/03/22(金) 08:03:01.00:VPBgCitj コンパイル時ファイル入出力がサポートされればいいわけだ それにレイトレーシングはまあ確かに冗談も含まれてるだろうけどそれだけ複雑で重い処理でも可能だという技術デモは価値があるだろう 画像にフィルタを適用するとかパターンが決まっているエフェクトを生成するだとか色々できて可能性はあると思うよ : デフォルトの名無しさん [sage] 2019/03/22(金) 08:17:25.29:sSVPAm0I 汎用的につかってもらうことを目的としているライブラリを除けば コーディング時に型が決まっていないことなんてありえない もしあるならそれは設計してないってことじゃん templateなんて汎用的につかってもらうことを目的としているライブラリを書く場合にしか使わないだろ 後で、intからdoubleになるかもしれないから、なんて言ってるバカいるけど きっちり設計しろよ : デフォルトの名無しさん [sage] 2019/03/22(金) 08:28:45.64:wNvbYX88 : デフォルトの名無しさん [sage] 2019/03/22(金) 09:08:34.94:OAKB0NCU コンパイル時にやることじゃない 新たなc++の巨大トラップだよ ますますc++嫌いになった : デフォルトの名無しさん [sage] 2019/03/22(金) 09:11:15.22:VPBgCitj 俺は好きになったよ : デフォルトの名無しさん [sage] 2019/03/22(金) 09:31:33.91:OAKB0NCU いいね、趣味で気楽に使ってる人は : デフォルトの名無しさん [sage] 2019/03/22(金) 09:52:12.19:VPBgCitj ええやろ 楽しいわ : デフォルトの名無しさん [sage] 2019/03/22(金) 10:20:45.52:RSNtol3b メタプログラミングってコンパイル時に評価してゼロオーバーヘッドとかすごいとは思うけど 学習コストや可読性と釣り合ってるか? : デフォルトの名無しさん [sage] 2019/03/22(金) 10:32:59.03:OAKB0NCU 仕事で4月になったらまた新しいメンバーシップ増えるけど なまじ趣味でc++使ってたやつが一番困る 新しい機能使いたいだけでトータルの生産性考えないんだよね : デフォルトの名無しさん [sage] 2019/03/22(金) 10:41:23.85:wNvbYX88 そんな一部の現場の実情を忖度してたら競争に負けてしまうのではないか? : デフォルトの名無しさん [sage] 2019/03/22(金) 10:45:43.23:VPBgCitj 毎回同じこといってる奴いるよな このスレには10人くらいしか居ないってネタは挙がってるし : デフォルトの名無しさん [sage] 2019/03/22(金) 11:07:13.15:v3KGlGVP 釣り合う点がどこなのかは人それぞれだから各自が判断してバランスいいところで使えばいい。 チーム開発ならプロジェクトごとに指針を決めれば良いかと。 : デフォルトの名無しさん [sage] 2019/03/22(金) 11:11:55.43:nPC1T1eJ やってることの性質にもよる サーバーサイドなんかで潤沢なリソースを使って長時間動くものだとほとんど意味はないよ その場合.NETやJavaのような実行時コード生成の方が遥かに柔軟性が高く、オーバーヘッドも実質的にはほとんどない : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/22(金) 12:34:15.37:6voZlles それ自体はただの余興だけど、 コンパイラのバグを顕在化させる成果を出したりもしてるよ。 処理系の開発チームにとってもまずは問題を発見できなきゃ直せないからさ、 色んな形で使ってみる人だってそれはそれで必要なんだよ。 処理系の質が良くなるのは間接的にユーザの利益にだってなる。 : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/22(金) 12:35:46.10:6voZlles きっちり設計できている現場ばかりだったら本当によかったのにね。 : デフォルトの名無しさん [sage] 2019/03/22(金) 14:12:54.65:M4ChOHMa まぁその理屈はわからんでもないしメタプログラミングやってるとあの人のブログは勉強になるけどね ただああいうのはブラックジョークの類であることを忘れるとみたいな勘違いした奴が出てくる >画像にフィルタを適用するとかパターンが決まっているエフェクトを生成するだとか それ、画像もコンパイル時に確定してるデータじゃないとあかんのやで? (しかもconstexprなcharの配列みたいな、C++のコードに直さないといけない) 重ねて言うけど、面白い試みだけど実用的ではないんだよ、ああいうのをC++的だとかカッコいいとかもてはやすのはC++の衰退を招くだけ 趣味グラマは自分が趣味グラマであって時に実用性からかけ離れてるということを自覚すべき : デフォルトの名無しさん [sage] 2019/03/22(金) 14:23:16.46:M4ChOHMa あ、でも >コンパイル時ファイル入出力 これはやり過ぎな気もするけど個人的にはあっても良いとは思うw ただ、画像のフィルタリングをコンパイル時にやるのとツール作って実行時にやるのとで 前者が便利な場面ってあるのかね?(しかも前者は非常に開発コストかかる : デフォルトの名無しさん [sage] 2019/03/22(金) 14:28:03.34:VPBgCitj コンパイル時に確定しているデータがあるかもしれないし無いかもしれない fstreamがコンパイル時に動くようになればいいだけ そうなれば準備が面倒なプリプロセスも必要ない 研究に対して実用性がうんたらとかわけ分からないことを言うのはよくないなあ 様々なアイデアから自分の都合のいいところをつまんで実用化するのが末端の仕事だろうに 俺が使い道が思いつかないことに熱心になってると界隈が衰退するとかさすがに草生える : デフォルトの名無しさん [sage] 2019/03/22(金) 14:29:27.80:OAKB0NCU 静的なものはなんでもコンパイル時に解決するって思想が典型的なハンマー釘病なんだよ コンパイル時だけが解じゃない そのうち仕事で特に理由なくむやみに重いconstexprぶちこむやつがでてくるだろう それでビルド時間5分10分長くなったりするわけだ ほんとc++はクソ : デフォルトの名無しさん [sage] 2019/03/22(金) 14:32:15.97:VPBgCitj 問題があるならお前が指摘すればいいだけだし リリースビルドのときだけコンパイル時計算になるようにすればいいだけ 工夫がたらんなあ : デフォルトの名無しさん [sage] 2019/03/22(金) 14:49:00.32:X0mnKdTP constexpr関数みたいにコンパイル時にできる、実行時にしか出来ない、を「自動で振り分けて問題なく動く仕組み」 の範囲に全て収まるならそうだろうな 後半煽ってきたのでキツめに言わせて頂くが、コンパイル時レイトレはソース公開されてたろ? あれを実用したゲーム開発の例を一つでも挙げてみろ 有意義な研究ならとっくに実用されてんだよボケ あるいはボレロ氏の試みに同調して何もかも(ファイル入出力すら)コンパイル時に出来る言語にしよう、なんて動きが委員会に起きてるのか? お前多分まともにメタプログラミング出来てるレベルじゃないのに調子乗ってるだろ : デフォルトの名無しさん [sage] 2019/03/22(金) 15:11:09.28:VPBgCitj これだけ複雑な処理も出来るんですよっていうだけの話だからレイトレーシングである必要はない それができるならこういうこともできるんじゃないか?ってなるのが普通 あとゲームのソースは公開されないから知るかとしか言いようがない C++20でコンパイル時動的メモリが追加される予定だし、実行時でもコンパイル時でもタイミングが違うだけだからいつでも何でもできていいだろっていう流れは既にできている 標準化委員会がボレロを認知しているかは知らん : デフォルトの名無しさん [sage] 2019/03/22(金) 15:55:54.71:2qpWO6k3 コンパイラで高度なことが色々できるし、原理も実現も公開されてる、 興味を持って調べれば(ある程度なら)理解だってできるかもしれない。 というのはC++の素晴らしい部分だと思うのよ。 で、調べて知ったことを使って試したい、他の人に紹介したいってのは これまた自然な気持ちだろう。自分もそういう面があるし。 実際に複数人で協力して作る実用プロジェクトで機能を使うかどうかは、 「コンパイル時間」だの「高度化・汎用化で読みにくくなる」だの、 トレードオフの問題になるけど。 分からないのは、「俺はこれ知ってる、お前は知らないだろ」と 他人より優位に立つ材料としてしか知識を使ってないような 投稿が見受けられることなんだよね。 ことにネット掲示板なんて、見ず知らずの他人同士なんだから、 相手をバカにしたって仕方ない、何の益もないだろうに。 : デフォルトの名無しさん [sage] 2019/03/22(金) 16:19:37.76:M4ChOHMa >それができるならこういうこともできるんじゃないか?ってなるのが普通 最初の方の主張からずいぶんと縮小したなw >あとゲームのソースは公開されないから知るかとしか言いようがない ググれ ソースの公開なんかされてなくとも技術の動向くらいあちこちで紹介されてる >C++20 いつでも何でもできていいだろっていう流れは既にできている 今調べたら確かにそうみたいだな、俺の認識不足だったし出来ることが増えること自体は悪くないと思う(前にもそう言ったが ただ、 >コンパイル時にやるのとツール作って実行時にやるのとで前者が便利な場面ってあるのかね? この疑問に答えて欲しいもんだけどね >俺が使い道が思いつかないことに熱心になってると界隈が衰退するとかさすがに草生える ならお前は使い道を知ってるんだろ?って話 : デフォルトの名無しさん [sage] 2019/03/22(金) 16:33:55.31:M4ChOHMa 正直、ファイル(C++ではない)に書かれてる内容に従ってコンパイル時条件分岐とか手軽に出来たら 結構実用性はあると思うよ ただその一方で、ここでプロとアマチュアのC++に対する意見がひどく乖離してる(このスレ見てたら気づいてないとおかしいが)ことに 全く問題意識が無いのであれば、それは結局自分が偉そうにしたいだけってことだと思うけどね : デフォルトの名無しさん [sage] 2019/03/22(金) 16:39:09.47:M4ChOHMa constexprの拡張とか、そんなに開発現場(アマチュアでもソフト開発者等)から求められてなさそうなことにばかり 最近のC++は注力しすぎじゃないの、ってだけの話なんだけどね ここでそれを言うと毎回荒れるんだよなぁ : デフォルトの名無しさん [sage] 2019/03/22(金) 16:45:13.61:7XQoWDDf C++11すら使えないもんな : デフォルトの名無しさん [sage] 2019/03/22(金) 16:46:23.14:VPBgCitj 別に注力しすぎてはいない更新内容は多岐にわたる constexprは派手だから注目されやすいだけ ttp://https://cpprefjp.github.io/lang/cpp11.html ttp://https://cpprefjp.github.io/lang/cpp14.html ttp://https://cpprefjp.github.io/lang/cpp17.html ttp://https://cpprefjp.github.io/lang/cpp20.html : デフォルトの名無しさん [] 2019/03/22(金) 16:48:03.99:d9SNUM0T 愛知県人注目。遠州地区の技術者も注目。 [急募] 豊川ハローワーク管内の求人で、SEの席に空きがあります。 四月スタートの仕事なので、急いで応募して下さい。報酬は、 月に20万円から60万円。 英語力は必須ではありませんが、『実はTOEICのスコア以上に 英語ができる』と面接では答えて下さい。(英語は入社してから 頑張って下さい。) ネットワーク関係が得意だと言って下さい。JP1の経験があれば、 なおよし。ECUの経験があれば、さらによし。キャティアのマクロが 書ける人、大歓迎。(これらは、必須ではありません。) : デフォルトの名無しさん [sage] 2019/03/22(金) 16:48:35.97:OAKB0NCU それがお前の案? 手動じゃんそれ くそださいとしか 仕事では数十人規模でやってるわけで、そんな人力チェックしたくないわけよ プルリクぐらいはやってるが全て見きれるわけじゃない まずはビルド時間の推移とか、内訳を監視するタスクを回すことを考えるだろうが そういう非生産的な仕事が増えることがクソなんだよ : デフォルトの名無しさん [sage] 2019/03/22(金) 16:51:03.18:7XQoWDDf : デフォルトの名無しさん [sage] 2019/03/22(金) 16:51:56.89:y6Rn9cx8 C++の新機能なんて大半の開発現場にはいらんだろ 前いたところは初心者向けの教科書を読めばだいたいわかる基本的な構文しか使ってなかった constexprもなければテンプレートもラムダ式もなかった コード書けん奴がコードレビューするからそんなもん使った日にはわかりやすく書けとか怒られた : デフォルトの名無しさん [sage] 2019/03/22(金) 16:54:51.52:wNvbYX88 マジで?! それヤバくない?! : デフォルトの名無しさん [sage] 2019/03/22(金) 16:56:04.17:VPBgCitj できあがった物の性能を少しでも上げようっていう話なんだがそれに価値を見いだせないならどうでもいいよ つまんねえから口を開かないでくれ : デフォルトの名無しさん [sage] 2019/03/22(金) 17:00:41.61:M4ChOHMa まぁconstexprのコンパイル時コストを気にするだけなら多分ifdefでdefine CONSTEXPRとかすればいいだろうけど メタプログラミングはやっぱコンパイル時間長くなる 個人で開発してても無視出来ないわ・・ 性能上げて比較結果を出してから言うべき : デフォルトの名無しさん [sage] 2019/03/22(金) 17:03:59.06:M4ChOHMa ていうかの言ったことを実証するかのような流れだなww : デフォルトの名無しさん [sage] 2019/03/22(金) 17:06:35.17:nPC1T1eJ 一般に、無駄な拘りに時間かけるのを避けてその分ボトルネック潰しに時間をかけたほうがソフトウェアのパフォーマンスは良くなるよ : デフォルトの名無しさん [sage] 2019/03/22(金) 17:54:21.92:pFUycIOf 求められているだろ? : デフォルトの名無しさん [] 2019/03/22(金) 18:34:40.09:LxKdyD8r 関数型同様、定数型プログラミングにもアンチがわいてきましたか。 アンチがわいたってことは、定数型プログラミングが世の中に受け入れられたってことでいいですね? : デフォルトの名無しさん [sage] 2019/03/22(金) 19:08:02.11:2qpWO6k3 その機能自体への好悪もあるか知れないけど、 「導入されたからには直ちに覚えて使わないのは罪悪」あるいは 「使わない奴は学習能力の劣る無能、使わないのでなく使えないんだろ」 みたいな、新機能の押し付けが嫌がられてるって部分もあるんでないかな。 : デフォルトの名無しさん [sage] 2019/03/22(金) 19:19:05.75:wNvbYX88 実行時おじさん : デフォルトの名無しさん [sage] 2019/03/22(金) 19:21:05.55:OAKB0NCU 関数型持ち出すやつが、c++のconstexprの持ち上げたらいかんだろ 関数型はそんなキーワードなしに部分評価するだけで実現できんだから : デフォルトの名無しさん [sage] 2019/03/22(金) 19:23:25.37:YgnW0VV3 Googleの結論 Think twice before using template metaprogramming or other complicated template techniques; think about whether the average member of your team will be able to understand your code well enough to maintain it after you switch to another project, or whether a non-C++ programmer or someone casually browsing the code base will be able to understand the error messages or trace the flow of a function they want to call. ttp://https://google.github.io/styleguide/cppguide.html#Template_metaprogramming : デフォルトの名無しさん [] 2019/03/22(金) 19:26:07.13:LxKdyD8r 【定数型プログラミングの掟】 > 「ブッ殺す」と心の中で思ったならッ!その時スデに行動は終わっているんだッ! : デフォルトの名無しさん [sage] 2019/03/22(金) 19:31:22.14:M4ChOHMa でも終わったときめちゃくちゃ疲労してるんやで : デフォルトの名無しさん [sage] 2019/03/22(金) 20:21:58.70:nPC1T1eJ それ逆効果じゃね Google社員でも使いこなせない機能を使いこなす俺スゲェwww : ◆QZaw55cn4c [sage] 2019/03/22(金) 21:54:10.43:nrO+MVHg >コンパイル時レイトレーシング …… : デフォルトの名無しさん [sage] 2019/03/22(金) 21:57:31.87:FYyZQ6ej コンパイル時C++コンパイルをやったら尊敬する : デフォルトの名無しさん [sage] 2019/03/22(金) 22:28:07.22:1RSJEChR 正規表現のコンパイルならありかもしれないw : デフォルトの名無しさん [sage] 2019/03/22(金) 22:42:15.38:78R951f8 自分の知らない概念を勉強するって意味ならlispのマクロでも覚えたほうがはるかに有意義なんだが そうしないだよね。 なぜならそれじゃ老害にマウントできないから。 まあそういうクソみたいな思想のやつが年取って老害化するんだけど。 : デフォルトの名無しさん [sage] 2019/03/22(金) 23:22:27.03:C43yQc+Q コンパイル時に決定していることしかできませんよ コンパイル時に3の階乗を計算して、ドヤってるやついるけど、それなら6ってタイプしとけよw : デフォルトの名無しさん [] 2019/03/22(金) 23:29:13.79:LxKdyD8r でもそれがLALR(1)パーサーを生成するなら? : デフォルトの名無しさん [sage] 2019/03/22(金) 23:36:46.32:tosUzxZE コンパイルに時間かかるから、その間暇つぶしに裏でレイトレーシングして遊んでんのかと思った : デフォルトの名無しさん [] 2019/03/23(土) 00:40:56.99:A6OyMWzd デイトレーシングってストーカーのことだっけ。 : デフォルトの名無しさん [sage] 2019/03/23(土) 06:55:12.12:jegHMgvE 「同じプロジェクトで働く他の仲間はアホかもしれない、 あなたの仕事を引き継ぐ奴はボンクラかもしれない、 だから難しい機能を使うのは自重しましょう」って感じか? 一見「あなただけは特別な存在です」と言ってるように見えて、 実は現場の全社員を見下してるような文面だなぁ。 「技巧に走るより素直な書き方をしろ」って趣旨は分かるんだけど。 参加者の順列で生じるパターンの状態を記録する配列の要素数、 しかも参加者数は変更の可能性あり(コンパイル時には確定する)、 という場合なら contexpr の階乗関数を仕込む意味はありそうね。 : デフォルトの名無しさん [sage] 2019/03/23(土) 07:22:13.12:WDi4jE89 長年プログラムの保守やってるの見るとその通りだが : デフォルトの名無しさん [sage] 2019/03/23(土) 08:07:02.46:T5eFVdJU constexpr指定するだけのことが技巧的なのか知らなかった I/Oや動的メモリと関係なさそうなところに脳死で適当に付けておくだけでいいのに : デフォルトの名無しさん [] 2019/03/23(土) 08:35:25.57:RdkKrV9k 霞ヶ関文学は禁止ってこった。 : デフォルトの名無しさん [sage] 2019/03/23(土) 12:20:32.92:0OEv8pnV 基本的に新機能は分かりやすく書きやすくするためのものなんだけどな : デフォルトの名無しさん [sage] 2019/03/23(土) 12:50:41.97:p3DdVUb8 数学への回帰と先祖返りじゃないの 分かり易くなるんじゃない、難しくなるんだよ : デフォルトの名無しさん [sage] 2019/03/23(土) 13:37:38.67:v/SrloXk template<typename Item> Item Fool::InsertItem(const Item& item) { //なにがしかの処理 item.c_str()... } こんなコード見かけると吐き気がするわ c_str()を持つ型しか使えないじゃん なんのためにtemplate使ってんだよw : デフォルトの名無しさん [sage] 2019/03/23(土) 13:47:58.81:uJTAZAlu c_strを持つ型に限定したいから問題無いけど。 : デフォルトの名無しさん [sage] 2019/03/23(土) 13:49:44.59:T5eFVdJU 何か変か? c_strを持っているクラスのみを想定しているんじゃないの 本当はSFINAEで消すべきかも知れないけど : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/23(土) 13:50:21.13:ByL/s3eU だからコンセプトの導入が悲願とされてるんだよ。 : デフォルトの名無しさん [sage] 2019/03/23(土) 14:34:53.50:JQCK5flX 程度のはsfinaeでいいんだけどね : デフォルトの名無しさん [sage] 2019/03/23(土) 14:56:23.90:EB4wgvrK basic_stringの特殊化に限定するなら文字型を受け取るだけでいいと思うんだけど : デフォルトの名無しさん [sage] 2019/03/23(土) 15:01:12.26:fJspHuQc constexprでコンパイル時に特定のメソッドがあるか調べられないの? : デフォルトの名無しさん [sage] 2019/03/23(土) 15:03:42.82:EB4wgvrK それは型の情報だから、すでに言われてるようにメタプログラミングでsfinae使って調べるしかない : デフォルトの名無しさん [sage] 2019/03/23(土) 15:55:31.24:RdkKrV9k 吐き気がするだけで済んでいるのなら御の字。 : デフォルトの名無しさん [sage] 2019/03/23(土) 16:15:35.83:T5eFVdJU アレルギーが重症化すると辺境で難癖付けて騒ぎ出したりテンプレート指定すると何故か生産性が落ち出したりするからな : デフォルトの名無しさん [sage] 2019/03/23(土) 17:08:18.78:qcSb+DlG pythonみたいにエラーメッセージ表示してくれるだけで大分マシになると思うんだけどな : デフォルトの名無しさん [sage] 2019/03/23(土) 18:52:42.53:4cH0E/is そうなんだよね 1500行のエラーメッセージの代わりに「itemのメンバ関数c_str()が見つかりませんでした」ってコンパイラが言ってくれてたら ここまでテンプレートは嫌われなかった : デフォルトの名無しさん [sage] 2019/03/23(土) 18:54:43.76:enzaJQTj だからgoのコード生成系のアプローチのがマシってことなんだが馬鹿は脳内でしかビルドしないから通じない訳だ。 : デフォルトの名無しさん [] 2019/03/23(土) 19:11:19.55:A6OyMWzd これからは定数型プログラミングの時代。 : デフォルトの名無しさん [sage] 2019/03/23(土) 19:15:22.30:EB4wgvrK それはC++20でコンセプト入ったら実現されるはず(ライブラリ側で対応する必要あるけど : デフォルトの名無しさん [] 2019/03/23(土) 19:18:48.99:iMO+WCpL 過去の話をしてるのに未来の話で返されてもな : デフォルトの名無しさん [] 2019/03/23(土) 19:22:34.86:A6OyMWzd エラーメッセージがわかりにくいなら、VC++を使うべき。 : デフォルトの名無しさん [sage] 2019/03/23(土) 19:26:46.49:T5eFVdJU 過去のことなんかどうでもいい 未来だけ見て生きていこう : デフォルトの名無しさん [sage] 2019/03/23(土) 19:30:40.79:EB4wgvrK コンセプトは最近出てきた概念じゃないぞ C++11が0xとか呼ばれてた頃から言われてた話 : デフォルトの名無しさん [sage] 2019/03/23(土) 21:03:26.04:16DhXZwe vcはバグだらけで使い物にならない : デフォルトの名無しさん [sage] 2019/03/23(土) 21:40:53.85:eUSVaq66 嫌なら実体化しなければ良いんじゃ… 仮にFooのインスタンスを生成したとしても、Foo::InsertItem()を呼ばなければFoo::InsertItem()は実体化されないはず… : デフォルトの名無しさん [sage] 2019/03/23(土) 22:45:17.73:4cH0E/is 今思えばC++0xのコンセプト案はいろいろ酷かったな あのまま入らなくてよかった : デフォルトの名無しさん [sage] 2019/03/23(土) 23:17:20.42:EB4wgvrK コンセプトマップだとかコンセプトを満たすことを自己申告しなきゃいけないだとか 傍目に見て正直意味わからんかった : デフォルトの名無しさん [sage] 2019/03/23(土) 23:51:54.14:11jhwwP/ Axiomはとてもいいと思ったが、消えたのだな・・・ : デフォルトの名無しさん [sage] 2019/03/23(土) 23:53:58.85:enzaJQTj フーリエ変換の係数みたいなものは実行時には定数だけれど、事前に計算式で計算しておきたくはなる。 でもまあ普通に考えればビルド構成の問題だわな。 なぜコンパイラに無理やり突っ込むかと言えばまともにビルド構成を考える能力がないからっていうね。 : デフォルトの名無しさん [sage] 2019/03/23(土) 23:54:27.98:4cH0E/is axiomさんは契約アトリビュートとして生まれ変わったのだ : デフォルトの名無しさん [] 2019/03/24(日) 00:40:12.28:7x4/H6l4 C++の複雑さはオナニー的なところがある : デフォルトの名無しさん [sage] 2019/03/24(日) 01:38:06.52:b8r3VMdD コンパイル時に決定してることしかできないなら、コード書く必要あるか? 1+2しか計算できないんだろ、2+3の結果が欲しかったら、コンパイルし直しw : デフォルトの名無しさん [sage] 2019/03/24(日) 02:05:19.27:xAoD2jBj 狭義のアルゴリズム(有限ステップで終わる)を記述する分にはそれで十分 無限ループを含む手続きを記述したかったら無限再帰すればええ と考えればメモリが無限にあればコンパイルが終わるまでに任意の処理ができる : デフォルトの名無しさん [] 2019/03/24(日) 02:07:46.29:4oYv+rwZ 定数型プログラミングでコンパイラを創ろう。 : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/24(日) 02:16:59.70:9ZLLLplX コンパイル時に畳み込んで定数にした方がよいかどうかはコンパイラの最適化で頑張って欲しい話で、 それで足りない、さらなるチューニングが必要なときの記法が統一的だったらうれしいねっていう程度の話じゃないかな。 普段からそんなにコンパイル時計算を意図したりはしないよ。 : デフォルトの名無しさん [] 2019/03/24(日) 02:25:38.27:Wmd2CxZH P言語でC++中間コードを生成するスクリプトを書けばいいじゃない。 swigみたいな。 カスタムコンパイルやカスタムビルドはそのためにある。 : デフォルトの名無しさん [] 2019/03/24(日) 02:33:38.88:4oYv+rwZ ヤック、レック相当をメタプログラミングで実現することができるのではないか。 スピリチュアルな方向性ではなく。 : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/24(日) 02:50:04.22:9ZLLLplX PEG 相当のことを実現しているライブラリとしては Qi があるけど、 Yacc みたいに LALR をやってくれるのは知らないなぁ。 出来るのかな? : デフォルトの名無しさん [sage] 2019/03/24(日) 03:13:50.09:PmamUspu 個人的には、メタプログラミングで定数値のパラメータ作るのに構造体でメタプログラミングする必要が無くなったのはconstexprにかわしゃ : デフォルトの名無しさん [sage] 2019/03/24(日) 03:16:29.85:PmamUspu ごめん間違って送信した、 constexprに感謝してるw あとビット演算とか整数値の計算する関数もconstexprつけときゃテンプレートパラメータに渡せるし 高速化は二の次だと個人的には思ってる : デフォルトの名無しさん [] 2019/03/24(日) 03:23:59.40:4oYv+rwZ STLあっての私たち。 : デフォルトの名無しさん [sage] 2019/03/24(日) 03:30:27.34:b8r3VMdD STLって遅くて使えなくない : デフォルトの名無しさん [] 2019/03/24(日) 03:32:16.98:4oYv+rwZ 確かに遅いね。 : デフォルトの名無しさん [] 2019/03/24(日) 03:37:58.18:4oYv+rwZ テンプレートメタプログラミングは永久機関。 : デフォルトの名無しさん [sage] 2019/03/24(日) 05:16:54.07:xAoD2jBj STLにCStringを入れて欲しい : デフォルトの名無しさん [] 2019/03/24(日) 05:41:26.93:NAaHZN6A 嫌です : デフォルトの名無しさん [sage] 2019/03/24(日) 05:51:09.56:0ur1Ot0v 男なら全部char[] : デフォルトの名無しさん [sage] 2019/03/24(日) 06:09:08.25:xAoD2jBj sprintf_s()と_cuntof(array)がどこの環境でも標準で使えるならchar[]も悪くない選択肢ではある : デフォルトの名無しさん [sage] 2019/03/24(日) 08:26:16.35:3s1WkY0F boost spiritはコンパイルが糞遅いし、何か間違えると何処が原因かさっぱりわからんし、 実用には程遠かったな。テンプレートでここまでできるという一発芸的な。 : デフォルトの名無しさん [sage] 2019/03/24(日) 09:20:48.36:0R743LPx テンプレートメタプログラミングって元々はアンチパターンとして提出した例だったんだけどね。 本当に愚者というのは度し難いというか。。 : デフォルトの名無しさん [sage] 2019/03/24(日) 09:21:19.70:EkBj7yKG CStringをこの世から完全に消し去って欲しい せめてbasic_stringと互換性のあるインターフェースを持たせてからフェードアウトして欲しかった : デフォルトの名無しさん [] 2019/03/24(日) 09:23:21.86:Wmd2CxZH CStringT::Format()系関数は、sprintf()系関数を2回呼ぶので冗長。 利用バッファサイズを事前に指定できないことが原因。 : デフォルトの名無しさん [sage] 2019/03/24(日) 09:27:05.22:EkBj7yKG だから天井人がお前ら下々に分かるレベルにしてやるよってことで様々な改良が加えられてるんだよなあ それでもまだ分からないとなったらどこまでレベルを下げればいいんだってなって頭抱えちゃうよ : デフォルトの名無しさん [sage] 2019/03/24(日) 10:26:38.44:a59b/YMZ CStringってなに? : さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/03/24(日) 10:31:25.24:SVMO04Wq CStringは、Windows用のC++のクラスライブラリ、MFCの文字列クラス。 : デフォルトの名無しさん [sage] 2019/03/24(日) 10:45:02.21:myNgr9GS 冗長って言われても一度パースしないと必要サイズはわからんからしょうがないだろ まあ1KB程度のバッファー持って処理中に足りなくなったらパースし直すとかでもいいとは思うが : デフォルトの名無しさん [sage] 2019/03/24(日) 10:47:24.53:0ur1Ot0v 便利さを求めるならなんかフレームワーク使えよ 軽さを求めるならchar配列でゴリゴリ書けよ : デフォルトの名無しさん [sage] 2019/03/24(日) 10:52:30.12:EkBj7yKG 性能も利便性も標準より低いフレームワークさん・・・ : デフォルトの名無しさん [] 2019/03/24(日) 11:06:49.87:Wmd2CxZH 素直にsnprintf()のように最大バッファサイズを指定するオーバーライド関数を追加すべきでしょ。 CStringT::Format()関数を呼び出す側は、あらかじめサイズを予想できる状況にあることが多い。 : デフォルトの名無しさん [sage] 2019/03/24(日) 11:52:04.64:0R743LPx 天上人のつもりなのがそもそもの問題なんだがな。。 最近の標準委員は明らかにプログラム組んでなさそうな連中が決めてるような感じだし。 c++なんかは顕著だがそういうマウントの取り合いによる新機能拡充が一番現場を疲弊させてるっていうことを なんでわからんかね。 : デフォルトの名無しさん [sage] 2019/03/24(日) 11:52:05.81:EHuBBnjq MFCが出来た頃のstd::stringはそりゃまあ酷いシロモノだったんじゃ あまりCStringを責める気にはなれん : デフォルトの名無しさん [sage] 2019/03/24(日) 11:55:08.60:DVu1xjKe いくらリリース時に型がすべて決まってるはずと言ったってDRYはそれなりに大事だろ : デフォルトの名無しさん [sage] 2019/03/24(日) 12:01:45.23:rLn5TxmP 標準化委員会の議論とまともに論理的な議論のできない5chを同一レベルで扱うなよ : デフォルトの名無しさん [] 2019/03/24(日) 12:05:08.13:4oYv+rwZ しかし旧石器時代にSTLが作られたことを思うと、オーパーツと言ってよいのではないか。 数学的に洗練されたこの美しさ。 古代人は数学が得意だったのでは。 : デフォルトの名無しさん [sage] 2019/03/24(日) 12:09:06.38:EkBj7yKG まあそれはある でもstlが普及してからも互換性が全くないまま終了したので負債になってしまったのは悲しい : デフォルトの名無しさん [sage] 2019/03/24(日) 12:09:46.38:Wmd2CxZH それにしてもiostreamの醜さよ。 : デフォルトの名無しさん [sage] 2019/03/24(日) 12:37:41.11:NSjukkr5 C言語に毒された老害かよw 欲しけりゃ自分で実装しろよ : デフォルトの名無しさん [] 2019/03/24(日) 12:46:47.36:DqM6OskA はそんなの百も承知で書いてると思うが : さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/03/24(日) 12:47:06.43:rmV9lt2O <strsafe.h>を知らない人が多いのか? : デフォルトの名無しさん [] 2019/03/24(日) 12:55:26.69:DqM6OskA そうか? 全然そんなことないと思うぞ MFCのはもっと酷かったからそれよりマシかなって程度 : デフォルトの名無しさん [] 2019/03/24(日) 12:57:50.08:Wmd2CxZH 簡単だから当然、実装はする。 下手にバッファサイズを測る手間をかけるくらいならバッファサイズを渡せという話。 バッファサイズを渡せば速度が通常のCStringT::Format()より30〜40%ほど改善するんだから、公式でも採用してもらいたいという趣旨。 : デフォルトの名無しさん [] 2019/03/24(日) 13:07:04.34:Wmd2CxZH gccとvcでは vsnprintf()の挙動が違う。va_listの内部実装が異なるからだろう。 gccの場合、同じva_listを使ってvsnprintf()を複数回呼び出すと… : デフォルトの名無しさん [] 2019/03/24(日) 13:26:03.77:tvGVd8WB 続きはCMのあとで!! : デフォルトの名無しさん [sage] 2019/03/24(日) 13:42:15.21:uLk8b7ur どうせ弄るなら、va_listとか旧世紀の遺物つかわなくても、templateの可変長引数を使って1から作り直した方が良い。 : デフォルトの名無しさん [sage] 2019/03/24(日) 13:44:34.27:EHuBBnjq va_listを他の関数に渡した後で、va_startで初期化せずに再使用するのは未定義動作 何が起きても文句は言えないしコンパイラごとに挙動が違うのは当然というものだ : デフォルトの名無しさん [sage] 2019/03/24(日) 13:55:44.10:oV9fIVj4 string_viewはどうだろうか? : デフォルトの名無しさん [] 2019/03/24(日) 13:56:05.38:Wmd2CxZH それはつまり、gccではCStringT::FormatV()相当の実装が困難ということを意味している。 バッファサイズを自分で渡す仕様が最適解ということ。 : デフォルトの名無しさん [sage] 2019/03/24(日) 13:59:03.55:myNgr9GS そんな旧態依然のインターフェイス欲しけりゃ自分でやれやってことだろ : デフォルトの名無しさん [] 2019/03/24(日) 14:13:40.53:Wmd2CxZH それにつけてもostringstreamの醜さよ。 : デフォルトの名無しさん [sage] 2019/03/24(日) 14:40:52.61:EkBj7yKG streamサイコー<<<<<< : デフォルトの名無しさん [sage] 2019/03/24(日) 14:51:51.49:a59b/YMZ clang++使ってみたら、std::async使えない・・・ さすが、フリーだな : デフォルトの名無しさん [sage] 2019/03/24(日) 14:52:15.46:b6oq5ESd clang++使ってみたら、std::async使えない・・・ さすが、フリーだな : デフォルトの名無しさん [] 2019/03/24(日) 16:30:35.16:4oYv+rwZ 何処がひどいですか? : デフォルトの名無しさん [sage] 2019/03/24(日) 16:50:49.33:GJPzxHHg CStringのくそ設計にいまさら文句言ってもなぁ そもそもメンバ関数、しかもdestination側と言う時点で使う側の利便性考えていない : デフォルトの名無しさん [sage] 2019/03/24(日) 16:55:28.18:xAoD2jBj 遅いしフラグがいっぱいあるし読みにくいし ostream& T::operator<<(ostream&, const T&)やistream& T::operator>>(ostream&, T&)をTにつき一種類しか定義できないから 万全の汎用性を有しているかというとそうでもないし、 唯一の長所は型安全なところだが、意図通りの出力になるまでどうせトライ&エラーすることになるのだから それ以下の工数でprintf()の書式ミスを発見できるわ;; : デフォルトの名無しさん [sage] 2019/03/24(日) 16:58:49.26:xAoD2jBj CStringをdestination側に使うときの書き方はスゲーカンタン CString cstr; cstr = "Hello World!\n"; でおkコピー程度でCstring::Format()を使う必要はナス、 ソース側に使うときはむしろstd::stringよりカンタン printf("%s\n", cstr); で通る : デフォルトの名無しさん [sage] 2019/03/24(日) 17:01:05.52:xAoD2jBj まあ個人k的にはprintf("%s\n", (char*)cstr); ぐらいで手を打つが : デフォルトの名無しさん [sage] 2019/03/24(日) 17:10:19.89:b6oq5ESd CStringなんて使うのはc言語だけだろ : デフォルトの名無しさん [sage] 2019/03/24(日) 17:19:45.54:PmamUspu ここはマウント取りたいだけのバカが沢山居るけどさすがに標準化委員会は違うだろ ただソフト開発者や標準・boost以外のライブラリ設計者はほぼ居ないんだろうなとは思うが : デフォルトの名無しさん [sage] 2019/03/24(日) 17:32:06.96:GJPzxHHg 標準化委員会はよくも悪くも開発者目線だなあとしか 提案者の用途さえ満たせれば良い的な仕様が多々見られる 最近だとto_charsとfrom_charsなんてまさにそんな感じ : ◆QZaw55cn4c [sage] 2019/03/24(日) 17:44:39.67:6DYvLdXI >フラグがいっぱいあるし この i/o stream のフラグってきちんと定義されているのでしょうかね… 処理系に依存してテキトーな気がしてしかたがない ttps://mevius.5ch.net/test/read.cgi/tech/1434079972/30 を書くときにさんざん調べたつもりなのですが、よくわからなかったことを記憶しています。 今みると、嫌々 stream.fail() でごまかしていたようです : デフォルトの名無しさん [sage] 2019/03/24(日) 21:04:38.58:0R743LPx 江添レベルの奴がやってる時点であんまここと変わらんだろ。 初心者に初めからautoで宣言させたコード実行させようとするような馬鹿だぞ。 初心者のためよりも自分のエゴ満たすためってのがあまりに優先されすぎてる。 : デフォルトの名無しさん [sage] 2019/03/24(日) 21:11:22.21:EkBj7yKG そんなわけないが 研究者だけでなく様々な企業のエンジニアも参加している お前らの好きな組み込み業界や自動車業界も人を派遣してる : デフォルトの名無しさん [sage] 2019/03/24(日) 21:17:23.06:EHuBBnjq つい最近まで「トライグラフは現場でバリバリ使いまくってるから無くしちゃダメー!」って必死に訴えてる人達がいっぱい居たのが標準化委員会だよ : デフォルトの名無しさん [sage] 2019/03/24(日) 21:37:39.78:GJPzxHHg 初心者にauto使わせるのは悪くないというかむしろそうすべきだろ。 現場が疲弊云々はそんな現場辞めてしまえとしか 標準化委員会はc++バリバリに使っている現場の意見が十分反映されているのだから 文句があるなら委員会に参加すれば良いんだよ : デフォルトの名無しさん [sage] 2019/03/24(日) 22:05:21.71:iBzlPNVB IBMだけな・・・ : デフォルトの名無しさん [sage] 2019/03/24(日) 22:08:27.13:zVUhrel1 C++を使わせないのが正しい。 : KAC [sage] 2019/03/24(日) 22:12:29.07:baOwhHMi そうじゃない 688の思想は、Cにも取り入れる方向だろう : デフォルトの名無しさん [sage] 2019/03/24(日) 23:03:50.83:0R743LPx あれで現場の意向が本当に入ってると思ってる奴がいるのか? c++の衰退とかデータで見ても信じない連中なのかね。。 まるでどこぞの統計データを今でも信じてる連中みたいだ。 : デフォルトの名無しさん [] 2019/03/24(日) 23:18:22.54:Wmd2CxZH メモリやCPUが安価で高性能になれば、コンパイル言語全般のシェアが下がるのは当然なのでは。 : デフォルトの名無しさん [sage] 2019/03/24(日) 23:22:35.66:dT6Xb8jy 時代は静的型だよ : デフォルトの名無しさん [sage] 2019/03/24(日) 23:31:19.17:KmR/jJEd 現場にはcとc++が違うことを知らない奴も多いwww : デフォルトの名無しさん [sage] 2019/03/24(日) 23:38:44.81:GJPzxHHg 実際現場の意見入っている感じするじゃない? どちらかと言うと実装側の都合でデグレードされたりすることが多い コンセプトいい加減入れろよと エラーメッセージわかりづらいし、SFINAE面倒くさいんだよ : デフォルトの名無しさん [sage] 2019/03/24(日) 23:40:40.71:PmamUspu >初心者にauto使わせるのは悪くないというかむしろそうすべき 型や参照、ポインタ、修飾とかの違いでコンパイルエラーになるのを経験しないのは危険だと思うけどねぇ 推論された型を勘違いした上にたまたま通ってしまう可能性もあるわけだし 便利なのは否定しないけど静的型付け言語であるC++のパラダイムを変えるような機能ではない : デフォルトの名無しさん [sage] 2019/03/24(日) 23:46:22.50:dT6Xb8jy そういうことを言っていいのは出来合いのtypedefを使わないで全ての型名を愚直に書いている奴だけ : デフォルトの名無しさん [sage] 2019/03/24(日) 23:53:18.03:PmamUspu 重箱の隅 から読み直してみ : デフォルトの名無しさん [] 2019/03/24(日) 23:56:09.01:4oYv+rwZ キリバンゲット!! : デフォルトの名無しさん [sage] 2019/03/25(月) 00:05:20.37:lHhl7aCC この書き込み自体がもうね 江添の考え方に反対するならそう言えば良いのに、エゴとか完全に個人攻撃しちゃっているじゃない : デフォルトの名無しさん [sage] 2019/03/25(月) 01:23:08.49:dMeCWU6I 結局ビャーネって何を作ったの? 言語の仕様なんかは磯さんが決めてんでしょ : ◆QZaw55cn4c [sage] 2019/03/25(月) 01:44:06.00:/j2VHiDc すべてはユダヤの陰謀だあぁぁ!!! : デフォルトの名無しさん [] 2019/03/25(月) 01:47:24.45:LV8gdQ4G 陰謀論を唱えるような人は、先入観が強すぎて不具合の原因を見つけ出せずに時間を浪費するタイプの人だから、プログラマをやめるべき。 : デフォルトの名無しさん [sage] 2019/03/25(月) 07:31:49.87:+RmEIgLd 政治なんですよ政治 : デフォルトの名無しさん [sage] 2019/03/25(月) 07:46:27.12:mW0SiMKO MISRA-C 2004 の本は、トヨタなど大企業の50人が書いた本だけど、 ドワンゴ江添の本は、彼1人で書いたから、超人技! Linux プログラミング・インタフェース、Michael Kerrisk、2012 この本とともに、神の書と言える! KADOKAWA が言ってる。 当社はプログラミングの会社ではないけど、 なぜか、プログラマーが多いし、募集もしていますw : デフォルトの名無しさん [] 2019/03/25(月) 11:25:12.65:MuEFgcsw 裁判費用をクラウドファウンディングで捻出する予定はありますか : デフォルトの名無しさん [sage] 2019/03/25(月) 11:39:13.03:LV8gdQ4G 首都は「ヌルスルタン」、前大統領の名前に改称 : 国際 : 読売新聞オンライン ttp://https://www.yomiuri.co.jp/world/20190325-OYT1T50119/ : デフォルトの名無しさん [sage] 2019/03/25(月) 21:09:33.79:DI1df1TX ファンクタって1回だけ使うならインスタンス生成する分関数より高コストで繰り返し使うなら生成済みのインスタンスを再利用できるから低コストという認識であってます? : デフォルトの名無しさん [sage] 2019/03/25(月) 21:21:15.56:CfE+HAKL 一切知りません : デフォルトの名無しさん [sage] 2019/03/25(月) 21:21:26.20:8+7iDICf あってません : デフォルトの名無しさん [sage] 2019/03/25(月) 22:35:05.39:8zmAEr9n あの教え方が本当に初心者のためになると思ってんの? 完全に書く側の都合による本にしかなってない。 ああいうメモリ意識の低い本で教えることはc++を使わせる上でマイナスにしかならん。 : デフォルトの名無しさん [sage] 2019/03/26(火) 00:05:13.64:Pu4N06vt なるだろ? 想定している利用者像が違うだけ 始めにauto使わないように慣らされたら、どうでも良い場面で型指定するバカに育って逆に面倒臭いだろ まあ一番の害悪はnewやdelete、果てはmallocやfree使わせる奴だが 動的多次元配列でnewをループで入れ子にするのとか最悪 : デフォルトの名無しさん [sage] 2019/03/26(火) 00:09:39.69:Xorohn3v 昨今のスクリプト言語は大抵autoじゃねえの そうすりゃ初心者と型システムの都合なんてのはクソくらえ、だ 入門者にゃ型なんて意味無しじゃん それに初心者にどうやってマイナスかどうか確かめたのか怪しい ついでに型&autoとメモリ意識とは違うからな : デフォルトの名無しさん [sage] 2019/03/26(火) 00:12:14.24:Pu4N06vt 大体intとかあまり生で使わんよね 少なくともtypedefしておくもんじゃね : デフォルトの名無しさん [] 2019/03/26(火) 00:29:37.47:otrrnTwO このスレ住民は、 auto によってコンパイル時には分からない意図せぬ動作で困った経験ってある? : デフォルトの名無しさん [sage] 2019/03/26(火) 01:09:42.91:pnr0HSCh c++って便利なのは便利なんだが、やっぱ遅いよ stream,asyncなんか、使い物にならん : デフォルトの名無しさん [sage] 2019/03/26(火) 01:11:09.93:SW23xWSB c++が遅かったら何が速いんだ : デフォルトの名無しさん [sage] 2019/03/26(火) 01:12:08.10:qIOvz7c6 いや、コードを書いてるやつがいつまでも成長しない だからコードが遅くなる それがC++wwww : KAC [sage] 2019/03/26(火) 01:19:01.25:E0p6Aumv いや、流石にintは生で使うだろ。 intで十分な意味持ってるんだが、 どんなtypedefするんだ? : デフォルトの名無しさん [sage] 2019/03/26(火) 01:22:01.94:pnr0HSCh つD : デフォルトの名無しさん [sage] 2019/03/26(火) 01:34:39.27:SW23xWSB そんな流行ってないもんでまともな仕事ができるかw : デフォルトの名無しさん [sage] 2019/03/26(火) 03:04:08.84:5DO30Xtv Visual Studio使ってたらインテリセンスがautoをコンパイル前に展開して表示してくれるけど : デフォルトの名無しさん [sage] 2019/03/26(火) 03:05:29.57:5DO30Xtv テンプレート以外で変数がコンパイル前に決まらないことってあるの? テンプレートならauto使う必要なくね : デフォルトの名無しさん [] 2019/03/26(火) 03:35:14.19:D6PYEJQv テンプレートだからこそ使いたい。 : デフォルトの名無しさん [sage] 2019/03/26(火) 03:48:53.98:fe5vrK8S 経験豊富なプログラマが沢山参加しているのが事実なら、船頭多くして 船山に登る状態なのかも知れない。 : デフォルトの名無しさん [sage] 2019/03/26(火) 04:01:17.90:fe5vrK8S 実感として、年々汚くて使いにくい仕様が増えている気がする。 : デフォルトの名無しさん [sage] 2019/03/26(火) 07:21:28.81:JExaD8IX たいていのスクリプト言語は動的型付け autoと同じと考えてるならレベル低すぎ : デフォルトの名無しさん [sage] 2019/03/26(火) 09:23:59.45:Uaj934aJ 仕事で流行ってる流行ってないなんて関係ないだろw : デフォルトの名無しさん [sage] 2019/03/26(火) 09:42:45.74:SW23xWSB 流行ってない=情報がない、人がいない、資産がない=ゴミ : デフォルトの名無しさん [sage] 2019/03/26(火) 11:19:13.28:T41fm+6R ビジネスの都合しか考えられないゴミ JavaとかC#使ってれば : デフォルトの名無しさん [sage] 2019/03/26(火) 12:49:08.72:hIENxLfE ビジネスの都合でc++って場合が多いだろ ここに居るような奴等は : デフォルトの名無しさん [] 2019/03/26(火) 15:10:01.00:5W15sMAG wとかsとか付いたのが無駄に増えて面倒になったな int32_t とか uint32_t とか uint64_t とかは賛成 : デフォルトの名無しさん [sage] 2019/03/26(火) 17:06:14.62:fe5vrK8S そういう名称の問題だけに限った話ではなくて、結論から言えば、仕様を 多数決で決めてしまうと初心者向けの言語になる。スクリプト言語とかに 近いような。 構造的な問題とか、統一感的な問題とかもあるし、そもそも、C/C++の 良さまで失うような標準仕様だとかも、例えば、boost などの、 stl = standard template library なんかも、ここでは信者が多いかの 用に見えるけど、まるでC/C++とは思想の異なる全く別のスクリプト言語の ような仕様になっている感じがする。 : デフォルトの名無しさん [sage] 2019/03/26(火) 17:40:36.88:hIENxLfE STL否定している時点で、そもそもC++の想定しているユーザーからは外れているんじゃね iostreamならともかく : デフォルトの名無しさん [sage] 2019/03/26(火) 17:46:54.15:NEQZ2SJi 1998年くらいまでのC++はまあまあ良いと思っていたが、それ以後、別の 言語になってきてる気がする。特にここの人はSTL信者が多いが、 実は、98年くらいまでのC++とは似ても似つかないものだよ。 それを使ったコードには、往年の C の片鱗さえも残ってない。 だから、言語名から C という冠を下ろすべきだ。 : デフォルトの名無しさん [sage] 2019/03/26(火) 17:51:58.82:hIENxLfE 信者も何も標準コンテナ使わずに何使うんだよ 自前で書くとかそれこそダメな方向だろう eastlなんかでも使用感をなるべく標準に近づけているのに : デフォルトの名無しさん [sage] 2019/03/26(火) 18:00:25.71:XEttPGHl C++98以前のC++が今より良いってどんなマゾだよ : デフォルトの名無しさん [sage] 2019/03/26(火) 18:04:33.55:hIENxLfE template自体嫌いなんかな それもうCで良いじゃない : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/26(火) 18:10:49.26:qKdh3SVz C++ の仕様に STL などというものは存在しない。 かつて STL と呼ばれていたものは完全に C++ の一部になっているし、 仕様の他の項目と区別する方法はない。 C++ 使いが C++ の機能を使うのは当たり前だ。 気に入らないと思うのは自由だし、良くない部分だって実際あるが、 常識的には標準が用意しているライブラリは言語の利用方法を体現するものであって、 言語の基本思想と極端に乖離してるわけないだろ。 : デフォルトの名無しさん [sage] 2019/03/26(火) 18:36:42.18:5P0efKyY 標準ライブラリだからといって使う義務はないわけで 最小限のランタイムで動くnative言語というところがc++を使う理由になってるプロジェクトが多いだろう その目的にそぐわないのが今の標準ライブラリのデザイン メタプログミングの遊び場とかしている ただし20年前と比べるのはどうかと思うが : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/26(火) 18:44:59.17:qKdh3SVz 標準ライブラリをどうしても使わなきゃならんってことはないけど、 使わないための積極的な理由がなきゃ標準を選択するよ。 リソースが制限されているところで使わないっつーならそれはそれでいいよ。 それも出来るのが C++ だからな。 : デフォルトの名無しさん [sage] 2019/03/26(火) 19:08:13.59:NEQZ2SJi 結論から言えば、STLはライブラリとしての「センス」が悪い。 POSIX の fopen()系や printf() 系などは使いやすいと思っていたが、 STLにはそれを感じないし、coutも変だったが STLもそれと同じ轍を踏んでる感じ。 : デフォルトの名無しさん [sage] 2019/03/26(火) 19:17:04.87:+JfIlK2p お前さんのレスからは、「僕の好みじゃないからヤダヤダ」という程度のことしか見えてこない。 : デフォルトの名無しさん [sage] 2019/03/26(火) 19:19:36.63:NbUyZWCM 誰でも頭が良くなる、プログラムが書けるようになる方法が発見される 86052 ttp://https://you-can-program.hatenablog.jp : デフォルトの名無しさん [] 2019/03/26(火) 19:23:47.27:/YNua4WM メイヤーズは最高に美しいライブラリと言っている : デフォルトの名無しさん [sage] 2019/03/26(火) 19:27:39.30:otrrnTwO すっぱい葡萄 ttps://ja.wikipedia.org/wiki/%E3%81%99%E3%81%A3%E3%81%B1%E3%81%84%E8%91%A1%E8%90%84 自分のものにしたくてたまらないにもかかわらず、努力しても到底かなわない対象である場合、 人はその対象を「価値の無いもの」「自分にふさわしくないもの」と見なそうとし、 それをあきらめの理由として納得し、心の平安を得ようとするものである。 フロイトの心理学では、これを防衛機制および合理化の例とする。また、社会心理学においては、認知的不協和の例とされる。 英語には、この寓話を元に生まれた熟語として "sour grapes" があるが、これは「負け惜しみ」を意味する。 : デフォルトの名無しさん [sage] 2019/03/26(火) 19:27:52.44:NEQZ2SJi やっぱりネットは駄目だ。 頭の悪いプログラマが支配してる。 : デフォルトの名無しさん [sage] 2019/03/26(火) 19:29:16.09:fe5vrK8S 意味不明だな。誰でも入手できるライブラリで、なおかつ、 昔のC/C++より誰でも出来るスクリプト言語よりだというのに。 言ってることが逆さま。 : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/26(火) 19:30:19.23:qKdh3SVz cout よりも printf が相対的に良いという人はたくさんいると思うが、 iostream が特に駄目ってだけで、 C++ 的に見れば printf がセンスいいとはとても言えんぞ…… : デフォルトの名無しさん [sage] 2019/03/26(火) 19:31:00.18:eqSsbUbG 昔みたいにドヤ顔してboost使う必要がなくなったのはいいことだと思うよ。標準が充実していってさ。 最初からヌエ的な発展しかありえないのはそういうものだと思うし。 : デフォルトの名無しさん [sage] 2019/03/26(火) 19:31:45.68:5p1uA41w は多分とかに向けたつもりだと思うんだが なぜか逆の立場のがダメージ受けてるという : デフォルトの名無しさん [sage] 2019/03/26(火) 19:34:05.19:5p1uA41w あ、すまん逆ではなかったな : デフォルトの名無しさん [sage] 2019/03/26(火) 19:39:12.76:fe5vrK8S ただ、多数決というのは、正しくも良くも無いけどな。 : デフォルトの名無しさん [sage] 2019/03/26(火) 19:48:04.23:gp3lODpj だったら君が最高の言語を作ればいい 設計は君の最高のセンスをふんだんに盛り込んで独裁的にやればいいよ : デフォルトの名無しさん [sage] 2019/03/26(火) 19:59:43.01:otrrnTwO とりあえず全員ダメージ受けとけ。 : デフォルトの名無しさん [sage] 2019/03/26(火) 20:35:50.63:OoUi3Qk7 stlのないC++なんてクリープ入れないコーヒーみたいなもん : デフォルトの名無しさん [sage] 2019/03/26(火) 21:11:51.51:ExDeReqX C++ の仕様にSTLがないって本当かいな、と思って調べたら 確かに n3337.pdf (C++11のドラフト?) には STL という単語が出てないね。 STLのセンスが良いか悪いか、使うべきか使わざるべきか、 その辺について意見を出せるほど見識はないんで、事実の報告だけ。 『プログラミング言語C++』第4版に「STLなんちゃら」って章が いくつか載ってるから、仕様の言葉だと思ってたわ。 : デフォルトの名無しさん [sage] 2019/03/26(火) 21:17:41.21:zBAPpXX5 プログラミング言語C++に後にSTLとなるテンプレートライブラリ作ってストロストラウップに勧めに来た奴が居たので ストロストラウップが試したら、彼が信条とする「良いライブラリ10箇条に全部あてはまってこりゃスゲーとなったという エピソードがあったような なかったような : デフォルトの名無しさん [sage] 2019/03/26(火) 21:25:01.06:5p1uA41w STLは俗称だし、定義も曖昧 皆そう呼ぶのが便利だからSTLという呼び方してるだけ HPの研究所で働いてたAlex Stepanovが発案して94年あたりに持ち込んだっぽい ライブラリじゃなくて、いわゆる「汎用コンテナ(データ構造)ライブラリ」についてBjarneが重要と考えたチェックリストのほぼ全部にパスした : デフォルトの名無しさん [sage] 2019/03/26(火) 21:30:19.89:pGZA6Dfc c++の仕様にSTLが無くてもrange-based forのようにSTLが備えてるbegin,endに依存した構文は出てる。 : デフォルトの名無しさん [sage] 2019/03/26(火) 21:41:34.25:aW2tbkLS STLつってもどうせvectorとmapくらいしか使っとらんだろ。 まあそれで十分なんだが。 : デフォルトの名無しさん [sage] 2019/03/26(火) 21:52:00.50:2lj4xCZe STLという言葉を発することがもうほとんどなくないか? stdは使うけど、まあどっちも輪郭のはっきりしない言葉だ : デフォルトの名無しさん [] 2019/03/26(火) 21:53:11.01:D6PYEJQv STLは洗練されている。 素晴らしいデザイン。 コンセプトが入ったらさらに洗練できると思う。 : デフォルトの名無しさん [sage] 2019/03/26(火) 21:58:59.96:5P0efKyY リソースが制限されてるというより、最大限のパフォーマンス出す場合な つまりリソースがリッチかどうかは直接関係ない AAAのpcゲームとかね パフォーマンスそこそこでいいならc++なんか使う理由がない 遊び以外 : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/26(火) 22:03:45.01:qKdh3SVz 計算量はリソースの一種だで。 : デフォルトの名無しさん [sage] 2019/03/26(火) 22:05:23.77:Pu4N06vt 最大限のパフォーマンスを出すために作ったeastlみたいなのも標準の使用感踏襲するくらいには標準の設計は良くできているよ : デフォルトの名無しさん [] 2019/03/26(火) 22:05:31.83:D6PYEJQv STLはわしが育てた。 : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/26(火) 22:17:08.86:qKdh3SVz そうか。 : デフォルトの名無しさん [sage] 2019/03/26(火) 22:23:19.39:d5snerrZ tupleはSTL? : デフォルトの名無しさん [sage] 2019/03/26(火) 22:33:50.26:5P0efKyY 移行が楽になるようにむやみにapi変えないのはソフトウェアの定石 それより変わったところ、拡張されてるところに注目しようか : デフォルトの名無しさん [] 2019/03/26(火) 22:49:38.25:D6PYEJQv C++2zには俺の作ったライブラリが標準搭載されると思う。 : デフォルトの名無しさん [sage] 2019/03/26(火) 23:13:14.99:T41fm+6R 天下のマイクロソフトが考えたATLでもいいんだぞ : デフォルトの名無しさん [sage] 2019/03/26(火) 23:32:43.00:zBAPpXX5 ATL(adult T-cell leukemia-lymphoma)は語呂が悪い : デフォルトの名無しさん [sage] 2019/03/26(火) 23:38:15.00:zBAPpXX5 std::tuppleはPythonフリークが無理矢理ねじ込んだのではないか C++11で追加された可変長テンプレートなくして有り得なかったコンテナやし std::pairと被っとる : デフォルトの名無しさん [sage] 2019/03/26(火) 23:43:43.21:T41fm+6R tupleなんかどの言語にもあるだろ 現代の言語の基本的概念の一つで当然サポートされるべき : デフォルトの名無しさん [sage] 2019/03/26(火) 23:49:19.01:WJaRDiZ5 ライブラリでサポートだけどな これがダメなところ : デフォルトの名無しさん [sage] 2019/03/27(水) 00:07:37.22:QPwampGA 何で? : デフォルトの名無しさん [sage] 2019/03/27(水) 00:38:40.54:Wsy7XdfH じゃあ、ストロストラウップの物を見る目が無い。 彼自身のセンスが悪いんだ。 : デフォルトの名無しさん [sage] 2019/03/27(水) 00:42:46.01:bx8pTnoV なんちゃらラウップは言いにくいからいつも ビョーーンさん、と呼んでいる : デフォルトの名無しさん [sage] 2019/03/27(水) 00:47:30.04:Mw4em8Pz tupleは型関数でも重宝するよね : デフォルトの名無しさん [sage] 2019/03/27(水) 00:56:42.26:ZXIZSYy+ タプルはなにが嫌といって get<0> とかいうのがものすごく嫌 要素が4個ぐらいになったら1年後ぐらいにコード書き直そうとして ・・えっとこの値取りだすの get<1> だっけ? get<2> だっけ?とか絶対なるから使わない : デフォルトの名無しさん [sage] 2019/03/27(水) 00:58:48.50:DfX99uD1 そんな貴方にenum定数 : デフォルトの名無しさん [sage] 2019/03/27(水) 01:03:41.91:Mw4em8Pz いい加減enumにメンバ関数定義させろと。 enum classの時にどうにかすべきだった気もするが。 後は静的なリフレクションも enumと文字列の相互変換とか殆ど定型コードになるのにいちいち書くのが面倒すぎる。 マクロで書くのも微妙だし : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/27(水) 02:16:29.42:1nw30Wbv センスがあるか無いか知らんけど、 すっぽすっぽ先生が是とした以上は C++ 的ではあるはずだろ。 それが駄目なら C++ が駄目だし、駄目なので君は使わなくていいよ。 : デフォルトの名無しさん [sage] 2019/03/27(水) 02:25:21.92:Mw4em8Pz 標準コンテナ使わないらしい人の 抜群のセンスを見てみたいので、コードの一部でも見せて欲しいものだな : デフォルトの名無しさん [sage] 2019/03/27(水) 02:59:41.39:V3NaDuAs Eigenが絶妙に不便なんだけど行列演算を標準でサポートする予定ってあるの? : デフォルトの名無しさん [sage] 2019/03/27(水) 03:31:56.74:Wsy7XdfH アイデア盗まれるだけ損。 : デフォルトの名無しさん [sage] 2019/03/27(水) 06:12:39.11:0QkCU47u センスが悪いというだけで具体的にどこがどう悪いか、どんなだったらセンスが良いのか言わないと、説得力ゼロだな。 : デフォルトの名無しさん [] 2019/03/27(水) 06:31:30.44:J3LATpLk +1 : デフォルトの名無しさん [] 2019/03/27(水) 06:40:01.31:J3LATpLk 禿 : デフォルトの名無しさん [sage] 2019/03/27(水) 06:52:27.00:Ojl0EpZo 定型文ならtemplateで書けないの? : デフォルトの名無しさん [sage] 2019/03/27(水) 07:12:11.84:Mw4em8Pz やりたいことは単にenumの値の識別子とその文字列を対応付けるだけなんだが、templateで書けるの? enum class Color { Red, Green, Blue }; inline auto to_string(Color c) { switch (c){ case Color::Red:return "Red"; ... } } こんな感じのことがしたい : デフォルトの名無しさん [sage] 2019/03/27(水) 07:24:00.67:DfX99uD1 マクロ Stringizing Operator (#) を使うしかないのでは。 : デフォルトの名無しさん [sage] 2019/03/27(水) 07:44:38.63:QPwampGA ×センスが悪い ○自分の趣味合わない だから説明する必要なし嫌い嫌い言っておけばおk ちょうど114514回目のstd:get嫌い民も現れたところだ : デフォルトの名無しさん [sage] 2019/03/27(水) 07:59:25.35:KDFmmUkx ストラウストラップも例外入れるかどうかあたりまでは かなり真剣に仕様を考えてた印象だけれどそれ以降はタガが外れた感じだ。 最近はもうどうしようもなくなってる。 : デフォルトの名無しさん [sage] 2019/03/27(水) 08:00:04.09:Ojl0EpZo その処理ならmapかunordered_map使うのが良くないだろうか? : デフォルトの名無しさん [sage] 2019/03/27(水) 08:06:10.74:QPwampGA なお誰もストラウストラップに意見を出せるほどプログラミング言語の勉強をしていないもよう : デフォルトの名無しさん [sage] 2019/03/27(水) 08:07:01.17:Kgbo0Zp4 逆変換はunordered_mapだな 文字列化の方はswitch使うのが一番コンパイラがいい感じのコードにしてくれる : デフォルトの名無しさん [sage] 2019/03/27(水) 08:25:16.34:HgdvOlrd 関数の引数として vector<int> を参照渡ししたいのですが、これのデフォルト引数を空の vector<int> にする方法ってありますか : デフォルトの名無しさん [sage] 2019/03/27(水) 08:33:50.59:pdL3Pyxp std::vector<int> &v = std::vector<int>() じゃないのん : デフォルトの名無しさん [sage] 2019/03/27(水) 08:43:24.12:HgdvOlrd 参照渡しでもそのやり方できますか? : デフォルトの名無しさん [sage] 2019/03/27(水) 08:45:04.79:pdL3Pyxp やればわかる : デフォルトの名無しさん [sage] 2019/03/27(水) 09:24:45.56:7IO5xMdH const? : デフォルトの名無しさん [sage] 2019/03/27(水) 09:33:08.23:p4oEJ8zd センスうんぬんを言ったのはおれじゃないけど、 標準ライブラリ使わないという主張に対して、ソースがエレガントかどうかを問うのは目的がわかってない 端的にいうと標準ライブラリのオーバーヘッドが許容できないんだよ 多少記述が汚くなろうがパフォーマンス引き出すのが優先 cとc++のベンチだと結局cの方がいいスコアになってること多いだろ (全てがそうでないのは知ってる) そこをcと同等まで引き上げるわけだ : デフォルトの名無しさん [sage] 2019/03/27(水) 09:36:50.33:QPwampGA だったらC使ってれば それ以外の選択肢無いんだから : デフォルトの名無しさん [sage] 2019/03/27(水) 09:40:51.50:p4oEJ8zd そこはアセンブラ使えばというところだろ : デフォルトの名無しさん [sage] 2019/03/27(水) 09:40:55.11:pdL3Pyxp VC2017だとconstじゃなくてもいけた てか参照のデフォルト引数ってconst限定だったのか 仕様変わったのかVCだけおかしいのか知らんけど : デフォルトの名無しさん [sage] 2019/03/27(水) 09:45:55.40:p4oEJ8zd いうまでもなく、ボトルネックでないところは労力はかけない メンテが楽な手法を使う それに完全にゼロコストなものは普通に使うさ : デフォルトの名無しさん [sage] 2019/03/27(水) 09:52:34.13:U9bjaUkC 標準コンテナでcより遅くなるってどんなパターン? 単方向listで十分なのにlistだと双方向とかそんなやつ? あんまりlist使わんからよくわからんが vectorは使い方を余程間違えない限り大抵代替品より速いような メモリ確保回りはallocator使えばいいし data使えばただのメモリブロックだよね : デフォルトの名無しさん [sage] 2019/03/27(水) 10:01:31.18:QPwampGA 99%iostreamのこといってるからな : デフォルトの名無しさん [sage] 2019/03/27(水) 10:04:51.88:tQ4XPcUj 要素の追加時に容量の拡張が必要かどうかのチェックが入ったりするから、オーバーヘッドはゼロではないよ : デフォルトの名無しさん [sage] 2019/03/27(水) 10:08:24.05:U9bjaUkC それpush_back or emplace_back使っているのが悪いのでは cの同等コード書いてもチェックは必要だろ チェック要らんことが分かっているならresizeしておけ : デフォルトの名無しさん [sage] 2019/03/27(水) 10:12:49.51:QPwampGA Cで作っても同じでワロタ : デフォルトの名無しさん [sage] 2019/03/27(水) 10:22:17.37:tQ4XPcUj 便利なものがあれば人間は使ってしまうもんだ その積み重ねがパフォーマンスの差に繋がる 俺は一般には便利なものを使って時間を節約することでボトルネック解消にかける時間を確保でき、 結果的にパフォーマンスはより高くなると思うけど、そこはスケジュールの制約次第だな : デフォルトの名無しさん [sage] 2019/03/27(水) 10:29:47.46:9ko5ghKo Cマスター「C++は配列に追加するときにサイズチェックするから遅い(キリッ」 wwwwwwwwwwwwwwwwwwwwww こんな雑魚がでかい顔してるからいつまでもセキュリティホールがなくならないんすなあ : デフォルトの名無しさん [sage] 2019/03/27(水) 10:34:12.90:9ko5ghKo Cマスター「要素追加時にサイズチェックするという便利さの積み重ねがパフォーマンスを落とす(キリッキリッ」 やべえ笑い死にしそう 笑い事じゃないけど : デフォルトの名無しさん [sage] 2019/03/27(水) 12:49:47.89:DY72tOrL プロファイラで調べて本当に問題あるならどうにかするけど ただわざわざc的に書いても大抵誤差レベルでしか変わらんよね どちらかと言うとバッファの確保の仕方を工夫した方が効果が大きい : デフォルトの名無しさん [sage] 2019/03/27(水) 13:05:12.78:fzYgEwLp トレードオフもわからん雑魚 : デフォルトの名無しさん [sage] 2019/03/27(水) 13:06:52.67:C+1U7WOU ・以下、要素数が N とする。 ・C/C++ の原定義の固定長配列は、要素の代入に1クロックしかかからない。もちろん、 O(1)で、物凄く速い。なお、固定長なので「代入」であり「追加」ではない。 ・Listはリストだから1個の要素の追加はO(1)で、要素数に依存せず安定した速度が出るが、 内部で、newされるはずなので、最低でも170クロックほどかかってしまう。 ・Vectorは動的配列だから、最悪のケースでは要素の追加にO(N)の時間がかかり固定長配列より遅くなる と思う(よく知らない)。 : デフォルトの名無しさん [sage] 2019/03/27(水) 13:34:58.24:tQ4XPcUj 複数の要素を追加するとき、わざわざ事前にまとめてリサイズするか?ということだよ 1要素ずつ処理するのは生ポならかえって面倒になることが多いし、見た目にいかにも非効率そうなコードに見えるから、大抵の人は自然にそうするだろう 一方vectorだとどうだろうね 心理的な問題なの : デフォルトの名無しさん [sage] 2019/03/27(水) 13:45:54.22:tQ4XPcUj 同じようなことはvectorに限らず一般的に言ええて、 例えばC++はRTTIの便利さ故にCと比較してプログラマが無駄なメモリの確保や破棄を行いやすい傾向がある 逆にCだと無駄に大きなバッファ作りがちだったり、バッファの使いまわしによりスレッドセーフでないコードを書きがちであったりする : デフォルトの名無しさん [sage] 2019/03/27(水) 13:46:41.13:tQ4XPcUj すまんRTTIじゃなくてRAIIな : デフォルトの名無しさん [sage] 2019/03/27(水) 14:07:44.29:xtV64SvS クロックなんてわからんじゃろ : デフォルトの名無しさん [sage] 2019/03/27(水) 14:29:28.16:t7f2HshG VC++2017なんだけど デストラクタで投げた例外をキャッチできずabortするのはVC++の仕様? RAIIとラムダを駆使した自作finally内で 例外投げたらキャッチできずabortしてハマったわ デストラクタ内で例外投げるのが汚いのは知ってたが そうか、自作finallyもデストラクタ利用してるからダメなのかな : デフォルトの名無しさん [sage] 2019/03/27(水) 14:35:28.06:fzYgEwLp デストラクタはデフォルトでnoexceptやで : デフォルトの名無しさん [] 2019/03/27(水) 14:54:30.22:t7f2HshG サンクス デストラクタをnoexcept(false)指定したらcatch出来たわ てことは自作finallyは念のためnoexcept(false)指定にしたほうが良いのか それか自作finally内で例外投げるのは完全禁止にするか 悩むわ : デフォルトの名無しさん [] 2019/03/27(水) 14:56:55.41:t7f2HshG まぁでもよく考えたら 例外が発生して自作finallyが実行されてる時に さらに自作finally内で例外飛ばしたら二重例外になるから危険か なるほどなるのど : デフォルトの名無しさん [sage] 2019/03/27(水) 17:38:06.36:8XRRZQAn 意味がわからん そもそもCでも固定長配列の代入は実データのコピーを伴いO(n)だ アドレスや参照のやり取りならO(1) : デフォルトの名無しさん [sage] 2019/03/27(水) 17:50:46.31:fzYgEwLp 全体じゃなくて一要素やろ? : デフォルトの名無しさん [sage] 2019/03/27(水) 17:55:38.42:8XRRZQAn あーそう言うことか 固定長的に使いたいなら始めにresizeするだけじゃない 便利だからチーム内で使ってしまう人がいることを問題にするより、使わずにいちいち独自コードで処理されて余計遅くなったり、バグ仕込まれたりする方が余程ヤバイだろ : デフォルトの名無しさん [sage] 2019/03/27(水) 18:00:35.88:xtV64SvS 先生、配列の長さにリミットを設ける方法を教えてください : デフォルトの名無しさん [sage] 2019/03/27(水) 18:00:36.53:fzYgEwLp まぁそれでも範囲チェックは入るし、常にヒープ使われるし それすら問題になるようなクリティカルな場所なら生配列なりarray使えばいいと思うけど 適材適所じゃないかねぇ : デフォルトの名無しさん [sage] 2019/03/27(水) 18:03:25.00:97C5Fzq7 operator[]なら範囲チェック入らんよ : デフォルトの名無しさん [sage] 2019/03/27(水) 18:14:58.29:QPwampGA 末尾に追加の話だろ : デフォルトの名無しさん [sage] 2019/03/27(水) 18:15:04.13:fzYgEwLp うお、マジだ誤解してた : デフォルトの名無しさん [sage] 2019/03/27(水) 18:20:39.73:fzYgEwLp は宛 まぁ要素数わかってて末尾に入れてくのはナンセンスやね 速度を気にしない場所ならどうでもいいけど : デフォルトの名無しさん [] 2019/03/27(水) 18:39:59.51:ZT8Ntgus よくあの時代にこのような洗練されたライブラリを設計できたものだと思います。 もしかすると宇宙人にもらったのかも。 : デフォルトの名無しさん [sage] 2019/03/27(水) 20:06:12.42:KDFmmUkx 配列の長さチェックのオーバーヘッドとかなんかものすごくデジャブ感のある議論だな。 肯定、否定どちらにしてもマウンティングかましたくなる題材なんかね。 : デフォルトの名無しさん [sage] 2019/03/27(水) 21:09:05.61:p4oEJ8zd 標準コンテナで問題になるのはやっぱりヒープだよ 境界チェックとか仮に無断だとしても一定時間で終わる処理 ヒープ使われると最悪システムコールで負荷変動大きすぎる ちなみにアロケータは要素数で管理できないから面倒 あとvectorで最初にreserveしても最大長越えないチェックが必要で面倒 でこれらを解決するコンテナがboostにあるのでそれを使う : デフォルトの名無しさん [sage] 2019/03/27(水) 21:18:02.40:p4oEJ8zd あと標準ライブラリのリンクリストはそもそもの設計が非効率 (クリーンな設計ではあるが) 素朴なcの実装と比べてかなり差がでる これも代替がboostにある : デフォルトの名無しさん [sage] 2019/03/27(水) 21:25:03.72:4bSYNNTL 末尾追加の話なら、Cでも同じだけコストかかるだろ。 arrayならstackに積まれる。 : ◆QZaw55cn4c [sage] 2019/03/27(水) 21:31:48.60:WdEToVPN なんか変じゃないですか? list や vector のときは要素の「追加」なのに、生配列だけ要素の「代入」と設定するのですか? list や vector で要素の「追加」を考察するのなら、生配列の場合も要素の「追加」を検討してください : デフォルトの名無しさん [sage] 2019/03/27(水) 21:38:22.09:p4oEJ8zd arrayは固定長 欲しいのは最大長を事前に確定しつつ、その範囲で可変長で使えるvector という話ね : デフォルトの名無しさん [sage] 2019/03/27(水) 21:45:52.93:9ko5ghKo ここのCマスター様は、現在の配列長と挿入インデックスのチェックしてreallocしてなんていう パフォーマンスの悪い便利さに甘えた処理などしない 堂々とv[N]に無条件代入を行って超高速O(1)追加を実現するのだ : さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/03/27(水) 21:50:08.37:X5Tg+wiF 事前のresizeかreserveでええんとちゃう? : デフォルトの名無しさん [sage] 2019/03/27(水) 21:51:09.94:t38PuBqi 事前に分かるならスタック固定長でいいじゃん : デフォルトの名無しさん [sage] 2019/03/27(水) 22:02:47.67:gbxz82US reserve あれば困る事なんてないやろ : デフォルトの名無しさん [sage] 2019/03/27(水) 23:54:55.06:QPwampGA 一般的には無いよ 局所的な話を持ち出してああだこうだ言ってるのが今 そして何をするつもりかは誰も知らん : デフォルトの名無しさん [sage] 2019/03/28(木) 00:42:33.33:yLTGLAEP 要素数がN、データの大きさは4バイト、と仮定した場合の話。 : デフォルトの名無しさん [sage] 2019/03/28(木) 00:47:43.37:yLTGLAEP 4バイト整数のN要素の配列を仮定しているが、Cの単純な固定長配列だと 4バイト整数はコピーするのが当然。 ところが、Listだと、「追加」するしかない。動的配列である Vectorも、基本的には「追加」が基本。そうでなければ「動的」と言わない。 : デフォルトの名無しさん [sage] 2019/03/28(木) 00:53:54.09:AOcR4eqo vector.data()、basic_string.c_str()はCと同じの配列の連続アドレスを保証する数少ないインターフェースでしょ。 : デフォルトの名無しさん [sage] 2019/03/28(木) 01:07:32.08:Csoqrb4z 正直stringがゼロ終端を保証したのはちょっとどうかなと思ってる いや便利なんだけどさ・・ : デフォルトの名無しさん [sage] 2019/03/28(木) 01:15:59.09:eE4sGejC 特に不都合無いのだからいいだろう : デフォルトの名無しさん [sage] 2019/03/28(木) 01:39:16.25:AOcR4eqo アドレスと一緒にバッファサイズを渡せないAPIが世の中に無数にある。ヌル終端は優しさ。 : デフォルトの名無しさん [sage] 2019/03/28(木) 03:12:24.24:0b3fKrWQ そもそも printf が : デフォルトの名無しさん [sage] 2019/03/28(木) 05:04:36.64:fRHhg+J8 なぜかC言語は固定配列でC++だと動的が基本らしい 前提違うのに速度ガーとか言われてもなぁw : ◆QZaw55cn4c [sage] 2019/03/28(木) 05:12:10.50:3LZYwZb1 ヌル文字をデータとして扱えない、という決定的なウィークポイントが発生しますね… 昔、ツールがヌル文字を扱えない、という点が後から発覚してとても困った経験があります : デフォルトの名無しさん [sage] 2019/03/28(木) 07:13:39.49:mfvsZ6Gk ようゴCマスター様 マスター様は知らなくてビックリするけど、C++ではvectorやlistは要素数が実行時に決まるときに使うんだ そして驚くべきことに、Cにも要素数が実行時に決まるときに使うための愚かしい機能がなぜか備わってるんだ reallocっていうらしいんだけどさ 使うときは確保済みのバッファの長さをいちいち調べて、足りなかったら再確保して必要に応じて要素を全部コピーするらしいっすよ もちろんそんな馬鹿げたオーバーヘッドを払う奴はC++かぶれのド素人だけだけどな 真のCプログラマは一度確保した配列の自由なインデックスにコピーすることでvectorの無意味なオーバーヘッドを回避し超高速O(1)を実現するのだ : デフォルトの名無しさん [sage] 2019/03/28(木) 08:00:11.54:PaLXcDGr なんかツッコもうと思ったら既にに書いてあった : デフォルトの名無しさん [sage] 2019/03/28(木) 10:11:22.12:yLTGLAEP C++の配列は固定長が基本。 STLやboostは、C++とは異なる。 : デフォルトの名無しさん [sage] 2019/03/28(木) 11:32:51.21:yLTGLAEP >そして驚くべきことに、Cにも要素数が実行時に決まるときに使うための愚かしい機能がなぜか備わってるんだ >reallocっていうらしいんだけどさ Cでは、realloc は推奨されて無い。 Cで、要素数が実行時に決まるような集合を扱いたい場合は、自前で ポインタでリンクする、リンクリストを使う。 毎回それをやると間違いやすいので、賢い人は、自前でリストライブラリを作って それを用いて操作する。 : デフォルトの名無しさん [sage] 2019/03/28(木) 11:39:08.71:dMtNAb9A Linuxのソースなんだけど close(0) close(1) close(2)って書いてあるの見つけたのだが これってなんの効果が期待できるの? ファイルディスクリプタ?だと思っていてオープン等をした値番号だと思ってたけど、0 1 2に該当するのがなんなのかと : デフォルトの名無しさん [sage] 2019/03/28(木) 12:01:08.00:5UOqavsG stdin, stdout, stderr : デフォルトの名無しさん [] 2019/03/28(木) 12:18:22.29:des+yyG9 iteratorでstartとendの中に納まってることが保証されてるのに 各要素にアクセスするときにまた範囲チェックとかあると無駄やん そりゃ書こうと思えばいくらでも危険なコードは書けるけど 安全なときはそういうの省いて高速化出来るのがCの良いところなのに (レジスタの値が知らない間に壊れても正常に動くようにとか言ってるなら知らん) : デフォルトの名無しさん [sage] 2019/03/28(木) 12:31:30.80:yd30y0n6 固定とか決めつけてるのを別にしても何を言いたいのかさっぱりわからん : デフォルトの名無しさん [sage] 2019/03/28(木) 12:34:41.89:OvbnMtjj で、そのオレオレ車輪の再発明クソライブラリは std::vectorやstd::listより何が優れてるの? 範囲チェックしないから高速wなの? : デフォルトの名無しさん [sage] 2019/03/28(木) 12:45:22.23:yiBU3VRL 差異があるとすれば、deep copyだね 決めつけ良くない : デフォルトの名無しさん [sage] 2019/03/28(木) 12:48:36.64:ADAikd1k ランタイムでサイズが決まる動的配列にリンクリスト使うのはさすがにダメすぎる : デフォルトの名無しさん [sage] 2019/03/28(木) 12:56:24.56:TvMamSuP デーモンになりたいんだろうな : デフォルトの名無しさん [sage] 2019/03/28(木) 13:00:41.99:yLTGLAEP そもそも、C で出来ないことは、コンピュータのアーキテクチャ上、ほぼ 絶対に出来ない事。 だから、Vectorが、効率面でCを上回ることは絶対に有り得ない。 : デフォルトの名無しさん [sage] 2019/03/28(木) 13:05:17.92:AOcR4eqo ,871 ソートはどうなの? (・∀・)ニヤニヤ : デフォルトの名無しさん [sage] 2019/03/28(木) 13:06:22.45:AOcR4eqo 春休みでスレの勢いが上がり、スレの品質が落ちた。 : デフォルトの名無しさん [] 2019/03/28(木) 13:22:32.10:des+yyG9 義務教育でプログラミングとか教えたら もっと変なの増えそう python界隈に来ないで欲しい : デフォルトの名無しさん [sage] 2019/03/28(木) 13:29:56.71:t1sztID7 こういう金融とかの兵隊養成用だから競合はしないと思う ttps://pbs.twimg.com/media/DwtF98FUwAIU166.jpg : デフォルトの名無しさん [sage] 2019/03/28(木) 13:49:18.36:KoUoPeo+ そのへんの化石言語はいい加減消滅させるべき : デフォルトの名無しさん [sage] 2019/03/28(木) 13:51:20.07:0CdADxX3 化石じゃないまだドメイン次第で現役Fortranだってこの間新しい仕様出たし!ってつっかかられるぞ 08をちゃんと実装したコンパイラ出してから言ってくれよって気持ちだが : デフォルトの名無しさん [sage] 2019/03/28(木) 14:01:46.15:Csoqrb4z お前が言うな : デフォルトの名無しさん [] 2019/03/28(木) 14:03:11.91:CwLqpfbs _____(コボル) 答え COBOL _____(フォートラン) 答え FORTRAN これのどこが問題集やねん! : デフォルトの名無しさん [sage] 2019/03/28(木) 14:08:39.40:t1sztID7 来年度からこれが流通するぞ : デフォルトの名無しさん [sage] 2019/03/28(木) 15:14:03.54:KoUoPeo+ ほんと役人どもがやることはいつもずれてる : デフォルトの名無しさん [sage] 2019/03/28(木) 16:17:03.97:yLTGLAEP その言葉を見る限り、あなたは日本人じゃない気がする。 この文脈で、あなたが言いたかったのは、 「来年度からこれが流通するぞ」ではなく 「来年度からこれが常態化するぞ」 という事だったと思うから。 : デフォルトの名無しさん [sage] 2019/03/28(木) 17:38:04.05:ADAikd1k それ言い出すなら逆もまたしかりだろ extern "C"すればCで出来てC++に出来ないことはないぞ。 : デフォルトの名無しさん [sage] 2019/03/28(木) 17:39:39.59:ADAikd1k だいたいC++にはasmがあるしな アセンブラで出来ることは出来るんじゃね : デフォルトの名無しさん [] 2019/03/28(木) 18:18:56.58:JEyrctWP おまえらが役人からずれてるんだろ。 日本は公務員のための国やぞ。 : デフォルトの名無しさん [sage] 2019/03/28(木) 18:20:50.90:KoUoPeo+ それは一理ある 日本は官僚統治国家だから : デフォルトの名無しさん [sage] 2019/03/28(木) 18:30:14.54:t1sztID7 公僕が・・・舐めてると潰すぞ : デフォルトの名無しさん [] 2019/03/28(木) 18:32:28.62:des+yyG9 888 : デフォルトの名無しさん [sage] 2019/03/28(木) 18:42:36.05:pafVG92t でも、ターゲットにRubyとC++を選択したのは正解だと思ってるよ。 : デフォルトの名無しさん [sage] 2019/03/28(木) 18:43:27.34:KoUoPeo+ Rubyはない : デフォルトの名無しさん [sage] 2019/03/28(木) 18:45:09.06:yLTGLAEP 日本政府は日本人と将来の日本の年金などのための政治を行えばいいのだから、 日本人が作ったものを使うように推進するのは悪いことではない。 余りにも使いにくいもので無い限りは。 だからWordをやめて一太郎を使うようにしたり、Rubyを使うようにしたり するとすれば、それは英断だよ。 : デフォルトの名無しさん [] 2019/03/28(木) 18:45:11.14:JEyrctWP RubyはWindowsでまともに動かないから、Linux採用するのかな。 : デフォルトの名無しさん [sage] 2019/03/28(木) 18:48:52.21:pafVG92t 自分の環境では、Windowsで普通に動いてると思ってるけど。 : デフォルトの名無しさん [] 2019/03/28(木) 18:49:56.61:JEyrctWP 関数型教えればいいのに。 : デフォルトの名無しさん [sage] 2019/03/28(木) 18:58:40.35:KoUoPeo+ 教えるなら実用性と手軽さからしてC++、Javascript、python : デフォルトの名無しさん [sage] 2019/03/28(木) 18:59:00.99:yiBU3VRL えっ配列初期化子がC++でも使えるように? : デフォルトの名無しさん [] 2019/03/28(木) 19:00:37.17:des+yyG9 国産のを応援するのは判るが それが利権になってただのクズが集まって来たり 金貰うと進歩が止まったりするのが日本の悪いところ : デフォルトの名無しさん [sage] 2019/03/28(木) 19:04:55.98:KoUoPeo+ 国産であっても良いものでなければ応援するべきではない Rubyは滅ぶべき言語トップ10に入る : デフォルトの名無しさん [sage] 2019/03/28(木) 19:07:54.30:OttlZ3Q/ 書き方同じじゃなくても同様の事が出来るだろ cで出来ないこと無いって話にたいしてなのだから : デフォルトの名無しさん [sage] 2019/03/28(木) 19:20:56.01:pafVG92t PythonとRubyだったら、Rubyもそんなに悪くは無いと思う。 Pythonは可読性が悪いように感じる。空白インデントだけでブロックや 関数の終わりを決めてしまうので、内部関数が終わってるかどうか分からず、 人の書いたソースが読みにくくて困ったことがある。 : デフォルトの名無しさん [sage] 2019/03/28(木) 19:39:26.72:lj2W5NqA C++er的には 動的型の時点でノーサンキューだろ そういうのが嫌でC++使ってるんじゃないのか : デフォルトの名無しさん [sage] 2019/03/28(木) 19:40:51.32:lj2W5NqA 特にRubyは教祖様が 絶対に型は書きたくない って駄々こねてるから これはもう日本のガラパゴス化が一層激しくなるな : デフォルトの名無しさん [sage] 2019/03/28(木) 19:43:44.68:jnmpmBFr pyは読みより書きの方が問題 間違えてインデントけずっても気づかないことが多い : デフォルトの名無しさん [sage] 2019/03/28(木) 19:51:12.67:WN0VVTEM 個人的には型のある言語の方が好きだ。 型があった方が、変な問題にはまる率が下がるので開発が速く進む。 大規模開発には絶対、型が必要。 初心者にも大人気言語だった元祖のBASICも、Aが浮動小数点型、A$が文字列型で、 確か、A% が整数型。配列は DIM A(100) や、DIM B%(10,10) などで、 宣言は省略できる場合が多いが、ちゃんと型はあった。 Rubyなどは、A にあらゆる型が入れられるので、関数呼び出しなどが かなり怖い。間違っていても問題の切り分けが出来ないので「はまったら」大変。 だから、とても慎重にコードを目で見ないといけなくなる。 : デフォルトの名無しさん [sage] 2019/03/28(木) 19:52:41.47:wxB03uV3 Pythonで、良く分からなかったのが、インデントの空白の個数。 2個でも4個でも好きな量を選べるのだろうか? : デフォルトの名無しさん [sage] 2019/03/28(木) 19:55:00.97:KoUoPeo+ 言語仕様上は揃ってさえいればいい : デフォルトの名無しさん [sage] 2019/03/28(木) 19:59:44.37:WN0VVTEM やはりそうだったんだ。だから余計に解読できなかったんだな。 エディタでカラムを数えたり、上まで戻ったりして、やっと認識していた。 でも不安が残った。ブロックが終わってるのかどうか物凄く分かりにくい。 : デフォルトの名無しさん [sage] 2019/03/28(木) 20:02:46.54:eE4sGejC 今のPythonはカオスだからな 見易い文法目指していたはずが 内包表記やらラムダやら見づらくする文法が増えて推奨までされている フレーム作るか否かもわかりづらいことこの上ない : ◆QZaw55cn4c [sage] 2019/03/28(木) 20:22:58.04:3LZYwZb1 「実装A, B, C があり、機能 f について、A.f, B.f C.f のそれぞれに、こんなメリデメがあります!」 なら理解できますが、 は、 「A.g, B.f, C.f のそれぞれにこんなメリデメがあります!」 でしょう?それって変じゃないですか? A.g とかじゃなくて、A.f で比べて欲しいのですが? : デフォルトの名無しさん [sage] 2019/03/28(木) 20:33:45.97:BoT1RII7 最近の言語全般に言えることだな。 無駄機能入れすぎなんだよ。 クソみたいなシンタックス入れるくらいならライブラリを充実させるほうが正しい。 : デフォルトの名無しさん [sage] 2019/03/28(木) 20:46:24.22:jnmpmBFr メリデメっていうやつw すまんがめっちゃ底辺臭する : デフォルトの名無しさん [] 2019/03/28(木) 20:56:41.12:JEyrctWP ハイクラスの人はなんて言うんだよ。 : デフォルトの名無しさん [sage] 2019/03/28(木) 21:07:04.95:siqlJJfC お前さんの言い換えた方の日本語もかなり不自然だよ。他人の言葉尻をとらえてどうこう言えるほど、お前さんも日本語が得意な訳ではないだろう。 そもそも、普通の人はそんなことで日本人かどうか気にしたりしない。 : デフォルトの名無しさん [sage] 2019/03/28(木) 21:20:29.56:1SvA7cSr 文字列の途中に格納することは新仕様でもできるでしょ? : ◆QZaw55cn4c [sage] 2019/03/28(木) 21:28:18.93:3LZYwZb1 「不正確な略語を口にするのは doubleplus-unwise である」 という事実をジョージ・オーウェルに学びました、彼は略語と esperant は毛嫌いしていたようです ttp://https://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9%E3%83%94%E3%83%BC%E3%82%AF : デフォルトの名無しさん [sage] 2019/03/28(木) 22:54:40.69:e7Ukr6X3 double型の変数a、bがあるとして、 a/bが整数かどうか判定するには : デフォルトの名無しさん [sage] 2019/03/28(木) 22:55:53.73:Qz7GRSnS 厳密には無理 : デフォルトの名無しさん [sage] 2019/03/28(木) 23:04:52.64:e7Ukr6X3 なぜはベストを尽くさないのか : デフォルトの名無しさん [sage] 2019/03/28(木) 23:06:15.20:2+cLemOj 標準のコンテナなんて使う理由ある? 遅くて使い物にならん ストリームなんて実用に耐えれないくらい遅いだろ : デフォルトの名無しさん [sage] 2019/03/28(木) 23:08:40.51:t1sztID7 もう飽きたからいいよ : デフォルトの名無しさん [sage] 2019/03/28(木) 23:14:08.39:e7Ukr6X3 ではa/bに最も近い整数はどうやったら出せますのん? : デフォルトの名無しさん [sage] 2019/03/28(木) 23:17:25.36:AOcR4eqo (int)((a + 0.5) / b) : デフォルトの名無しさん [sage] 2019/03/28(木) 23:17:26.82:EVp1RRUC a/bを丸めりゃいいと思うが? : デフォルトの名無しさん [sage] 2019/03/28(木) 23:21:48.84:KoUoPeo+ std::round(a/b) : デフォルトの名無しさん [sage] 2019/03/28(木) 23:22:20.86:e7Ukr6X3 両方の案を採ってC++14ではstd::floor(a / b + 0.5)にケテーイ? C99なら丸め関数あるけど… : デフォルトの名無しさん [sage] 2019/03/28(木) 23:23:14.15:KoUoPeo+ CにあってなぜC++にないと思った : デフォルトの名無しさん [sage] 2019/03/28(木) 23:24:22.62:e7Ukr6X3 C99はもはやC++とは別物やし… : デフォルトの名無しさん [sage] 2019/03/28(木) 23:33:50.74:eE4sGejC 丸めって絶対の正解がないからな : 922 [sage] 2019/03/28(木) 23:36:38.79:AOcR4eqo お恥ずかしい。素で間違えた。括弧の位置が違う。 : デフォルトの名無しさん [] 2019/03/28(木) 23:49:56.39:JEyrctWP それは自分に問いかける言葉だったんじゃ。 : デフォルトの名無しさん [sage] 2019/03/29(金) 00:05:03.99:daDbIW6D についてはまだ誰も判定精度のベストを尽くしていない件について: 多分 std::abs((a/b) - ((a/b)の小数以下を丸めた値)) <= std::numeric_limits<double>::min() あたりがベスト? : デフォルトの名無しさん [] 2019/03/29(金) 00:08:06.95:KSfDlte3 いや、元ネタの話。 : デフォルトの名無しさん [] 2019/03/29(金) 00:09:22.47:KSfDlte3 上田次郎の言葉。 : デフォルトの名無しさん [sage] 2019/03/29(金) 00:20:10.55:0t+U2b3s 一太郎は自滅したからなぁ どうしているのかと思えば名簿の話であんなことしていたのかと・・・ 上手くやればいくらでも出来たのに勿体無い : デフォルトの名無しさん [sage] 2019/03/29(金) 00:38:09.37:Sh9jl/tc いやこの場合はイプシロンじゃなくバイナリ一致で比較すべき : デフォルトの名無しさん [sage] 2019/03/29(金) 00:53:41.69:e60P0oPD まだ428万なのに一勝で400くらいしか上がらなくなったんだけど中堅名乗ってええか? : デフォルトの名無しさん [sage] 2019/03/29(金) 00:53:59.93:e60P0oPD 誤爆 : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/29(金) 00:59:27.21:PFvplbFR おっ。 LISP で優勝って話? : デフォルトの名無しさん [sage] 2019/03/29(金) 01:45:14.97:DyQclHpC lisp は大昔 emacs のカスタマイズするのにしょっちゅう書いてたけど なんでこんなクソみたいな古代言語を有り難がるやつがいるのかいつも謎だった 普通に C 風の文法のスクリプトでも搭載してくれたほうがよっぽどありがたい : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/29(金) 02:03:38.50:PFvplbFR Emacs Lisp は今でも生き残っている LISP 系の言語の中ではクソな方なので、それで判断されてもな……。 AutoLISP よりはマシだが。 : デフォルトの名無しさん [sage] 2019/03/29(金) 02:15:27.46:e60P0oPD どうしてC言語風のスクリプト言語が無いんだ どいつもこいつも分かりにくいうえにデバッガも無いもん作りやがって : デフォルトの名無しさん [] 2019/03/29(金) 05:41:16.20:VktwsX1+ a = 1e15 b = 1e-15 : デフォルトの名無しさん [] 2019/03/29(金) 05:42:05.38:VktwsX1+ 941 あったけど流行らなかった pythonの方が役にたつ : デフォルトの名無しさん [] 2019/03/29(金) 06:59:38.46:Eeymx9+7 int型にしてdouble型に戻したのと比較するとか、floor関数使ったのと比較する。 : デフォルトの名無しさん [sage] 2019/03/29(金) 07:49:31.47:WBACpCX+ Cインタプリタってのがいくつもある : デフォルトの名無しさん [sage] 2019/03/29(金) 08:07:13.38:Ta+0qHqT min()以下の非正規化数でも残差があればそれは整数じゃないんだから単純に0との比較でいい。 : デフォルトの名無しさん [sage] 2019/03/29(金) 08:12:49.10:vRMp+NmG 固定小数型が標準でほしい : デフォルトの名無しさん [sage] 2019/03/29(金) 08:23:09.46:WBACpCX+ 小数なんかいらん ビッグインテジャークラスを標準でほしい : デフォルトの名無しさん [sage] 2019/03/29(金) 08:32:27.31:q1OkKHKh 設定はpythonでいいよ : デフォルトの名無しさん [sage] 2019/03/29(金) 09:40:31.26:e60P0oPD あるけど誰も採用してない 何故かみんなオリジナルの言語を作り始める 相当慣れないとautotoolsとか解読困難だし なんならこれもperlにすればよかったのに おかげで出回ってるものもコピペを繰り返した秘伝のタレ状態だわ : デフォルトの名無しさん [sage] 2019/03/29(金) 10:25:09.68:c3N751dA オリジナル言語といいつつ、 昔からあるautotoolsを持ち出すとか : デフォルトの名無しさん [sage] 2019/03/29(金) 11:34:19.48:r9qVljUb ジミーカーターだよ : デフォルトの名無しさん [] 2019/03/29(金) 12:15:03.74:QqxpOyVg python+ctypes最強やで : デフォルトの名無しさん [sage] 2019/03/29(金) 13:00:40.33:HmBCV24x 【速報】金券500円分タダでもらえる ttps://pbs.twimg.com/media/D2y37QFVAAAmz1l.jpg @タイムバンクをインストール iOS: ttp://https://itunes.apple.com/jp/app/%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%90%E3%83%B3%E3%82%AF/id1253351424?mt=8 Android: ttp://https://play.google.com/store/apps/details?id=jp.timebank A会員登録 Bマイページへ移動する。 C招待コード→招待コードを入力する [RirzTu] コードを入力した方に600円もらえます 今なら更に500円ギフト券を貰った残高からただで買えます。 貰ったギフティプレモはAmazonギフト券(チャージタイプ)に交換できます(電子マネー払いにて) 数分で出来るので是非ご利用下さい : デフォルトの名無しさん [sage] 2019/03/29(金) 13:00:55.65:zXK6y1Ir プロセス間通信でよくね問題 : デフォルトの名無しさん [] 2019/03/29(金) 18:35:30.88:NYOzkE7a 本当じゃん : ◆QZaw55cn4c [sage] 2019/03/29(金) 18:38:47.41:tqWwggkn では common lisp 準拠の xyzzy を推奨いたしましょう : デフォルトの名無しさん [] 2019/03/29(金) 18:58:22.81:KSfDlte3 パワハラ学んだほうが役に立つのにな。 : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/29(金) 19:03:34.54:PFvplbFR 正直言って、 xyzzy とか lem の方が筋がいいわ。 この時代にダイナミックスコープとか正気の沙汰ではない。 (近頃の Emacs Lisp はレキシカルスコープにも出来るけど。) : デフォルトの名無しさん [sage] 2019/03/29(金) 19:13:35.93:SLNwR97S emacsではdynamicもそれはそれで便利なんだが エディタだから各関数がコンテキストによって挙動変えるけど、それを引数として渡す訳じゃないからね dynamicのスタック的な状態変更は便利 : デフォルトの名無しさん [sage] 2019/03/29(金) 21:18:40.18:ddIXjKBD lispってまとめられがちだけれど言語としてのくくりで言えばalgol系くらいの意味合いしかない。 schemeとcommon lispだったらc#とjavaのがよっぽど近い。 : デフォルトの名無しさん [sage] 2019/03/29(金) 23:20:11.58:/wIL6yoo template<class B,class D> class B : public D{ //... }; ってなにがしたいんだろ : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/30(土) 00:58:44.45:raLgb94a ほんまそれ。 そんでもって現代で LISP って言ったら Common Lisp か Clojure あたりを想定して欲しいって思う。 (俺は Scheme 派だが) : デフォルトの名無しさん [] 2019/03/30(土) 13:00:53.68:syvaDn83 Java 8は関数型言語らしい。 : デフォルトの名無しさん [sage] 2019/03/30(土) 13:16:14.77:JgN5T55+ まあFORTHとPostScriptの違いくらいかな : デフォルトの名無しさん [] 2019/03/30(土) 17:34:43.10:syvaDn83 ほぼ同じってことか。 : L [sage] 2019/03/30(土) 17:36:09.42:thjEqqk2 [C++でブラウザアプリ] 田園風景とゆらゆら揺れるアサガオのテスト: WebAssemblyが使えるブラウザならすぐ見れるよ: ttp://http://nowsmartsoft.atwebpages.com/demo2/index.html ひここもりなので、ここでしか見てもらえないんだ。 : デフォルトの名無しさん [sage] 2019/03/30(土) 17:58:09.48:wKuhZLCD 相談じゃないんだろ。スレ違いだから巣に帰れ。 : デフォルトの名無しさん [sage] 2019/03/30(土) 18:15:25.48:VC6Jp+wI 相談スレじゃねえだろ ひけらかしスレだから合ってるだろ : デフォルトの名無しさん [] 2019/03/30(土) 18:17:34.73:syvaDn83 でも、この前、住所さらされたからな。 : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/30(土) 20:56:32.41:raLgb94a ところで以前のウェブサイト (NWSA だとか文字コードだとか平衡木の文書があったやつ) は完全に消えたの? ブログは残ってるみたいだけど、最終更新はだいぶん前だし。 : デフォルトの名無しさん [sage] 2019/03/31(日) 01:36:25.21:kdwrDA9x uint64同士の掛け算でオーバーフローしていないことを確認するには (long double) a * b <= UINT64_MAX であってますか? : デフォルトの名無しさん [sage] 2019/03/31(日) 02:01:02.28:XYg5fWSm > (long double) a * b <= UINT64_MAX 変形してこれでいいのでは? a <= UINT64_MAX / b; // b!=0 : デフォルトの名無しさん [sage] 2019/03/31(日) 08:45:18.44:kdwrDA9x その手がありましたか ありがとうございます : デフォルトの名無しさん [sage] 2019/03/31(日) 11:34:02.92:qtVJ0qYe CPUのオーバーフローフラグを見る標準の手段が未だにないのが不満です : デフォルトの名無しさん [sage] 2019/03/31(日) 11:42:31.55:TSA6EeAl mul_highみたいなの位標準化してくれればいいのにね 大抵のアーキテクチャでは命令として存在するのだし : デフォルトの名無しさん [sage] 2019/03/31(日) 12:23:30.31:JrOSOdLx オーバーフローの前にキャリーフラグだろ… : L [sage] 2019/03/31(日) 14:05:02.11:vDO0/VaM ああ、あれはやめた。 維持費がかかっていたので。 : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/03/31(日) 14:16:24.03:8f3NbPLB コンテンツは面白いので、データが残ってたら Github かどっかに置いてくんない? : デフォルトの名無しさん [sage] 2019/03/31(日) 15:51:07.66:MPbGMBOz 住所晒すやつのサイトなんて見ねえ 即NG : デフォルトの名無しさん [sage] 2019/03/31(日) 16:15:32.43:4SqFrjwY 自分のIPアドレスじゃねえだろ : デフォルトの名無しさん [sage] 2019/03/31(日) 17:20:07.40:vDO0/VaM 気持ちに添えなくてすまないが、残念ながら、今は公開する予定はない。 そんなに気にする人がいるとは思ってなかったんだけど、今後は晒さない。 : デフォルトの名無しさん [sage] 2019/03/31(日) 17:22:28.81:vDO0/VaM ttp://http://nowsmartsoft.atwebpages.com/demo_land/index.html 3D 地形を canvas 2D のワイヤーフレームで表示してみた。 ChromeよりFireFoxの方が速いらしい。 : デフォルトの名無しさん [] 2019/03/31(日) 19:00:54.99 覇権争いのおこぼれかな。 一応貰っておいた : デフォルトの名無しさん [sage] 2019/04/01(月) 00:06:38.24:sCEGrn1T コンストラクタにアウトプット変数をつけるのって邪道ですか? : デフォルトの名無しさん [sage] 2019/04/01(月) 00:44:54.36:sCEGrn1T ↑出力用引数です。。。 : デフォルトの名無しさん [sage] 2019/04/01(月) 00:54:01.89:1RmlgYYh お好きにどうぞ : デフォルトの名無しさん [sage] 2019/04/01(月) 04:25:02.60:uqkfEU2b set<int> を0からnまでの連番でお手軽に初期化する方法ってありますか? for文でinsertしまくるのが普通ですか? : さまよえる蟻人間 ◆T6xkBnTXz7B0 [sage] 2019/04/01(月) 06:36:52.73:OIWsA4Np C++11なら std::set<int> = {1, 2, 3}; と書ける。 : デフォルトの名無しさん [sage] 2019/04/01(月) 08:27:39.15:RynKy10x std::iota : デフォルトの名無しさん [sage] 2019/04/01(月) 10:36:34.64:0fT1DSaw array<int,3>={1,1,1}; 初期化子より要素が3ケなのはわかるのに なんで一々3って記述しなきゃいけないの? : デフォルトの名無しさん [sage] 2019/04/01(月) 10:54:40.61:4B82+HWP 配列初期化子が如何に便利か良く判る : デフォルトの名無しさん [sage] 2019/04/01(月) 12:16:32.59:xC6wZxP+ make_array関数でも作成すれば? : デフォルトの名無しさん [sage] 2019/04/01(月) 12:30:23.48:2+x4EAiR 別につけてもいいけどメソッドとかで返した方が使いやすくね? : はちみつ餃子 ◆8X2XSCHEME [sage] 2019/04/01(月) 13:25:48.82:+c9Nhd8T メソッドって言うなよ : デフォルトの名無しさん [sage] 2019/04/01(月) 13:31:15.62:1RmlgYYh 警察だ : デフォルトの名無しさん [sage] 2019/04/01(月) 13:36:56.63:o/H/iRdv onCreateをbindしたいのですが、これはどうすればコンパイル通りますかね… template<class T> void test(T&& value){ auto onCreate = std::bind(std::fowrawd<T>(value)->onCreate,std::forward<T>(value),std::placeholders::_1); } : 【男の娘】 [] 2019/04/01(月) 13:42:00.26:QUlyRw/u 梅 : デフォルトの名無しさん [] 2019/04/01(月) 13:53:43.17:2cPHsZN4 梅 万葉集巻五 梅花の歌三十二首、并せて序 「初春令月、氣淑風和、梅披鏡前之粉、蘭薫珮後之香」 初春の令月にして氣淑(よ)く風和ぎ梅は鏡前の粉を披き、蘭は珮後(はいご)の香を薫す : デフォルトの名無しさん [sage] 2019/04/01(月) 13:54:41.31:iIi946R+ 私は解を見つけだが、それを示すにはあまりにも 余白が少なすぎる : 1001 [] Over 1000Thread このスレッドは1000を超えました。 新しいスレッドを立ててください。 おみくじ集計(特殊)【男の娘】 : 1002 [] Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。 運営にご協力お願いいたします。 ─────────────────── 《プレミアム会員の主な特典》 ★ 5ちゃんねる専用ブラウザからの広告除去 ★ 5ちゃんねるの過去ログを取得 ★ 書き込み規制の緩和 ─────────────────── 会員登録には個人情報は一切必要ありません。 月300円から匿名でご購入いただけます。 ▼ プレミアム会員登録はこちら ▼ ttps://premium.5ch.net/ ▼ 浪人ログインはこちら ▼ ttps://login.5ch.net/login.php
凡例:
レス番
100 (赤) → 2つ以上レスが付いている
100 (紫) → 1つ以上レスが付いている
名前
名無しさん (青) → sage のレス
名無しさん (緑) → age のレス
ID
ID:xxxxxxx (赤) → 発言が3つ以上のID
ID:xxxxxxx (青) → 発言が2つ以上のID
このページは2ch勢いランキング が作成したアーカイブです。削除についてはこちら 。