C++相談室 part134
: デフォルトの名無しさん (ワッチョイ 5fcb-Q2eK) [sage] 2018/01/20(土) 09:05:42.21:mJKRg6iz0 次スレを立てる時は本文の1行目に以下を追加して下さい。 !extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part133 ttp://mevius.5ch.net/test/read.cgi/tech/1511509970/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 ttp://mevius.5ch.net/test/read.cgi/tech/1509780815/ ■長いソースを貼るときはここへ。■ ttp://codepad.org/ ttps://ideone.com/ [C++ FAQ] ttps://isocpp.org/wiki/faq/ ttp://www.bohyoh.com/CandCPP/FAQ/ (日本語) VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured : デフォルトの名無しさん (ワッチョイ e3cb-Q2eK) [sage] 2018/01/20(土) 09:07:45.45:mJKRg6iz0 STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 とかいうエラーが出るんだけどこれってどうすればいいの? #include <stdafx.h> 後死ね。 言葉が悪いな。それで教えているつもりか。 まぁヒントぐらいにはなったな。 うむごくろう。 いつまでこの糞テンプレ張り続けるんだおい ---- テンプレ ここまで ---- : デフォルトの名無しさん (ワッチョイ 3d46-7dS8) [sage] 2018/01/20(土) 09:24:34.73:i+Y70H5F0 前スレのvectorのsize_tの質問した者だけど 実際gprofでvectorの[]が重い原因になってることを確認してる 次に重い原因がイテレータの比較なんだけど : デフォルトの名無しさん (ワッチョイ 23b3-3fO/) [sage] 2018/01/20(土) 09:35:10.31:CFAgCrzx0 > 実際gprofでvectorの[]が重い原因になってることを確認してる どんな確認したのか知らんけど、確認しててあんな質問してるなら単なるバカとしか思えないが... : デフォルトの名無しさん (ワッチョイ 2334-wln7) [sage] 2018/01/20(土) 09:50:30.10:AVDgMNZq0 またトンデモな使い方をしているのだろうな : デフォルトの名無しさん (ワッチョイ 9d23-bNKV) [sage] 2018/01/20(土) 11:02:33.41:Bd+LbacS0 メモリ帯域が律速になる処理はわりとあるので 大容量のデータを処理してるならおかしくはない キャッシュ効かないメモリアクセスするコストに比べたら整数の拡張など微々たるもんだ : デフォルトの名無しさん (ワッチョイ e3bd-16v+) [sage] 2018/01/20(土) 11:46:34.01:slOCvU7H0 乙 ↓前スレの続き std::vector<double> vec((size_t)1000); ... size_t sz = vec.size(); for (int i = 0; i < (int)sz; ++i) { cout << i << " " << vec[i] << "\n"; } の方がiをsize_tにするよりループ命令の部分が軽量化されることにより早いかも試練(x64では気のせい? およびループ内で他に32 bit演算をやる場合、x64だと全てレジスタ上で賄える可能性が高まるから 速くなるかも試練、 結論: アセンブリコードを確認せよ : デフォルトの名無しさん (ワッチョイ e3bd-16v+) [sage] 2018/01/20(土) 12:06:11.44:slOCvU7H0 いやスマン 例が不適切やったわ; ループ内でstd::coutみたいな重量のある関数呼び出しをしたら 「全てレジスタ上で賄える」とか 「キャッシュが有効活用で劇速化」とかも糞も無いな : デフォルトの名無しさん (ワッチョイ 25b3-GP+B) [sage] 2018/01/20(土) 12:31:55.30:w1mvJepJ0 noexceptってどういうときにつけたらいいですか。 : デフォルトの名無しさん (スップ Sd03-3us9) [sage] 2018/01/20(土) 13:45:44.65:gdCBjjapd [ ] が問題なら生ポ使えと書いてるんだけど無視? : デフォルトの名無しさん (スップ Sd03-3us9) [sage] 2018/01/20(土) 13:51:38.35:gdCBjjapd 重量の有り無しの前に 数値の文字列変換がsize_tとintじゃ違うだろ それがなければどっちでも変わらんよ 64bit環境ならレジスタも64bitなんで : デフォルトの名無しさん (スップ Sd03-3us9) [sage] 2018/01/20(土) 14:00:41.11:gdCBjjapd ん? プロファイラの確認? だとしたら[ ] が遅いんじゃなくてメモリの読み込みが実際に遅い可能性があるのでは? そもそも、 [ ] が問題になるような小さなループで [ ] の時間を正しく測れるのか? いずれにしろ、生ポと比較してみるのが一番 : デフォルトの名無しさん (スップ Sd03-3us9) [sage] 2018/01/20(土) 14:02:23.47:gdCBjjapd メモリ帯域の問題なら もっと大きな視野で最適化をしないとな 複数ループをくっつけてメモリアクセスを減らすとか 細切れに処理をしてキャッシュを効かすとか : デフォルトの名無しさん (ブーイモ MM43-Q2eK) [sage] 2018/01/20(土) 14:04:10.50:C2bNNCkKM []が問題になるわけ無いだろ。ソースコード見たのかよ。 ナマポで書き直すなんて無意味。抜本的にアルゴリズム見直せ : デフォルトの名無しさん (スップ Sd03-3us9) [sage] 2018/01/20(土) 14:05:12.48:gdCBjjapd あ、可能性だけで言えば signedよりunsignedの方が速い 32bit から 64bit の符号拡張はコストが微妙にかかることもあるが、 ゼロ拡張はなにもしなくて良いから レジスタの上位32bitは勝手にゼロになる : デフォルトの名無しさん (スップ Sd03-3us9) [sage] 2018/01/20(土) 14:07:10.18:gdCBjjapd 問題になることもある 君こそソースを見たかな? : デフォルトの名無しさん (ワッチョイ 23b3-3fO/) [sage] 2018/01/20(土) 14:50:38.90:CFAgCrzx0 今時のプロセッサでそんな奴見たことないけど? 妄想じゃないなら具体例よろしく : デフォルトの名無しさん (スップ Sd03-3us9) [sage] 2018/01/20(土) 14:56:00.07:gdCBjjapd そんなやつって何だ? 符号拡張にコストがかかってゼロ拡張にコストがかからない例ならx86-64がそうだが : デフォルトの名無しさん (ワッチョイ 3d8a-ajZX) [sage釣] 2018/01/20(土) 19:43:21.88:J+aY78FJ0 MOVSXもMOVZXも0クロックでは処理できないと思うんだが ZXが0クロックで出来るってエビデンスはあるのかな? ttps://stat.ameba.jp/user_images/20180105/17/genten-nippon/2b/2b/j/t02200142_0640041414105871600.jpg : デフォルトの名無しさん (ドコグロ MM91-3fO/) [sage] 2018/01/20(土) 20:07:30.62:aYLVMpQqM 32bitデータをレジスタに書き込んだら上位32bitが0クリアされることを言ってるんでしょ コスト0って言うのはどうかと思うけど : デフォルトの名無しさん (ワッチョイ 25b3-GP+B) [] 2018/01/20(土) 20:30:37.09:w1mvJepJ0 質問させてください。 以下のコードで push_back 時にコピーコンストラクタが呼ばれます。 ttps://ideone.com/Zodd94 こちらとしては、下のページにあるように、ムーブコンストラクタが呼ばれることを期待しています。 ttps://qiita.com/_meki/items/90f9815a1e899593daa3 なぜムーブではなくてコピーになるのか、教えて頂けないでしょうか。 : デフォルトの名無しさん (ワッチョイ a3a2-GP+B) [sage] 2018/01/20(土) 20:43:12.42:kYo2uzfm0 ムーブコンストラクタが定義されていないから A(A &&) = default; とでもしておけ。 : デフォルトの名無しさん (ワッチョイ 25b3-GP+B) [sage] 2018/01/20(土) 20:49:44.91:w1mvJepJ0 ありがとうございます。解決しました。 : デフォルトの名無しさん (ワッチョイ 25b3-GP+B) [] 2018/01/20(土) 21:07:26.00:w1mvJepJ0 追加で質問させてください。 コンパイラが自動生成する関数で、noexceptがついているのは ・デストラクタ ・ムーブコンストラクタ ・ムーブアサインメントオペレーター の3つでよろしいでしょうか。 よろしくお願いします。 : デフォルトの名無しさん (ワッチョイ e3e7-x16F) [sage] 2018/01/20(土) 21:11:18.68:Z4eZ5+gd0 残り3つもデータメンバと基底クラスの同じものが全部noexceptなら付くよ : デフォルトの名無しさん (ワッチョイ 25b3-GP+B) [] 2018/01/20(土) 21:18:07.18:w1mvJepJ0 回答ありがとうございます。 データメンバと基底クラスのそれぞれのデフォルトコンストラクタが全て noexcept なら、 noexcept なデフォルトコンストラクタが自動生成される。 コピーコンストラクタ、コピーアサインメントオペレーターも同上 という理解でよろしいでしょうか。 また、その条件が成立しないときは、で挙げた3つということになるのですしょうか。 よろしくお願いいたします。 : デフォルトの名無しさん (ワッチョイ 25b3-GP+B) [] 2018/01/20(土) 21:36:13.58:w1mvJepJ0 について自己解決しましたので、質問を取り下げます。 ありがとうございました。 : デフォルトの名無しさん (ブーイモ MMe9-Q2eK) [sage] 2018/01/21(日) 11:30:18.34:LU9Vj3hRM noexceptなしに = defaultで宣言した場合はどうなるの? : デフォルトの名無しさん (ブーイモ MMe9-Q2eK) [sage] 2018/01/21(日) 11:32:32.53:LU9Vj3hRM >> 25の間違いです : デフォルトの名無しさん (ワッチョイ e3e7-x16F) [sage] 2018/01/21(日) 13:25:22.34:XRSBBZxr0 もちろん宣言通りになる : デフォルトの名無しさん (ブーイモ MMe9-Q2eK) [sage] 2018/01/21(日) 13:32:54.03:LU9Vj3hRM thx : デフォルトの名無しさん (ワッチョイ 559f-x16F) [sage] 2018/01/21(日) 19:49:20.49:FwsOgvVZ0 記述上 int* であるが、上書きされた場合に自動的に中身を delete してくれるポインタの入れ物を、 operator= のオーバーロードなしで定義できますか? ちょっと変な質問なのだけど、native C++なら多分以下コードで出来る。 struct PatHead { int* ptr; int* operator=(int* value){ if (ptr) delete [] ptr; ptr = value; return value; } operator int*(){ return ptr;} }; void test(){ PatHead ph[10]; // int* ph[10] と同じ記述で通るのがミソ ph[1] = (int*)1; int* tgt1 = ph[1]; } 問題はこちらが使っているのはVC++/CLIで、 なぜか value struct では operator= のオーバーロードが出来ず、(C3194) マネージ配列に直接入るのは value型だけなのでちょっと詰んでいる。 なお ref struct なら出来るのだが、こちらは逆に初期化部分で記述が増えるので、 それなら諦めようかな、って感じ。 というわけで回避策を思いつく人がいればお願いします。 何で値型で禁止されているか分かる人も居ればよろしく。 : デフォルトの名無しさん (ワッチョイ ae81-MBfL) [] 2018/01/26(金) 13:51:50.30:duEsoqcC0 イテレータでendの一つ前を表すのはありますか。 endからの引き算必須ですか。 : デフォルトの名無しさん (ワッチョイ ba34-0fOh) [sage] 2018/01/26(金) 13:58:16.53:SmrT25am0 &back() : デフォルトの名無しさん (ブーイモ MMaf-nzgF) [sage] 2018/01/26(金) 14:00:31.27:27cZOHeHM 用途に合うかどうか分からないけど rbegin, crbegin : 33 (ワッチョイ ae81-MBfL) [sage] 2018/01/26(金) 14:14:09.94:duEsoqcC0 サンクスです。できました。 : デフォルトの名無しさん (ワッチョイ 9ae7-fPTX) [sage] 2018/01/27(土) 07:12:46.54:ZP0gkUPd0 rbeginはちょっとトリッキーな実装になってることがあるから注意 : デフォルトの名無しさん (ワッチョイ daf9-Ddy8) [sage] 2018/01/27(土) 11:46:50.10:RraDQJG10 実装に依存しないような仕様に沿った使い方をすればいいんでないの? 仕様に合致していない実装ならどうしようもないが。 : デフォルトの名無しさん (アウアウウー Sa77-fQjY) [sage] 2018/01/27(土) 19:12:13.06:Boft2e8Ea SHA256のハッシュをkeyにしたmapを高速で扱いたいんだが、 keyのoperator <,>それぞれでmemcmpしてて、多分このせいで性能悪くなってる なんか良い解決策ってないですかね? Linuxのrbtreeと比較すると100万件あたり150msec程度差がついてました : デフォルトの名無しさん (ワッチョイ aa7e-rgA5) [sage] 2018/01/27(土) 19:13:43.71:IajdzWB80 simd : デフォルトの名無しさん (ワッチョイ 6e62-WBz1) [sage] 2018/01/27(土) 19:44:42.49:MtS5alc90 unordered_mapにsha256の関数渡せばええやん : デフォルトの名無しさん (ブーイモ MMda-FYQJ) [sage釣] 2018/01/27(土) 20:08:58.78:6QrTsC7zM fpga : デフォルトの名無しさん (ワッチョイ ba34-0fOh) [sage] 2018/01/27(土) 22:07:02.09:bqR9C45e0 mapじゃなくてハッシュを実装しろとしか : デフォルトの名無しさん (アウアウウー Sa77-fQjY) [sage] 2018/01/27(土) 22:15:03.18:Im+FAy1Qa 便利そうだと思ったけど、データ構造的にアライメント揃えられないから使えなさそう ソート済みデータを扱いたいパターンもあるので使えないです コード的にさっくり改善する方法がなさそうなので map諦めてそこだけ完全自作することにしました レスしてくれた方々サンクスです : デフォルトの名無しさん (ワッチョイ 9ae7-fPTX) [sage] 2018/01/27(土) 22:53:57.64:ZP0gkUPd0 Compareの自作で何がいけなかったのかわからないけど解決おめ : デフォルトの名無しさん (スップ Sd7a-4fyU) [sage] 2018/01/27(土) 23:05:46.83:r2gR5oNyd 赤黒木ってスマートポインタを使って実装できますか? 親を弱参照で書いたらわけわかめに : デフォルトの名無しさん (スプッッ Sd7a-g7kd) [sage] 2018/01/28(日) 01:55:54.91:B1112Jntd ハッシュをソートかあ : デフォルトの名無しさん (ワッチョイ 9abd-xSVK) [sage] 2018/01/28(日) 03:22:06.75:vIDP+sWr0 コピーしたくないオブジェクトへのポインタ(ていうか全体をシリアライズするの可能性も考えたらindexがマジお勧め)の配列おソートすれば良い そういった実装の詳細はクラスの中に隠すことができる 何のためにC++を使っているのやヽ(`Д´)ノ!!!11!1 : デフォルトの名無しさん (ワッチョイ aee8-7ZJK) [sage] 2018/01/28(日) 08:17:39.92:abHZXNlp0 なんかモヤモヤするなそれw : デフォルトの名無しさん (ブーイモ MMaf-nzgF) [sage] 2018/01/28(日) 11:41:38.50:/ypN0hd6M hashは値に対してユニークじゃないけどいいの? : デフォルトの名無しさん [] 2018/01/28(日) 14:41:11.23 そりゃハッシュ衝突用のフィールドくらい作ってるだろうよ 質問にないことは心配しなくていいよ : デフォルトの名無しさん (ワッチョイ f723-g7kd) [sage] 2018/01/28(日) 15:09:59.60:RaXbFAH70 心配してるんじゃなくてバカにしてるんだよw : デフォルトの名無しさん (ワッチョイ bab3-dVd5) [sage] 2018/01/28(日) 15:44:58.16:C2Jb//yt0 バカにしようとして失敗してるとしか見えないけど w : デフォルトの名無しさん (ワッチョイ bbb3-rgA5) [sage] 2018/01/28(日) 20:33:36.08:NzqukFwp0 Impliment.h class Impliment { public: base; }; Interface.h class Interface { : デフォルトの名無しさん (ワッチョイ bbb3-rgA5) [sage] 2018/01/28(日) 20:42:03.84:NzqukFwp0 すいません。途中で書き込んでしまいました。 以下のようなクラスを作ったのですが、 derivedがImp::baseを継承しているため、 インクルードの順番が固定されてしまいます。(Impliment.hが先でないといけない) こういったクラスは使う人から見て嫌がられるでしょうか。 ご意見をいただけるとありがたいです。 Impliment.h class Impliment { public: class base {} }; Interface.h template<class Imp> class Interface { private: class derived : public Imp::base {} } : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-rgA5) [sage] 2018/01/28(日) 20:56:07.47:Xl/BPHGJ0 「XXの実装とインターフェイスが分かれている」ということをユーザが意識しないといけないのは抽象化の不足だと思う。 分離した形のデザインで開発するのはかまわないけど、ユーザに対してはなるべく隠すのが望ましい。 #include<Implement.h> #include<Interface.h> と書いたヘッダファイルを用意しておく程度のことでもだいぶんマシになる。 (インクルードガードはしておくこと) : デフォルトの名無しさん (ワッチョイ f723-g7kd) [sage] 2018/01/29(月) 02:50:08.46:gQcv+kbG0 普通は interface.h の冒頭で implement.h をインクルードしておく : デフォルトの名無しさん (ワッチョイ efef-WRop) [sage] 2018/01/29(月) 05:39:18.37:+mqzfkB+0 このコードだけならインクルード順が逆でも問題ない。 : デフォルトの名無しさん (ワッチョイ bbb3-rgA5) [sage] 2018/01/30(火) 20:17:26.27:fsahOVUj0 レスありがとうございます。 Implimentは複数あって、ユーザーが選ぶことができる というのを想像して作っていました。 template化する前はそこでインクルードしていました。 たしかに、このコードだけでは大丈夫ですね。 正確にはこのコードだけではないので、他に原因があるのかもしれません。 ご指摘ありがとうございます。 : デフォルトの名無しさん (ワッチョイ 16e7-fPTX) [sage] 2018/01/30(火) 21:08:08.01:VkcoBYQV0 Implement入れ替えさせたいならユーザーに適当な所で template Interface<MyImplement>; って書かせりゃいいだけじゃないの? : デフォルトの名無しさん (ワッチョイ ba34-0fOh) [sage] 2018/01/30(火) 21:19:19.29:Lbh+cCVN0 typename imp::base : デフォルトの名無しさん (ワッチョイ 9fbd-CNA0) [sage] 2018/02/04(日) 11:20:04.76:r6E1M8790 質問ですが 「このクラスはバイト列としてコピーできる」ということを明らかにするために 明示的にコピーコンストラクタを書くとして、 どう書けば処理系に依存することなくデフォルトのコピーコンストラクタ以上の性能になることを保証できますか (もしくは、「このクラスはバイト列としてコピーできる」ということを明示する構文はありますか) : 片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdbf-vcz1) [sage] 2018/02/04(日) 11:26:54.06:i7yJvuTcd MyClass(const MyClass&) = default; : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-wbgk) [sage] 2018/02/04(日) 11:36:31.71:H9FebDBN0 デフォルトのコピーコンストラクタはメンバのコピーコンストラクタを起動するので、 そのクラス (に属するオブジェクト) 全体がバイト列としてコピーするわけではない。 trivially copyable class の要件を満たすように書けばバイト列としてコピー可能と保証される。 コンストラクタの書き方だけでは保証できない。 : デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/04(日) 13:04:56.23:WecC8o2P0 memcpyするコピコンをユーザー定義すればええやん : デフォルトの名無しさん (ワッチョイ 9fbd-CNA0) [sage] 2018/02/04(日) 13:46:35.82:r6E1M8790 なるほど「= default;」のありがたみがわかりた なるほどそれだと安全性の点でイマイチ… バイト列としてそのままリモートPCに送ったりするクラスに誰かが バイト列としてのコピーが可能でないコードを追加したとしても コンパイラで検出する術が無いっぽいように読める : デフォルトの名無しさん (ワッチョイ 9fbd-CNA0) [sage] 2018/02/04(日) 13:47:37.01:r6E1M8790 訂正 誤:バイト列としてのコピーが可能でないコード 正:バイト列としてのコピーを不可能にするコード : デフォルトの名無しさん (ワッチョイ 1f7e-wbgk) [sage] 2018/02/04(日) 13:47:46.54:HBpG+TPK0 std::is_trivially_copyable<T>がtrueになるように書いて ttps://cpprefjp.github.io/reference/type_traits/is_trivially_copyable.html トリビアル型とは何かは検索して : デフォルトの名無しさん (ワッチョイ 1f7e-wbgk) [sage] 2018/02/04(日) 13:52:58.38:HBpG+TPK0 なおさらtype_traitsで条件に合わなければコンパイルを失敗させればよい : デフォルトの名無しさん (ワッチョイ 9fbd-CNA0) [sage] 2018/02/04(日) 14:08:05.83:r6E1M8790 おk : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-wbgk) [sage] 2018/02/04(日) 16:47:05.72:H9FebDBN0 まあ書こうと思えば書けないことはないが、 やった結果に整合性がとれるかどうかは別問題なのでな……。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-wbgk) [sage] 2018/02/04(日) 17:24:06.38:H9FebDBN0 流れをぶった切って質問するんだけど、 配列の一部をとる参照とかって作れない? 実際にはコンパイルが通らないけど、やりたいことはこんな感じ。 int a[3]; int (&b)[2] = static_cast<int (&)[2]>(a); : デフォルトの名無しさん (ワッチョイ 9fa2-wbgk) [sage] 2018/02/04(日) 18:06:17.19:B+seqFts0 reinterpret_castすれば? : デフォルトの名無しさん (ワッチョイ 7723-Us3F) [sage] 2018/02/04(日) 18:22:52.47:HJ1AdVlZ0 ポインタにして剥がせばいい : デフォルトの名無しさん (ワッチョイ 1f7e-wbgk) [sage] 2018/02/04(日) 18:28:31.26:HBpG+TPK0 配列型はポインタではないので途中からとかない : デフォルトの名無しさん (ワッチョイ bfe7-j4Dg) [sage] 2018/02/04(日) 18:55:06.41:i/oNqC3f0 一応うまく行ったけど規格で保証された挙動かどうかはよくわからない ttps://ideone.com/wVzc6b : デフォルトの名無しさん (ワッチョイ 9fcb-qyJP) [sage] 2018/02/04(日) 19:14:07.38:NcR26d4z0 でもポインタにしてしまうと困るシチュエーションなんてありうるの? マクロの中でsizeofしてるとか? : デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/04(日) 20:30:26.18:WecC8o2P0 意味わかんねえ どーゆーこと? : デフォルトの名無しさん (ワッチョイ 9fbd-CNA0) [sage] 2018/02/05(月) 23:20:37.74:y5vbQcAP0 メンバのコピーコンストラクタを起動すべきところをmemcpy()しかしない手製コピーコンストラクタで済ませようとしたら破滅が訪れる MyClass(const MyClass&) = default; なら勝手にやってくれるのでその心配が無いので安心 : デフォルトの名無しさん (ワッチョイ 9f23-Us3F) [sage] 2018/02/05(月) 23:28:20.73:QTKEhMlZ0 しかしまあ なんていう便利なモノがあるとは フラフラこういうスレ読んでるのもためになるなあ : デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/06(火) 07:54:17.35:CtmFRYuD0 : デフォルトの名無しさん (ワッチョイ ff8a-phf3) [sage] 2018/02/06(火) 08:05:48.85:cp/uvOeq0 処理系に依存することなく「保証」なんて出来ない 以上 : デフォルトの名無しさん (ワッチョイ 7723-Us3F) [sage] 2018/02/06(火) 08:27:38.08:rGp9SuaC0 で解決している もしくは以下への回答もで出ている : デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/06(火) 09:14:20.61:CtmFRYuD0 バイト列コピーが = default; なわけねーだろアホ : デフォルトの名無しさん (ワッチョイ 7723-Us3F) [sage] 2018/02/06(火) 11:45:28.85:rGp9SuaC0 よく読め バイト列コピーでokの保証は 遅くならないコンストラクタの書き方が : デフォルトの名無しさん (ワッチョイ 7723-Us3F) [sage] 2018/02/06(火) 11:48:04.39:rGp9SuaC0 そもそも「どうコンストラクタを書けば」ってのを質問してるんで バイト列コピーでコンストラクタを書けってのは単にの珍解答に過ぎない : デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/06(火) 11:51:41.68:CtmFRYuD0 すまんが日本語でたのむ : デフォルトの名無しさん (ワッチョイ 7723-Us3F) [sage] 2018/02/06(火) 11:54:37.03:rGp9SuaC0 元の質問は ・処理系に依存せずデフォルトより遅くならないことが保証されているコンストラクタの書き方 もしくは ・バイト列コピーでokと明示する構文 だろ。 前者は 後者は : デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/06(火) 12:36:57.61:CtmFRYuD0 元質問: デフォルトのコピーコンストラクタ以上の性能 おまえ: デフォルトより遅くならないこと よく読めをそのまま返す : デフォルトの名無しさん (ワッチョイ 9fe1-pzKJ) [sage] 2018/02/06(火) 12:57:03.34:bHMYZ9Vj0 以上っていうのは等しいかまたはそれを越えるという意味だぞ : デフォルトの名無しさん (ワッチョイ 7723-Us3F) [sage] 2018/02/06(火) 14:01:35.47:rGp9SuaC0 そもそも memcpy は前者の性能保証も後者の仕様の保証もどちらも満たしてない 仕様が保証されてるなら多分性能的に大丈夫だろうという程度 間違いを認めると死ぬ病気なんだろうからもうこれ以上は言わない。 : デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/06(火) 14:38:54.29:CtmFRYuD0 バイトコピーでmemcpyより高性能な手段を1つでも例示したらどうなんだ > 間違いを認めると死ぬ病気なんだろうから ああ、おまえがか : デフォルトの名無しさん (ワッチョイ ff8a-uMb5) [sage] 2018/02/06(火) 18:18:02.35:cp/uvOeq0 ttps://stackoverflow.com/questions/28623895/why-is-memmove-faster-than-memcpy : 62 (ワッチョイ 9fbd-CNA0) [sage] 2018/02/06(火) 22:02:19.27:MckGyr3K0 memcpy()より速いコピー手段Xが仮にあったとして 論理的にmemcpy()で済むケースについてコンパイラが提供する デフォルトのコピーコンストラクタがコピー手段Xにならない理由がわからん… 個人的には「=default;」と書いたら最高性能なんなら毎回手でmemcpy()とか書きたくないカンジ : デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/06(火) 22:06:49.77:CtmFRYuD0 class A { public: A() {} A(A const&) { std::cout << "aho"; } }; class B { public: A a; B() = default; }; int main() { B b, c = b; //this will call you. } : デフォルトの名無しさん (ワッチョイ 9fbd-CNA0) [sage] 2018/02/06(火) 22:09:42.68:MckGyr3K0 は「論理的にmemcpy()で済むケース」では無いからちげう : デフォルトの名無しさん (ワッチョイ ffd7-wbgk) [sage] 2018/02/06(火) 22:29:22.47:CtmFRYuD0 だから日本語でたのむって言っただろ : デフォルトの名無しさん (ワッチョイ 9fbd-CNA0) [sage] 2018/02/06(火) 22:29:24.08:MckGyr3K0 どうした? 訂正はよ : デフォルトの名無しさん (ブーイモ MMcf-9NhG) [sage] 2018/02/06(火) 23:07:57.82:hdfY5rL3M 間違いを認めて・・・死んだのか? : デフォルトの名無しさん (ワッチョイ 9fbd-CNA0) [sage] 2018/02/06(火) 23:21:41.18:MckGyr3K0 仕方ないので漏れが訂正するわ; ttps://ideone.com/TZnGv4 ↑のコードの (*1)は「=default;」でデフォルトのコピコンの使用を明示 (*2)は手でmemcpy()でコピーするように書いたコピコン 次の条件で試したら(*1)も(*2)も同じコードになったわ x86-64 gcc 7.2 -O2 -fno-strict-aliasing -std=c++14 -pedantic -Wall -Wextra こことかで試せるが保存と公開方法がわからんかったのでideoneを使わせてもろうた ttps://gcc.godbolt.org/ 漏れの国語力ではようわからんが、さすがに多分は間違いなんジャマイカ、 : デフォルトの名無しさん (ワッチョイ 9f34-FPX7) [sage] 2018/02/06(火) 23:34:18.80:Ur4dB7lv0 Cから来た連中ってどうしてmemcpyやmemset使いたがるんだろうな : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-wbgk) [sage] 2018/02/07(水) 04:09:18.59:OAPGz/K+0 reinterpret_cast でなければ通らないときはだいたい駄目なときやわ。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-wbgk) [sage] 2018/02/07(水) 04:22:37.75:OAPGz/K+0 「default がバイト列コピーとは『限らない』」という意味で は真。 : デフォルトの名無しさん (ブーイモ MMcf-EKSC) [sage釣] 2018/02/07(水) 05:00:09.29:1UF8v8gcM 開始アドレス、終了アドレス、サイズが64bit等で割り切れれば バイトコピーより早いコピーはあるだろうね : デフォルトの名無しさん [] 2018/02/07(水) 07:27:28.65 頭のいいコンパイラなら勝手にベクトル処理とかしてくれるんじゃないの? 知らんけど : デフォルトの名無しさん (ワッチョイ 57b3-wbgk) [] 2018/02/07(水) 22:28:51.20:MTpdY7NJ0 "!"!"!MOHYO!"!"!"2" 1.[[[HUn≒MUL=POSI≠MAHO+Set*HUGE=SAGE=LOGE=NOISIA=0≒1]]] 2-[[[[[[[E=RAT%2^10%SPELAn!%]&!TOWA&!PEG#!NOLNOL8!#!HYAGO!2#]1*2=1]U]S]0]O]!#PAL! 3--->PAGODOL7&!@17,2222734.15&[[[%%RENRAK6,9,99"^10"]#$11.2%}]KAIJ]{ 41.2SSS = RALQI2.β{{{RA4,0,238^97,1,$.S.L.E.I.L."Q5352.15Q"JOL"5*3>.3q}}}>1.2<0 .3φTALHOSI"0">.10<1.235<1.2>51≠52===55.632>V="E=0.835"of"1.32","632",0.683,1.end { : 片山博文MZ ◆T6xkBnTXz7B0 (スププ Sd62-d/x4) [sage] 2018/02/10(土) 19:52:35.19:x9I4Wn6Pd C++では、 int i; for (i = 0; i < 9; ++i) { ... } が、 for (int i = 0; i < 9; ++i) { ... } って書けるのは知っているだろう。( )の中で、変数を宣言できる。 だが、ifやwhileの( )の中で、変数を宣言できることを知らない人は多い。 : デフォルトの名無しさん (ワッチョイ 99b3-BC1W) [sage] 2018/02/11(日) 04:31:12.99:9irhhPDg0 C++17では if ( auto v = n; conditions ) { ... } が可能になるし、これからは広がってくれるかのう : デフォルトの名無しさん (ワッチョイ 2ee8-8oIi) [sage] 2018/02/11(日) 06:11:03.22:l3GMmVaq0 これホント待ち遠しい : デフォルトの名無しさん (ワッチョイ 4539-102K) [] 2018/02/11(日) 17:00:15.07:RGzNlubj0 それほど待ち遠しいか? : デフォルトの名無しさん (ワッチョイ 99b3-7Au1) [] 2018/02/11(日) 17:27:44.93:QA9xO9uU0 待ち遠しくない : デフォルトの名無しさん (ドコグロ MM0a-/0XS) [sage] 2018/02/11(日) 17:34:07.64:A61Ds/EIM for( ) の制御変数はそのループでしか使わないことが多いから意味あったけど、if( ) でそんなケースはまれだしなぁ あれば使うけど待ち遠しいって言うほどじゃない気がする : ◆QZaw55cn4c (ワッチョイ 2260-nHV3) [sage] 2018/02/11(日) 17:36:34.68:bT0HWvJB0 理想主義的な文法ですが、実効性はあるのか疑問ですね : デフォルトの名無しさん (ワッチョイ ed9b-gPIt) [sage] 2018/02/11(日) 17:40:12.67:KWDwqk940 一瞬意図が分からなかったが ()の中が;で区切れるという話? : デフォルトの名無しさん (ブーイモ MMb6-ZT4h) [sage] 2018/02/11(日) 17:41:52.24:rD0gl3AiM dynamic_castとの組み合わせで使うとかどうよ : デフォルトの名無しさん (ワッチョイ c27c-jA6l) [sage] 2018/02/11(日) 19:11:10.58:av7bQMHG0 結構あると思うけどね if(DWORD err = GetLastError(); err != NO_ERROR) この場合NO_ERRORが0だって分かってるから if(DWORD err = GetLastError()) で済むから無意味だけど : デフォルトの名無しさん (ワッチョイ 22f9-YiuZ) [sage] 2018/02/11(日) 19:17:28.82:yo2OB3cP0 前者の方が意図が明確だし意味はあると思う : デフォルトの名無しさん [] 2018/02/11(日) 20:06:43.52 >if(DWORD err = GetLastError(); err != NO_ERROR) 普通こうやろ if((DWORD err = GetLastError()) != NO_ERROR) 変数宣言は少しは意味あるかもしれんが(Perlと同じことができるってこと) 複文書けるのは特にメリット感じないわ : デフォルトの名無しさん (ワッチョイ 86e7-zMUp) [sage] 2018/02/11(日) 20:41:29.80:Ag9E1Urq0 それ通らんよ こうだろ DWORD err; if((err = GetLastError()) != NO_ERROR) if内でしか使わないerrが外部に漏れてるのがよろしくないってこと : デフォルトの名無しさん [] 2018/02/11(日) 20:56:03.30 それが通るという変更だと思ってたわ こう書けるPerlのほうがまだ優位性あるね if((my $err = GetLastError()) != NO_ERROR) : デフォルトの名無しさん (ワッチョイ d27e-jA6l) [sage] 2018/02/11(日) 22:10:23.49:p+z832PL0 if(init ; expr)だと初期化と式が関連していなくてもいいのでとは違う構文になる だからこんなのでもよい if(int err = GetLastError(); hoge.aho()) lock_guardもしておける if(std::lock_guard<std::mutex> lock(m); flag) 構造化束縛も使える if(auto [a, b, c] = f(); b > c){ std::cout << "b > c" << std::endl; } : デフォルトの名無しさん (ワッチョイ ddc3-saCW) [] 2018/02/12(月) 12:22:30.52:sATukCOa0 Cでは名前空間っていうのをすごい扱っていた気がするんだけどC++は名前空間扱うことってないの? 一つのアプリケーションも完成させたことがないど素人の質問ですまんが : デフォルトの名無しさん (ワッチョイ 62cb-ZT4h) [sage] 2018/02/12(月) 12:43:48.54:qekpeHDJ0 まずは"C"の入門書を読んで、何を見間違えたのかはっきりさせてからにしようか。 : デフォルトの名無しさん (ワッチョイ e1eb-IGFW) [sage] 2018/02/12(月) 14:08:57.84:sGdsmrZD0 初心者スレに池 : デフォルトの名無しさん (ワッチョイ 319f-R9JW) [] 2018/02/12(月) 20:44:41.93:gfcybQxo0 気のせい。 : デフォルトの名無しさん (ワッチョイ 6e8a-9Kvu) [sage] 2018/02/13(火) 00:10:36.10:YGwN9DGw0 Cにnamespaceは無いだろ : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-jA6l) [sage] 2018/02/13(火) 17:30:20.31:tUR5ZBgZ0 構造体タグと型名の名前空間が分かれているといったような意味での名前空間は C に有るが C++ では構造体タグはそのまま型名としても使えるし、そういう意味での名前空間の話かな? : デフォルトの名無しさん (ワッチョイ c26e-jA6l) [sage] 2018/02/13(火) 17:45:08.06:a1RYP/Gm0 こんな名前空間もあるね int x; int main(void) { x = 1; int x; x = 2; { int x; x = 3; } return 0; } : デフォルトの名無しさん (ブーイモ MM6d-ZT4h) [sage] 2018/02/13(火) 17:55:17.58:Xr6xvVy+M それはスコープでは : デフォルトの名無しさん (ワッチョイ c26e-jA6l) [sage] 2018/02/13(火) 18:15:03.36:a1RYP/Gm0 変数だよ 代入でもあるね : デフォルトの名無しさん (ワッチョイ d27e-jA6l) [sage] 2018/02/13(火) 20:09:02.02:NNOtJgpO0 謎すぎワロタがそこから上のスコープのxを参照してくれ : デフォルトの名無しさん (ラクッペ MM61-cyyJ) [sage] 2018/02/13(火) 20:19:22.41:Za/EZbH7M ブロックって言ってる : デフォルトの名無しさん (ワッチョイ c26e-jA6l) [sage] 2018/02/13(火) 21:49:01.90:a1RYP/Gm0 アホばっかり がっかり : デフォルトの名無しさん (ワッチョイ 9f23-TT3E) [sage] 2018/02/15(木) 12:08:37.28:Sgd3BwBT0 std::mapのように文字列や構造体をキーにした高速アクセスができて、 要素の数が一定数を超えたらLRU形式で勝手に削除してくれる、 キャッシュのような機能を実装したいのだけど、 C++でそのような仕組みを作れるクラスはないですか? : デフォルトの名無しさん (ワッチョイ 378a-TkRA) [sage] 2018/02/15(木) 17:00:44.45:GbCJk+7h0 自分で実装するならどうにでもなるだろ そのための道具は全て標準で揃っている : デフォルトの名無しさん (ワッチョイ ff8a-NmL4) [sage] 2018/02/15(木) 18:15:51.96:6url8MQd0 バックグラウンドならスレッド使うしかないんじゃないかな : デフォルトの名無しさん (ブーイモ MMbf-4Nx+) [] 2018/02/15(木) 19:13:27.39:CSnzpiZpM C++のプログラマーって性格ねじ曲がってるなあ 初めてGo応援したくなったわ : デフォルトの名無しさん (ワッチョイ 9f60-qi38) [sage] 2018/02/15(木) 19:34:35.63:95vLe5Bi0 どんな点が、性格悪い、と思わせるのですか? : デフォルトの名無しさん (ワッチョイ d7eb-1VRC) [sage] 2018/02/15(木) 20:03:21.73:qihnyYvs0 それだよそれ : デフォルトの名無しさん (ワッチョイ 9fbd-RFe/) [sage] 2018/02/15(木) 21:14:35.68:MoAPifjS0 C++は多分チューリング完全だと思う : デフォルトの名無しさん (ドコグロ MMdf-dLOu) [sage] 2018/02/15(木) 21:20:32.50:6nYos/bmM 要素数が閾値を超えるのは要素が追加される時だからその時に古い奴を削除すりゃいいだけじゃね? : デフォルトの名無しさん (ブーイモ MM1b-goL+) [sage] 2018/02/15(木) 23:50:52.95:fG1U9Z3qM 簡単で良いのでサンプルコード書いてもらえませんか? : デフォルトの名無しさん (ワッチョイ 9fa8-yZIn) [sage] 2018/02/16(金) 00:43:14.82:uaG+5sVQ0 じゃないけどシンプルにいくなら { map<key,value> data; // 本来のデータ map<key,list<key>::iterator> lruindex; // list<key> lrulist; // LRUリスト ... // mapと同じインターフェイス } みたいなクラスで要素の追加・削除・参照とかの時にLRUリスト見て処理すればいい : デフォルトの名無しさん (ワッチョイ ff80-Pey1) [sage] 2018/02/16(金) 03:16:29.76:DpsRPWWQ0 辞書・線形リスト・2分木を、組み合わせる。Ruby で書くと、 class LRU_hash def initialize (max_size = 3) # ary は、hash に追加・アクセスした順 @hash = {}; @ary = [] @max_size = max_size end def push (key) if @hash.has_key? key # 一旦、要素を削除してから、最後尾に追加しなおす @ary.delete key else if @max_size == @hash.size # 先頭要素を削除してから、最後尾に追加する @hash.delete(@ary.shift) end @hash[key] = true end @ary.push key end def print_buf puts @ary.join ', ' end end ary = ["あ", "a", "あ", "い", "b", "あ", "c"] hash = LRU_hash.new 4 ary.map { |key| hash.push key } hash.print_buf #=> い, b, あ, c : デフォルトの名無しさん [] 2018/02/16(金) 04:31:51.17 > # ary は、hash に追加・アクセスした順 参照のたびに最後尾に追加しなおすの? : デフォルトの名無しさん (ワッチョイ d7e3-2H/C) [sage] 2018/02/16(金) 06:27:04.53:HICjIKnm0 プログラムを作っていて困っています。 プログラム動作環境、windows 7 x86_x64 プロセスをExplorerを親として、 起動したプロセスにファイルの存在するディレクトリを作業ディレクトリとして 割り当てたい。 ただし、プロセスへのアタッチによる変更は禁止とする。 ようするにファイルをダブルクリックして起動するのと同じ状況を再現したいのです。 例 C:\hoge\fuga.exe [現状] Explorer C:\hoge\fuga.exe 親 explorer.exe カレントディレクトリ C:\Windows\System32\ [理想] Explorer C:\hoge\fuga.exe 親 explorer.exe カレントディレクトリ C:\hoge\ : 144 (ワッチョイ ff80-Pey1) [sage] 2018/02/16(金) 07:56:00.35:DpsRPWWQ0 で、LRU と書いてあるから、Hash に追加しようとした度に、 すでに存在する場合でも、配列の最後尾に追加しなおした どういう意味か、正確にはわからないけど : デフォルトの名無しさん (ワッチョイ 57fc-T3WU) [sage] 2018/02/16(金) 08:03:01.53:TOIQut300 explorer.exeへのショートカットを作ってプロパティで作業ディレクトリを指定するか、 COMでIShellLink::SetWorkingDirectoryを使って同じことをするあたりか? : 134 (ワッチョイ 9f23-TT3E) [sage] 2018/02/16(金) 09:56:21.20:+b2iJMK40 みなさんありがとうございます。 std::mapにLRUや最大要素数の仕組みを持たせた派生クラスでも 無いかと思ったのですが、標準ではやっぱり無いですか。 のように、std::mapをメンバの一つに持たせた独自クラスを 一から作っていくことになるんですかね。 : デフォルトの名無しさん (ワッチョイ 9f12-pjg9) [sage] 2018/02/16(金) 10:11:55.71:JoalkiMd0 amazonランキングの謎を解く とか言う本でmove-to-frontを見た 本の紹介「Amazonランキングの謎を解く」 ttp://www.kenkyuu.net/whatsnew/2011/08/book2011-08-01.html >「move-to-front規則」(最後に売れた順に並べる、つまり、注文のたびに1位にジャンプする) Move To Front - Wikipedia ttps://ja.wikipedia.org/wiki/Move_To_Front : デフォルトの名無しさん (ワッチョイ 57fc-T3WU) [sage] 2018/02/16(金) 10:54:10.09:TOIQut300 ageだね : デフォルトの名無しさん (ワッチョイ 378a-TkRA) [sage] 2018/02/16(金) 14:25:37.67:UjPhOEUu0 「c++ lru map」でググったか? いくつかサンプルになりそうなコードが見つかるんだけど : デフォルトの名無しさん (ブーイモ MM3b-mhGK) [sage] 2018/02/16(金) 18:05:58.99:GGXfeEqkM 江添さんのC++17本予約しようかな : デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/16(金) 18:26:06.12:waI0am5S0 予約しなくても売れ残るからいつでも買える : デフォルトの名無しさん (アウアウカー Sa6b-s4hu) [sage] 2018/02/16(金) 20:04:35.13:1Lr9lxEpa C++を勉強しようと思ってる者ですが書籍を探しております。Cはある程度書けるのでそれを前提とした書籍が欲しいです : デフォルトの名無しさん (ワッチョイ bf0e-qi38) [sage] 2018/02/16(金) 20:33:50.33:Rc+MuzY40 C++ クイック入門&リファレンス プログラミング言語C++ 第4版 : デフォルトの名無しさん (ワッチョイ 9f60-qi38) [sage] 2018/02/16(金) 20:36:34.10:9b60nRDg0 C++11 以前だが accelerated c++, ここでフォローするよ : デフォルトの名無しさん (ワッチョイ 57fc-T3WU) [sage] 2018/02/16(金) 20:37:11.23:TOIQut300 禿4は俺も推奨する C++11の良本だ : デフォルトの名無しさん (アウアウカー Sa6b-s4hu) [sage] 2018/02/16(金) 21:09:12.34:+EaaPhKWa めっちゃ高いけどその価値あるのね : デフォルトの名無しさん (ブーイモ MMbf-zxnT) [sage] 2018/02/16(金) 21:46:03.21:5AmFsIq1M こっちはフッサフサやで ttps://images-na.ssl-images-amazon.com/images/I/51fYzbYoXFL._UX250_.jpg : デフォルトの名無しさん (ワッチョイ 9f4c-C9DI) [sage] 2018/02/16(金) 22:03:34.89:qDhjnryl0 誰がハゲやねん : デフォルトの名無しさん (マクド FF6b-xgEu) [sage] 2018/02/17(土) 09:43:48.64:Lqib7/b9F 以下のようにconst char*型の文字列でchar*型の変数を初期化したいときに strcpyやstrlenを書かずにstd::stringを利用して短くかけないかと思うのですが msvcだとエラーにならず、clang, gccだとdeleteでセグメンテーション違反になります。 どうすればより良い感じになるでしょうか?const_castはできれば使いたくないです。 #include <string.h> #include <string> #include <iostream> int main() { const char* asdf = "asdf"; // char* psz2 = new char[strlen(asdf)+1]; // strcpy(psz2, asdf); std::string *psz = new std::string(asdf); char* psz2 = &(*psz)[0]; std::cout << psz2 << std::endl; delete psz2; return 0; } : デフォルトの名無しさん (ワッチョイ 378a-TkRA) [sage] 2018/02/17(土) 09:51:35.08:mykV+fTk0 delete psz2なんてしちゃだめconst関係ない : デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/17(土) 10:21:38.22:4SqFrjwY0 何故stringそのものじゃなくて内部データをdeleteしようと思ったのか newで確保した配列じゃないからdeleteはできない stringの内部データは静的な配列と動的な配列を組み合わせて表現されている mscvの場合先頭16文字はchar[16]でそれ以降は動的な配列に入るようになっている psz[0]のアドレスはchar[16]の先頭アドレスなので当然deleteできない msvcはdeleteに失敗しても落ちないのかな : デフォルトの名無しさん (ワッチョイ ff80-Pey1) [] 2018/02/17(土) 10:47:53.57:IU1gsQgu0 本格的な本なら、ロベール、ハーバート・シルトの独習 軽めの本なら、柴田 望洋、林 晴比古、猫 : デフォルトの名無しさん (ワッチョイ 9fcb-8YMj) [sage] 2018/02/17(土) 11:22:13.08:++v6vSjK0 ハンガリー人まだ絶滅してないのか。 stringはnull terminatedでないからpszはおかしい。 psz2もnull terminatedの保証がないからc_strを使うべき。 うまくいったらstrdupも調べとこうな。 : デフォルトの名無しさん (ワッチョイ d793-MfWd) [sage] 2018/02/17(土) 11:25:45.81:szUqPRvW0 char* psz2 = &(*psz)[0]; って char* psz2 = psz->c_str(); と同じなのかな? いずれにせよ delete psz; は出来る(するべき?)だけど、 delete psz2; は出来ないんじゃないかな。 : デフォルトの名無しさん (ワッチョイ 378a-TkRA) [sage] 2018/02/17(土) 11:30:29.43:mykV+fTk0 必要ないところでnew/delete使う人は根本からして何も分かってない : デフォルトの名無しさん (ワッチョイ ff8a-NmL4) [sage] 2018/02/17(土) 15:18:23.73:YAgvIyFy0 お前はstringがただの配列だと思っているのか? このトンチキ野郎! : デフォルトの名無しさん (ワッチョイ bf0e-qi38) [sage] 2018/02/17(土) 16:50:38.35:Q4Uv6cZz0 弁護士の唐沢です しっかり「char* const」と「const char*」の違いを認識しなさい const char*は参照先の定数を変更しない事を保証する宣言であり、char*は参照先の定数を変更できる為、const char*で保持するアドレスをchar*にコピーする事は言語仕様により禁止されています。それは分かるよね? 最初に宣言したポインタを間違えて別アドレスで上書きしないようにconstで固定したいのなら、char* constを使うようにしましょう。とりあえずとりいそぎ : デフォルトの名無しさん (ワッチョイ 9fe1-/1mG) [sage] 2018/02/17(土) 17:22:58.60:0j+aLKWi0 strdupという手があるが何がしたいのか今一つ分からない const char* asdf = "asdf"; char *p = strdup(asdf); std::cout << p << std::endl; delete p; : デフォルトの名無しさん (ブーイモ MM3b-zxnT) [sage] 2018/02/17(土) 17:31:15.32:CLg9GPlRM それ誰に指摘してんの?とりいそぎ。 : デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/17(土) 17:34:22.09:4SqFrjwY0 データは連続しているので同じになる 16文字まではスタックを使い、それ以上の長さになるとヒープにコピーされる 実装ではメンバの配列には何かしらのエスケープ文字が入る ちなみにmsvcでは実装の都合上free(&str[0])で強引に解放できる : 173 (ワッチョイ 1f7e-T3WU) [sage] 2018/02/17(土) 17:49:08.26:4SqFrjwY0 補足 スタックとヒープを使い分けるかどうかは実装依存 gcc、clang、msvcでは行われている したがって短い文字列でnewを避けるためにstringを使わないというのは意味が無い : デフォルトの名無しさん [] 2018/02/17(土) 18:06:03.81 strdupで確保した領域をfreeでなくdeleteするのは正しいの? : デフォルトの名無しさん (ワッチョイ 5781-qput) [sage] 2018/02/17(土) 18:09:26.31:Lp1rq1Kt0 良いみたいだ 中でmallocで確保している : デフォルトの名無しさん (ワッチョイ 5781-qput) [sage] 2018/02/17(土) 18:10:04.88:Lp1rq1Kt0 違う、freeで開放する : デフォルトの名無しさん (ワッチョイ bf0e-qi38) [sage] 2018/02/17(土) 18:14:21.37:Q4Uv6cZz0 弁護士の唐沢です mallocとdeleteは併用厳禁です。freeを使用してください : デフォルトの名無しさん (ワッチョイ 9fb3-dLOu) [sage] 2018/02/17(土) 18:18:24.62:DOQJ47ER0 昔から気になってるんだが「解放」だよね... : デフォルトの名無しさん (ワッチョイ 5781-qput) [sage] 2018/02/17(土) 18:25:00.27:Lp1rq1Kt0 そうでした、ごめんね : デフォルトの名無しさん (ワッチョイ 9f5a-T3WU) [sage] 2018/02/17(土) 18:25:45.10:JVoP/9zU0 良くねえだろ ぼけ 開放はpublic的なニュアンスだよな : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/17(土) 18:45:39.74:uBckbaXI0 ぶっちゃけた話、 strcpy が一番短いと思う。 : デフォルトの名無しさん [] 2018/02/17(土) 18:59:50.35 strdup という答えが出てるのに何言ってるの? : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/17(土) 19:05:58.96:uBckbaXI0 strdup は C++ の仕様の範囲内ではないので……。 POSIX と MSVCRT に有るからほとんどの場合に十分といえば十分なのかもしんないけど。 : デフォルトの名無しさん (ワッチョイ 9fbd-RFe/) [sage] 2018/02/17(土) 19:07:20.59:u7LZaTzx0 接頭辞を見ればデータ内容の属性がワカルというメリットは他に代え難い ttp://local.joelonsoftware.com/wiki/ 間違ったコードは間違って見えるようにする あといちいちthis->xと書くよりも、すすんでm_xと書きましょう : デフォルトの名無しさん (ワッチョイ 9fbd-RFe/) [sage] 2018/02/17(土) 19:21:01.63:u7LZaTzx0 strdup()だと明示的に開放コードをどっかに書かなくてはならなくて必ず忘れるので せっかくC++なのでスマポ的にwrapすると良いと思う : デフォルトの名無しさん (ワッチョイ 9f5a-T3WU) [sage] 2018/02/17(土) 19:37:41.81:JVoP/9zU0 ホワイトボックスなCでは許せるが ブラックボックスなC++の流儀には全く合わない それがstrdup : 167 (ワッチョイ d793-MfWd) [sage] 2018/02/17(土) 19:53:11.68:szUqPRvW0 教えてくれてありがとう。 返されるアドレスは等しい値なのか、という単純な質問だったんだけど、 読み直してみたら分かりにくい質問文だと思っていた次第。 それにしても &(*psz)[0] って結構ややこしいのね。 オーバーロードされた[]演算子が返すcharへの参照、 に対してアドレス演算子&を作用させた結果、て感じかな。 : 162 (ワイモマー MMbf-xgEu) [sage] 2018/02/17(土) 20:37:30.76:uaRb1j8RM すみません、たくさんレスありがとうございます。 _strdupにしてみたら期待の動作ができました。 ありがとうございました。 : 162 (ワイモマー MMbf-xgEu) [sage] 2018/02/17(土) 21:27:34.68:uaRb1j8RM また質問してすみません。 msvc(vs2017)だとコンパイラをC++17にしても以下のプログラムで C2664 'void (T *&)': 引数 1 を 'hoge *' から 'hoge *&' へ変換できません。 となってしまうのですが、コードにバグが有るでしょうか?msvcのバグでしょうか? GCCやClangではコンパイルできます。 #include <memory> struct hoge {}; template <class T> inline void safe_delete(T*& p) { if (p) { delete p; p = nullptr; } } int main() { std::unique_ptr<hoge, decltype(&safe_delete<hoge>)> sp{new hoge(), safe_delete<hoge>}; return 0; } : デフォルトの名無しさん (ワッチョイ ff80-Pey1) [sage] 2018/02/17(土) 22:11:53.16:IU1gsQgu0 (T *&) そもそも、ポインタ・参照を、同時に使えるのか? : 片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdbf-ZgEC) [sage] 2018/02/17(土) 22:23:52.63:EwTJGG8Pd new hoge()は変数じゃないから、代入できない。 : ◆QZaw55cn4c (ワッチョイ 9f60-qi38) [sage] 2018/02/17(土) 22:35:58.53:I0BNlfaX0 独習C++ はいいですね、特に演習問題「std::stringを再実装する」を絶賛します これが書けるようになったらC++初級者をかたってもいいかもしれない、もしかすると解答は載ってなかったかもしれないけれども : デフォルトの名無しさん (ワッチョイ 9fcb-zxnT) [sage] 2018/02/17(土) 22:35:58.70:++v6vSjK0 どこから引用したのか知らんけど、そのページ読んでないだろ… システムハンガリアンはまるで役に立たないって書いてあるぞ。 : ◆QZaw55cn4c (ワッチョイ 9f60-qi38) [sage] 2018/02/17(土) 22:43:42.94:I0BNlfaX0 (システム)ハンガリアンってそんなに悪いものなんですかねえ いや、win32api がバンバンハンガリアンしているので、そんなもんか、と思っていましたが : デフォルトの名無しさん (ワッチョイ 9fcb-zxnT) [sage] 2018/02/17(土) 22:51:12.84:++v6vSjK0 OOPともTMPとも型推論とも相性が悪いからね。 MS自身ももう使うなって言ってる。 : デフォルトの名無しさん (ワッチョイ ff8a-NmL4) [sage] 2018/02/17(土) 22:52:19.16:YAgvIyFy0 頭悪いヤツが多様するハンガリアン : デフォルトの名無しさん (ワッチョイ ff8a-NmL4) [sage] 2018/02/17(土) 22:54:25.25:YAgvIyFy0 嫌いだからハンガリアン意地でも使わなかった dwやらszやらせっかくのフリーフォーマッとが台なしだよ : デフォルトの名無しさん (ワッチョイ bf0e-qi38) [sage] 2018/02/17(土) 22:59:56.16:Q4Uv6cZz0 フリーフォーマットはクソコードの温床ナリよ : デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/17(土) 23:03:12.11:4SqFrjwY0 型を変えるたびに変数名も変えるのか ごくろうやな : ◆QZaw55cn4c (ワッチョイ 9f60-qi38) [sage] 2018/02/17(土) 23:08:35.57:I0BNlfaX0 それは「ポインタ変数の参照」で、たしか便利に使えた気がしますが… 明日にでもちょっと書いてみます、今日は疲れました… : デフォルトの名無しさん (ワッチョイ 9ff9-GHyv) [sage] 2018/02/17(土) 23:22:18.45:2kmwzB0g0 システムハンガリアンは弊害ばかりだろうけど、アプリケーションハンガリアンは適切に使えば有益だよ。 : デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/17(土) 23:25:09.87:4SqFrjwY0 mとかいらなくねってなって削ったら_から始まるようになった : デフォルトの名無しさん (ワッチョイ 9fbd-RFe/) [sage] 2018/02/17(土) 23:38:55.74:u7LZaTzx0 データの属性としてサイズとか型そのものを明示したいときはシステムハンガリアンするしかないし、 よってWIN32APIがシステムハンガリアンを使って定義されるのは全く正しい 問題なのはアプリケーションハンガリアンすべきときと システムハンガリアンすべきときが区別できない香具師が適当に使うと 被害甚大だということやがな… : デフォルトの名無しさん (ワッチョイ d77f-T3WU) [] 2018/02/17(土) 23:41:05.97:YmD9lILj0 今時システムハンガリアンは無いだろ 20年前で時間が止まってるのかよ : デフォルトの名無しさん (ワッチョイ 9fbd-RFe/) [sage] 2018/02/17(土) 23:42:44.53:u7LZaTzx0 なぜシステムハンガリアンが有り得ないのかkwsk DWORDを渡すABIがある日突然気まぐれにUSHORTに変わったりしたら困りはしまいか : デフォルトの名無しさん (ワッチョイ d77f-T3WU) [] 2018/02/17(土) 23:49:32.45:YmD9lILj0 ググればいいだろ 積極的批判 システムハンガリアンを使っているソースコードを修正してデータ型を変更した際、同時に変数名も変更するコストがかかる。変更を怠ると、たちまち不整合となり、保守の障害となるだけで一利もない。 C++やC#のような言語では型付けが存在するためにシステムハンガリアンを使用することによる利点はない[3]。 移植性を阻害する。 総称型、メタプログラミングとの相性が悪い。 消極的批判 いわゆる良書と呼ばれるようなC++本で、現在[いつ?]システムハンガリアンを採用している例が皆無。 かつてWindows API/MFCにおいてハンガリアンを全面的に採用していたMicrosoft自身が、.NET Frameworkではハンガリアンを禁止[1]している。 : デフォルトの名無しさん (ワッチョイ d7b3-hxII) [sage] 2018/02/17(土) 23:52:28.19:YEFSbrC50 申し訳ないがコピペディアからのウィキペはNG : デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/17(土) 23:54:40.85:4SqFrjwY0 型なんてマウスオーバーなりすれば表示されるだろ 変数名に書いておかなきゃわからないとかメモ帳で書いてるのかよ : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/18(日) 00:10:56.39:OOIPfNvY0 デリータはポインタが指す先のリソースを後始末するのが仕事であって、 ポインタが無効になるという処理は unique_ptr の側でやってくれるので、 ヌルを代入する必要はない。 むしろ unique_ptr 内で管理しているものをデリータが勝手に弄るのは好ましくないので、 参照で受けるのはやめてさしあげろ。 私なりに仕様を読んでこの場合をエラーにする根拠は発見できなかったが、 エラーになってくれる方がありがたい場面だと思う。 : デフォルトの名無しさん (ワッチョイ d7f2-T3WU) [sage] 2018/02/18(日) 00:16:38.53:Ct2k6iqr0 デリータに渡されるのは左辺値と限らないからだろう。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/18(日) 00:25:54.07:OOIPfNvY0 N3337 だと 516 ページの説明がデリータの要件だと思うんだけど、 デリータ d の型が D で ptr の型が unique_ptr<T, D>::pointer のとき式 d(ptr) が valid であることと書いてあって、 ptr が rvalue か lvalue かってのは特に指定がない。 (どこかに書いてあったりする?) この説明で言ってる ptr が変数名なのだとしたら暗に lvalue とほのめかしてるようにも思えなくもないし、よくわからん。 わからんことは避けて通りたい。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/18(日) 00:30:57.46:OOIPfNvY0 私なりの見解としては未定義だと思ってる。 未定義ならばやったらエラーになる方向にしてくれる方がありがたいという思い。 : デフォルトの名無しさん (ブーイモ MM3b-zxnT) [sage] 2018/02/18(日) 00:35:36.09:ju8BsRCFM ABIにシステムハンガリアン関係ないだろ… APIを指してるとして、呼び出し側はリファレンスマニュアルなりIDE機能なりを利用して引数の型情報も システムハンガリアンが付いている仮引数名と同時に参照しているはずだよね?情報重複してるけど本当に必要? 仮引数名のシステムハンガリアンの有無に関わらず、APIのシグネチャは用意に変更してはならないものだけど、 そもそも仮引数名はシグネチャじゃないからシステムハンガリアンがついていたって何の保証にもならないよ? : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/18(日) 00:51:32.90:OOIPfNvY0 重複する情報をコンパイラの支援なく一致させ続けることが出来るだろうか。 いや、できない。 って話よね。 まあ世の中にはそういうのを検査するツールとかもあるんだろうけどさぁ、 そういうツールを導入できる環境ならまともな IDE だって使えるだろう。 : 162 (マクド FF6b-xgEu) [sage] 2018/02/18(日) 08:06:35.40:F3zIry6ZF レスありがとうございます。 shared_ptrだと行けるのでなんかすればコンパイル通るのではないかと 思ったのですがだめなんですね〜。 普通に使う用とカスタムデリータに使う用と二種類用意してやり過ごしてみたいと思います。 template <class T> inline void safe_release(T*& p) { if (p) { p->Release(); p = nullptr; } } template <class T> inline void custom_deleter(T* p) { p->Release(); // p = nullptr; no meaning } : デフォルトの名無しさん (ワッチョイ 9fbd-RFe/) [sage] 2018/02/18(日) 12:41:44.81:OWXn9djh0 藻前はレスをきちんと読んでいないのではないか >システムハンガリアンを使っているソースコードを修正してデータ型を変更した際、同時に変数名も変更するコストがかかる。() に直接対応する元レスは、 >データの属性としてサイズとか型そのものを明示したいとき() について述べているのでデータ型変更時のコストを言い立てても批判にならない 消極的批判については、アプリケーションハンガリアンすべきときと システムハンガリアンすべきときが 区別できない香具師の的外れな批判がクソウゼーからそうなったのかもしれん、 (ちな両者を区別できない香具師への警戒もで言及済み : デフォルトの名無しさん (ワッチョイ 9fbd-RFe/) [sage] 2018/02/18(日) 12:42:38.82:OWXn9djh0 十分賢いIDEが人間のミスを完璧に排除してくれるんならそうかもしれんが システムハンガリアンをしてはいけないという積極的理由にはやはりならないのであった それとも「間違ったコードは間違って見えるようにする 」()の効能を全否定する? APIの定義は変わらなくとも、それを利用するソースコードがころころ変わり得るわけで、 byStrLength にある日だれかがDWORD型の値を突っ込んだとしたら… こういうケースを考えたら、「接頭辞を見ればデータ内容の属性がワカルというメリット()」は ありえないぐらい賢いIDEでも使わないと他に代え難いと思うがどうか、 >嫌いだからハンガリアン意地でも使わなかった おk ようやく建設的な議論に着手できる、 : デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/18(日) 13:01:54.53:Tc3/Tap60 あり得ないくらいバカなプログラマのことなんか考慮してない : デフォルトの名無しさん (ワッチョイ d7b3-hxII) [sage] 2018/02/18(日) 13:02:14.72:hSV7DJYb0 マウスオーバーで変数の型を確認できたり、縮小変換に警告を出してくれたりする程度のありふれた機能が、ありえないぐらい賢いとな お前さんはメモ帳でコーディングしてるのか : ◆QZaw55cn4c (ワッチョイ 9f60-qi38) [sage] 2018/02/18(日) 13:06:54.12:AAhzNgFK0 emacs にもそんな機能がほしいと思うことがあります : デフォルトの名無しさん (スッップ Sdbf-0Jtz) [] 2018/02/18(日) 13:20:53.92:y51LwXumd システムハンガリアンでミスを減らせるなんて事はない むしろ害悪 : デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/18(日) 13:27:53.30:Tc3/Tap60 俺のemacsには搭載されてるんだが 環境構築もプログラマの腕のうちだからな : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/18(日) 13:30:05.77:OOIPfNvY0 有るよ。 irony-eldoc や company-mode を入れろよ。 Emacs こそ最強の IDE だろうが。 : デフォルトの名無しさん (ワッチョイ 378a-TkRA) [sage] 2018/02/18(日) 13:38:55.48:R2RwPqEs0 今時システムハンガリアンを使うやつはあり得ないくらいのバカだということが決定しました : デフォルトの名無しさん (ブーイモ MM3b-zxnT) [sage] 2018/02/18(日) 13:41:43.01:IMbK2zhKM 間違ったコードは間違ったように見えるようにする、について、 あなたが指し示した引用元が言及してるのはアプリケーションハンガリアンについてなんだけど… システムハンガリアンについては否定的意見。 ちゃんと読んだの? : ◆QZaw55cn4c (ワッチョイ 9f60-qi38) [sage] 2018/02/18(日) 14:10:40.14:AAhzNgFK0 thanks a lot!! : デフォルトの名無しさん (ブーイモ MM3b-zxnT) [sage] 2018/02/18(日) 14:15:44.65:IMbK2zhKM APIの仮引数にシステムハンガリアンをつけたことで、間違ったAPI呼び出しが間違ったように見えるのはいつ? APIのリファレンスなり宣言文なりを自分のコードと見比べたときでしょ?その時必ず型情報も見てるよね?情報重複してるよ? あとIDEが自動でミスを排除してくれるなんて書いてないよ?ちゃんと読んで : デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/18(日) 15:46:49.02:Tc3/Tap60 入れる変数の型と引数の型を確認しない奴とかいるのか 暗黙の型変換は警告を出せばいいし どうしても見落とすのならコンパイルエラーにしてしまえばいい あとメンバ変数もテキストの色を変えればいいからm_もいらない : デフォルトの名無しさん (ワッチョイ ff8a-NmL4) [sage] 2018/02/18(日) 16:01:36.00:dLlRK2Wa0 m_はホント見苦しい : デフォルトの名無しさん (ワッチョイ bfe7-JyXB) [sage] 2018/02/18(日) 20:07:07.34:8oVyjimH0 m_だけならまだ我慢できるけど this->を必ず付けるルールと併用するのは本当にやめろどっちかにしろ : デフォルトの名無しさん (ワッチョイ 9fb9-T3WU) [sage] 2018/02/18(日) 20:15:52.43:eae4wPFh0 > this->を必ず付けるルール 破門だろ C++使うなそんなボケどもは : デフォルトの名無しさん (ワッチョイ 9f12-pjg9) [sage] 2018/02/18(日) 21:14:42.68:SQcbDAgv0 ちげえんだよなぁ thisというキーワードが存在してるから、その存在そのものが、それを書かねばならないような強制力を産み出してる 「存在するが、書かなくてもいい」っていうどっちつかずが、一番論争になる その反対が「存在しないから書けない」だ これだと単純明快だ なんせ、書けない 「書くべきか書かざるべきか」のどーーーでもいい二択に迫られると、とたんに宗教になる : デフォルトの名無しさん (ワッチョイ 9fb9-T3WU) [sage] 2018/02/18(日) 21:16:52.71:eae4wPFh0 キーワードが存在するのと実体が存在することの違いがそんなに大事なのか? じゃあvtableのキーワードが存在しないことを、おまえはどう考えている? : デフォルトの名無しさん (ワッチョイ bf37-ytZF) [sage] 2018/02/18(日) 21:33:09.71:Pbt6vSqU0 オケツに_をつけてますわ : デフォルトの名無しさん (ワッチョイ ff8a-NmL4) [sage] 2018/02/18(日) 21:33:14.46:dLlRK2Wa0 おれがそのソースを引き継いだらまず初めにやることは一つ 「this->」から「」への全ソース一括置換 : デフォルトの名無しさん (ワッチョイ d7f2-T3WU) [sage] 2018/02/18(日) 21:56:25.56:Ct2k6iqr0 「m_」はダメで「_」ならいいってのはなんというか、合理的な理由よりも感覚・感情的なものかね。 : ◆QZaw55cn4c (ワッチョイ 9f60-qi38) [sage] 2018/02/18(日) 21:57:31.39:AAhzNgFK0 this-> つけるほうが分かりやすくていいと思うのですが、変てこな接尾辞・接頭辞よりも : デフォルトの名無しさん (ワッチョイ d77f-T3WU) [] 2018/02/18(日) 22:00:36.01:tWqaO5mz0 m_xxx も xxx_ もなんの保証にもならんからな this->は必ずメンバになるけど : デフォルトの名無しさん (ワッチョイ 9f4c-C9DI) [sage] 2018/02/18(日) 22:37:59.28:UEE7OeWn0 _はグーグルスタイルの圧力 : デフォルトの名無しさん (ワッチョイ ff76-BAP3) [sage] 2018/02/18(日) 22:42:10.00:WjKwYRHz0 余計な命名規約を作るくらいなら言語機能を使った方が良いわな this->派だわ : デフォルトの名無しさん (ワッチョイ bf0e-qi38) [sage] 2018/02/18(日) 23:21:23.43:AjuHfv4B0 thisで明示した方が所在がハッキリして良いナリ 当職は名前空間もusingせずに明示しろ派ナリ 安易な省略はタイプ数を減らすという軽微なメリットと引き換えに可読性を落としケアレスミスを誘発するという恐ろしいデメリットを孕むナリ : デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/19(月) 00:00:39.93:hDVR9PRD0 「m_」はいらないな ↓ ローカル変数とかと名前が被ってめんどくさい ↓ キャメルケースにはしたくない ↓ 「_」だけ残る : デフォルトの名無しさん (ワッチョイ ff8a-NmL4) [sage] 2018/02/19(月) 00:14:25.92:o8qstbSZ0 _付けるなら変数の後ろだろ : デフォルトの名無しさん [] 2018/02/19(月) 00:18:14.94 C/C++なら必然的に末尾に付けるしかない 先頭に_付けるような情弱は死ねばいい Perl/Pythonだと先頭に付けるけどな : デフォルトの名無しさん (ワッチョイ 17c3-T3WU) [sage] 2018/02/19(月) 00:42:17.66:SSx66hQd0 やらんけど、前一つなら規約には引っかからないんじゃなかったけ : デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/19(月) 00:57:15.60:hDVR9PRD0 未定義なのは _始まりでグローバルスコープにあるもの _始まりでアルファベットの大文字が続くもの全て __で始まるもの全て 1番目の_始まりなだけならローカル変数、引数、メンバでは予約されていないので使ってもよい : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/19(月) 01:15:36.25:gMMBYzvP0 名前に変なルールを導入するか this を付けるかの二択であれば this の方がマシというのはわかる。 わかるが、必ずつけるルールにしちゃうとかなりウザいわって話。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/19(月) 01:20:40.79:gMMBYzvP0 わかるんだが、そういうルールってすぐに教条主義に陥るからうんざりする。 技巧として使う using にまでグダグダ言うやつが絶対に出てくる。 : デフォルトの名無しさん (ワッチョイ 1f7e-T3WU) [sage] 2018/02/19(月) 02:05:55.66:hDVR9PRD0 コーディング規約はうろ覚えだけど自由度の高いBoostスタイルを薦める publicな識別子はstdに合わせて小文字スネークケース マクロはBOOST_から始める インデントはスペース、一行の文字数は80文字を推奨 意味のある名前を付けることを推奨 ファイル構成に関するもの その他細々としたもの ライブラリごとのローカルルールがある場合もある あとは自由 thisを付けろだとか改行の仕方だとかは一切書かれてない : デフォルトの名無しさん (ワッチョイ bf0e-qi38) [sage] 2018/02/19(月) 02:37:36.58:SEa8F8NC0 お互いにマナーを守る世界は過ごしやすいがマナーの厳守を要求し出すと途端に息苦しくなるナリ 自分にも他人にも読み易いコードを書こうという気遣いが見て取れるなら細かく突っ込んだりはしないナリ : デフォルトの名無しさん (ワッチョイ ff3f-T3WU) [sage] 2018/02/19(月) 05:40:18.76:wBFQMwB50 this->で必ずメンバというやつら じゃあ必ずブロック内変数という表記もしたらどうだ : デフォルトの名無しさん (アウアウアー Sa4f-rtnb) [sage] 2018/02/19(月) 12:45:29.69:yTAVcy/Ya 使うライブラリや開発環境の内部のスタイルに合わせるけどな。 派生クラスとかAPIのラッパークラスとか作り始めると、 どうしても内部の書き方に合わせておいた方が読みやすいし。 今でもWin32とかMFCでやることもあるけど、 そのときはm_とかpとかhとかdwとかバンバンつける。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-T3WU) [sage] 2018/02/19(月) 13:19:17.15:gMMBYzvP0 使う側の都合に合わせろよ。 ラップしてるのに中身のスタイルが漏れてるんじゃラップの甲斐がなくね? 中身を知ってる人がちょっとした便利のためだけに薄いラッパを作る場合ならそういう選択もあるだろうけど。 : デフォルトの名無しさん (ワッチョイ 9f9d-MriG) [] 2018/02/19(月) 14:36:30.11:00nJVfHA0 コンバータにあわせろよ。C#で作ってコンバータかけた方が綺麗スッキリするんだから。 : デフォルトの名無しさん (ドコグロ MMcb-dLOu) [sage] 2018/02/19(月) 19:36:41.65:2cNNs3G6M そりゃAPIに渡す構造体でdwSizeとか使われてたらそこだけは合わせざるを得ないけど自分のコードスタイルを合わせる必要はないだろ : デフォルトの名無しさん (ワッチョイ 9fbd-RFe/) [sage] 2018/02/19(月) 20:29:38.46:czaD+lHv0 m_のmは目立つのm、 ここ構造体メンバとか、 : ◆QZaw55cn4c (ワッチョイ 9f60-qi38) [sage] 2018/02/21(水) 00:43:21.00:jU0tYaxw0 Windows メインで作業されている方で、 valgrind を併用している方はおられませんか? もしよろしければ使用感をお聞かせいただけませんか operator new()/operator delete() 乗っ取りデバッグに限界を感じてしまっている状況です (cl や bcc32/bcc32c/bcc64 では new/delete 乗っ取りができません) いや、さっさと入れればいいのですが、仮想環境とかよくわからないし…Vine Linux 以来触ってないし… : デフォルトの名無しさん (ワッチョイ 974f-4dOP) [sage] 2018/02/21(水) 01:13:14.52:wPLJFyuu0 windowsならapplication verifier使えば? : デフォルトの名無しさん (ワッチョイ 1768-xgEu) [sage] 2018/02/21(水) 09:49:28.54:8k15W99L0 以下のURLのプログラムでSFINAEを試してみていて ttps://wandbox.org/permlink/LqKmn50PaPbtohs5 BOOST_TTI_HAS_MEMBER_FUNCTIONを使えば has_funcというメタ関数を使わずに済んで、短くできないかと試行錯誤中なのですが うまく行きません。 どうやったらビルドが通るようになるでしょうか? : デフォルトの名無しさん (ワッチョイ 9fa2-T3WU) [sage] 2018/02/21(水) 18:31:01.90:8+abUSIR0 まずはそのうまく行かないコードを示したら? : 片山博文MZ ◆T6xkBnTXz7B0 (スププ Sdbf-ZgEC) [sage] 2018/02/21(水) 19:26:19.92:UifE8nP3d ttps://stackoverflow.com/questions/87372/check-if-a-class-has-a-member-function-of-a-given-signature : 260 (マクド FF6b-xgEu) [sage] 2018/02/21(水) 19:34:37.06:EmINyJBAF すみません、BOOST_TTI_HAS_MEMBER_FUNCTIONを使って短くする以前に元々が間違っていました。 以下の3つでオーバーロードしたかったのでした。 ・funcというメンバ関数を持つダブルポインタ ・funcというメンバ関数を持たないダブルポインタ ・それ以外 それで思ったのですが多分、Boost.TTIライブラリで 〇〇というメンバ関数を持つクラス、を識別するメタ関数は作れても 〇〇というメンバ関数を持つクラスのダブルポインタ、は無理な気がしてきました。 一旦諦めようと思います。 : 260 (マクド FF6b-xgEu) [sage] 2018/02/21(水) 23:10:49.37:EmINyJBAF msvcでもGCCでもビルドできるのが どうにかできました。お騒がせしてすみませんでした。 ttps://wandbox.org/permlink/HDwsuoVReqJEXWsO : デフォルトの名無しさん (ワッチョイ c667-x4Or) [sage] 2018/02/22(木) 10:26:41.79:qwLRFwLN0 あと2年待てばconceptできるかもよ : デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/22(木) 21:31:34.66:SOkZDC9P0 (VBみたいな名前付き引数が実現されたら システムハンガリアン否定論者をぎゃふんと言わせられるのに… : デフォルトの名無しさん (ワッチョイ c667-x4Or) [sage] 2018/02/22(木) 21:55:24.65:qwLRFwLN0 システムハンガリアン発祥の会社が何か作ったら否定論者がぎゃふんと言うのか? おまえの頭の中は論点先取だか循環論法だかがグルグル回っているようだな : デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/23(金) 22:10:42.23:XlnyEs6k0 ↑ 想像してごらん全ての人々が dwRet = ::WaitForSingleObject( hHandle = m_hThread, dwMillisecond = m_hTCTmo ) と書く世界を、 : デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/23(金) 22:11:40.62:XlnyEs6k0 ごめ 誤: m_hTCTmo 正: m_dwTCTmo 見れば間違いがワカルのがハンガリアンの極めて良いところ : デフォルトの名無しさん (ブーイモ MM5e-chUR) [sage] 2018/02/23(金) 22:21:40.17:R3lraTlNM : デフォルトの名無しさん (ワッチョイ ba12-SJjx) [sage] 2018/02/24(土) 10:44:07.22:mn7A8TMg0 一分間で間違いに気づいてはいるものの そもそもの書く瞬間にはどうやら人智を用いても気付けないらしいから IDEにエラー出してもらった方が早いんじゃあねえの 実は人間の集中力を超えたところにある方法論で、実践するとストレスが溜まるっぽいから、機械任せにした方がいい それに、書いてる最中は変数の型まで考えたくない 見て分かることは、機械任せにすれば見なくても分かるから、 今のご時世、人間の有限の集中力を目視チェックなんかに使いたくない 脳みそのリソースはもっと別のところに使うべきだ つまりは、書いてる最中は脳みそが「それが正しい」と思い込んでるから、 間違いは自分自身では絶対に分からない これがバグを作り込む hだったかdwだったかを脳が自動的に混同してるから、その分だけ余計に脳のリソースを使っている 「なんで書いている最中に自分自身で気付かないのか」、これ、とても重要だよ : デフォルトの名無しさん (スップ Sd02-2/+O) [] 2018/02/24(土) 11:11:20.01:51zBno3Kd 変数名と型が一致してるという保証がゼロだからシステムハンガリアンなんて無駄以外の何物でもない 無駄というか悪 : デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/24(土) 12:15:45.87:mm9B9rZ50 俺のレスもプログラムも表現と意図が一致してるという保証がゼロ、 まで読んだ : デフォルトの名無しさん (ワッチョイ df7f-x4Or) [sage] 2018/02/24(土) 12:23:50.23:b3ZDZ7IS0 その場合、やめられる方だけやめればいいな つまりハンガリアンを。 : デフォルトの名無しさん (ワッチョイ b7b3-x4Or) [sage] 2018/02/24(土) 12:27:42.98:pqM6ijVV0 まともな開発環境使っていれば必要ないのでは : デフォルトの名無しさん (ワッチョイ c6cb-chUR) [sage] 2018/02/24(土) 12:34:43.53:B9f7/evx0 ハンガリアンはもうだめだ。 ポーランドを使おう。 : デフォルトの名無しさん (ワッチョイ 520e-MTlB) [sage] 2018/02/24(土) 12:51:07.68:d7+fd25J0 そういう事言い出すと「関数名と機能が一致してる保証がゼロ」や「クラスメンバの隠蔽が完璧である保証がゼロ」などといくらでも難癖を付けれるナリ ヒューマンエラーを理由に不要と結論付けるのならあらゆるコーディング規約が不要という結論になってしまう、これはいけない 命名規則は可読性の向上に結びつくものでなければならない、規約を違反する事で起きるトラブルはプログラマ側の責任、それは分かるよね? : デフォルトの名無しさん (ワッチョイ df7f-x4Or) [sage] 2018/02/24(土) 13:26:14.86:b3ZDZ7IS0 ヒューマンエラーが起きる部分は極力排除して機械任せにできる部分は機械任せにすればいい ハンガリアンを導入する理由はもはや無いな。可読性悪いし。 : デフォルトの名無しさん (ワッチョイ ea60-MTlB) [sage] 2018/02/24(土) 14:24:10.94:yWQ45jBy0 いや、ハンガリアンは可読性はよくなる方だよ 整合性維持に難があるだけで : デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/24(土) 14:29:08.35:mm9B9rZ50 可読性ぐらいテンプレートによる高度なメタプログラミングに慣れた諸兄なら ハンガリアンごとき目を慣らして解決できるはずなんじゃ… : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e66f-x4Or) [sage] 2018/02/24(土) 15:03:19.72:ohURjCBl0 ttps://www.google.co.jp/search?q=%E5%8D%8A%E5%88%88%E3%82%8A&tbm=isch : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e66f-x4Or) [sage] 2018/02/24(土) 15:06:09.97:ohURjCBl0 Lisper「せやな!」 : デフォルトの名無しさん (ワッチョイ 2f93-IXLF) [sage] 2018/02/24(土) 17:03:03.20:agv5rOmv0 両者は共存不可能な対立概念ではないけどね。 細かいことを言わせてもらえば、 「ハンガリアンとポリッシュ」か「ハンガリーとポーランド」と 並べてくれた方が座りがいい気もするけど…。 「ハンガリアン記法とポーランド記法」だとあまり気にならない不思議。 : デフォルトの名無しさん (ブーイモ MM5e-Clm8) [sage釣] 2018/02/24(土) 17:08:35.75:4JIC+wG/M なぁにその内、ロシアが併呑してくれるさ : デフォルトの名無しさん (ワッチョイ 70b3-Tnpk) [sage] 2018/02/25(日) 14:16:53.97:8l5JrV0a0 名前付き引数イディオムとenable_if<is_same<...>::value>が最強と言うことだな ※プログラマが、使用者が型を間違えないようにと気を使うのが正しいなら、間違えたらコンパイルエラーになるこれが最強だろ? : デフォルトの名無しさん (ワッチョイ ba12-SJjx) [sage] 2018/02/25(日) 14:35:24.31:zhzj1IkW0 ちげえんだよんぁ 可読性じゃねえんだよ を見てみろよ、 読む時じゃなくて書く時のヒューマンエラーだ なんで入り込んだのか全く分からんようなミステイクだ プログラミングが工業的生産の一種なら、その手のヒューマンエラーは無い方がいい で、改めてを見てみると、「可読性」があってプレフィクスの間違いに気付いてはいるものの、 そもそも書く段でなんで間違えたのか、それが全く分からない 他人はおろか本人すらも自覚できない謎の理由でプレフィクスを間違えてる(これがヒューマンエラーなんだけどな) なんで、後だしジャンケンだと、「プレフィクスが最初から無ければ、間違いも発生しえなかった」、とも言える もしかすると、書く時に間違える/読む時に間違える の比率を考えると、ハンガリアン記法は書く時に間違えやすいが読むときに間違いにくい……のトレードオフなだけかもしれん 要するに、可読性と生産性のトレードオフだけなんじゃあねえのか? それに、読む時のヒューマンエラーと書く時のヒューマンエラーをわざと混同してるのはいただけない : デフォルトの名無しさん (ワッチョイ 8a6e-x4Or) [sage] 2018/02/25(日) 16:15:03.29:s5td7qK+0 void func(int a) { : デフォルトの名無しさん (ワッチョイ 8a6e-x4Or) [sage] 2018/02/25(日) 16:15:31.06:s5td7qK+0 void func(int a) { //aが何型かわからない //アホかおまえは } : デフォルトの名無しさん (ワッチョイ 8a6e-x4Or) [sage] 2018/02/25(日) 16:46:37.12:s5td7qK+0 template <typename T> void func(T lpszA) { //lpszって書いてあるからTはLPSTR型だな //アホかおまえは } : デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/25(日) 19:14:43.19:4jIr3vvu0 func()が常に1画面に収まって1万行の関数とかでありえないという根拠は テンプレート定義時の引数に対して引数内容固有の命名が難しいのは ハンガリアンに限ったことではないからハンガリアンに対する批判になんね テンプレート批判論者には考える力がないのかね… : デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/25(日) 19:15:39.42:4jIr3vvu0 ごめ ×:テンプレート批判論者 ○:ハンガリアン批判論者 : デフォルトの名無しさん (ワッチョイ df7f-x4Or) [] 2018/02/25(日) 19:29:08.16:s+qaK1zS0 テンプレートに対してはハンガリアンは全くの無力だよなあ 一貫性の観点からやっぱりハンガリアンは無い方がいいわ : デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/25(日) 19:48:52.19:4jIr3vvu0 .のレスを見てテンプレートの実体化時までハンガリアンが無力なことにされてはかないませんなあ… : デフォルトの名無しさん (ワッチョイ 0637-rG1w) [sage] 2018/02/25(日) 20:11:05.52:fbPK05Px0 そもそも関数が長い場合は型情報を持たすのもありだよな システムハンガリアンをやめさせようとして先に関数を短くしなきゃだめだなと追う結論に至って放置した : デフォルトの名無しさん (ワッチョイ 8a6e-x4Or) [sage] 2018/02/25(日) 20:37:38.24:s5td7qK+0 //1万行の最長不倒関数を書く //アホかおまえは : デフォルトの名無しさん (ワッチョイ 8a6e-x4Or) [sage] 2018/02/25(日) 21:00:14.67:s5td7qK+0 void func(int lpszA) { //lpszって書いてあるからLPSTR型だな //アホかおまえは } : デフォルトの名無しさん (ワッチョイ c4e3-x4Or) [sage] 2018/02/25(日) 21:58:30.83:qLuvVokt0 システムハンガリ理解してない人の例上げてね? : デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/25(日) 22:45:03.97:4jIr3vvu0 「1画面に収まらない」を都合よく無視しないように : デフォルトの名無しさん (ワッチョイ 4634-gMjx) [sage] 2018/02/25(日) 23:43:59.89:yscCG2q60 システムハンガリアンはDWORDをintに型名変更するだけでその変数名全部終わるからなしかも一瞬で : デフォルトの名無しさん [] 2018/02/25(日) 23:57:37.89 dwをiに置換するだけだからリファクタリングが楽っていう意味? : デフォルトの名無しさん (ワッチョイ 4634-gMjx) [sage] 2018/02/26(月) 00:59:51.78:VDQLjiDS0 まったく逆だ dwからiに全部置換していかないと変数名の意味を為さなくなるからシステムハンガリアンは愚かさ甚だしいと云うておる : デフォルトの名無しさん (ワッチョイ 4634-gMjx) [sage] 2018/02/26(月) 01:02:48.27:VDQLjiDS0 アンパンマン調で例えるなら型名変えるだけでメンテ百倍みたいな : デフォルトの名無しさん (ワッチョイ 147e-x4Or) [sage] 2018/02/26(月) 01:10:40.33:jQ6YvoyL0 組み込み型はいいけどクラスはどうすんのさ 意味の分からないサフィックスを付けられても困るぞ : デフォルトの名無しさん (ワッチョイ 4634-gMjx) [sage] 2018/02/26(月) 01:11:26.04:VDQLjiDS0 ハンガリアン!新しい型だよ! 有難う!デザパタ娘ちゃん! メンテ百倍!ハンガリアン! : デフォルトの名無しさん (ワッチョイ 0637-rG1w) [sage] 2018/02/26(月) 01:55:04.49:4PPe6ndQ0 そもそもDWORDをintに変えることが滅多にない : デフォルトの名無しさん (ワッチョイ 147e-x4Or) [sage] 2018/02/26(月) 02:10:59.71:jQ6YvoyL0 dwとか書かれてもDWORDの定義を知らないと意味不明だし やるなら符号の有無とサイズが分かるように書かないと意味ないでしょ : デフォルトの名無しさん (ワッチョイ 8a05-x4Or) [sage] 2018/02/26(月) 04:56:46.87:lxlU26hn0 おまえは間違いなく1万行と書いた その史実を誤魔化すことはできない 「ありえないという根拠は」という問いを反論として用いるのは 俺が「ありえない」と言った(事実と違うが)ことが おまえが「ありうる」と思っているのと違ったからだろう いずれにせよ「アホかおまえは」にふさわしいハチャメチャだな : デフォルトの名無しさん (ワッチョイ 769f-PnyW) [sage] 2018/02/26(月) 08:02:35.99:SPD4iDfM0 ポインタのpとか参照のrとかは今でも使ってる : デフォルトの名無しさん [] 2018/02/26(月) 08:09:57.39 史実とか言っちゃうのって。。。 : デフォルトの名無しさん (ワッチョイ 520e-MTlB) [sage] 2018/02/26(月) 08:16:32.18:TvC1o7QC0 もうちょっとまとめて喋れ 読みづらい : デフォルトの名無しさん (ワッチョイ 8a05-x4Or) [sage] 2018/02/26(月) 09:55:53.14:lxlU26hn0 俺も使う ただし名前そのものをポインタっぽくするだけで ハンガリアンのプリフィックスとしてではない : デフォルトの名無しさん (ワッチョイ 8a05-x4Or) [sage] 2018/02/26(月) 09:56:14.50:lxlU26hn0 ニホンゴワカリマスカ? : デフォルトの名無しさん (ワッチョイ d023-MTlB) [sage] 2018/02/26(月) 10:44:04.77:U+kFnN5D0 ハード直叩きのドライバ屋はデータバスやレジスタの幅を間違えると大変だから 物理層の実装ではハンガリアン使うこともあるよ : デフォルトの名無しさん (アウアウカー Sa11-2orQ) [sage] 2018/02/26(月) 10:55:31.04:n/n1Eejna むしろそれはアプリケーションハンガリアンじゃね? : デフォルトの名無しさん (スップ Sdc4-aBV2) [] 2018/02/26(月) 11:21:30.74:mt/mMzV6d 間違えると大変だからハンガリアンを使ってはならないんだよ 偽の情報に頼るんではなくて元を逐一確かめないと : デフォルトの名無しさん (ワッチョイ 2f93-0l3D) [sage] 2018/02/26(月) 11:33:14.68:yfGCkThX0 今勉強してるんだけどC++ではポインタを使わずに参照で書くのがデフォルトなの? : デフォルトの名無しさん (ワッチョイ 520e-MTlB) [sage] 2018/02/26(月) 11:36:50.47:TvC1o7QC0 不一致が存在しない事が保証されてれば問題無いんやな そういう事ならつまり変数宣言とプレフィックスが全て一致してるかチェックするスクリプトとかがあれば満足って事でええんか? : デフォルトの名無しさん (アウアウカー Sa11-2orQ) [sage] 2018/02/26(月) 11:38:09.46:n/n1Eejna ポインタも必要に応じて使うけど、メモリ管理の煩雑さとミスの危険性を避けるために参照やスマートポインタやコンテナ、イテレータなど他に適切な物がある時はなるべくそちらを使うのが流儀かな。 : デフォルトの名無しさん (ワッチョイ 8a05-x4Or) [sage] 2018/02/26(月) 11:51:17.55:lxlU26hn0 デフォ・・・まあ、そう言えなくもないか 参照でもポインタでもどっちでもいい用途には参照 ポインタでしかできないことはNULLに++や絶対番地指定 参照でしかできないことは一時オブジェクトやコピコン類 : デフォルトの名無しさん (ワッチョイ ba23-k8Zo) [sage] 2018/02/26(月) 12:15:47.61:z/vehsiL0 書き込むときは参照ではなくポインタにしろと言ってた人がいた。 理由を聞いたら「なんか書き込んでる感がない」だった。 : デフォルトの名無しさん (ワッチョイ 8a05-x4Or) [sage] 2018/02/26(月) 12:17:18.65:lxlU26hn0 std::cin >> &a; やだよ、こんなの : デフォルトの名無しさん (ワッチョイ df7f-x4Or) [] 2018/02/26(月) 12:21:09.58:W3q5coR10 グーグル規約だと書き込む引数は参照ではなくポインタにしろってなってる でも標準ライブラリが普通に参照で書き込んでるので意味ないかなと思う : デフォルトの名無しさん (スフッ Sd94-OThY) [sage] 2018/02/26(月) 13:05:03.30:LqmnPPXld やC++糞 : デフォルトの名無しさん (ワッチョイ 147e-x4Or) [sage] 2018/02/26(月) 13:30:49.55:jQ6YvoyL0 好きな方使えとしか言いようがない ただ参照はnullポインタが無いという特性はある : デフォルトの名無しさん (ワッチョイ ba23-k8Zo) [sage] 2018/02/26(月) 13:42:09.37:z/vehsiL0 自分もその人の気持ちは理解できた。 func(a, &b); と書かれていると、bに結果を書き込んでいる感があるし。 : デフォルトの名無しさん (ワッチョイ 2f93-0l3D) [sage] 2018/02/26(月) 13:44:00.32:yfGCkThX0 レスサンクス cからだからポインタで書いちゃいそうだわ : デフォルトの名無しさん (アウーイモ MM3a-QuQl) [] 2018/02/26(月) 18:25:47.85:aHz4HBvIM ローカルで宣言したunique_ptrを他のメソッドに渡してデータをつめたいばあいってどういう引数で渡せば良いの? unique_ptr<Hoge> ptr(new Hoge); hogehoge(ptr); Hogehoge::hoge(const unique_ptr<Hoge>& ptr){ ptr->aaa = 123; } これでいける? なんかウェブサイトみてると&&二つとかあったりするの見かけて混乱してきた : デフォルトの名無しさん (ワッチョイ fae7-RzsP) [sage] 2018/02/26(月) 18:46:48.22:6OgFttId0 &&は所有権ごとぶん投げる時に使う 渡した後も呼び出し元で使うんだったらそれて合ってるぞ : デフォルトの名無しさん (ワッチョイ d0e8-z5Dr) [sage] 2018/02/26(月) 19:00:19.12:r2m2Cr000 それだったらunique_ptrじゃなくて参照渡せば良いだけじゃ : デフォルトの名無しさん (ワッチョイ 0a80-IMbs) [sage] 2018/02/26(月) 19:31:15.52:NcBRNf650 知らない間に、&& みたいな参照渡しもできた Rust の所有権ムーブの事 : デフォルトの名無しさん (ワッチョイ 147e-x4Or) [sage] 2018/02/26(月) 19:58:16.47:jQ6YvoyL0 何年も前からある : デフォルトの名無しさん (ワッチョイ 8610-QuQl) [] 2018/02/26(月) 21:01:42.73:k0ghrbBh0 所有権を渡すのってstd:move()だと思ってたんだけどconst &&でもいけるの?? : デフォルトの名無しさん (ワッチョイ 38eb-f0ks) [sage] 2018/02/26(月) 21:42:25.99:adcc2IaV0 C++17でstd::iteratorが非推奨ってなっているみたいだけど代わりに何使うの? : デフォルトの名無しさん (ワッチョイ 0637-rG1w) [sage] 2018/02/26(月) 23:56:58.87:4PPe6ndQ0 [] : デフォルトの名無しさん (ワッチョイ 147e-x4Or) [sage] 2018/02/27(火) 00:00:22.09:o+FKgYKC0 自分で実装する : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e66f-x4Or) [sage] 2018/02/27(火) 02:00:32.40:+XEdVvf40 std::move は rvalue にキャストするだけで、それ自体にはムーブする機能はない。 実際にムーブの処理をするのはムーブコンストラクタやムーブ代入演算子の方やで。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e66f-x4Or) [sage] 2018/02/27(火) 02:10:59.44:+XEdVvf40 && は単純に右辺参照って意味しかないから、 rvalue を受け取れるってだけ。 だけど lvalue でもムーブしてぇってときは std::move で rvalue にキャストすんの。 : デフォルトの名無しさん (ワッチョイ 147e-x4Or) [sage] 2018/02/27(火) 02:19:45.35:o+FKgYKC0 そこら辺はめんどくさいからテンプレート使え : デフォルトの名無しさん (ワッチョイ 8610-QuQl) [] 2018/02/28(水) 18:07:41.72:IZRayiSM0 右辺値参照とか難しいなー 最近ようやくC++11使えるようになったから全然いってることがわからん : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-HaFh) [sage] 2018/02/28(水) 18:34:51.95:jmOf6Upnd 右辺値参照が使えなかった頃は、std::swapでスピード最適化していた。ポインタとメモリー確保を含む構造体は、 単純にスワップしたり、単純にバイト単位コピーしたりするのはまずいことがある。 そういうときに、std::swapを使う。右辺値参照は、それよりちょっと速くて賢いが、テンプレート型を理解してないと多分理解できないと思われる。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-HaFh) [sage] 2018/02/28(水) 18:43:18.32:jmOf6Upnd 右辺値参照の型はテンプレートを使った特殊な型だと考えるのが自然。 T&& === rvalue_ref<T>. std::move(T&)はrvalue_ref<T>という型。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-HaFh) [sage] 2018/02/28(水) 18:44:28.64:jmOf6Upnd 訂正。 std::move(T&)の戻り値はrvalue_ref<T>という型。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-HaFh) [sage] 2018/02/28(水) 19:01:47.21:jmOf6Upnd すみません、テキトーなことを書いたので、銃殺されます。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e66f-x4Or) [sage] 2018/02/28(水) 19:18:07.29:7ezW7mFb0 実際のところヘッダファイルから std::move の定義を抜き出すとこんな感じ。 template<typename _Tp> constexpr typename std::remove_reference<_Tp>::type&& move(_Tp&& __t) noexcept { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); } テンプレートの都合で面倒くさくなってるけど、実態としては static_cast してるだけ。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-HaFh) [sage] 2018/02/28(水) 19:24:03.59:jmOf6Upnd そのstd::remove_reference<T>::typeはTから左辺値参照や右辺値参照をはずした型になるね。それに&&を付けるんだから、左辺値参照が右辺値参照になる。 : 片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ a6b3-HaFh) [sage] 2018/02/28(水) 19:25:31.22:AZJp7LrB0 やはり、constexprやnoexceptを付けた方が性能がいいんだな。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e66f-x4Or) [sage] 2018/02/28(水) 19:35:33.38:7ezW7mFb0 C++17 では noexcept は型の一部という扱いに変更された。 例外を投げないなら投げないと書いておかないと他のライブラリとの組合せで型エラーになったりすることもあるかもしれんぞ。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd94-HaFh) [sage] 2018/02/28(水) 19:43:54.33:jmOf6Upnd やっぱ江添亮様ってスゲーや。 : デフォルトの名無しさん (ワッチョイ 147e-x4Or) [sage] 2018/02/28(水) 21:22:30.07:BlsGZA5I0 江添本にこの辺りのチートシートと問題集いれたら100部くらい売り上げ増えるのでは : デフォルトの名無しさん (ワッチョイ eff2-x4Or) [sage] 2018/02/28(水) 21:27:43.47:LDTKKB+20 江添ってあれか。ニートの時にやることないからたまたま目についたC++の仕様書を読み込んでたら いつの間にかすごく強くなったという、ホリランみたいな。 : デフォルトの名無しさん (ワッチョイ 1651-x4Or) [sage] 2018/02/28(水) 21:32:34.60:eOQjYTv40 おまえそれをバカにできるのか? 仕事ってそういうもんだぜ 目の前の案件のために必死こいても付け焼き刃にできることは知れてるんだよ 「ヒマ」なときに遠くを見て投機的にコツコツ努力したことが あとで花咲くことがあるし咲かないこともある 賭に勝った者を、降りたやつがバカにできるのか? え、おい : デフォルトの名無しさん (ワッチョイ 8abd-2pQG) [sage] 2018/02/28(水) 22:02:12.40:debsNNov0 書き込むときポインタ渡しにするのは C++には参照渡しがin/out/refのどの意味なのか表すシンタックスが現状無いから というのが主要な動機だと思うが inならconst T& aというのは比較的読み筋だが T* pと書いただけだとoutなのかrefなのかやっぱりわからん… : デフォルトの名無しさん (ブーイモ MM5e-chUR) [sage] 2018/02/28(水) 22:22:45.57:n9jVMobsM outは**だろ : デフォルトの名無しさん (ワッチョイ f680-IMbs) [sage] 2018/02/28(水) 22:38:47.40:ugxprRf80 && は、Rust のmove の事。 所有権移転。移転元が空になる 基本的に数年は、ドワンゴ江添と共に、山ごもり! 江添が空海なら、漏れは最澄w 悟りを開くまで、空海・最澄の一問一答が、延々と続くw : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e66f-x4Or) [sage] 2018/02/28(水) 23:03:26.56:7ezW7mFb0 rvalue reference 自体はムーブしねぇつってるだろ。 : デフォルトの名無しさん (ワッチョイ df34-CuRu) [sage] 2018/03/01(木) 02:40:44.97:Cta7ST2f0 &&は所有権付き参照オブジェクトのようなものだな : デフォルトの名無しさん (ワッチョイ bfe7-s382) [sage] 2018/03/01(木) 07:05:17.46:/bb7E7Gp0 &&参照は「このオブジェクトもういらないからぶっ壊してもいいよ」というサイン 言うなれば肉屋へ行く馬車 野生のオブジェクトは誰に断る必要もないので勝手に連れてかれて解体される 家畜を渡す時は解体に同意するサイン(std::move())が必要 : デフォルトの名無しさん (アウーイモ MM2b-wIew) [] 2018/03/01(木) 07:13:49.75:YKLxBKOvM Fooクラスのunique_ptrがつまったvectorを作って、他クラスのメンバ変数にセットするときはどう渡すべき? 作った元ではもう使わないから所有権放棄していいとする const参照渡しにして、渡された側でvectorの中身を全部std:move()して新しいvectorにつめるのが一番最初に思い浮かんだ そんなことしなくても最近ここででてる、&&つけて渡してそのままセットすれば解決するのかな? : デフォルトの名無しさん (ワッチョイ bfe7-s382) [sage] 2018/03/01(木) 07:20:14.18:/bb7E7Gp0 vectorを丸ごとmove付けてコンストラクタに渡せばいいよ 出来上がった後で渡したいならswapすればいい : デフォルトの名無しさん (アウーイモ MM2b-wIew) [] 2018/03/01(木) 08:22:01.82:YKLxBKOvM なるほどー コードにするとこんな感じかな? std::vector<std::unique_ptr>vec_hoge; ... Hoge hoge; hoge.setHoge(std:move(vec_hoge)) Hoge::setHoge(vector<unique_ptr>&& vec_hoge) { this-> vec_hoge = vec_hoge; } : デフォルトの名無しさん (ブーイモ MMcf-pwu8) [sage] 2018/03/01(木) 08:51:22.88:Z75vpagFM 最後にmove必要 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/01(木) 08:54:17.19:1485DW7Q0 せやな。 rvalue reference は lvalue だぞ。 : デフォルトの名無しさん (アウーイモ MM2b-wIew) [] 2018/03/01(木) 10:38:08.68:YKLxBKOvM ありがとう!勉強になりました : デフォルトの名無しさん (ワッチョイ dfbd-lEE9) [sage] 2018/03/01(木) 22:06:37.33:fp7iC0tG0 ちげう : デフォルトの名無しさん (アウアウカー Sabb-5mf3) [sage] 2018/03/02(金) 07:10:33.20:GbvR6g/La noexceptにtrue,falseがある理由については #include <type_traits> template<typename T> void test(T t)noexcept(is_unsigned<T>){ //Tの型がunsignedの時だけは例外は投げない } こういう事が出来ると書いてあったけど、c++17以降も問題なく使えるだろうか? : デフォルトの名無しさん (ワッチョイ df52-m1UI) [sage] 2018/03/02(金) 07:15:24.27:bNTu0vGw0 is_unsigned_vだろ なぜC++17以後で廃止になると思ったんだ? : デフォルトの名無しさん (アウアウカー Sabb-5mf3) [sage] 2018/03/02(金) 07:38:40.59:GbvR6g/La stdも抜けてた。。。 廃止になるじゃなく面倒な事になりそうだと。 : デフォルトの名無しさん (ワッチョイ df80-zeCZ) [sage] 2018/03/02(金) 08:07:40.62:mIGjbFX+0 unsigned は組み込み用だろ 0 〜 255 のカウンターなどで、無限にループする。 255の次に、0が来る overflow にされると困る : デフォルトの名無しさん (ブーイモ MMcf-pwu8) [sage] 2018/03/02(金) 08:51:13.35:Du7whmdSM 組み込みでなくても極々普通に使うし、標準ライブラリ使ってれば知らぬ間に使ってる。 : デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/02(金) 09:14:23.17:vziGgrtU0 size_t : デフォルトの名無しさん (ワッチョイ df52-m1UI) [sage] 2018/03/02(金) 09:29:49.65:bNTu0vGw0 それを言うなら uintptr_t : デフォルトの名無しさん (スプッッ Sd7f-yS6n) [sage] 2018/03/02(金) 12:01:58.77:D+SIA0G1d 普段は uint_xxt と size_t しか使わんわ int と ptr あんまり相互に変換しないし : デフォルトの名無しさん (マクド FFbb-x7J7) [sage] 2018/03/02(金) 22:27:40.22:3pZ6Fb9JF visualstudio2017 でスタックトレースがしたいのですができません。 最初はBoost.StackTraceで試みたのですがMSVCでは行数やファイル名の出力が非対応で アドレスまでしか取れませんでした。 次にWinAPIを使って解決させようとしたのですがこれもうまく行きません。 SymGetSymFromAddrを使うとどうやってもエラー126が帰ってきてしまいます。 以下のプログラムがVisualstudio2017で動作している人はいないでしょうか? ttps://github.com/shive/blogpost/blob/master/20130918-stacktrace/main.cpp : デフォルトの名無しさん (ワッチョイ 7f95-A/Ur) [] 2018/03/02(金) 23:27:18.83:KYEHMUiK0 スタートレックと空目した : デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/02(金) 23:40:43.96:vziGgrtU0 こうなった ---- BEGIN BACKTRACE ---- 1 : 0x00e76873 : Project1 : mycode::foo : c:\users\\source\repos\project1\project1\main.cpp(116) : backtrace(); 2 : 0x00e76513 : Project1 : mycode::bar : c:\users\\source\repos\project1\project1\main.cpp(120) : foo(); 3 : 0x00e76563 : Project1 : mycode::baz : c:\users\\source\repos\project1\project1\main.cpp(124) : bar(); 4 : 0x00e76b33 : Project1 : mycode::hoge : c:\users\\source\repos\project1\project1\main.cpp(128) : baz(); 5 : 0x00e76f0d : Project1 : main : c:\users\\source\repos\project1\project1\main.cpp(134) : try { 6 : 0x00e7870e : Project1 : invoke_main : f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl(78) : ? 7 : 0x00e785b0 : Project1 : __scrt_common_main_seh : f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl(283) : ? ---- END BACKTRACE ---- : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdff-dixK) [sage] 2018/03/02(金) 23:47:44.16:7K8TE86Qd ttps://stackoverflow.com/questions/22481126/why-isnt-symgetsymfromaddr64-working-it-returns-error-code-126 未確認 : 373 (ワイモマー MMff-cxM0) [sage] 2018/03/03(土) 01:05:16.48:7bxI8Ps/M プロジェクトの設定はdbghelp.libを追加しただけでしょうか? あとWindows10ですか?7ですか? 自分もそれを読んでx86とx64両方試したのですがダメでした、、、 : デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/03(土) 01:52:28.21:e0EB+SLu0 Windows10で実行 ライブラリは追加したのと このFileNameがchar*でmsvcでは通らないから適当に文字列のバッファを作って渡した >94 line.FileName = "?"; : 373 (マクド FFbb-x7J7) [sage] 2018/03/03(土) 07:43:32.07:MjEj/kk+F 自分はWindows7&VisualStudio2017なのですが dbghelp.lib、dgbhelp.hを探すと以下の場所にあるのでWin10でしか対応していないのかなと… C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\um\x86 C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\um C:\Program Files (x86)\Windows Kitsの下には8.1と10 という名前のフォルダがあるのでOSの番号ぽいです。 dbghelp.dllならそこらじゅうにあるのでLoadModule関数で呼べばいけるのかも : 373 (マクド FFbb-x7J7) [sage] 2018/03/03(土) 08:51:25.52:MjEj/kk+F VisualStudio Installerで構成の変更をしようとすると 'Windows XP Support for C++'というのがあって これがWindows7用のSDKらしいです。(どんな名前の付け方だ…) これをインストールするとめでたくdbghelp.libとdbghelp.hが追加されるので それでコンパイルしようとすると #include <dbghelp.h> とかくだけでコンパイルエラーになってしまいました。 エラー C2760 構文エラー: トークン '識別子' は予期されておらず、'型指定子' が予期されています scratch c:\program files (x86)\microsoft sdks\windows\v7.1a\include\objbase.h 239 Windows10を買うかVisualStudio2015をインストールするかしかないのかもしれません;; : デフォルトの名無しさん (ワッチョイ 8723-WWZl) [sage] 2018/03/03(土) 09:17:35.93:iGrPHQq30 Visual Studio 2017 スレの919あたりから話題になっているけど、 VS2017 の Windows 旧バージョンサポートはおかしいみたい。 2015と同じツールセット、SDKを用いても動作が違う。 2015をインストールするのがいい気がする。 参考 Visual Studio 2017 Part4 ・ ttp://mevius.5ch.net/test/read.cgi/tech/1509244956/ ttps://www.visualstudio.com/ja/vs/older-downloads/ : デフォルトの名無しさん (スップ Sdff-b+My) [sage] 2018/03/03(土) 10:29:47.52:eUUf6Fhxd コンパイラを作っているんですが、char 10bit short 18bitの時はsizeofはいくつを返せばいいんですか? : デフォルトの名無しさん (ワッチョイ 078a-Jyeh) [sage釣] 2018/03/03(土) 10:36:52.34:/0Rk5gcF0 アドレス単位を返す。ワードアドレッシングなら通常全て1になる : デフォルトの名無しさん (ワッチョイ 8723-WWZl) [sage] 2018/03/03(土) 10:42:04.53:iGrPHQq30 メモリ上のレイアウト次第 その18ビットを隙間だらけでchar8個分のメモリに置いてるなら8だし、 詰めて2個分で置いてるなら2 : デフォルトの名無しさん (ワッチョイ df7f-nnrn) [sage] 2018/03/03(土) 10:51:46.74:sKvL+uoJ0 sizeof(char)は必ず1じゃなかったっけ? : デフォルトの名無しさん [] 2018/03/03(土) 12:49:02.99 sizeofが小数を返しちゃいけないって誰が決めたの?🙄 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/03(土) 13:15:05.21:uc6Z/AdW0 仕様。 C99 だと 7.17 に size_t は sizeof 演算子の結果の符号無し整数型って書いてある。 C++11 だと 5.3.3 に sizeof 演算子の返却値の型は size_t って書いてあって、 18.2 に size_t は符号無し整数型って書いてある。 : デフォルトの名無しさん (ワッチョイ df52-m1UI) [sage] 2018/03/03(土) 13:20:00.43:Yc5zIgYv0 sizeof(bool) == 0.125 であって欲しいのかw : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/03(土) 13:43:14.93:uc6Z/AdW0 どうせ汎整数昇格で int になることばかりなので、 アドレス単位以下の小さなオブジェクトにする意味なんてないよ。 大きな配列で扱いたいときは std::bitset が有るし。 : デフォルトの名無しさん [] 2018/03/03(土) 14:56:24.32 ありがとう🤣 : デフォルトの名無しさん (ワッチョイ dff9-5eZn) [sage] 2018/03/03(土) 15:45:51.52:+GZAkR500 もしsizeofが小数を返したら汎整数昇格は適用されないんじゃない? : デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/03(土) 16:09:32.75:e0EB+SLu0 使用者が混乱するような仕様はちょっと : デフォルトの名無しさん (ワッチョイ df8f-obH6) [sage] 2018/03/03(土) 18:28:41.77:OIzMcqKj0 この板に書いてあることがほとんどわかっていないようなクソ素人ですみませんがちょっとお聞きしたいことがあります。 Windows 7でOpenCVをTDM-GCCにて動かしたいと思っているのですが、どなたかこの設定で動かされている方など居られますでしょうか? もしくは素直にVisualStudioなど使ったほうが良いのでしょうか? 昨日からあれこれ試しているのですがまったく動かないです。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdff-dixK) [sage] 2018/03/03(土) 19:01:36.20:ZgUZF4A1d 俺ならパッケージマネージャがあるMSYS2+MinGW使うよ。 パッケージマネージャがないTDM-GCCなら、まず、OpenCVをビルドして、リンクできるようにしないといけない。 まあ、めんどうくさい訳で。 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdff-dixK) [sage] 2018/03/03(土) 19:37:06.06:ZgUZF4A1d 初心者はVSやるとよろし。NuGetというパッケージマネージャがあるよ。 : デフォルトの名無しさん (ワッチョイ df8f-obH6) [] 2018/03/03(土) 20:12:29.49:OIzMcqKj0 片山様 レスありがとうございます。 そうですね、VSは重いという理由で避けていましたがやはりまずはちゃんと王道からやっていこうと思います。 慣れたらソースからビルドもしてみたいですが、まずはOpenCVであれこれしたいのでやりやすい環境で頑張りたいと思います。 ありがとうございました。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/03(土) 20:37:52.59:uc6Z/AdW0 VS の統合開発環境を外したツールセットだけの SDK もあったはず。 でもまあ初心者は統合開発環境があった方がいいってのは同意だな。 : デフォルトの名無しさん (アウアウカー Sabb-5mf3) [sage] 2018/03/03(土) 21:19:46.86:oo1zjTPVa C++の文字列、u16やu32stringとか乱立してるけど今時TCHARとか使わないでしょうか? string,wstring,u16string,u32string...どれか決め打ち? : デフォルトの名無しさん (ワッチョイ 8723-WWZl) [sage] 2018/03/03(土) 21:37:46.21:iGrPHQq30 主に使ってるライブラリ/フレームワークに合わせれば? 何でもいいなら multibyte で utf-8 一択だろう ucs2 (16bit) にしても ucs4 (32bit) にしてもどうせ 合字とかで1コードポイント1文字にならないから意味ないし コンテナは string でも何でも好きなものを : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/03(土) 21:52:22.75:uc6Z/AdW0 どうやろな? Windows だと API が UTF-16 前提だからそれで揃えるってのは悪くない選択だと思うし。 : デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/03(土) 21:55:03.34:e0EB+SLu0 TCHARはcharとwchar_tをvisual studioのプロジェクトの設定で切り替えてtypedefしてる型だ マイクロソフトのライブラリの一部 u16stringとu32stringはstd::basic_string<char16_t>とstd::basic_string<char32_t>のエイリアス UTF-16とUTF-32の文字列を扱うクラスで標準ライブラリの一部 そもそもどっちかというものではない std::basic_string<TCHAR>とか使ってもいい : デフォルトの名無しさん (ワッチョイ dfbd-lEE9) [sage] 2018/03/03(土) 22:02:34.74:i5AAIiVZ0 OpenCVのビルドぐらいCMakeでGUIでできる : デフォルトの名無しさん (ワッチョイ dfbd-lEE9) [sage] 2018/03/03(土) 22:07:02.05:i5AAIiVZ0 >std::basic_string<TCHAR>とか使ってもいい ほんとそれ ていうかWin32APIでサポートされるうちはやっぱマルチバイトが無難 : デフォルトの名無しさん (ワッチョイ 4781-atej) [sage] 2018/03/03(土) 22:12:10.73:q1dNIabI0 ShiftJisなんて廃止して、UTF8に統一してしまえば良かったよね : デフォルトの名無しさん (ワッチョイ 078a-Jyeh) [sage釣] 2018/03/03(土) 22:19:12.96:/0Rk5gcF0 UTFはソートのコストが高いから痛し痒しだけどね SJISはその点は優秀かと : デフォルトの名無しさん (ワッチョイ df4c-jQxp) [sage] 2018/03/03(土) 22:38:49.13:pbvBV+5A0 Windows10はutf8モードにできたような : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/03(土) 22:56:38.78:uc6Z/AdW0 文字コードを統一したところでロケールの切替えはどうせ必要なわけだし、 内部的な処理が UNICODE に統一されたので良しとするしかなかろ。 : デフォルトの名無しさん (ワッチョイ 4781-atej) [sage] 2018/03/03(土) 23:43:29.67:q1dNIabI0 utf8に統一したら、ロケールの切替って表示する文字列の言語を決める位の意味しか無いのではないかな 異なる言語の文字列でもそのまま字化けせずに表示出来た方が都合が良いように思うけど : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/04(日) 00:38:00.37:R9gQD4Ga0 Windows はもう 20 年以上前から Unicode 化はやってるんだってば。 UNICODE 版の API を正しく使う限り文字化けしない。 フォントの設定とかで化けることはあるかもしれんけど、 それも今はフォントリンクとかでおおよそ上手いこと処理してまうしな。 UNICODE 化できていない今までに作られたカスなアプリが消し去れないし、 カスなアプリのために ANSI 版の API (の挙動を制御するためのコードページの切替えの仕組み) は残しておかなきゃならないけど、 Unicode への統一そのものは出来てるから満足するしかない。 っていう話ね。 : デフォルトの名無しさん (ワッチョイ bfe7-s382) [sage] 2018/03/04(日) 00:59:55.95:LharAyAs0 だったらVisualStudioで作ったソースファイルのデフォルトがShiftJIS固定なのをそろそろなんとかしてくれよ : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/04(日) 01:01:33.87:R9gQD4Ga0 せやな。 : デフォルトの名無しさん (ワッチョイ dfbd-lEE9) [sage] 2018/03/04(日) 01:07:55.85:BtVPmkEs0 LinuxとかのシステムコールもUnicode化されたら考えるわアデューノシ : デフォルトの名無しさん (ワッチョイ 079b-esDK) [sage] 2018/03/04(日) 01:14:01.78:fY1aJvVU0 2017で治ったんじゃなかったか : デフォルトの名無しさん (ワッチョイ dfbd-lEE9) [sage] 2018/03/04(日) 01:15:23.20:BtVPmkEs0 だいたいwchar_tとかcharの倍容量を食うじゃん? 2が3になるとかならまだしも1が2になるというのは精神的にインパクトがデカイ L"Hello World!"のバイナリをダンプしてみたらトラウマを抱え込むレヴェル というのもあるし他環境とのソースコード共通化も視野に入れる場合やっぱマルチバイトしか… : デフォルトの名無しさん (ワッチョイ dfe1-9jF/) [sage] 2018/03/04(日) 01:35:20.32:pARrwnK20 WindowsのUNICODE版APIはUTF-8と相性が悪いからクソ : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/04(日) 01:39:19.42:R9gQD4Ga0 せやろか? 内部表現として使う文には UTF-16 って良いと思うけどな。 UTF-8 との間なら変換コストも大したことないし。 : デフォルトの名無しさん (ワッチョイ 8723-WWZl) [sage] 2018/03/04(日) 02:20:02.75:8pLLmBBd0 iOS / macOS / Windows / Java と多くのプラットフォームの API で文字列としてUTF-16 が使われてるから割と使うけど、 近年多用される絵文字とかが全然1文字1符号にならんので ロジックを基準する上ではUTF-8より便利ってわけでもない。 文字列の処理を描くときは合字以外は1文字1符号になるUCS4 の方が良い。 : デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/04(日) 02:23:18.11:FSOQNU6I0 なぜ世界中の頭脳を集結させても完璧な文字コードは作れないのか : デフォルトの名無しさん (ワッチョイ dfbd-lEE9) [sage] 2018/03/04(日) 02:28:31.88:BtVPmkEs0 x86アーキテクチャーがRISC-Vに置き換わったら考えるわノシ : デフォルトの名無しさん (ワッチョイ dfbd-lEE9) [sage] 2018/03/04(日) 02:42:05.74:BtVPmkEs0 ていうかコルモゴロフ複雑性が計算可能関数だったら考えるわノシ : デフォルトの名無しさん (ワッチョイ df34-CuRu) [sage] 2018/03/04(日) 02:53:03.62:QKjmCs/V0 韓国がUNICODEにすごい文字数予約済みにしてあるとか聞いたことある : デフォルトの名無しさん (ワッチョイ 7feb-Vmra) [sage] 2018/03/04(日) 03:02:28.08:ymM0nha90 あの言語動的に文字生成でもしないと無駄多杉だろ : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/04(日) 03:02:39.39:R9gQD4Ga0 どうせイテレータでアクセスするから、合字はどうしようもないにしても 先頭からコードポイント単位で読む分にはどの符号化を使っててもあんまり変わらん気がするが。 : デフォルトの名無しさん (ワッチョイ 8723-WWZl) [sage] 2018/03/04(日) 03:56:38.94:8pLLmBBd0 UTF-16 だとサロゲートペアが出てくるからマルチバイトがマルチワードになるだけ ucs4 だとそれが要らなくて符合とコードポイントが1:1対応になるんだよ。 何年か前まではサロゲートペア?なにそれおいしいの?でも済んでたけど 今の時代それは無理だし : デフォルトの名無しさん (ワッチョイ 8723-WWZl) [sage] 2018/03/04(日) 04:09:09.92:8pLLmBBd0 要は utf-8、utf-16 → 1符合 ≠ 1コードポイント ≠ 1文字 ucs4 → 1符合 = 1コードポイント ≠ 1文字 だから完全自作の文字列処理ではucs4が楽だよという意見でした テキストなんてたいしてメモリ食わないしね おしまい : デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/04(日) 04:09:59.70:FSOQNU6I0 charset_cast<utf_8>()みたいなの欲しい : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/04(日) 08:42:48.43:R9gQD4Ga0 おっと、 u16string のイテレータはサロゲートペアは解決してくれないのか。 まあそれも小さなラッパを作ればどうとでもなる。 : デフォルトの名無しさん (ワッチョイ bfe7-s382) [sage] 2018/03/04(日) 09:34:29.91:LharAyAs0 UTF16でサロゲートでガチャガチャやるくらいならUTF8でちゃんとやった方が実り多いし そんなんやりたくないならUTF32使えばいいし 中途半端だよねUTF16 : デフォルトの名無しさん (ワッチョイ df6e-m1UI) [sage] 2018/03/04(日) 09:38:06.05:ZPPAxORI0 ワイドのようで実はマルチ : デフォルトの名無しさん (アウアウカー Sabb-5mf3) [sage] 2018/03/04(日) 10:55:23.96:kJ02m0gha どこかでみたけど歴史的にはutf32やutf16よりutf8が新しいんだろ? : デフォルトの名無しさん (ワッチョイ 078a-Jyeh) [sage] 2018/03/04(日) 12:59:59.04:hIgSiiXH0 オリジナルのXEROXのコードへの先祖返りではないかな? : デフォルトの名無しさん (マクド FFbb-x7J7) [sage] 2018/03/04(日) 14:09:11.62:GeBypOU0F visualstudio2017でBoost.Testを試したいのですがうまく行きません。 Nugetでboost-vc141をインストールしてテストプロジェクトをWindowsコンソールアプリケーションとして 追加し、Helloworld的なテストプログラムを書きました。 ビルドは通るのですが、テストエクスプローラーにテストが認識されません。 #include "stdafx.h" #define BOOST_TEST_MODULE MyTest #include <boost/test/included/unit_test.hpp> BOOST_AUTO_TEST_CASE(my_boost_test) { const int x = 1; BOOST_CHECK(x == 1); BOOST_CHECK(x != 1); } VisualStudio2017のバージョンは15.5.7で 「Boost.Testのテスト アダプター」はデフォルトでインストールされるようになっていたので インストールされています。 : デフォルトの名無しさん (ワッチョイ a7b3-m1UI) [] 2018/03/06(火) 00:41:37.37:MSLc23us0 標準ライブラリを前方宣言にすることに意味ってありますか? : デフォルトの名無しさん (ワッチョイ 677f-m1UI) [] 2018/03/06(火) 00:45:13.63:jqoml9jL0 メイヤーズは普通にインクルードしろって言ってた : デフォルトの名無しさん (ワッチョイ dfcb-pwu8) [sage] 2018/03/06(火) 01:45:01.96:RorZBCxf0 それどこに書いてあるの? : デフォルトの名無しさん (アウアウオー Sa9f-JHL/) [sage] 2018/03/06(火) 06:16:57.53:HL6NWtm0a newした配列がいつの間にか解放されてて、 プログラムの最後でdeleteすると必ずアクセスエラーで落ちるんですが、 newは勝手に解放されることあるんですか? : デフォルトの名無しさん (ワッチョイ df33-k3ZN) [sage] 2018/03/06(火) 07:19:59.92:18YefqDd0 どっかで未定義動作に堕ちてるならそんな結果になることもあるだろね。 : デフォルトの名無しさん (ワッチョイ bfe7-s382) [sage] 2018/03/06(火) 07:39:27.47:YXZKPZh60 ・どっかでメモリの取り扱い間違えてnewの管理情報を踏んづけて壊してる ・unique_ptrやshared_ptr、その他スマートポインタ的なものに理解せずに渡してる 多分このどっちか : デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/06(火) 07:56:08.66:4Jw7uGdF0 ポインタがnewで帰ってきたアドレスと違う可能性 : デフォルトの名無しさん (ワッチョイ e75b-m1UI) [sage] 2018/03/06(火) 11:04:41.26:PuW1uuBL0 「解放されてて」というのは、どうやって確認した? たとえば要素のデストラクタが実行されているとか、 別件で確保するメモリに再使用されているとか、 そういうことが起きているのか? : デフォルトの名無しさん (ワッチョイ df60-k3ZN) [sage] 2018/03/06(火) 13:48:19.62:xvhpcg6j0 constructor destructor copy constructor operator=() のいずれかに誤りがあるのでは? 概念コードを書いてみなさい : デフォルトの名無しさん (ワッチョイ df60-k3ZN) [sage] 2018/03/06(火) 13:50:16.42:xvhpcg6j0 operator new() operator delete() を捕捉するのもいいかもね、根本的に見直す時期だと思う : デフォルトの名無しさん (ワッチョイ 7fcc-wl/W) [] 2018/03/06(火) 15:12:07.82:p6GeX8860 ファイル分割をしてみたく、プログラムをヘッダファイルとcppファイルに分割しようと挑戦したのですがよくわからないエラーが出まくります・・ プログラム超初心者なので凄い初歩的な部分を間違えているかもしれません・・・ エラーですが、ヘッダファイルの方で 'vector':'std'のメンバーではありません 'vector':定義されていない識別子です 'string':定義されていない識別子です 'cv': 識別子がクラス名でも名前空間名でもありません。 'Mat':定義されていない識別子です 'ofstream':'std'のメンバーではありません 'ofstream':定義されていない識別子です みたいなエラーが出ます。 ヘッダファイルは、二重インクルードガードと関数のプロトタイプ宣言しかしていないのですが 上のようにそ、のプロトタイプ宣言の型とかに対してのエラーが出まくります 何かヘッダファイルに付けたほうがいいのでしょうか? 分かる方がいたら、教えていただけますでしょうか。 ちなみに、visual studio で作業していて、プロジェクトはコンソールアプリケーションで作っています。 もしかして、自分でmakefileとかを作る必要があるのでしょうか? : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdff-dixK) [sage] 2018/03/06(火) 15:14:49.26:W0MQjqG0d ヘッダーの方で #include <vector> などが足りないのでは。 ヘッダーは、自己完結にした方がいいらしい。 : デフォルトの名無しさん (ワッチョイ 7fcc-1LYG) [sage] 2018/03/06(火) 15:40:05.75:p6GeX8860 よく見たら、自分の参考にしていたページでヘッダファイルのincludeは最小限に抑えると書いていました… てっきり、ヘッダファイルではincludeはしないものなのかと… 最小限というのは、エラーが回避できるstdio.hとかの最小限のファイルだけヘッダでincludeして、他のmath.hなどはcppファイルでincludeすればいい感じですか? : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdff-dixK) [sage] 2018/03/06(火) 15:50:38.20:W0MQjqG0d 最小限というのは、コンパイル時間、ビルド時間を短縮するためだから、小さなプログラムでは気にする必要はない。 cppとhppで#includeを分けるというのはよくあることだ。 : デフォルトの名無しさん (ワッチョイ 7fcc-1LYG) [sage] 2018/03/06(火) 16:05:55.81:p6GeX8860 ありがとうございます! : デフォルトの名無しさん (ワッチョイ 6793-fJrP) [sage] 2018/03/06(火) 16:16:08.19:r6wtBatS0 の書きぶりからして 自作のヘッダファイルに std::vector を使った関数のプロトタイプがある、 しかしヘッダファイルの先頭では <vector> を#includeしてない、て感じね。 これは と同じ話。 あと で <stdio.h> と書いてるところを見ると 参考にしてるページは少々古い情報かも。 「あえて<cstdio>でなく<stdio.h>をインクルードする」ことについて 何か理由があるのかも知れないけど。 : デフォルトの名無しさん [] 2018/03/06(火) 17:54:41.92 Cソースのincludeの位置にヘッダファイルの中身を貼り付けたときにコンパイルできなきゃだめ たぶんCソースの中で他のincludeよりも前に新しいヘッダファイルのincludeを書いてるんだろう : デフォルトの名無しさん (ワッチョイ 7fcc-1LYG) [sage] 2018/03/06(火) 18:15:37.24:p6GeX8860 なるほど、cstdioの方が良いんですね なんか二種類あるけど、どっちなんだろーと思ってたので、勉強なります 次からそちらを使います : デフォルトの名無しさん (アウアウオー Sa9f-JHL/) [sage] 2018/03/06(火) 22:17:21.07:i8Fah5dFa 前者っぽいでした : デフォルトの名無しさん (アウアウウー Sa2b-wl/W) [] 2018/03/06(火) 23:34:50.60:pZOZvbRza C++のリファレンスとかで[first,last)というふうに左右で括弧が違う表記があるんだけど、これはIteratorに関しての表記ですか? : デフォルトの名無しさん (ワッチョイ df60-k3ZN) [sage] 2018/03/06(火) 23:42:46.07:xvhpcg6j0 数学方面の書き方を源流にしていると思います [x, y) は x は含み、y は含めない半開区間を示しますが、それを類推したものでしょう : デフォルトの名無しさん (ワッチョイ 07eb-n++H) [sage] 2018/03/06(火) 23:43:09.96:ey0B6I8l0 範囲の数学的な書き方、半開区間とかなんとか それだとfirst以上last未満の範囲、ということ : デフォルトの名無しさん (ワッチョイ a7b3-m1UI) [sage] 2018/03/06(火) 23:47:04.41:MSLc23us0 ttps://ttsuki.github.io/styleguide/cppguide.ja.html#Forward_Declarations 前方宣言ってしたほうがいいのか、しないほうがいいのかどっちなんですかね : デフォルトの名無しさん (アウアウウー Sa2b-wl/W) [] 2018/03/06(火) 23:50:38.84:pZOZvbRza ,454 数学でしたか!勉強になります。 : デフォルトの名無しさん (ワッチョイ 2723-SQy9) [sage] 2018/03/07(水) 00:29:35.52:+JS1hm360 mutex g_Mtx; int g_Val = 0; int Func( int A, int B ) { int Val = A * B; lock_guard<mutex> Lock( g_Mtx ); return g_Val = Val; } void ThreadFunc0() { int Val = Func( 2, 3 ); // Valを参照する処理 } void ThreadFunc1() { lock_guard<mutex> Lock( g_Mtx ); // g_Valを参照する処理 } 上記のようなスレッド関数が非同期に実行されるとき、 Func()はスレッドセーフ(g_Val書き換え中に参照されない)でしょうか? (1)lock_guard<mutex>によるミューテックスロック (2)g_Valの書き換え (3)戻り値を呼び出し元スレッドにコピー(あるいはムーブ) (4)lock_guard<mutex>がスコープから外れアンロック というシーケンスを期待しています。 : デフォルトの名無しさん (ワッチョイ dfbd-lEE9) [sage] 2018/03/07(水) 00:29:47.60:6+ILModc0 endならともかくlastは区間内の最後の要素なんじゃ… : デフォルトの名無しさん (アウアウウー Sa2b-m1UI) [] 2018/03/07(水) 10:09:55.97:ukyKg6LAa 基本的な質問なのですが、以下のプログラムがエラーになるのはなぜでしょうか? char* pc = "abc"; pc[0] = 'z'; cout << pc << endl; 以下のプログラムでは意図通りに動きます。 char ac[] = { 'a', 'b', 'c', '\0' }; cout << ac << endl; ac[0] = 'z'; cout << ac << endl; : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/07(水) 10:14:51.80:TWOfgg7C0 上は変数 pc はリテラル文字列の先頭を指すポインタ。 下の変数 ac は配列で、それを文字列 "abc" で初期化するって意味。 リテラルの破壊は未定義。 破壊しないことをあてにして破壊不可能なセクション (メモリ領域) に配置されたりすることもあるので、アクセスエラーが生じる。 あくまで未定義だから出来ちゃうこともあるし、コンパイラオプションで制御できたりもするけど、基本的にはあかんやつ。 : デフォルトの名無しさん (ワッチョイ e75b-m1UI) [sage] 2018/03/07(水) 10:30:06.22:ylRgY7un0 仮引数名をendにすると関数名のendと紛らわしいからだよ 説明の文中にendが出てくる度毎にいちいち仮引数か関数か断るハメになる : デフォルトの名無しさん (アウアウウー Sa2b-m1UI) [sage] 2018/03/07(水) 10:35:31.71:ukyKg6LAa ありがとうございました。 Pythonでimmutableとかいうのがありますが、それでしょうか? : デフォルトの名無しさん (アウアウウー Sa2b-m1UI) [sage] 2018/03/07(水) 11:10:02.03:ukyKg6LAa すみません、また、ベーシックな質問です。 char* pc1 = 1; → エラー char* pc2 = NULL; → OK char* pc3 = 0; → OK なぜ、2番目と3番目はOKなのでしょうか? char* pc1 = 1; がエラーになるのは、 int 型の値で char* 型の変数を初期化できないからだとすれば、 char* pc3 = 0; もエラーになると考えることもできると思います。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/07(水) 11:10:26.68:TWOfgg7C0 Python なんか知らんがな。 Python の immutable は Python の immutable であって、それが C++ の何物かであったりはしないよ。 C++ のリテラルを破壊した結果は未定義というのは C++ のリテラルを破壊した結果は未定義という規則であるだけ。 似て感じられたとしても一対一に対応付くような単純なものではないので、 背景にあるメカニズムを理解せずに翻訳して理解しようとするような方法はお勧めできない。 : デフォルトの名無しさん (アウアウウー Sa2b-m1UI) [sage] 2018/03/07(水) 11:14:31.86:ukyKg6LAa なるほど、そういう規則だからリテラルを破壊しようとするとコンパイルエラーにするわけですね。 ありがとうございました。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/07(水) 11:22:08.82:TWOfgg7C0 書き忘れてたけど、 C++ の文字列リテラルの型は const char[] なので、 const 付きでないポインタに渡すと単純に型が合わなくてエラーになるはず。 C だと型に const が付いてないのに破壊するのは未定義ってことになっててあまりにもクソだったから改められた。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/07(水) 11:32:07.41:TWOfgg7C0 0 はポインタに型変換可能で、型変換した結果が空ポインタと等しいことが保証されてる特別な存在。 (ビットパターンが等しいとは限らないことには注意が必要。) 互換であることが保証されているので、処理系によっては #define NULL 0 として定義していることもある。 余談だが、これはオーバーロードされた関数でうっかりしやすいので気を付けた方がいい。 たとえば関数 foo が以下のような型でオーバーロードされている場合、 void foo(int); void foo(int*); これを foo(NULL) と呼び出すと void foo(int) が呼び出されたりする。 今ではヌルポインタを表すキーワード nullptr が用意されたので、 NULL はあまり使わない方が良い。 : デフォルトの名無しさん (アウアウウー Sa2b-m1UI) [sage] 2018/03/07(水) 12:03:25.28:ukyKg6LAa ありがとうございました。 Visual Stuidoを使っていますが、以下でエラーは発生しませんでした。 char* pc = "abc"; cout << pc << endl; : デフォルトの名無しさん (ワッチョイ e75b-m1UI) [sage] 2018/03/07(水) 12:29:38.25:ylRgY7un0 それはISO/IEC14882:1998の4.2で許されていたことに由来する その後ISO/IEC14882:2011のC.1.1で廃止されたが 古いソースを通すために故意に違反状態のままにしている : デフォルトの名無しさん (アウアウカー Sabb-5mf3) [sage] 2018/03/07(水) 16:15:14.65:nnB4Kxzea c++の規約に違反にしないためには一度変数に代入する必要があるという事? : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/07(水) 16:24:01.54:TWOfgg7C0 オプションで指定できるんじゃね? 俺は GCC を使ってるから知らんけど。 : デフォルトの名無しさん (ワッチョイ e75b-m1UI) [sage] 2018/03/07(水) 16:29:51.37:ylRgY7un0 違う char const* cc; cc = "abc"; //完全に合法 char* pc; pc = cc; //不適格 pc = "abc"; //CとC++98では非推奨、C++11以後では不適格 pc = &"abc"[0]; //左辺値変形でこう解釈されていて 非constへのポインタに、constへのポインタを代入することになり、 暗黙のconst外しにあたるので、C++11が正論 pc = const_cast<char*>("abc"); //C++11以後ではこう書く : デフォルトの名無しさん [] 2018/03/07(水) 17:54:06.02 それもだめじゃね? const領域に非constでアクセスするなんて罪深いことなんだから、ちゃんと別領域にコピーしてから扱わないと。 : デフォルトの名無しさん (ワッチョイ df80-zeCZ) [sage] 2018/03/07(水) 18:18:25.20:TnxtYBSc0 >char* pc = "abc"; 文字列リテラルは不変だから、const を付けないといけない 古いライブラリで、const を付けていないものを動作させるために(互換性)、 例外的に使う場合だけに許される >char* pc3 = 0; → OK この0 は、数値型の0じゃない。 予約語を増やすのが嫌だから、= 0 と書いたら、特別な意味に解釈する。 分かりにくい、クソ仕様 virtual func( ) = 0; これも、そう。 純粋仮想関数という特別な意味を表す : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/07(水) 18:49:53.33:TWOfgg7C0 書き込まなければ問題は無い。 が、 const 外しが必要な状態ってのが良くないことは確か。 : デフォルトの名無しさん (ワッチョイ e75b-m1UI) [sage] 2018/03/07(水) 20:52:49.95:ylRgY7un0 いいや数値型の0だ 翻訳時に0と確定できる汎整数型の定数に限り ポインタに暗黙変換できるという特例になっている 純粋仮想関数と関連付ける条項はない : デフォルトの名無しさん (スップ Sdff-WWZl) [sage] 2018/03/07(水) 22:07:54.67:eXkgxxlqd 純粋仮想関数と関連付けてはいないだろう それはともかくとして char * p = 7-7; // no error class T { virtual void f() = 7-7; // error }; となる気がするので言ってることは合ってるか : デフォルトの名無しさん (ワッチョイ 5f7e-m1UI) [sage] 2018/03/07(水) 22:10:57.06:NKcGF/Sn0 C言語でNULLが0をdefineしたものだったというだけだろ : デフォルトの名無しさん (スップ Sdff-WWZl) [sage] 2018/03/07(水) 22:12:59.22:eXkgxxlqd C言語では ((void*)0) だった気がする : デフォルトの名無しさん (ワッチョイ e75b-m1UI) [sage] 2018/03/07(水) 22:34:03.79:ylRgY7un0 7-7は定数式なので0と完全に等価 純粋仮想関数の = 0 はA.8のpure-specifierで=0という特定のスペルと規定されているので7-7がエラーになるのは当然 : デフォルトの名無しさん (スップ Sdff-WWZl) [sage] 2018/03/07(水) 22:41:42.97:eXkgxxlqd いや疑問も呈していないし否定しているわけでもないのに当然と言われてもな… : デフォルトの名無しさん (ワッチョイ e75b-m1UI) [sage] 2018/03/07(水) 22:52:11.20:ylRgY7un0 じゃあ何のために、7-7とか言い出したんだ? : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/07(水) 23:02:40.75:TWOfgg7C0 それはあかん。 ひょっとしたら古い処理系でやってるのはあるかもしれんが、 規格違反のはず。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-m1UI) [sage] 2018/03/07(水) 23:12:03.15:TWOfgg7C0 と、思って調べてたんだけど、 C++ だと確実にあかんようだけど C だとアリなのかもしれない。 : デフォルトの名無しさん (ワッチョイ 078a-Jyeh) [sage] 2018/03/07(水) 23:58:27.20:/Jrz1mw60 offsetof()がどう実装されているかやね : デフォルトの名無しさん (ワッチョイ 6a33-hn8E) [sage] 2018/03/08(木) 02:18:11.16:BQ11IIJi0 C++14 からリテラルだけに限定されてるよ。 ttp://d.hatena.ne.jp/yohhoy/20140305/p1 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 666f-uQtz) [sage] 2018/03/08(木) 03:31:21.90:+04GXVK30 おっ、こんな基本的なことで変更が入ってたのか。 でも当然といえば当然の処置よな。 : デフォルトの名無しさん (ワッチョイ e6e7-frl3) [sage] 2018/03/08(木) 06:41:46.04:DSeYC6Qd0 Cの無意味な汚いゴミが掃除されるのは良いことだ : デフォルトの名無しさん (ワッチョイ 7f23-6rgV) [sage] 2018/03/08(木) 07:33:41.79:dmEui5aT0 しっかりして 流石にこの件では C と C++ 混同されたら対話が成り立たないよ : デフォルトの名無しさん (ワッチョイ 2a8f-HFNi) [sage] 2018/03/08(木) 18:35:02.35:uuOHCrug0 C++の勉強+機械学習も勉強しようとVisual Studio 2017でtiny-dnnを用いたいのですが、tiny-dnn内でコンパイルエラーが発生します。 具体的にはxcontainer.hpp内でC3203というエラーが頻発したり、feedfoward_layer.hppではC2760というエラーが発生したりしています。 環境はWindows 7でVisual Studio 2017 communityです。 プロジェクトはwindowsデスクトップアプリケーションを用いています。 tiny-dnnのインクルードはプロパティのインクルードディレクトリに追加しています。 どなたか心当たりのある方がいらっしゃれば教えていただけると嬉しいです。 : デフォルトの名無しさん (スプッッ Sd2a-dsCQ) [sage] 2018/03/08(木) 19:27:19.96:i2S5Knpdd linux windows両対応のコードを考えている最中の質問です unsigned int型の変数xの32bitに、char型の配列y[4]の8bit×4を当て込みたいです y[0]から順にxの先頭ビットに入れたいのだけど そういう時はどのようなコードになるのでしょうか 符号の問題で単純に24bitシフト+16bitシフト...みたいなことをすると期待の値にならないときが存在してます : デフォルトの名無しさん (アウアウカー Sa7b-ccCq) [sage] 2018/03/08(木) 19:50:56.79:2k5PL6f/a unionでどう? : デフォルトの名無しさん (スッップ Sd8a-6rgV) [sage] 2018/03/08(木) 20:26:39.82:FhiFltVyd シフトする前にunsigned charにキャストする : デフォルトの名無しさん (スッップ Sd8a-6rgV) [sage] 2018/03/08(木) 20:29:17.36:FhiFltVyd 参考 ttps://stackoverflow.com/questions/2437283/c-c-packing-signed-char-into-int : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 666f-uQtz) [sage] 2018/03/08(木) 22:47:08.29:+04GXVK30 スマソ : デフォルトの名無しさん (ワッチョイ caaf-+ocK) [sage] 2018/03/09(金) 11:50:12.37:XHk1xHdH0 ヘッダーファイルの関数定義から関数ポインタをtypedefする事は可能ですか? C++98辺りのコンパイラです。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 666f-uQtz) [sage] 2018/03/09(金) 12:25:38.00:nl8HCt1x0 昔の C++ には decltype が無いもんな。 出来ないと思うよ。 : デフォルトの名無しさん (スップ Sd2a-O8QP) [sage] 2018/03/09(金) 12:57:58.47:zqzgOSq4d テンプレート使えないかな? : デフォルトの名無しさん (ワッチョイ caaf-J0+d) [sage] 2018/03/09(金) 13:06:17.52:XHk1xHdH0 出来ませんか。ありがとう。 再定義が面倒だったので楽したいだけだったんですけどね。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 666f-uQtz) [sage] 2018/03/09(金) 13:35:32.12:nl8HCt1x0 その手があったか。 でも C++98 で自動で推論させようとするとヘルパー関数を使う必要があるじゃろ。 意味のないオブジェクト生成 (最適化で消えるかもしれんけど) がださい感じはするよね。 : デフォルトの名無しさん (ドコグロ MM8a-3fsH) [sage] 2018/03/09(金) 19:06:34.98:CekgNpjOM たくさんあるなら > ヘッダーファイルの関数定義から関数ポインタをtypedefする コードを生成するツールを作るとか : デフォルトの名無しさん [] 2018/03/09(金) 22:17:46.30 マクロ駆使すれば TYPEDEF_FUNC_DECL(なんちゃら); FUNC_DEF(かんちゃら) { return; } みたいな書き方できないのかな? なんちゃらは識別名と戻り値と引数 かんちゃらは識別名を指定するイメージ : デフォルトの名無しさん (ワッチョイ 0b9f-uQtz) [] 2018/03/09(金) 23:46:50.00:yn7GHiyb0 unsigned int x; char y[4]; . . . memcpy(&x, y, 4); : デフォルトの名無しさん (ワッチョイ 4abd-RZSe) [sage] 2018/03/09(金) 23:57:54.33:5+PoAx/E0 xの先頭ビットとはMSBなのかLSBなのか : デフォルトの名無しさん (スップ Sd2a-6rgV) [sage] 2018/03/10(土) 00:45:01.61:8ENKFfsbd メモリ上でのレイアウトとかもあるのでuint8_t経由でのシフトがいい クロックが(メモリアクセスが問題にならない程)低くてシフトが遅いマイクロプロセッサは別 : デフォルトの名無しさん [] 2018/03/10(土) 04:49:25.72 x = ntohl(x); も忘れずに : デフォルトの名無しさん (ワッチョイ 6a34-e70/) [sage] 2018/03/10(土) 06:32:30.15:Tg3hDFxK0 先頭ビットって32ビット目のことか? : デフォルトの名無しさん (ワッチョイ 0b9f-RK0z) [] 2018/03/10(土) 17:21:32.19:a2p+alti0 それが必要になるかどうかは場合による。 : ◆QZaw55cn4c (ワッチョイ 8a60-hn8E) [sage] 2018/03/10(土) 17:42:35.32:+Ww908Qw0 ネットワークバイトオーダーがここで関係あるのだろうか? : デフォルトの名無しさん [] 2018/03/10(土) 19:22:25.29 >unsigned int型の変数xの32bitに、char型の配列y[4]の8bit×4を当て込みたいです >y[0]から順に っていう要件だから、ホストバイトオーダーがビッグエンディアンかリトルエンディアンか分からない以上は常にntohlを付けるべき : デフォルトの名無しさん [] 2018/03/10(土) 19:24:15.74 char y[4] = { 0x12, 0x34, 0x56, 0x78 }; unsignd in x = 0x12345678; これを等価にしたいという意味だろうから。 : デフォルトの名無しさん (ワッチョイ fb93-Ni5c) [sage] 2018/03/10(土) 21:52:35.38:My21AM/A0 独習c++終わりそうなんだが次によむべき本とかある? : ◆QZaw55cn4c (ワッチョイ 8a60-hn8E) [sage] 2018/03/10(土) 22:03:20.54:+Ww908Qw0 ttps://mevius.5ch.net/test/read.cgi/tech/1493844476/312 あと STL の教科書、これもC++11以前のもの ttps://www.amazon.co.jp/dp/4881357786/ : デフォルトの名無しさん (ワッチョイ 8af9-G5w4) [sage] 2018/03/10(土) 22:09:22.02:Tk41qGXE0 本ばかり読まず実践しよう : デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/10(土) 22:09:43.95:lWictyCS0 cpprefjp : デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/10(土) 22:28:49.18:tBgkA+tH0 プログラミング言語C++とかどうやろ : デフォルトの名無しさん (ワッチョイ fb93-Ni5c) [sage] 2018/03/10(土) 22:50:35.99:My21AM/A0 ありがとうございます ひとまずの本にしてみます : デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/11(日) 00:41:56.08:6KlfnVLZ0 そういえば最新版のEffective STLみたいな本って無いのか? : デフォルトの名無しさん (ワッチョイ 6a34-e70/) [sage] 2018/03/11(日) 00:53:03.16:Bd/2u4u/0 あると思うが訳者がへたくそで右辺値左辺値あたり意味ワカランかったぞ : デフォルトの名無しさん (ワッチョイ 6a34-e70/) [sage] 2018/03/11(日) 00:57:27.74:Bd/2u4u/0 その辺りの参考にするなら下手な日本語文献探るよりか英文そのまま読んだ方がいい希ガス なんでもかんでも日本語訳してあるとほんと意味ワカランから : デフォルトの名無しさん (ワッチョイ 7323-Ik1A) [sage] 2018/03/11(日) 01:11:03.65:n48SUKtd0 cpprefjpのstd::min_elementとstd::max_elementの例文が間違ってるので誰か直してください。 自分はGitHubのアカウント持ってないので編集できません。 ttps://cpprefjp.github.io/reference/algorithm/min_element.html ttps://cpprefjp.github.io/reference/algorithm/max_element.html 誤:return a > b; 正:return a < b; : デフォルトの名無しさん (ワッチョイ 0b9f-uQtz) [] 2018/03/11(日) 01:22:57.30:ry5KQfC80 unsigned int x; char y[4]; . . . x = ((y[0] & 0xff) << 24) | ((y[1] & 0xff) << 16) | ((y[2] & 0xff) << 8) | (y[3] & 0xff); : デフォルトの名無しさん (ワッチョイ 6a80-csLy) [sage] 2018/03/11(日) 01:34:50.04:P1lOCLpn0 Scott Meyers Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)、2014 Effective Modern C++ ―C++11/14プログラムを進化させる42項目、2015 Effective C++ は、昔の本のリバイバルかな? 内容が新しいかどうかまでは、分からないけど : デフォルトの名無しさん (スップ Sd2a-A/UC) [sage] 2018/03/11(日) 08:34:37.66:XWEx9Mlwd テンプレートを使ったメタプログラムの有用性が分からん。コンパイル時処理で定数の階乗を計算してるけど実行時に値を変えれないなら、答えをベタ書きすればいいだけでは? : デフォルトの名無しさん (アウアウカー Sa7b-7AdS) [sage] 2018/03/11(日) 08:43:14.65:zMqNV6vza その値をベタ書きする手間をコンパイラにまかせることが出来るのが利点だと思うよ。 : デフォルトの名無しさん (スップ Sd2a-A/UC) [sage] 2018/03/11(日) 08:48:18.87:XWEx9Mlwd 3の階乗を、tmpするより6とタイプした方が早いだろ : デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/11(日) 09:03:15.99:6KlfnVLZ0 3ならいいけど10の階乗は?15の階乗は?21の階乗は? それは整数型で表現できるか? それは何桁になるのか? 適切な型をどうやって選ぶのか? その値を静的な配列のサイズにしたいが数値を変えるたびに電卓で計算はしたくない ならばfactorial<N>::valueと表現できれば便利ではないか ということ : デフォルトの名無しさん (ワッチョイ fb7f-uQtz) [] 2018/03/11(日) 09:03:17.33:0BygLdlM0 その3という数値が別のファイルの特定の値に依存してる場合もあるし : デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/11(日) 09:08:13.99:6KlfnVLZ0 意地悪するのはこの辺にしておいて それはメタプログラミングでこいういうこともできるよ程度のものにすぎない テンプレートメタプログラミングとはテンプレートを使ってソースコードを生成することだ ソースコードを作るためのプログラミングだと思ってくれてかまわない 一般的な目的としてはジェネリックプログラミングを実現するために使われる 標準ライブラリではvectorからchoronoやtupleまでテンプレートメタプログラミングありきの設計になっている : デフォルトの名無しさん (アウアウカー Sa7b-7AdS) [sage] 2018/03/11(日) 09:08:56.54:zMqNV6vza 値が小さいうちはそうかもしれんが16の階乗とか値が大きくなってもベタ書きが良い? ちなみにconstexprが使えるc++11以降の話と考えてOK? : デフォルトの名無しさん (ワッチョイ e6e7-frl3) [sage] 2018/03/11(日) 10:19:34.71:i1Cv6XBY0 階乗の例はいい例とは言えんな TMPで操作したいのはメインは型の方だからな 値も出来るよって例が階乗なだけで : デフォルトの名無しさん (ワッチョイ 6ab3-3fsH) [sage] 2018/03/11(日) 10:40:47.13:z1FVyjSJ0 > ソースコードを作るためのプログラミングだと思ってくれてかまわない そこまでやるならPL/Iみたいに%FOR %SELECTみたいな普通の制御構文で書ける方がいいわ : デフォルトの名無しさん (アウアウカー Sa7b-7AdS) [sage] 2018/03/11(日) 10:50:57.85:zMqNV6vza そんな貴方にtemplate+constexpr(c++14以降) : デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/11(日) 10:58:38.38:6KlfnVLZ0 頑張って古代人用のコンパイラ作ってくれ : デフォルトの名無しさん (ワッチョイ 6ab3-3fsH) [sage] 2018/03/11(日) 11:03:02.47:z1FVyjSJ0 お前アホだろ w 方向性がおかしいって話だぞ : デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/11(日) 11:13:25.26:6KlfnVLZ0 現代の言語でジェネリクスをサポートするのは一般的 テンプレートをこねくり回して整数演算をするのはおかしいという意味なら、普通の構文で書けるconstexprが追加されたからそっちを使うように : デフォルトの名無しさん (ワッチョイ 4abd-RZSe) [sage] 2018/03/11(日) 11:58:27.43:TvwI/h8S0 テンプレートで再帰ができたらナア…('A`) : デフォルトの名無しさん (ワッチョイ 4abd-RZSe) [sage] 2018/03/11(日) 12:00:06.04:TvwI/h8S0 とわいいつつ、実はC++のテンプレートはチューリング完全になってしまっていた(らしい ttps://cpplover.blogspot.jp/2013/10/blog-post_20.html : デフォルトの名無しさん (ドコグロ MM8a-3fsH) [sage] 2018/03/11(日) 12:05:49.26:93lmuZEGM costexprで階乗書いてみてから言えよ : デフォルトの名無しさん (ワッチョイ e6e7-frl3) [sage] 2018/03/11(日) 16:36:05.55:i1Cv6XBY0 constexpr unsigned long long factorial(int n){ unsigned long long r=1; for(int i=1;i<=n;++i){r*=i;} return r; } うん、簡単だね! : デフォルトの名無しさん (ワッチョイ 6a34-e70/) [sage] 2018/03/11(日) 16:41:07.00:Bd/2u4u/0 毎回毎回コンパイラが計算するのか : デフォルトの名無しさん (ワッチョイ 4acb-dpuX) [sage] 2018/03/11(日) 17:05:53.05:6zDmjp+70 たまにソースコードを見て、あ、この数字なんだっけって考えるよりも 10000回コンパイルさせるほうが早いと思うよ : デフォルトの名無しさん (ワッチョイ 7e32-uQtz) [sage] 2018/03/11(日) 17:18:40.81:Dtt3qpb50 マジックナンバーの本質 : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd8a-f9jl) [sage] 2018/03/11(日) 17:51:32.86:4ez4tjCrd オーバーフローのチェックがないからやり直し。 : デフォルトの名無しさん (ワッチョイ e6e7-frl3) [sage] 2018/03/11(日) 18:36:06.03:i1Cv6XBY0 はーい constexpr unsigned long long unsafe_factorial(int n){ unsigned long long r=1; for(int i=1;i<=n;++i){r*=i;} return r; } constexpr int min_factorialable(){ for(int i=1;;++i){ if(unsafe_factorial(i) > unsafe_factorial(i+1)){ return i; } } } constexpr unsigned long long factorial(int n){ if (n < 0 || n > min_factorialable()) { return 0; } return unsafe_factorial(n); } : デフォルトの名無しさん (ワッチョイ 2fe3-uQtz) [sage] 2018/03/11(日) 18:40:21.07:i3q5YI3y0 コンパイルエラーになるほうがいいなぁ : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd8a-f9jl) [sage] 2018/03/11(日) 19:45:19.23:4ez4tjCrd static_assert使え。 : デフォルトの名無しさん (スップ Sd2a-A/UC) [sage] 2018/03/11(日) 20:16:22.23:XWEx9Mlwd 実行時計算で答え算出してそれを貼った方が楽じゃね? : デフォルトの名無しさん (ワッチョイ 8af9-G5w4) [sage] 2018/03/11(日) 21:15:39.44:ezoYy+fr0 それで事足りるケースならそれでいいよ : デフォルトの名無しさん (ワッチョイ fb7f-uQtz) [] 2018/03/11(日) 21:19:50.46:0BygLdlM0 なんでそんなめんどくさくてミスしそうな方法をチョイスするんだよ : デフォルトの名無しさん [] 2018/03/12(月) 01:21:50.18 計算&書き換え手順をマニュアル化して、何十種類の仕向け別にバージョンアップの度に人海戦術で計算&書き換え&コードレビュー&テストするんですね、わかります : デフォルトの名無しさん (ワッチョイ fb93-ao9L) [sage] 2018/03/12(月) 05:00:24.40:kBVT8YZa0 min_factorialable() は、階乗を正しく計算できる最大の値を返す constexprな関数(コンパイル時にint定数に置き換えられることを期待)、 と読み取ったんだけど、なぜにmin_なの? : デフォルトの名無しさん [] 2018/03/12(月) 05:41:37.75 上限を求めるときに使うのはminだから、かな 知らんけど : デフォルトの名無しさん (ワッチョイ e6e7-frl3) [sage] 2018/03/12(月) 06:20:08.42:I9Is/5l40 最初min_nonfactorialableでnon取った時に直し忘れました : デフォルトの名無しさん (スッップ Sd8a-ted0) [sage] 2018/03/13(火) 09:59:46.06:CGjn2uNbd 一日の秒数を86400と書いてたらマジックナンバーやめろと言われたんだけど、 プログラムを少しでも書く人間にとってその数字は常識でいいよね? 60*60*24 と書いて「その60とか24は何だ?」と言われないでしょ? それと同じレベルだと思ってるんだけど。 : デフォルトの名無しさん (ワッチョイ ea12-OyD+) [sage] 2018/03/13(火) 10:10:13.70:oQx4WixC0 うるう秒でクラッシュするクソソフトウェアの出来あがり ニュートン力学と天文学と暦学からやりなおした方がいい : デフォルトの名無しさん (スプッッ Sd2a-ymMl) [] 2018/03/13(火) 10:13:40.69:bAh/W6qqd 言われないとわからない奴は言ってもわからないだろうから お前は一生マジックナンバー使いまくりでいいぞ : デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/13(火) 10:38:37.74:pKedwP800 そろそろ標準に日付計算のライブラリ欲しいわ : デフォルトの名無しさん (ワッチョイ cb38-uQtz) [sage] 2018/03/13(火) 11:02:13.56:92t/zLSk0 欲しいね chronoが中途半端でイラつく : デフォルトの名無しさん (スッップ Sd8a-ted0) [sage] 2018/03/13(火) 11:32:32.41:CGjn2uNbd それだと 60*60*24 と書いても同じだよね。 うるう秒とかは関係ない定数管理してる場合の話ですよもちろん。 : デフォルトの名無しさん (スッップ Sd8a-ted0) [sage] 2018/03/13(火) 11:37:27.38:CGjn2uNbd 86400がプログラマの常識的にマジックナンバーなのかどうか、って話ですよ : デフォルトの名無しさん (ワッチョイ 6a8a-aWcx) [sage] 2018/03/13(火) 11:45:44.57:cL/fN0Uj0 所で皆さんmakefileはどう編集してます あまり触れていないようなので気になります : デフォルトの名無しさん (ワッチョイ cb38-rkOG) [] 2018/03/13(火) 11:45:51.13:92t/zLSk0 2147483647なら俺の常識だが : デフォルトの名無しさん (ワッチョイ 2a98-Nvj+) [sage] 2018/03/13(火) 11:47:54.17:Hyr8QuVd0 趣味では汎用のmakefile作ってそれを使い回してる 仕事ではautotools : デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/13(火) 12:00:55.79:qHQADaBY0 他人と共有するコードならなるべく要素を分解して分かりやすく書いた方が好ましい 2の倍数も直接記述するのではなくシフト演算使った方が綺麗 : デフォルトの名無しさん (ワッチョイ 6a23-6rgV) [sage] 2018/03/13(火) 12:18:10.82:23dHbGxb0 くくるんじゃなくて… クラス宣言 int main() {....} あとは c++ スレで : デフォルトの名無しさん (ワッチョイ 6a23-6rgV) [sage] 2018/03/13(火) 12:18:34.80:23dHbGxb0 誤爆しました : デフォルトの名無しさん (スプッッ Sd43-8RCb) [sage] 2018/03/13(火) 12:51:25.09:YF2y/th/d 常識なんて集団が変われば変わる そのコードを見せる事を想定した集団の常識かどうかを考えろ : デフォルトの名無しさん (ワッチョイ 6a8a-6CfZ) [sage] 2018/03/13(火) 14:10:31.07:cL/fN0Uj0 2進数8進数10進数16進数のみではないということ 60進数や24進数の話でしょ時計を語るときは必須の常識 : デフォルトの名無しさん (ワッチョイ 6a8a-6CfZ) [sage] 2018/03/13(火) 14:26:54.36:cL/fN0Uj0 これをn進数って言うんだよ : デフォルトの名無しさん (スッップ Sd8a-ted0) [sage] 2018/03/13(火) 14:37:04.66:CGjn2uNbd 集団の常識ってことなら、'86400' をマジックナンバーと思ってる人間は少数派っぽいので、 文句はやんわりと無視する方向で行きますわ : デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/13(火) 14:53:30.50:qHQADaBY0 というかマジックナンバー言われるのって数字の意味とか集団の常識とかじゃなく書式の問題だよね 計算式の中に定数ポン置きしてる書き方してる奴がチームにいたらそりゃマズいよ、変数とか定数に置き換えろって俺も言う : デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/13(火) 14:59:18.81:qHQADaBY0 定数を定数に置き換えるってなんだよ リテラルは定数なり変数なりにって感じで読み替えといて : デフォルトの名無しさん (スップ Sd8a-6rgV) [sage] 2018/03/13(火) 15:34:48.40:VrugGyEjd しかしこうはしないだろ? const int int8_bits = 8; uint16_t word = (hi << int8_bits) | lo; こうもしない const int sec_per_min = 60; int sec = m * sec_per_min + s; 数値リテラルで書くのが許容される数値というものがある sec = day * 86400 はどうかというのが 個人的には知らない人でも暗算もせずに初見で合ってるかどうかわかるか、 を基本にすべきだと思う (小さな2の冪乗は除く。2の冪乗知らん奴はシネ) : デフォルトの名無しさん (ワッチョイ cb38-uQtz) [sage] 2018/03/13(火) 15:51:51.20:92t/zLSk0 uint16_t word = (hi << CHAR_BIT) | lo; これCHAR_BIT != 8な環境を意識するんなら、16って書いてあるのも問題だね const int micro_per_sec = 1000000; int us = sec * micro_per_sec; こう書けって言われたら俺はお断りする : デフォルトの名無しさん (ワンミングク MMda-GEnZ) [sage] 2018/03/13(火) 16:10:54.91:lXm9DcKjM e = 2.71828; p = 3.1415; : デフォルトの名無しさん (スップ Sd8a-6rgV) [sage] 2018/03/13(火) 16:11:31.80:VrugGyEjd bit_per_char や shortでもintでもなく int8、uint16_t と明記したのは所与の仕様のつもり。 最近のapiはよくナノ秒返してくるから1000000000 倍 1000.0*1000*1000と分かち書きしたくなる : デフォルトの名無しさん (ワッチョイ 6a8a-6CfZ) [] 2018/03/13(火) 16:29:39.63:cL/fN0Uj0 時刻を自動的に合わせますというコマンドボタンを作って 押すだけで済むのに : デフォルトの名無しさん (ワッチョイ cb38-uQtz) [sage] 2018/03/13(火) 16:33:12.95:92t/zLSk0 それを言うなら1'000'000'000だろjk : デフォルトの名無しさん (スッップ Sd8a-klMS) [sage] 2018/03/13(火) 18:34:24.26:5mSkIm9zd 86400って書くと、ideで定義の参照も使えんし 86400で検索したときに 1日の秒数なのか、適当に決めたタイムアウトとかの秒数なのか、ただのIDなのか、連番で出てきただけの数値なのかとか、無意味な数列なのかまざってわからんくなるやろ : デフォルトの名無しさん (ワッチョイ be81-uQtz) [sage] 2018/03/13(火) 18:56:33.51:U9FOV+VD0 #define SEC_PER_DAY (60*60*24) なんてやる人いないのかな : ◆QZaw55cn4c (ワッチョイ 8a60-hn8E) [sage] 2018/03/13(火) 19:22:14.64:4gb3BCLn0 #define は基本使わない、int const ABC = 12345; なら時々使う : デフォルトの名無しさん (スップ Sd2a-fjrM) [sage] 2018/03/13(火) 19:52:43.56:0AXLQ0hnd constexpr…… : デフォルトの名無しさん (ワッチョイ e6e7-frl3) [sage] 2018/03/13(火) 20:19:53.55:My0TInc10 さっさとこう書けるようにしてくれ 今の<chrono>クソすぎんよ int sec_par_day = static_cast<int>(std::chrono::second{std::chrono::day{{1}}); : デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/13(火) 20:25:30.79:pKedwP800 クソというか機能が圧倒的に足りてない : デフォルトの名無しさん (ドコグロ MM22-3fsH) [sage] 2018/03/13(火) 20:28:38.82:/ChP+Vc3M 86400とか1440でわかるけど 24*60*60とか24*60って書けばいいだけだと思う : デフォルトの名無しさん (ワッチョイ e6e7-frl3) [sage] 2018/03/13(火) 20:30:42.63:My0TInc10 21世紀も5分の1が過ぎようかっていうこの時代に 何が悲しゅうてたかが時刻を扱うだけでtime_pointの他にtmやらtime_tやらをガチャガチャさせられにゃならんのだよまったく : デフォルトの名無しさん (ブーイモ MM97-1XNJ) [sage] 2018/03/13(火) 22:01:42.63:vZM1ymmwM お前が正解 他はバカ : デフォルトの名無しさん [] 2018/03/13(火) 22:08:40.50 86400って何のために使うんだろう うるう日とかうるう秒とか考慮しなきゃ気持ち悪くね? : デフォルトの名無しさん (ワッチョイ be81-uQtz) [sage] 2018/03/13(火) 22:17:29.51:U9FOV+VD0 予め考慮しようがない : デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/13(火) 22:22:44.39:pKedwP800 考慮する必要性があるものかどうかが分からないからなんとも 例えば時系列データをその時点から1日分の数を使うというものなら閏秒を考える必要がないし : デフォルトの名無しさん [] 2018/03/13(火) 22:28:43.21 1日に1秒満たないかもしれないだろ : デフォルトの名無しさん (ワッチョイ 6a7c-uQtz) [sage] 2018/03/13(火) 22:35:46.84:2iGA+O2n0 int t = 86400; // 24*60*60 これで解決 : デフォルトの名無しさん (スップ Sd8a-bl9z) [sage] 2018/03/13(火) 23:06:58.39:+Yto8Znfd 閏秒の有無等で可変のものなら可変のものなりの書き方するでしょ 計算して変数に入れるとか 問題は不変の数値定数をどう正規化して書くか、正規化する必要はあるか。 24*60*60 派の人と 60*60*24 派の人が両方プロジェクト内にいたらなんか嫌だな : デフォルトの名無しさん (ワッチョイ be81-uQtz) [sage] 2018/03/13(火) 23:12:45.19:U9FOV+VD0 プロジェクトで誰かが決めたらそれに従うよ 派閥作るほどの問題じゃないでしょ : デフォルトの名無しさん (スップ Sd8a-bl9z) [sage] 2018/03/13(火) 23:17:41.96:+Yto8Znfd 絡むわけじゃないけど 決めたら従うのは当たり前で、それが「決める」ってことだろ。 派閥の話じゃなく混ざってたら気持ち悪いってことが言いたかったんだよ。 : デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/13(火) 23:20:55.63:pKedwP800 あっちこっちに書き散らすものじゃないから混ざってるとかあり得ない 1カ所になるまでリファクタリングしろ : デフォルトの名無しさん (ワッチョイ be81-uQtz) [sage] 2018/03/13(火) 23:44:10.62:U9FOV+VD0 気持ち悪いと思うかどうかは感性の問題だからなあ 例えばある日地球の回転速度が変わって1分が61秒になった プログラムを修正しろと言われて、 場所によって書き方が違っていると大変だね と言う話なら理解出来るけど : デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/13(火) 23:51:40.27:pKedwP800 constexpr int min = 60; constexpr int hour = min * 60; constexpr int day = hour * 24; : デフォルトの名無しさん (ワッチョイ ea6e-uQtz) [sage] 2018/03/14(水) 06:39:53.70:4nqAllCK0 hoursは<chrono>にあるだろ それとoperator""h : デフォルトの名無しさん (ワッチョイ ea6e-uQtz) [sage] 2018/03/14(水) 06:41:16.16:4nqAllCK0 operator""dayがねえんだよな<chrono>って : デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/14(水) 07:36:00.34:eC4PF2tM0 chronoのhoursはstd::chrono::duration<int, std::ratio<3600>>のエイリアスなので daysはこうすればよい using days = std::chrono::duration<int, std::ratio<86400>> : デフォルトの名無しさん (ドコグロ MM22-3fsH) [sage] 2018/03/14(水) 08:15:03.73:ylQhqnt4M > daysはこうすればよい > using days = std::chrono::duration<int, std::ratio<86400>> へ戻る w : デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/14(水) 08:42:21.15:eC4PF2tM0 閏秒を考慮するのと1日を86400秒とするのは全く関係ないのに閏秒がどうとか言い出した奴が悪いのでは 丁寧に書くなら計算の根拠として60*60*24を見えるところに書いておけばいい : デフォルトの名無しさん (スッップ Sd8a-ted0) [sage] 2018/03/14(水) 09:17:22.64:MwJCRjiPd 知ってる知識を披露したかっただけだろうから罪は軽い : デフォルトの名無しさん [] 2018/03/14(水) 10:28:48.31 全く関係ないは言い過ぎ : デフォルトの名無しさん (ワッチョイ 5b8a-4l6a) [sage] 2018/03/14(水) 10:52:42.70:a7dBFlsI0 ほぼ関係ないな、難癖もいいとこ 実用上は全く関係ない : デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/14(水) 11:03:01.46:2oR7xNCJ0 うるう秒がどうのこうのと言う、問題じゃなく86400秒をそこでしか使わないって根拠が無いんだよね 後でまたその数値が出てくるとしてその度に86400と書くのか、もしその数値を修正する事になったら全部書き直すのか、2回3回使うようになって始めて変数なり定数なりに入れるのか それなら最初から式中に出てくる数値は変数に格納してから使えって統一した方が話が早い : デフォルトの名無しさん (スプッッ Sd2a-ymMl) [] 2018/03/14(水) 11:14:21.74:G0IAn/x5d 今時マジックナンバーとか昭和からタイムスリップしてきたのかよ : デフォルトの名無しさん (ワッチョイ 6a34-e70/) [sage] 2018/03/14(水) 11:43:33.36:xovkfTzX0 プログラムにおけるマジックナンバー(英: magic number、魔法の数字)とは、何らかの識別子もしくは定数として用いられる、プログラムのソースコード中に書かれた具体的な数値である。 そのプログラムを書いた時点では製作者は数値の意図を把握しているが、他のプログラマーまたは製作者本人がマジックナンバーの意図を忘れたときに閲覧すると「この数字の意味はわからないが、とにかくプログラムは正しく動く。 まるで魔法の数字だ」という皮肉を含む。 by Wikipedia : デフォルトの名無しさん (アウアウウー Sa1f-RjcS) [sage] 2018/03/14(水) 11:50:45.96:I+60yKfra 「1日の秒数」って定数を86400って書いて怒られたって話じゃないんだ? : デフォルトの名無しさん (ワッチョイ cb74-uQtz) [sage] 2018/03/14(水) 12:06:59.05:L/3+Hz1H0 じゃあオマエ、構造化もしてないのか? 昭和時代ほど耳にしなくなっても廃れたのではない話は結構あるぞ : デフォルトの名無しさん (スッップ Sd8a-ted0) [sage] 2018/03/14(水) 13:01:38.98:MwJCRjiPd 怒られたという程じゃなくて、 一日の秒数 = 86400; と書いたら「マジックナンバーやめろ」と言われたってことさ : デフォルトの名無しさん (ワッチョイ da7e-uQtz) [sage] 2018/03/14(水) 13:18:59.19:eC4PF2tM0 わかりきった定数はマジックナンバーではない : デフォルトの名無しさん (スッップ Sd8a-klMS) [sage] 2018/03/14(水) 14:08:58.84:IrrOEbi1d それをヘッダに移動させるだけやん : デフォルトの名無しさん (スッップ Sd8a-ted0) [sage] 2018/03/14(水) 14:14:27.78:MwJCRjiPd そうじゃなくて 60*60*24 て書いて欲しいんだってさー 謎 : デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/14(水) 14:16:09.81:2oR7xNCJ0 まぁ可読性高くて損する事は無いし、なるべく要素は分解して書いた方がいいんじゃないの 何かどうしても86400じゃなきゃ困る理由とかあるなら話は別だろうけど、無いだろ? : デフォルトの名無しさん (スッップ Sd8a-klMS) [sage] 2018/03/14(水) 14:34:38.65:IrrOEbi1d クソどうでもいいな : デフォルトの名無しさん (ラクッペ MM43-1XNJ) [sage] 2018/03/14(水) 15:05:38.89:hFOwW8jGM ITのエンジニアって こういうくだらないことで 給料貰ってるんだろうなあ : デフォルトの名無しさん (ワッチョイ 6a34-e70/) [sage] 2018/03/14(水) 15:18:02.33:xovkfTzX0 こういうクソみたいなことでもウンチク垂れてテコ入れしろと提案することにより仕事してます感かもし出す為だろうな : デフォルトの名無しさん (ワッチョイ cb74-uQtz) [sage] 2018/03/14(水) 15:45:56.81:L/3+Hz1H0 結果のわからない投機的な模索をしているときは 逆にマジックナンバー地獄なコードだよ 他人に渡すコードを清書するときの書き方・考え方とは真逆 : デフォルトの名無しさん (ワッチョイ fb7f-uQtz) [] 2018/03/14(水) 16:27:34.05:9D6+Eo6Z0 俺がわかるからみんなわかるだろうというコードはすげー困るな 例えその場の全員がわかったとしても今後わからない奴が出てきた時の事を考えて できうるかぎりわかりやすいコードを書くべきだな : デフォルトの名無しさん (ワッチョイ cb74-uQtz) [sage] 2018/03/14(水) 17:02:40.84:L/3+Hz1H0 そのためのコストにもよる 空想論じみた「わかりやすさ」にまで付き合ってらんないこともある 特に最低限のプロとしてのスキルを欠く者を想定することはしない ちょっと飛躍するがプログラム言語だってそうなっている マシンの性能を使いやすさに振るということを無限にはやらない どのくらいのアホまで付き合ってやるのか性能とのトレードオフで 色んなバランスで棲み分けになっている : デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/14(水) 17:03:50.56:2oR7xNCJ0 まぁ別に自分だけが使う分にはいくら分かりづらく書いてくれても構わんけどな : デフォルトの名無しさん (ワッチョイ fb7f-uQtz) [] 2018/03/14(水) 17:11:14.36:9D6+Eo6Z0 86400を60*60*24と書くことにはなんのコストも支払ってないから書けばいいな いちいち話を飛躍させる奴はなんなんだ : デフォルトの名無しさん (アウアウウー Sa1f-RjcS) [sage] 2018/03/14(水) 17:20:37.67:I+60yKfra 人によってはみたいにしろって言うだろうし 結局は人それぞれってことじゃないの 16を2*2*2*2っていちいち書く人はいないでしょ まぁ1<<4って書けと言われるかもしれんが : デフォルトの名無しさん (ワッチョイ fb93-ao9L) [sage] 2018/03/14(水) 17:21:05.80:jowRUKsS0 学校の試験問題で一日の秒数としてソースに86400を書いたら マジックナンバーだからと減点された、納得いかない。 みたいな発端じゃないのかなぁ。 : デフォルトの名無しさん (ワッチョイ cb74-uQtz) [sage] 2018/03/14(水) 17:22:38.07:L/3+Hz1H0 それをfindとsedでやる勇気あるか? たとえば俺なんかは1箇所ずつよく見て有機的に判断しないと怖いし それの残業代は貰えるのか心配だ : デフォルトの名無しさん (ワッチョイ fb7f-uQtz) [] 2018/03/14(水) 17:51:03.64:9D6+Eo6Z0 当然その程度のリファクタリングはするべきだしそもそもマジックナンバーをどうにかするべきだし お前の残業代とかいう飛躍した話はどうでもいい : デフォルトの名無しさん (ワッチョイ cb74-uQtz) [sage] 2018/03/14(水) 18:19:55.18:L/3+Hz1H0 飛躍じゃねえ実話だよ ずいぶん昔、社内BBSでそれ系のことを言い出したやつが 偉い人から突っ込まれてた : デフォルトの名無しさん (スッップ Sd8a-ted0) [sage] 2018/03/14(水) 18:35:58.25:MwJCRjiPd プロとか言い出してる人がいるけど、それこそ飛躍では? : デフォルトの名無しさん (ワッチョイ be81-uQtz) [sage] 2018/03/14(水) 18:40:08.58:y6ADsCAy0 プログラムの話題から外れてきていると思いませんか? : デフォルトの名無しさん (ドコグロ MM22-3fsH) [sage] 2018/03/14(水) 18:48:14.13:uMO7yRavM だからわかりきってるかどうかは人によって違うって話 プログラムの前に日本語の勉強しろよ w : デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/14(水) 18:48:33.76:2oR7xNCJ0 まぁコスト次第で可読性を犠牲にするケースもあるだろうけど この場合はメモリ食う訳でも処理遅くなる訳でもソースの構造が変わる訳でもない 86400でも十分分かりやすいかも知れんが60*60*24なら更に分かりやすくなる どっちが良いかなんて議論の余地無いよね : デフォルトの名無しさん (ワッチョイ cb74-uQtz) [sage] 2018/03/14(水) 18:50:15.11:L/3+Hz1H0 別にプロでなくてもいいんだけどさ おまえさんなりに、同じプロジェクトにいて欲しくない足手まといが どのくらいから下というのはあるだろ : デフォルトの名無しさん (ドコグロ MM22-3fsH) [sage] 2018/03/14(水) 18:54:56.26:uMO7yRavM > 16を2*2*2*2っていちいち書く人はいないでしょ > まぁ1<<4って書けと言われるかもしれんが 状況次第だろ 場合分けの条件が4個あって各々2状態をとるとかなら2*2*2*2って書くかもしれない 下から4ビット目のマスクが欲しいなら1<<4って書くこともある : デフォルトの名無しさん (ワッチョイ 260e-hn8E) [sage] 2018/03/14(水) 18:58:33.90:2oR7xNCJ0 ビットフィールド使えば? : デフォルトの名無しさん (ワッチョイ cb74-uQtz) [sage] 2018/03/14(水) 19:09:24.20:L/3+Hz1H0 シフト使うな、ビットフィールドで書け なんて言われると、俺は相手にもよるが逆らいそう : デフォルトの名無しさん (ドコグロ MM22-3fsH) [sage] 2018/03/14(水) 19:37:46.29:uMO7yRavM ビットフィールドは割り付け順序が処理系定義だったりしたからあまり使ったことがない : デフォルトの名無しさん (ブーイモ MMd6-dpuX) [sage] 2018/03/14(水) 21:26:40.49:kWAHqA+uM たまには2進リテラルちゃんのことも思い出してあげてください : デフォルトの名無しさん (ワッチョイ c193-y/L7) [sage] 2018/03/15(木) 06:36:14.64:F+InEeO+0 議論の本筋(1日の秒数として即値で86400と書くことの是非)とはさらに離れるけど、 ビットシフトを使う定数は常にカッコで囲んでくれ。 res = a + 1<<4 + b; res = a +(1<<4)+ b; : デフォルトの名無しさん [] 2018/03/15(木) 07:15:43.22 3つ以上の項があると静的解析ツールで怒られるから res = (a +(1<<4))+ b; と書く : デフォルトの名無しさん (ワッチョイ dfe3-MOYc) [sage] 2018/03/15(木) 08:58:15.76:x1WHRaDf0 下のつもりで上書いたらただのバグじゃん : デフォルトの名無しさん (ワッチョイ a3dd-hKdO) [sage] 2018/03/15(木) 09:19:10.68:3Ym40JOm0 算術と混用するときは結合順位に注意せよ、というだけのことを いちいち必ずだ!ルールだ!と金切り声で吠えついてくるやつはウザい : デフォルトの名無しさん (ブーイモ MM61-R9c4) [sage] 2018/03/15(木) 09:55:31.41:LkpAylTJM 可読性悪くしてかえって品質低下招きそうな指摘だな : デフォルトの名無しさん (ワッチョイ 87cc-SCBH) [sage] 2018/03/15(木) 13:29:47.33:O2sRH7tT0 vectorをつなげる際、copyが良いとか、insertを使えとか色々書いてあるのですが、どれが良いのでしょうか? : デフォルトの名無しさん (ワッチョイ af7e-hKdO) [sage] 2018/03/15(木) 13:54:37.80:XNo6/02A0 あらかじめ領域を広げておく必要があるけどinsertの方がチェックが入らない分速い : デフォルトの名無しさん (ワッチョイ 7b34-HLM0) [sage] 2018/03/15(木) 15:23:48.90:9f/t5+6G0 reserveしてinsertだな : デフォルトの名無しさん (アウアウウー Sa9d-mp3k) [sage] 2018/03/15(木) 15:36:42.69:q9z+dA6Ga insertの直前にreserveって意味あるのか? : デフォルトの名無しさん (ワッチョイ af7e-hKdO) [sage] 2018/03/15(木) 16:32:16.09:XNo6/02A0 reserveは終端のポインタが更新されないからresizeじゃないとだめ : デフォルトの名無しさん (ワッチョイ 7b34-HLM0) [sage] 2018/03/15(木) 16:57:46.96:R5/WYUtW0 reserveしてback_inserterでcopy : デフォルトの名無しさん (ワッチョイ 7bcb-R9c4) [sage] 2018/03/15(木) 17:05:27.14:QEAEy0DH0 insertはサイズチェックしてるでしょ。 iteratorを2つ受け取るタイプのinsertなら意味あるんじゃね? resizeは不味いだろ。 : デフォルトの名無しさん (ワッチョイ 7bcb-R9c4) [sage] 2018/03/15(木) 17:09:09.32:QEAEy0DH0 アンカしくった。 サイズチェックの指摘は向け : デフォルトの名無しさん (ワッチョイ af7e-hKdO) [sage] 2018/03/15(木) 17:21:30.23:XNo6/02A0 ごめんinsertとcopy逆だった : デフォルトの名無しさん (アウアウウー Sa9d-mp3k) [sage] 2018/03/15(木) 17:28:15.72:q9z+dA6Ga insertの中で追加数数えてreserveと同じことしてるでしょ まさかループで一個ずつ挿入なんて実装はあるまい : デフォルトの名無しさん (ワッチョイ 7bcb-R9c4) [sage] 2018/03/15(木) 19:10:49.64:QEAEy0DH0 失礼。挿入位置のiteratorもあるから、3つ受け取るタイプの誤り。 : デフォルトの名無しさん (アウアウウー Saaf-0FUd) [] 2018/03/15(木) 22:07:51.82:dQGk6ayHa cpprefjpの任意の式によるSFINAEの頁でdecltype(a + b, bool())と記載されているコードがあるんだけれど、 このa+b, bool()はラムダ式? 該当頁 ttps://cpprefjp.github.io/lang/cpp11/range_based_for.html : デフォルトの名無しさん (アウアウウー Saaf-0FUd) [] 2018/03/15(木) 22:09:23.09:dQGk6ayHa アドレス間違えた ttps://cpprefjp.github.io/lang/cpp11/sfinae_expressions.html : デフォルトの名無しさん (ワッチョイ a3dd-hKdO) [sage] 2018/03/15(木) 22:15:55.91:3Ym40JOm0 ラムダ式が[で始まらないことってあるのか? : デフォルトの名無しさん (ワッチョイ 9beb-85/6) [sage] 2018/03/15(木) 22:41:44.53:ubsUN4Yb0 カンマ演算子とdecltypeでコンパイル時に評価される decltypeの中身を左から順に評価し、結果は一番右の型が帰る この場合はa+bの型が評価出来ればbool、できなければSFINAE : デフォルトの名無しさん (ワッチョイ af7e-hKdO) [sage] 2018/03/15(木) 22:41:47.80:XNo6/02A0 >a + b a + bが可能かどうか調べる >, 次の式を評価する >bool() bool型の初期値を返す つまりdecltype(a + b, bool())はa + bでSFINAEをしつつカンマ演算子でdecltypeにbool型の値を与えて返り値の型をbool型にしている : デフォルトの名無しさん (アウアウウー Saaf-0FUd) [] 2018/03/15(木) 22:57:18.20:dQGk6ayHa decltypeで,も使えたんですね。一番右の型が帰るということはdecltype(a+b,a-b,a*b,a/b,bool())とかしてもよさそう。。。 自分ではその機能を説明してるページを見つけれませんでした。 ありがとうございます。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/15(木) 23:50:51.42:VBbQqJBt0 それで良いのか。 いいこと知った。 いちいち enable_if をしとったわ。 : デフォルトの名無しさん (スップ Sddb-dtcO) [sage] 2018/03/16(金) 07:54:12.89:UGENGinrd decltypeって実行時の型を得れる? : デフォルトの名無しさん (アウアウウー Sa9d-mp3k) [sage] 2018/03/16(金) 09:23:42.20:Qbg0TjKpa a.reserve(a.size()+b.size()); a.insert(a.end(),b.begin(),b.end()); こんな感じのことをやるのかと思ったんだけど、これ意味ないでしょ? : デフォルトの名無しさん (スッップ Sd2f-JcB1) [sage] 2018/03/16(金) 10:04:08.28:SYp9l/ZId declとはdeclareの略であることを考えると : デフォルトの名無しさん (ワッチョイ 7b34-HLM0) [sage] 2018/03/16(金) 10:17:31.56:g2YO+i2m0 a.reserve(a.size()+b.size()); copy(b.begin(),b.end(),back_inserter(a)); : デフォルトの名無しさん (ブーイモ MM3f-R9c4) [sage] 2018/03/16(金) 15:36:10.69:0r9PteXTM random iteratorの場合の特殊化実装がありました。ごめんなさい : デフォルトの名無しさん (ササクッテロレ Sp6f-N9vq) [sage] 2018/03/16(金) 18:08:23.55:Al45BtF0p decltype comma trickでググれ : デフォルトの名無しさん (ワッチョイ f3e7-dVgQ) [sage] 2018/03/16(金) 20:56:30.80:DBylbaSH0 まあoperator,()が定義されてるとまずいんだけどな : デフォルトの名無しさん (アウアウアー Sa83-2N1f) [] 2018/03/19(月) 18:07:03.75:/U1oheuNa インスタンスにdeleteかけたとき、メンバ変数が破壊されるのとデストラクタが実行されるのはどっちが先? 今書いてるコードがデストラクタでメンバ変数アクセスすると落ちることがあるから、破壊されるのが先なんだろうか? : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/19(月) 18:15:15.06:RG1qd9Pc0 原則としては構築の逆順って覚えておくと間違えない。 : ◆QZaw55cn4c (ワッチョイ 9360-MOYc) [sage] 2018/03/19(月) 18:33:44.24:lFWK67Qs0 delete this; とかしてませんか、これは基本的に避けたほうがいい : 片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdd7-5vKF) [sage] 2018/03/19(月) 18:43:06.07:SpFx62hRd に同意。確保と破棄は生ポインタを触らずに自動化した方がいい。スマートポインタとかコンテナとか。 二回deleteを避けるためにポインタにNULLを代入する技もある。 : デフォルトの名無しさん (アウアウウー Saaf-0FUd) [] 2018/03/19(月) 21:03:24.06:kCg91IvDa そろそろNULLは駆逐してnullptrに移行させたい : デフォルトの名無しさん (ワッチョイ 53bd-mA8b) [sage] 2018/03/19(月) 22:46:40.23:jnDGFLZz0 >今書いてるコードがデストラクタでメンバ変数アクセスすると落ちることがある へ〜んなの ていうかメモリを壊しているかすでにdeleteされた死骸を再deleteしてるとしか、 >二回deleteを避けるためにポインタにNULLを代入 OpenCVのC言語インターフェースのやつ、 : デフォルトの名無しさん (ワッチョイ c193-7BQk) [sage] 2018/03/19(月) 22:57:33.17:cmSuhSLP0 C++勉強中の者です。 ttp://codepad.org/C8t9k4fD ソース自体をプログラムに読み込ませると #includ で止まってしまいます。 Cのfgets()のようには使えないのでしょうか。 : デフォルトの名無しさん [] 2018/03/19(月) 23:06:01.35 According to the C++ reference ttp://en.cppreference.com/w/cpp/io/basic_istream/getline getline sets the ios::fail when count-1 characters have been extracted. You would have to call filein.clear(); in between the getline() calls. : デフォルトの名無しさん (ワッチョイ c193-+EIL) [sage] 2018/03/19(月) 23:26:45.72:cmSuhSLP0 区切り文字を読まないとfail状態になってそれ以降は失敗し続けるので止まってしまうということですかね : デフォルトの名無しさん (ワッチョイ 53bd-mA8b) [sage] 2018/03/19(月) 23:27:24.60:jnDGFLZz0 std::getline()は読み込んだ文字列に改行文字を含めないから 行末まできちんと読んだのか 文字数カウントのせいで読み込みが行の途中でぶちきれたのか 直ちにはわからないといいうアホウな仕様 判別には結局std::basic_istream<T>::unget()の助けが要る C++標準ライブラリのうちストリーム関連だけは腐っているからC言語のを使いなしゃれ ※ 個人の感想です : デフォルトの名無しさん (ワッチョイ 53bd-mA8b) [sage] 2018/03/19(月) 23:28:25.97:jnDGFLZz0 訂正 △: C++標準ライブラリのうちストリーム関連だけは腐っているからC言語のを使いなしゃれ ◎: C++標準ライブラリのうちストリーム関連だけは本当に腐っているからC言語のを使いなしゃれ : デフォルトの名無しさん (ワッチョイ f3e7-dVgQ) [sage] 2018/03/20(火) 01:02:22.15:mI6/gPTY0 入出力はCもC++もクソまみれだからなぁ ちょっとコンソール出力を整形しようとして、あの肥溜めのクソくだらない落とし穴地獄にいちいち付き合わされた結果 プログラミングそのものが嫌いになる人達が山のようにいるのが本当に残念だ : デフォルトの名無しさん (ワッチョイ e19f-M10G) [] 2018/03/20(火) 01:12:22.56:PXcTmg8I0 いるか? : デフォルトの名無しさん (ワッチョイ f3e7-dVgQ) [sage] 2018/03/20(火) 01:20:34.94:mI6/gPTY0 自分が知ってる昔はいっぱいいたけど 最近だとスクリプト言語から先に入るから減ってるのかね? : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/20(火) 01:21:52.68:N1yoGURK0 オブジェクトの外部表現を型ごとに定義できる iostream は悪くない設計だと思うんだけどなぁ。 : デフォルトの名無しさん (ワッチョイ 7bcb-R9c4) [sage] 2018/03/20(火) 01:41:51.26:PjVFN34O0 ローカライズに向いてない。 打鍵数が倍増どころじゃない。 モダン言語はみなprintfライクだしねー : デフォルトの名無しさん (ワッチョイ e19f-hKdO) [sage] 2018/03/20(火) 02:48:01.36:PXcTmg8I0 printf()は便利ではあるが桁を揃えて出す時に面倒になることもある。 特にこの頃は UTF-8 で漢字混ざりだと文字幅とバイト数または文字数が一致しない。 そもそもそんなものの一致をあてにすること自体が間違いかも知れないが、Unicode には一応 HALF WIDTH, FULL WIDTH 等があるんだから何とかしてこれを生かした フォーマッタが欲しいところではある。 : デフォルトの名無しさん (アウーイモ MMb3-2N1f) [] 2018/03/20(火) 06:49:53.60:eswqOupsM あるクラスがあって、その中でスレッド立ててるの それでクラスのデストラクタが呼ばれたら、メンバ変数のスレッドポインタをつかってスレッドcancel->joinってやろうとしてて それでjoin呼ぶあたりで落ちるんだよね 作られた逆順ってことはデストラクタのほうが先に実行かな?それだとメンバ変数はいきてるよね : デフォルトの名無しさん (ワッチョイ af7e-hKdO) [sage] 2018/03/20(火) 06:55:01.02:83N3dpVy0 streamはコンソールの入出力のためだけにあるわけじゃないから : デフォルトの名無しさん (ワッチョイ 1ff3-hKdO) [sage] 2018/03/20(火) 06:55:05.50:Wsijl5j90 つーてもcoutだってsetw/setfillはあんまり使いやすくないしなあ operator<<をユーザー定義できるのはありがたいけどね : デフォルトの名無しさん (ワッチョイ a723-tAvx) [sage] 2018/03/20(火) 13:10:27.33:geezFnQ40 デストラクタの実行中はそのクラスとその派生元クラスのメンバ変数はまだ使える 必ず落ちるならデバッガでバックトレース見てみたら? : デフォルトの名無しさん (ワッチョイ f3e7-dVgQ) [sage] 2018/03/20(火) 19:32:56.49:mI6/gPTY0 別の原因に見える まずデストラクタじゃなくて普通のメンバ関数で明示的に呼んで止めた時に大丈夫か確認してはどうか : デフォルトの名無しさん (スップ Sd03-tAvx) [sage] 2018/03/20(火) 19:45:17.42:KQMGt9+Dd pthread_cancel はいろんなことがよく分かっている人しか使ってはいけない : デフォルトの名無しさん (ワッチョイ 53bd-mA8b) [sage] 2018/03/20(火) 22:33:41.91:f35CyiEk0 「<<」と「>>」の2種類しか用意できんやんけ それらを表示と入力に割り当ててしまえば結局シリアライズのための固有なメソッドなりインターフェースなりを別途作らねばならんぬ、 そもそもの構想からして頓挫してゐる、 頓挫してゐるのだ…! : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/20(火) 23:55:08.06:N1yoGURK0 表示用とシリアライズ用はストリームの性質で切り替える筋合いのものだろ? シリアライズ用のストリーム型を用意してオーバーロードすればいいんじゃね。 : デフォルトの名無しさん (ワッチョイ 53bd-mA8b) [sage] 2018/03/21(水) 00:33:52.80:7c9Ne47J0 ちょっなんで数億年の生物史史上はじめて ようやっとSTDINとSTDOUTとSTDERRの3種類に世界が抽象化されたストリームという概念|を 細分化するという元の木阿弥にしますか;; 藻前は some_command | tee result.txt > some_file.bin とかいったパイプやリダイレクトを表示専用とかシリアライズ専用とかに分けたいのかっていうか、 : デフォルトの名無しさん (ワッチョイ e17f-hKdO) [] 2018/03/21(水) 00:44:24.33:p0rFESlF0 なに藻前って : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 01:10:44.31:MouF+uE40 お前は何を言ってるんだ。 ここで言ってるストリームは C++ 用語のストリームだぞ。 「ストリーム『型』」ってわざわざ書いてるんだからわかれよ。 下位レイヤでは好きなところに繋げればいい。 : デフォルトの名無しさん (ワッチョイ af7e-hKdO) [sage] 2018/03/21(水) 01:18:27.48:9NBOfW2C0 streamとstreambufの違いを理解しよう : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 01:24:40.58:MouF+uE40 要するに std::basic_ostream を継承した何かを作ればいいんだ。 : デフォルトの名無しさん (ワッチョイ b180-lboF) [] 2018/03/21(水) 06:52:22.30:fTbDiwfs0 ストリームはもう捨てたほうが良いぞ。 おじさんからの警告だ。 : デフォルトの名無しさん (ワッチョイ 7b34-HLM0) [sage] 2018/03/21(水) 07:14:12.04:2n7LolrI0 便利そうに見えて便利に使えない それがstream : デフォルトの名無しさん (ワッチョイ ebb6-CZ08) [] 2018/03/21(水) 07:18:35.01:zecIlzA/0 「29歳既婚、2年前に会社を辞めた。ボードゲーム作りを始めて3700万円を 売り上げたけど何か聞きたいことはある?」回答いろいろ ttp://labaq.com/archives/51880196.html 日本ボードゲーム界の異端児に聞く!ボードゲームデザイナーとして生きていくには? ttps://bodoge.hoobby.net/columns/00013 はじめてボードゲームを作ってはじめてゲームマーケットに出店した ので、ひとり反省会をしてみる。 ttp://datecocco.hatenablog.com/entry/2015/11/26/000000 はじめて作ったボードゲームを売った話 ttp://nrmgoraku.hateblo.jp/entry/2017/05/17/210000 ボードゲームイベント「ゲームマーケット」から業界が見えた! ttps://entertainmentstation.jp/61107 ゲームマーケットに挑む人向けガイド ttp://spa-game.com/?p=4830 ボードゲームはどう作るのか、自分なりに考えた ttp://roy.hatenablog.com/entry/2014/07/09/124824 オトナも遊べるボードゲーム!自作するといくらになるのか ttp://www.d-laboweb.jp/special/sp312/ ボードゲームの展示イベント「ゲームマーケット」の成長記録からこれからの 市場に必要なことを妄想してみた。6年間の来場者数推移(2016年4月時点調べ) ttps://bodoge.hoobby.net/columns/00001 ボードゲーム市場がクラウドファンディングの出現で急成長を遂げ市場規模を拡大中 ttp://gigazine.net/news/20150820-board-game-crowdfunding/ : デフォルトの名無しさん (ワッチョイ 1ff3-hKdO) [sage] 2018/03/21(水) 10:36:30.48:DQv7yGEy0 カンブリア紀からオルドビス紀にかけて行われた抽象化は 今でいうインターフェイスの考え方で、当たり前だが インターフェイスを継承する実装クラスは無数にあってよい そういうのは元の木阿弥とは言わないぞ : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 15:09:48.71:MouF+uE40 さっき で説明した C++ の話題を置くとしても、 (まあ C++ スレで C++ の話題を置いちゃうのはどうかと思うが) 標準入力、標準出力、標準エラー出力のみっつしかないってことはない。 エラー出力をリダイレクトするときに 2> って書くの、どういう意味だと思ってる? 2 はファイルディスクリプタな。 デフォでオープンされてるのが 0, 1, 2 ってだけで、やりたければ 3 でも 4 でも使っていい。 : ◆QZaw55cn4c (ワッチョイ 9360-MOYc) [sage] 2018/03/21(水) 15:42:02.21:ZGJmhAHm0 空いているディスクリプタが使用されるとしても、自分で特定の数字を指定してディスクリプタにすることはできなかったんじゃなかったかな? : ◆QZaw55cn4c (ワッチョイ 9360-MOYc) [sage] 2018/03/21(水) 15:50:19.07:ZGJmhAHm0 失礼、dup2() というのがあったね… : デフォルトの名無しさん (ワッチョイ af7e-hKdO) [sage] 2018/03/21(水) 15:58:29.69:9NBOfW2C0 coutがSTDOUTにつながってるだけでここは何につなげてもいいということ streambufの中身はただの配列でもいいし、アプリケーションのロガーでもいいし、循環バッファでもいいし、通信のポートでもいい : デフォルトの名無しさん (ワッチョイ a723-tAvx) [sage] 2018/03/21(水) 19:28:41.53:TV3lE0eZ0 シリアライズするときはバイナリ表現にしたいし ログするときは文字列表記にしたいし : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 20:00:34.84:MouF+uE40 だからそれはストリームオブジェクトの型で切り替えろって言ってるんだろうが : デフォルトの名無しさん (スプッッ Sd13-tAvx) [sage] 2018/03/21(水) 20:30:34.07:VVSY5O5Ed それを嫌だって言ってんだよ バイナリの読み書きは write() だの read() で十分 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 20:33:11.12:MouF+uE40 read なり write なりを「使う」のは別にいいよ。 それを C++ 上でどのように抽象化すればいいかって話なんだから。 そういうレイヤの違う話を混ぜ込んでくるなよ。 : デフォルトの名無しさん (スップ Sd03-tAvx) [sage] 2018/03/21(水) 20:43:51.09:KgSvodNyd そこで新しい型を設けてまで << を使う意味がない cout にバイナリでシリアライズするときはどうすんの? size_t serialize(const T& t, ostream& os) とかを各型用に書く方がマシ : デフォルトの名無しさん (スップ Sd03-tAvx) [sage] 2018/03/21(水) 20:47:43.15:KgSvodNyd バイナリでシリアライズするに際して 別の型のストリームオブジェクトを作ってまで << だの dec だの endl を使えるようにすることの利点を説明して欲しい : デフォルトの名無しさん (ワッチョイ af7e-hKdO) [sage] 2018/03/21(水) 21:36:05.23:9NBOfW2C0 例外を除いて operator<<()は書式化出力 write()は非書式化出力 なのでバイナリを出力するときはwrite()を使うべき >size_t serialize(const T& t, ostream& os) シリアライズのような複雑な操作をするときはこれは悪い選択じゃない というかstreamそのものを放り込むのはたまに見かける : デフォルトの名無しさん (ブーイモ MM61-/CVT) [sage] 2018/03/21(水) 22:02:23.07:52xrh1HkM えっブロックデバイスにもStreamを : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 22:15:54.63:MouF+uE40 書式化 (formatted) ってのと、結果がバイナリかというのは直行する概念だよ。 シリアライズってのはオブジェクトのバイト列をそのまま出力することじゃなくて、 バイナリ形式の特定のフォーマットにして出力することだろ。 それは書式化って言うんだよ。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 22:26:24.75:MouF+uE40 マニピュレータを使える意味はないかもな。 使えないように定義することも出来るし、意味がないなら使えないようにしておくべき。 ここでは抽象化の話をしているんだ。 出力先が人向けのテキスト表現であるか機械向けのシリアライズ表現であるかによって 書き方を変えなきゃならない、相手を意識しなきゃならないというよりは、 相手によって自動で切り替わって欲しいってことなんだよ。 意識しなくていいデザインってのは意識しにくくなるってことと表裏一体だから、 見えなくなるのが気にくわないってのならわかる。 : デフォルトの名無しさん (ワッチョイ 23f9-y9O9) [sage] 2018/03/21(水) 22:26:32.59:OwhHF7Zm0 直交 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 22:29:29.81:MouF+uE40 スマソ。 の直行は直交の書き間違いやね。 : デフォルトの名無しさん (ワッチョイ 2b50-bRBW) [sage] 2018/03/21(水) 23:13:33.75:NRxI71LE0 無意味な処理が嫌だとか言っておきながら ここでは無駄の塊みたいな方法を勧める アホですね : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 3b6f-hKdO) [sage] 2018/03/21(水) 23:50:04.75:MouF+uE40 俺は一貫して抽象化の話をしてるつもりなんだが。 プログラマの意図を表現できる書き方をすべきって話をしてんの。 無意味な処理をしろと書いてあるのをプログラマの意図として読み取っていいのか? そうじゃないだろう。 C++ がせっかく用意しているライブラリを活用するのが無駄なのか? そうじゃないだろう。 : デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/22(木) 07:21:49.59:tiDItZ1f0 ハッキリ言ってストリームは蛇足だったわ。 廃止したほうが良いわ。 : デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/22(木) 07:25:52.15:tiDItZ1f0 Boostもそうだけど、有り余るC++のパワーをカッコよく使いこなそうとしてやっちまったみたいな。 もうちょっと使う側の立場にたつべきだな。 : デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/22(木) 08:38:59.71:0Y4DSJfq0 黒魔術だなんだ言って楽しめないようではC++は向いていない : デフォルトの名無しさん (ワッチョイ 37f3-zkh5) [sage] 2018/03/22(木) 10:14:29.52:Q5Rs9TJ/0 蛇足ねえ。。。 禿本1stでoperator overloadのデモ用に作られたサンプルなんだが そういうのは後で取って付けた存在といえるのか? : デフォルトの名無しさん (ワッチョイ 1a12-aRf7) [sage] 2018/03/22(木) 17:28:14.63:PBLsyShY0 業界全体としては奥の深さを求める人(求道者)を一か所に集め留めるのには非常に有益な言語 : デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/22(木) 17:34:08.02:0Y4DSJfq0 そのうちAsioやRangeあたりも標準化されるだろうし もうその方向に突き抜けてほしい 使いやすい言語なんか他にいくらでもある : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-zkh5) [sage] 2018/03/22(木) 17:41:04.44:HExEyyqO0 具体的にどういうときに不便なのか語れよ。 使いにくいってだけじゃ何にもわからん。 : デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/22(木) 17:43:00.10:0Y4DSJfq0 C++に関しては慣れてない人がそう言ってるだけだから : デフォルトの名無しさん (ワッチョイ a393-4ZrE) [sage] 2018/03/22(木) 19:57:57.53:sR+euIcT0 どの資料だったか覚えてないけど、演算子オーバーロードに関して 先生は「元の演算子の意味とかけ離れた挙動をさせるのは避けるべきだ」 みたいなことも書いてるよな。 まぁ、原則は指針であって絶対の規則じゃないわけだけど、 << >> をビットシフトからストリーム入出力に振り替えておいて どの口で言うか、このハゲッー! とか思ったり。 : デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/22(木) 20:06:11.34:0Y4DSJfq0 ストリームのような周知の事実になっているものはそれには当てはまらないでしょ : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-zkh5) [sage] 2018/03/22(木) 20:22:42.90:HExEyyqO0 まああれくらいのものになると、オブジェクトに追加で突っ込んでいくような動作が「元の演算子の意味」になっちゃってるよな。 そんなことより C++20 に入る予定のカレンダーでは日付を 2018y/mar/22 とか書けるらしくて、 これはさすがにクソやろ……。 これもいずれ普通に受け入れる気持ちになるだろうか。 : デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/22(木) 20:47:25.31:0Y4DSJfq0 既にfilesystemのpathが/で階層作れるから current_path / "aho" / "baka"みたいに C++の演算子は連想ゲームだ : デフォルトの名無しさん (ワッチョイ 37f3-zkh5) [sage] 2018/03/22(木) 22:18:28.94:Q5Rs9TJ/0 あの頃の禿はreverse_iteratorなんて思いもよらず operator+が減算の動作をすることを否定してたね : デフォルトの名無しさん (アウアウカー Sac3-2dLA) [sage] 2018/03/23(金) 00:38:32.35:2SqL+aT8a 日付の表記は何種類かあるし年/月/日でも日/年/月でも表せるなら結構便利だと思う。 : デフォルトの名無しさん (ワッチョイ a393-4ZrE) [sage] 2018/03/23(金) 08:21:50.21:VCdaFb7Y0 標準に「日付を表す型」みたいのが追加され、 それ用リテラルの接尾語(のひとつ)が ""y で 2018y は2018年を表す、 さらにこの型では / は日付要素を区切る演算子としてオーバーロードされてる。 …といった感じか? 確かに虚心坦懐に / を見れば、割り算のコンピュータ向け代用記号だけでなく 日付の区切りや、ファイルシステムの階層区切りでもあるけど。 : デフォルトの名無しさん (ワッチョイ 1a12-aRf7) [sage] 2018/03/23(金) 09:13:18.25:xSYf1jdZ0 aのb乗 a^b a**b : デフォルトの名無しさん (スフッ Sdba-5bpY) [sage] 2018/03/23(金) 10:31:52.82:fMiQp2pkd こんだけ演算子は深いのになぜか未だに[]は引数を一つしか取れない : デフォルトの名無しさん (アウアウウー Sac7-zkh5) [] 2018/03/23(金) 10:45:38.60:COiOJTLla 「静的」、「動的」というのがよく分からないのですが、詳しく書いてある本はありますか? ヒープ領域がどうたらとかいうのもよく分かりません。 スタックとかいうのもよく分かりません。 詳しく解説している本を教えてください。 : デフォルトの名無しさん (アウアウウー Sac7-zkh5) [] 2018/03/23(金) 10:48:57.55:COiOJTLla ロベールのC++の本を読んでいて疑問に思いました。 : デフォルトの名無しさん (ドコグロ MM92-a4pf) [sage] 2018/03/23(金) 19:28:55.75:FQA7q+b8M > …といった感じか? そんな感じらしい ttp://d.hatena.ne.jp/yohhoy/touch/20180322/p1 日本だと基本 年/月/日 しかないしソースコードに 睦月、如月、弥生 なんて書く奴はいないからいまいち便利さがわからんけどあちらの人にとっては便利なんだろうか : デフォルトの名無しさん (ワッチョイ 0e8a-MDAi) [sage] 2018/03/23(金) 19:30:12.07:5ELqDBlL0 ポップとプッシュの概念もよく分かってないのでは ttp://www.cc.kyoto-su.ac.jp/~yamada/ap/stack.html これが分かって来るとC++に於けるバッファオーバーフローBOF攻撃の仕組みが分かって来る : デフォルトの名無しさん (ワッチョイ 0e8a-MDAi) [sage] 2018/03/23(金) 19:42:22.13:5ELqDBlL0 バッファオーバーフロー: #1 概要 ttps://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c901.html : デフォルトの名無しさん (ブーイモ MMe7-Gtgj) [sage] 2018/03/23(金) 19:52:45.96:e6tCc9HsM 五曜は対応してくれると有り難いかも知れないけど 他はいらんな : ◆QZaw55cn4c (ワッチョイ ba60-fzSc) [sage] 2018/03/23(金) 19:55:59.42:J4dYcx4H0 C/C++ のメモリ構造について、になります。 これは基本的な事項で、初級を脱するためにはぜひとも必要な知識なんですが、 そのわりにあまりに解説されることがないような気がします 適切な説明がないものか… : ◆QZaw55cn4c (ワッチョイ ba60-fzSc) [sage] 2018/03/23(金) 19:59:40.83:J4dYcx4H0 まず、メモリの管理方法として 1. スタックエリア、に格納するやり方 2. ヒープエリア、に格納するやり方 の大きく分けて二通りがあり、 2. ヒープエリア、二格納するやり方について 2-1. 「静的」:static キーワードを使うやり方 2-1. 「動的」:malloc()/free() または new/delete を使うやり方 が分類されます。 : デフォルトの名無しさん (ブーイモ MMe7-Gtgj) [sage] 2018/03/23(金) 20:10:28.07:e6tCc9HsM データセグメントって無くなったの? : デフォルトの名無しさん (アウアウウー Sac7-zkh5) [] 2018/03/23(金) 20:39:25.53:COiOJTLla ありがとうございました。 あまりそういう本はないんですか。 もしかしたら、ヘネシーらのコンピュータのハードの本とか読まないといけないんですかね? あるいはコンパイラの本ですかね? : デフォルトの名無しさん (ブーイモ MM7f-Dh3i) [sage] 2018/03/23(金) 20:40:47.42:l1/KZZgNM 一般的に、静的領域をヒープとは呼ばんだろ : デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/23(金) 20:41:24.55:qmCr5Czp0 こういうのはネットで覚えたからどういう本に書いてあるかはわからん : ◆QZaw55cn4c (ワッチョイ ba60-fzSc) [sage] 2018/03/23(金) 20:45:34.35:J4dYcx4H0 手っ取り早いのは「マシン語」を書いてみる、マシン語(アセンブリ言語)のルーチンを C にリンクさせる、ていうのが王道ですが、 昨今はマシン語のいい教科書がない、という気がします gcc のインラインアセンブラとかが有望だとは思いますが、まあ簡単にマシン語を記述している教材なんていうものが思いつかない、マシン語の需要というか動機がないのかもしれませんが : ◆QZaw55cn4c (ワッチョイ ba60-fzSc) [sage] 2018/03/23(金) 20:46:44.14:J4dYcx4H0 うーむ、たしかに static を「ヒープ」とは言わないかもしれませんね… : デフォルトの名無しさん (アウアウウー Sac7-zkh5) [sage] 2018/03/23(金) 20:47:37.33:COiOJTLla ありがとうございました。 マシン語の本を探してみます。 ありがとうございました。 本に書いていない場合には仕方がないのでネットで調べてみることにします。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-zkh5) [sage] 2018/03/23(金) 22:32:48.28:ehYNLgPn0 どうだろ? C++ の言語仕様的にはオブジェクトの寿命に違いがあるだけで、 それを実現するメカニズムについては詳細な規定があるわけではない。 まずは C++ のパラダイムの中で理解を深めれば自然に理解できるんじゃないの? 手を広げすぎても収集が付かなくなる気もするんだけどなぁ。 : デフォルトの名無しさん (アウアウカー Sac3-E6if) [sage] 2018/03/23(金) 22:56:58.27:io4DvPx8a マシン語に手を出すのは飛躍しすぎだしやめといた方がいい。ある程度C++になれてより深く理解したいと思うようになってからがいいよ。 動的、静的は大雑把に言えば、コンパイル時つまりソースを書いた時点で決まるものを静的、実行時に変化するものを静的と呼ぶ。 変数の型とかメモリ領域の確保の仕方とか、いろんな文脈で使われる。 : デフォルトの名無しさん (アウアウカー Sac3-E6if) [sage] 2018/03/23(金) 22:57:57.59:io4DvPx8a 実行時に変化するのは動的でした : デフォルトの名無しさん (ブーイモ MM26-Z/eb) [sage] 2018/03/23(金) 23:15:38.28:g9Gf634nM 決まる、決まらないの主語は何でしょうか? : デフォルトの名無しさん (ワッチョイ 7abd-aumg) [sage] 2018/03/24(土) 00:54:38.69:LvcaB4Q+0 メモリについて知りたいんならC言語から始めたら良い Unixの移植目的で設計されたC言語は、実行効率のためほとんど必然的にメモリが透けて見える言語になったんである 『プログラミング言語C』という名著もある これの後ろの方のmalloc()の実装サンプルまで通読したら シングルCPUの範疇ならメモリについて嫌でもワカル 『プログラミング言語C++』と違って三日もあれば読めれる手頃な分量やしな! : デフォルトの名無しさん (ワッチョイ a39f-aRf7) [sage] 2018/03/24(土) 01:27:57.09:eFb1d56B0 横だが。 何でも、だよ。 型なら静的型、動的型というし、メモリ確保なら静的確保、動的確保という。 マシン語は飛躍しすぎ。 CのエンハンスとしてC++を使うのならマシン語(インラインアセンブラ)もありだが、 C++をJava/C#/C++の並びで使うつもりならインラインアセンブラとか禁止でしょ。 というかそもそもその辺が分からない=全くの初心者がC++からやろうというのが間違い。 PythonかRubyあたりから始めとけ。(どっちも俺は知らんけど) : デフォルトの名無しさん (ワッチョイ 36e7-0D9k) [sage] 2018/03/24(土) 01:40:25.62:nPxx/G4d0 コンパイラがコンパイル時に決めるものが静的、出来上がったプログラムを実行した時に決まるのが動的 C++だとそういう理解の方がわかりやすいと思う マクロ、テンプレート、constexpr、リテラル、式や変数や関数やクラスの宣言型なんかは静的 静的なものは全部コンパイラが決めるからプログラムの実行時にはいちいち計算しないし、バグで決められなかったらコンパイラが怒る 変数やインスタンスの中身、関数呼び出し、仮想クラスのオブジェクト型なんかは動的 実行環境や食わせた入力・ファイルなんかに依存するからプログラムを実行してみないと決まらない 動的なバグはコンパイラは感知できないから客先でプログラムを実行するとクラッシュする 適当だけどだいたいこんな感じ : デフォルトの名無しさん (ワッチョイ a39f-aRf7) [sage] 2018/03/24(土) 02:04:25.06:eFb1d56B0 細かいようだが、 コンパイル時に確定=静的 実行時に確定=動的(=コンパイル時に確定できない) で若干の例外(staticとか)があるが大体あってる。 「プログラミング言語C」はやめとけ。名著だが、あれは 「既にプログラミングを出来る人が、C言語を学ぶ」用であって、全くの初心者じゃ読めない。 「プログラミング言語C++」も止めとけ。あれも「既にCを使える人が…」で以下同文。 他本は総じてゴミなのも事実だが。 : デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/24(土) 02:06:26.05:Z79Bg+7E0 特定のアドレスにデータを配置して割り込みかける必要があるからじゃないだろか。 : デフォルトの名無しさん (ワッチョイ 36e7-0D9k) [sage] 2018/03/24(土) 02:09:36.82:nPxx/G4d0 予約語のstaticは転用されまくってわけわからなくなってるので 「静的」とソースコード上のstaticは全く別物だと思った方がいい : デフォルトの名無しさん (ワッチョイ 4e81-zkh5) [sage] 2018/03/24(土) 02:15:26.90:qYWJwKPe0 その辺整理されないんだろうかね そう言うものだという説明で 不本意ながら納得する事何十年 : デフォルトの名無しさん (ワッチョイ a39f-aRf7) [sage] 2018/03/24(土) 02:29:56.73:eFb1d56B0 そんなに混乱するか?例外としてしまって問題ないと思うが。 俺は規格には詳しくないが、(というより色々混ざってしまっているが) ・Cのstatic関数=ファイルスコープに限定、externの反対 --- (A) はC++ではなんとかされたのではなかったっけ?(どうせ使わないからどうでもいいが) ・staticクラス、あるいはクラスのstaticメソッド --- (B) は「静的」で矛盾しないから、そもそも問題ない。 ・関数内static変数でプチグローバル(みたいなやつ) --- (C) も普通にクラスにしろ、って話でしかないし、使わないだろ。 結果、普通に使う分には特に混乱しないと思うが。 文法オタクは気にするのかもしれんが。 (C)は「動的関数にしよう」という意図があったのかもしれんが、 結局C/C++の世界は静的関数しかないから、意味無かったし。 というかそもそも俺は動的関数のメリットがよく分からん。 C#は動的関数だが、結局ロード/アンロードはアセンブリ単位=ほぼ起動時に纏めて、 であって、活用してない。 Javaは動的関数でメリットを享受してるんだっけ?(知らんから教えて) : デフォルトの名無しさん (ワッチョイ a304-h0dl) [sage] 2018/03/24(土) 02:33:41.17:y/z0A0hW0 ttps://ideone.com/Epp30z お兄ちゃん助けて、コンパイルが通らないの。 VCで開発してます。 jsonのメモリーモデル研究にとりあえずシェアードPTRの組んでそれからやっぱユニークPTRの変更しました。 色々いじってるのですが、意味不明なエラーが出てさっぱりわかりません。 自前のコードなら自分でどうにかするのですが、コードステップするとライブラリの中でえらーおこしててさっぱりです。 どなたかご教示ください。お願いします。 : デフォルトの名無しさん (ワッチョイ 36e7-0D9k) [sage] 2018/03/24(土) 02:46:21.51:nPxx/G4d0 std::vector<UniqueObject>にstd::pair<UniqueObject,UniqueObject>突っ込もうとしてんじゃん ちゃんとエラーメッセージ読めよ : デフォルトの名無しさん (ワッチョイ a304-h0dl) [sage] 2018/03/24(土) 02:51:39.38:y/z0A0hW0 え?何行目ですか?そんなバカな・・・。え? : デフォルトの名無しさん (ワッチョイ 4e81-1N/V) [sage] 2018/03/24(土) 03:47:44.28:jOWDr2Es0 static関数は恐らくリンク工程がdynamicの場合があるため それに対してのstaticなんだろな : デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/24(土) 03:55:06.40:Z79Bg+7E0 毎回思うんだけど、なんでgccで勉強しようとするんだろうな。 エラーメッセージ読めと言われても読めるわけがない。 一番わかりにくいメッセージを出すコンパイラで勉強する子が不憫でならない。 : デフォルトの名無しさん [] 2018/03/24(土) 04:28:06.63 VCで開発って書いてんだろーが : デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/24(土) 04:30:46.18:Z79Bg+7E0 確かに書いてあるな。 じゃあエラーメッセージ読めよ。 : デフォルトの名無しさん (ワッチョイ 4ee8-W72l) [sage] 2018/03/24(土) 05:34:00.15:GrrVfR010 読む気のない奴は何使ってもダメだという良い例 : デフォルトの名無しさん [] 2018/03/24(土) 06:12:32.26 いつも大量のWarningが出るのを真面目に対処せず放置してるからErrorが出ても理解できない罠 : デフォルトの名無しさん (ワッチョイ a304-h0dl) [sage] 2018/03/24(土) 06:12:34.93:y/z0A0hW0 ttps://ideone.com/FN5IrI 理屈の一つは多分。 イニシャライザーリストが要素をconstで構築するからmoveできない? 内部でconst_castするわけないしこれ詰んでない? あるぅぇ〜。なんでじゃー。 : デフォルトの名無しさん (ワッチョイ f397-zkh5) [sage] 2018/03/24(土) 06:25:04.10:0qB0BmlJ0 static_castの動作内容は翻訳時に全て確定する dynamic_castの動作内容は実行時のvtableにより変化する static_assertは翻訳時に検査を行う assertは実行時に検査を行う static link libraryは翻訳時に結合する dynamic link libraryは実行時に読み込む : デフォルトの名無しさん (ワッチョイ a393-4ZrE) [sage] 2018/03/24(土) 06:57:20.04:XPzSeRia0 どうやら の質問は C++ に限定した話ではないみたいだから、 C と C++ の両方を扱うスレッドに移動するのが良いんじゃないかな。 「Cの場合は…」「ここC++のスレッドだし」レベルの齟齬が避けられるし、 このスレッドを見てないC専門の人が有用な情報を持ってるかも知れん。 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 ttp://mevius.5ch.net/test/read.cgi/tech/1509780815/ スレを勃てるまでもないC/C++の質問はここで 25 ttp://mevius.5ch.net/test/read.cgi/tech/1471100645/ : デフォルトの名無しさん (ワッチョイ a39f-aRf7) [sage] 2018/03/24(土) 09:00:52.23:eFb1d56B0 質問者はそれ以前の、プログラミング一般の「静的」「動的」の区別が付いてない。 スレ移動しても意味無い。というかどこのスレでも同じ。 C++のstaticは、Cのグダグダな仕様を引きずっているからおかしくなっているだけで、 C++で新たに設定されたstaticは他言語とも整合取れてる。 これに関しては「Cが悪い」でいいと思うよ。 説明している本が無いのは、そもそもそんなところで引っかからないだろう。 教習所でハイオクの話をしても意味無い。 一通り動く物を組めるようになるまではそれにフォーカスしろ、でいい。 : デフォルトの名無しさん (ワッチョイ 36e7-0D9k) [sage] 2018/03/24(土) 09:28:18.28:nPxx/G4d0 静的動的の区別は大事だし引っかかりやすい所でもあるでしょ テンプレート引数に変数突っ込んでなんで動かないのぉぉとか初心者はよくあるよ 説明してる本がないって本当か?本当なら世の本がクソすぎる : デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/24(土) 10:20:48.01:Z79Bg+7E0 で、静的と動的の違いは何なんだよ。 ガンダムで説明してくれ。 : デフォルトの名無しさん (ワッチョイ 9a34-jZqL) [sage] 2018/03/24(土) 10:26:44.70:UtKAK1R90 staticとauto : デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/24(土) 10:38:33.14:Z79Bg+7E0 ガンダムで説明できないうちは理解できてることにならないぞ。 : デフォルトの名無しさん (ワッチョイ 4e81-1N/V) [sage] 2018/03/24(土) 10:49:46.91:jOWDr2Es0 アインシュタインみたいなこと言ってんじゃねえよ : デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/24(土) 11:08:12.95:aqtEECgt0 ガンダム言語の表現力を信じろ : デフォルトの名無しさん (ワッチョイ a39f-aRf7) [sage] 2018/03/24(土) 11:10:56.81:eFb1d56B0 じゃあお前が説明しろよ。 お前は馬鹿だから出来ないと思うがな。 そもそもは誰向けのレスだよ? : デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/24(土) 11:18:43.16:aqtEECgt0 コーディング規約にchar aznable禁止っていうのを見たことあるから C++にガンダム要素を入れるのはタブー : デフォルトの名無しさん (ワッチョイ a39f-aRf7) [sage] 2018/03/24(土) 11:28:25.89:eFb1d56B0 > テンプレート引数に変数突っ込んでなんで動かないのぉぉとか初心者はよくあるよ ねえよ > 説明してる本がないって本当か?本当なら世の本がクソすぎる 世の本は概して糞だ。これは事実だ。 というかここら辺の認識がずれるのは世代ギャップだ。 現状の本を書いてきている世代は全員CをやってからC++をやっている。 だから「静的」「動的」の区別が付かない状態でテンプレートを触ることがなかった。 当然そこを解説した本もそんなにあるはずがない。 お前らの世代がCをやらずにいきなりC++を始め、それで色々苦労した経験があるのなら、 お前らの世代の連中が本を書かなければならない。ただそれ以前に、 俺はその必要(全くの初心者がCをやらずにC++を始める)があるとは思えないが。 入門書を書いている連中はプログラマでも宣教師でもなく、ただのテクニカルライタだ。 だから需要(売れる)があれば書くだけ。今無いのは需要がないと見られているから。 俺もこの見方については同意する。 最初のプログラミング言語がC++ってのは単純に選択を間違えてる。 : デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/24(土) 11:30:12.41:Z79Bg+7E0 C++とJavascript以外学ぶ必要があるとは思えない。 : デフォルトの名無しさん (ドコグロ MM92-a4pf) [sage] 2018/03/24(土) 12:01:13.85:3GLZsUhUM それはさすがに世間が狭すぎる 土方志望としてもJava程度は触っとけ : デフォルトの名無しさん (ワッチョイ 5b80-AyCB) [] 2018/03/24(土) 12:18:09.21:Z79Bg+7E0 Javaは当初の理念を失ってしまったように感じる。 : デフォルトの名無しさん (ワッチョイ 8a7e-zkh5) [sage] 2018/03/24(土) 12:21:12.10:aqtEECgt0 JavaはJVM上で動く一言語に成り下がったからな : デフォルトの名無しさん (ワッチョイ 36e7-0D9k) [sage] 2018/03/24(土) 17:03:55.62:nPxx/G4d0 今からJavaやるくらいならC#にしとけ : デフォルトの名無しさん (アウアウウー Sac7-zkh5) [] 2018/03/24(土) 18:05:30.46:upExxHyGa みなさん、ありがとうございました。 カーニハン他の本をまず読んでみようと思います。 そうなんですか? Robert SedgewickらのAlgorithmsという教科書がJavaで書かれているため、 Javaの本も買って読んでいます。 ところで、学術的?な本では、オブジェクト指向言語としてC++かJavaが 大抵使われていますが、C#は使われていません。これはマイクロソフト という一企業が設計した言語だからでしょうか? : デフォルトの名無しさん (アウアウウー Sac7-zkh5) [sage] 2018/03/24(土) 18:06:22.88:upExxHyGa たとえば、プログラミングコンテスト関係の本では大抵C++が使われています。 : デフォルトの名無しさん (アウアウウー Sac7-zkh5) [sage] 2018/03/24(土) 18:07:40.93:upExxHyGa そういう理由から、本当はC++ではなくC# + Visual Studioを勉強したいのですが、 C++の本(ロベール)を買って読んでいます。 : デフォルトの名無しさん (ワッチョイ 8a7e-Igml) [sage] 2018/03/24(土) 18:12:06.94:aqtEECgt0 そのうち大抵の言語は経験なくてもリファレンス片手に使えるようになるから好きなもん使え : デフォルトの名無しさん (ワッチョイ f397-zkh5) [sage] 2018/03/24(土) 18:12:52.16:0qB0BmlJ0 C++だって元々はAT&T製なんだが : デフォルトの名無しさん (ブーイモ MM26-Dh3i) [sage] 2018/03/24(土) 18:20:10.81:LkK69e8iM javaも神託に従わないと訴えられるという… : デフォルトの名無しさん (ワッチョイ a39f-aRf7) [sage] 2018/03/24(土) 18:50:18.42:eFb1d56B0 なら素直にC#やっとけ。 その後に必要ならC++で何も問題ない。 C#は商業的につまずいたのでJavaほどの知名度はないが、 言語自体はJavaよりは断然いい。(後発だから当然だが) : デフォルトの名無しさん (スププ Sdba-kSjP) [sage] 2018/03/24(土) 19:07:41.38:weQnYJFBd ねーねー。 STL作った人は、共産主義国で食中毒にあって、ベッドの上で朦朧とした頭で閃いたって話だった気がしたけど、どっかにその話のソースある? ググっても見つからないよー : デフォルトの名無しさん (ワッチョイ 9a34-jZqL) [sage] 2018/03/24(土) 19:12:27.84:UtKAK1R90 神託は絶望の淵やタヒぬ直前に見えたりするもんやで : デフォルトの名無しさん (ブーイモ MM26-Dh3i) [sage] 2018/03/24(土) 19:18:50.87:LkK69e8iM 見つけてきたぞ。何処かで発表か何かするの? ttp://www.stlport.org/resources/StepanovUSA.html ところでこのインタビューにあるtamagawa numberってなんだろう : デフォルトの名無しさん (アウアウウー Sac7-zkh5) [sage] 2018/03/24(土) 19:25:16.65:upExxHyGa 玉河数 ttps://ja.wikipedia.org/wiki/%E7%8E%89%E6%B2%B3%E6%81%92%E5%A4%AB に書いてありました。 : デフォルトの名無しさん (ブーイモ MM26-Dh3i) [sage] 2018/03/24(土) 19:30:46.97:LkK69e8iM 玉川数じゃ出てこないわけだ : 801 (スププ Sdba-kSjP) [sage] 2018/03/25(日) 06:55:48.47:FlrNzX5dd 皆様ありがとーございます。 論文の枕で書こうかと思いまして : デフォルトの名無しさん (アウアウウー Sac7-zkh5) [sage] 2018/03/25(日) 11:36:01.08:Lywxeunja char* str = "abc"; とは書かずに、 const char* str = "abc"; と常に書くようにと本に書いてあります。 理由は文字列リテラルは直接書き換えてはいけないからであると書かれています。 ●コンパイルは通っても、実行するとエラーになることもある。 ●同じ内容の他の文字列リテラルまで書き換えられてしまうことがある。 とも書かれています。 禁止されているにもかかわらず、コンパイルが通る可能性があるというのはどういう ことなのでしょうか? (1)コンパイルエラーが発生 (2)コンパイルは通るが実行するとエラーが発生 (3)コンパイルは通り、実行してもエラーが発生しないが、同じ内容の他の文字列 リテラルまで書き換えられてしまうという不具合が起こることがある。 コンパイラーの設計者には、(1)、(2)、(3)の選択肢があるのはなぜでしょうか? 禁止されているのだから、一律にコンパイルエラーにするのが自然に思われます。 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f) : デフォルトの名無しさん (アウアウウー Sac7-zkh5) [sage] 2018/03/25(日) 11:39:58.12:Lywxeunja const char* str = "abc"; const char ca[] = {'a', 'b', 'c', '\0'}; の二つは同じことだと思っていましたが、これは違うということでしょうか? const char* str = "abc"; では、"abc"をある場所に格納しておき、それを使いまわしたりすることがある ということでしょうか? 例えば、 const char* str1 = "abc"; const char* str2 = "abc"; と書いたときに、 str1 == str2 になることがあるということでしょうか? 一方、 const char ca1[] = {'a', 'b', 'c', '\0'}; const char ca2[] = {'a', 'b', 'c', '\0'}; と書いた場合には、それぞれ、別に格納場所が確保されるということでしょうか? 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f) : デフォルトの名無しさん (ブーイモ MM26-Dh3i) [sage] 2018/03/25(日) 11:41:04.91:tMBl9Z88M : デフォルトの名無しさん (アウアウウー Sac7-zkh5) [sage] 2018/03/25(日) 11:44:30.72:Lywxeunja すみません。 カーニハンらの本の日本語版のp.127に書いてありました。 char amessage[] = "now is the time"; char *pmessage = "now is the time"; の違いについてです。 そして、文字列の内容を変えようとすると、その結果は不定となる と書かれいます。なぜ不定としているのかについては理由は書いてありません。 : デフォルトの名無しさん (アウアウウー Sac7-zkh5) [sage] 2018/03/25(日) 11:46:43.36:Lywxeunja ありがとうございました。 故意に違反状態にするということもあるんですね。 正直言って無駄に分かりにくいところがあるんですね。 : デフォルトの名無しさん (ワッチョイ 0e8a-VY+1) [sage] 2018/03/25(日) 12:26:26.43:NNknxHvv0 うん過去のもうメンテナンス不能なコードは膨大なんでそうするしか仕方ないんだよ : デフォルトの名無しさん (ワッチョイ 9a34-jZqL) [sage] 2018/03/25(日) 12:40:02.16:L+/M5ACh0 以前にも同じ質問出たし荒しかとおもた : デフォルトの名無しさん [] 2018/03/25(日) 13:01:03.23 C++相談室で出す話題でもなかろに : デフォルトの名無しさん (ワッチョイ 8a7e-Igml) [sage] 2018/03/25(日) 13:06:46.65:zn3nsIh00 一応初心者向けのスレっていう体じゃなかったのか? : デフォルトの名無しさん [] 2018/03/25(日) 13:52:43.26 ここか、 C言語なら俺に聞け 145 ttp://mevius.2ch.net/test/read.cgi/tech/1519046038/ せめてここ向きの質問だろう 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 ttp://mevius.2ch.net/test/read.cgi/tech/1509780815/ : デフォルトの名無しさん (ブーイモ MMba-Gtgj) [sage] 2018/03/25(日) 15:10:26.39:9t80sXyiM 旧K&Rつまり第一版は書換可能だったの : デフォルトの名無しさん [] 2018/03/25(日) 15:22:53.51 C++スレでK&Rの話すんなや : デフォルトの名無しさん (ワッチョイ f397-zkh5) [sage] 2018/03/25(日) 17:38:21.10:S7OmeNGW0 ISO/IEC14882:2017 C.1.1の段落3で char* p = "abc"; // valid in C, invalid in C++ となっているので、C++ではコンパイルが通ってはいけない なぜ通ることがあるのかというと、 JIS X3014:2003 D.4で 定値文字列からの暗黙変換 文字列リテラルに対し,定値から非定値へ暗黙変換することは,推奨しない(4.2参照)。 となっており、C++03に従う限りコンパイルは通ることになっていた名残だ : デフォルトの名無しさん (ワッチョイ 1a12-aRf7) [sage] 2018/03/25(日) 17:59:44.09:oI54xnZZ0 するなと言われてもスーパーセットなんだからC言語の記法がどこまで通じるかは重大な問題だと思う : デフォルトの名無しさん (ワッチョイ f397-zkh5) [sage] 2018/03/25(日) 18:24:54.69:S7OmeNGW0 建前「それは間違い」なんだが 本音ではそのとおり : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-zkh5) [sage] 2018/03/25(日) 18:36:39.65:vqcfoPV60 スーパーセットにするというよりは、 つかず離れずというポジションかなぁ。 C++ が先にやったのを C で取り入れたことも有るし。 : デフォルトの名無しさん (ブーイモ MMe7-Dh3i) [sage] 2018/03/25(日) 18:55:57.82:HW+VfLnzM 可変長配列とか名前付きの構造体初期化とかc++に取り込まれたんだっけ? スーパーセットは20年前にとっくに終わったんじゃないかと。 すでに導入されてたらスマソ : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-zkh5) [sage] 2018/03/26(月) 05:22:15.91:S9VCdiyC0 たぶん入ってないな。 可変長配列 (VLA) って確か C でもオプショナルに格下げされてただろ。 (C11 から) C++ のイニシャライザはだいぶん複雑になっちゃったから辻褄の合うようにするの大変だろうし、 もうやらないんじゃないかな。 : デフォルトの名無しさん (ワッチョイ 8a7e-Igml) [sage] 2018/03/26(月) 11:36:03.37:pTR+m2Zc0 実用レベルではほぼスーパーセットといっても差し支えない : デフォルトの名無しさん [] 2018/03/26(月) 11:51:36.03 実用レベルではCがC++のサブセットだし🙄 : デフォルトの名無しさん (スフッ Sdba-5bpY) [sage] 2018/03/26(月) 12:28:17.38:tDSLT7/Xd 実用レベル:=C++にも存在する機能に制限されたC : デフォルトの名無しさん (ワッチョイ 36e7-0D9k) [sage] 2018/03/26(月) 22:04:18.63:cCKTbT1E0 C11の_GenericとかそれCで敢えてやる必要あるの?って思う : デフォルトの名無しさん (ワッチョイ b6e9-5bpY) [sage] 2018/03/26(月) 23:52:36.66:TogAHTIh0 微妙に使い辛い機能だし分からんでもないけど、本当の名前がちゃんと見えてるのはちょっと安心感 : デフォルトの名無しさん (ワッチョイ a304-h0dl) [sage] 2018/03/26(月) 23:58:29.09:bouVP8Z10 スイッチで選択するのをスマートにした感じやな。 イマイチ〜〜。 テンプレート一個書いて複数にジェネレートさせる方が好み。 : デフォルトの名無しさん (ワッチョイ b69b-g2oz) [sage] 2018/03/27(火) 01:36:13.83:tW2Kdf3t0 あるクラスAのラッパークラスWで A&を受け取る場合はWの全てのメソッドが使えて const A&を受け取る場合はWのconstメソッドだけが使えるように制限する設計って ありましたっけ? : デフォルトの名無しさん (ワッチョイ a304-h0dl) [sage] 2018/03/27(火) 01:42:41.92:6oSpwfuc0 おーばーらいど。 : デフォルトの名無しさん (ワッチョイ 9a34-jZqL) [sage] 2018/03/27(火) 06:31:21.75:m3riabwu0 あとは operator -> でポインタ返すやり方とかだな : デフォルトの名無しさん [] 2018/03/27(火) 06:53:48.55 制限っていうのは、コンパイルエラーにしたいの? : デフォルトの名無しさん (ワッチョイ b69b-g2oz) [sage] 2018/03/27(火) 07:01:18.53:tW2Kdf3t0 A a0; const A a1; W w0(a0);//OK W w1(a1);//NG const W w2(a1);//OK const W w3(a0);//OK で、Wの非constメソッドには必ずconstメソッドが対応して存在している みたいな : デフォルトの名無しさん (ワッチョイ a304-h0dl) [sage] 2018/03/27(火) 07:12:14.69:6oSpwfuc0 設計がダサい気がするけど、何に使うんだろう。 : デフォルトの名無しさん [] 2018/03/27(火) 07:35:02.82 NGっていうのは、コンパイルエラーにしたいの? : デフォルトの名無しさん (ワッチョイ b69b-g2oz) [sage] 2018/03/27(火) 07:36:16.27:tW2Kdf3t0 そうですね : デフォルトの名無しさん (ワッチョイ a350-XniR) [sage] 2018/03/27(火) 07:40:26.10:ofLFYE4b0 明確な欠点を指摘出来ない時に使う言葉だな 「ダサい」 : デフォルトの名無しさん (ワッチョイ 0723-14g7) [sage] 2018/03/27(火) 11:34:17.37:bA2HN2rY0 クラスを W MutableW (変更可能なW) と分けるのがよく使われる現実的な解だと思う MutableW は W の派生型として実装すると楽 >で、Wの非constメソッドには必ずconstメソッドが対応して存在している この部分は意味不明なので聞かなかったことにしておく : デフォルトの名無しさん (ワッチョイ b69b-g2oz) [sage] 2018/03/27(火) 12:08:25.74:tW2Kdf3t0 なるほど、ありがとうございます : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-zkh5) [sage] 2018/03/28(水) 16:37:44.82:jJD3k2j80 テンプレートにしておいて SFINAE で分岐するという方法はとれるが……。 : デフォルトの名無しさん (アウアウウー Sac7-fzSc) [sage] 2018/03/28(水) 18:32:49.43:rzqMRle+a C言語ってこんなので就職できるらしい… 【企業】「”C言語…?どこかで見た”程度でOK」 名古屋のアテック、求人広告が話題に エンジニアの人材不足、面白求人でカバーできる? ttps://asahi.5ch.net/test/read.cgi/newsplus/1522229305/ 本物のC++プログラマーを募集してる某社とはえらい違いだな : デフォルトの名無しさん (ワッチョイ 8a7e-Igml) [sage] 2018/03/28(水) 20:11:10.89:nsQQ2hCk0 永久にPHP弄らせる要員としては十分 : デフォルトの名無しさん [] 2018/03/28(水) 20:50:12.70 言語ヲタなんてプロジェクトに一人いれば十分だし 兵隊は言語の知識よりコミュニケーション能力、報連相、Excel方眼紙スキルが大事よ : デフォルトの名無しさん (ワッチョイ 3708-zkh5) [sage] 2018/03/28(水) 20:55:08.40:NO5LUaew0 上司を黙らせるスキルでしょ 盛らないでね : デフォルトの名無しさん (ワッチョイ 8a7e-Igml) [sage] 2018/03/28(水) 22:09:32.87:nsQQ2hCk0 会社員なのだから上司が納得することだけが重要 : デフォルトの名無しさん [] 2018/03/28(水) 22:29:42.33 上司なんか関係ないやろ お客さんを味方に付けることや : デフォルトの名無しさん (ワッチョイ a350-XniR) [sage] 2018/03/28(水) 22:33:35.60:fYzIlbdt0 関係あるだろ : デフォルトの名無しさん (ワッチョイ a37f-zkh5) [] 2018/03/28(水) 22:46:49.55:2H+8IznE0 上司も客も関係無いよバカども プログラミングの話だバカども : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b66f-zkh5) [sage] 2018/03/28(水) 23:56:58.42:jJD3k2j80 マ板でやれ : デフォルトの名無しさん (ワイモマー MMb3-TX0Y) [sage] 2018/03/29(木) 00:40:46.75:zCjdEvGWM visualstudio2017 Win32アプリケーションでSQLiteを使いたいのですが Nugetにそれらしきものが合ったのでインストールしようとしたのですが以下のエラーでインストールできません。 ttps://www.nuget.org/packages/SQLite/ パッケージ 'SQLite 3.13.0' をインストールできませんでした。このパッケージを 'native,Version=v0.0' を対象とするプロジェクトにインストールしようとしていますが、 そのフレームワークと互換性があるアセンブリ参照またはコンテンツ ファイルがパッケージに含まれていません。 どうすればよいのでしょうか。 : デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 00:42:57.97:+dX3Weor0 CoAppのタイムスタンプ調べてみて。 NuGetは捨てろ。 : デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 00:48:50.94:+dX3Weor0 代わりに何を使うか。 VCPKG。 ただし、MSは三年後にVCPKGも捨てているだろう。 逆に我々がVSを捨てる時期に来ている。 : デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 00:53:15.59:+dX3Weor0 MSの方針としてC++を捨ててC#に移行させるというのがあって、C++ユーザーはあの手この手で改宗を迫られる。 もはやVSでC++は苦行。 というか、WindowsでC++が苦行。 : デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 00:55:08.86:+dX3Weor0 C++を捨ててC#に移行するか、Windowsを捨ててOSXかLinuxに移行するか。 二択。 WindowsではC#が正解。 なぜならMSがそれを望んでいるから。 : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/29(木) 01:05:50.70:xx4XvERn0 C++のチームも頑張って更新してるけどな IDEとコンパイラは十分なのに ・パッケージマネージャーがクソ ・再起動しないとPATHが更新されない ・VSのプロジェクトが用意されていないとビルドが面倒 と環境が整備されてなさすぎる : デフォルトの名無しさん (ワッチョイ 93eb-Mlde) [sage] 2018/03/29(木) 01:09:04.86:y/yCqDtn0 C# + C++/CLI + C++ という選択肢 : デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 01:14:03.03:+dX3Weor0 我々が間違っている公算も高い。 我々はC++を使いこなせる。 だから、C++なら簡単にできるのになぜそうしない?と思ってしまうが、これから学ぶならC#のほうが簡単だろう。 MSがC#を推すのは正しいのかもしれない。 : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/29(木) 01:20:39.82:xx4XvERn0 C#はビジネス用だから より早く大量にコードを生産することを目的としているからC++とは用途が違う : デフォルトの名無しさん (ワッチョイ 7923-KOzE) [sage] 2018/03/29(木) 02:12:12.07:Hc4kPWXM0 Android でも iPhone でも Windows でも使える共通部分のコードは c++ で、 ってのを C# に変えたいのかもしれんが 別段 c++ で不自由ないしなあ… てか c# って .Net のイメージ強すぎて単体で使える気がまるでしない : デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/29(木) 03:27:22.16:T1PPEJjr0 未だにproperty実装出来ていないC++標準仕様が異常なんだぜ そりゃMSも堪忍の尾が切れるってもんだぜ : デフォルトの名無しさん (ワッチョイ 4104-2GNe) [sage] 2018/03/29(木) 04:16:13.07:Ng8O1HeK0 ら、ライブラリで実装できるから・・・。 ちなみに、プロパティっぽい提案は過去出てるが、全くテーブルに乗らない。 : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/29(木) 04:45:16.84:xx4XvERn0 誰もプロパティを欲していないのである : デフォルトの名無しさん (ワッチョイ 3181-vyEq) [sage] 2018/03/29(木) 06:44:05.72:izMMXIg60 俺も欲しくない コスト予測し辛杉デフ : デフォルトの名無しさん (ワッチョイ 5be7-Cooj) [sage] 2018/03/29(木) 07:38:47.09:LRHKAKcy0 C#はいい言語だよ Linq便利だし ただC++とは用途が違うってだけ : デフォルトの名無しさん (ワッチョイ 93e7-qGf7) [sage] 2018/03/29(木) 08:06:33.99:qluMmKIH0 何度聞いてもプロパティが欲しいという思いが沸かないんだが : デフォルトの名無しさん (ワッチョイ d3bd-qsUw) [sage] 2018/03/29(木) 08:10:21.70:FDAIDKLE0 ウィンドーズホンでネイティブC++とC++/CXの間を取り持つwrapperを書くのに使う Wrapperを書くのに便利 : デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 10:37:15.71:+tUOh99Na プロパティが使えたらMFCのような糞環境でUpdateDataを使わなくてよくなる プロパティに代入で表示が変わり プロパティからそのまま値が取り出せる : デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 10:39:27.42:+dX3Weor0 しかしVisual Studioは何だってUTF-8で保存されるのをそんなに嫌うんだろうか。 あの手この手でUTF-8で保存するのを妨害してくるけど。 : デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 10:40:42.80:+dX3Weor0 VSで開発してLinuxに移植されるのを嫌がってるんだろうかね。 その割にはgdbと接続できるようにしてるし。 : デフォルトの名無しさん (ワッチョイ 7923-KOzE) [sage] 2018/03/29(木) 10:47:23.77:Hc4kPWXM0 ナイナイ 今だって setFoo() だの getFoo() だの実装すりゃできるけど初学者以外はやらないだろ? 実装するにも使うにも効率が悪いからね。 : デフォルトの名無しさん (ワッチョイ d3cb-436e) [sage] 2018/03/29(木) 10:47:32.92:+dsdqxPO0 それはsetter/getterではできないことなんだな? : デフォルトの名無しさん (スップ Sdf3-Myl/) [] 2018/03/29(木) 10:57:10.36:HNpF58Nud a.Hoge+=100; みたいな事をできて便利だなと思うことはあるけど無けりゃないでいいわレベル : デフォルトの名無しさん (ワッチョイ 59d3-kUw7) [sage] 2018/03/29(木) 11:06:30.37:q+sj+Afe0 プロパティはメソッドともフィールドとも区別できるメタデータとしての活用が唯一の動機なんだが 結局のところ実行時の型システムまで整備しないととただの構文糖だしなあ : デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 11:06:41.49:+tUOh99Na A.Width+=20; と A.setWidth(A.getWidth()+20); どっちがいい?; : デフォルトの名無しさん (アウアウウー Sa45-wAfm) [sage] 2018/03/29(木) 11:10:04.25:jtsbgEO5a 後者の方が好きだな : デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 11:14:39.59:+tUOh99Na a.value++とかif(a.Width==100)とか 普通に書けるものをわざわざgetter setter書きたいんだな 変ってる : デフォルトの名無しさん (ワッチョイ 7923-KOzE) [sage] 2018/03/29(木) 11:32:58.49:Hc4kPWXM0 UI とのバインディングを失笑されたら シンタックスシュガーでこんなに楽にかける!と主張し始めたよw そりゃ楽にかけて便利だよな。 そのためのものだもの。そこは同意する : デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 11:35:30.24:+tUOh99Na GUIだけじゃなくて他にも使えるというか 他がメイン : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/29(木) 12:12:32.14:xx4XvERn0 そういう風にお手軽にメンバを書き換えるのは事故のもとなのでやめましょうってことでめんどくさくしたのに 戦争を知らない世代みたいな 現状でもa.value()++とかif(a.Width()==100)でできるしな これまでのコードとの一貫性を破壊してなおかつ年代物のコンパイラに更に複雑なパースをさせて得られるものがちょっと括弧を省略するだけとは : デフォルトの名無しさん (スッップ Sdb3-VlFK) [sage] 2018/03/29(木) 12:14:06.74:mREgEFijd プロパティのメリットは最初publicで適当に実装しといても後からgetter/setter付きのprivateに変えれる所じゃない? : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/29(木) 12:18:25.09:xx4XvERn0 変数がない状態でもテストに通るように作るべきだからpublicで変数を持たせる機会が一瞬もない : デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 12:18:48.50:+dX3Weor0 C++builderってプロパティなかったっけ。 たいそう便利だったような気がするのだが、思い違いだろか。 : デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 12:19:57.65:+dX3Weor0 そもそも最近のGUIビルダってC++ビルダーの影響受けまくってるような感じがする。 : デフォルトの名無しさん (ワッチョイ 9312-3n/u) [sage] 2018/03/29(木) 12:20:28.54:ONnwnPbh0 トップダウンで理想から考えるのが早い どういう風に書ければ満足するんだ : デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 12:26:29.79:f5JOZCzba パースが面倒になるとは思えない 変数と同じ使い方なんだから変数のようにパースするだけだと思うが… それにお前はコンパイラつくらないじゃん : デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 12:28:52.39:f5JOZCzba c++0x()以降の理念で仕様策定だけしたらいいじゃん 基本機能を妨げないように仕様追加 使うかどうかは本人次第 誰も強制しない : デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 12:30:14.95:f5JOZCzba 拡張forもautoも馬鹿みたいに文句言ってたけど今でも使うなって言う人はいるのかな : デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/29(木) 12:31:30.92:+dX3Weor0 使うな! : デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 12:31:44.70:f5JOZCzba わかりました使いません… : デフォルトの名無しさん (スッップ Sdb3-VlFK) [sage] 2018/03/29(木) 12:59:19.47:mREgEFijd 頭かったwwww : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/29(木) 13:03:56.15:xx4XvERn0 これらを採択する人の中にGCCやMSVCの人がいないわけないじゃん 関数として扱うのか、変数として扱うのか決めなきゃいけない そしてどうやってポインタをとるのかなど色々な問題がある そしてさっきも言ったけど括弧を少し減らせるだけでできることが増えるわけじゃないというのが最大の問題 : デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 13:16:13.95:f5JOZCzba 得意げにご高説を垂れ流してる最中に申し訳ありませんが a.value++; と a.value()++; は別物 あえてみんなスルーしてくれてるのに : デフォルトの名無しさん (ワッチョイ 1323-RCub) [sage] 2018/03/29(木) 13:20:41.15:ng76gyv10 参照返しなら同じでは? : デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 13:33:25.09:f5JOZCzba ん? 参照した値を変えるとGUIの表示とか更新してくれんの? getterとsetterあったとして実行してくれんの? a.width()とa.widthが同じgetter的な動作してくれるのはわかるけど : デフォルトの名無しさん (スッップ Sdb3-VlFK) [sage] 2018/03/29(木) 13:38:37.15:mREgEFijd アンチプロパティの人なんでそんなに必死なん? : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/29(木) 13:47:08.78:xx4XvERn0 プロキシクラス : デフォルトの名無しさん (スップ Sdb3-W7mk) [sage] 2018/03/29(木) 14:39:11.63:BTFPAIj5d GUIの表示を更新するように作れば更新される : デフォルトの名無しさん (ワッチョイ 1908-kUw7) [sage] 2018/03/29(木) 14:39:13.31:DoW8QBEn0 a.value()++; が参照返しとかどんだけヘボいんだよw リファレンサのprvalueだろjk : デフォルトの名無しさん (アウアウウー Sa45-kUw7) [sage] 2018/03/29(木) 15:02:55.47:f5JOZCzba プロパティ不要とは言うけどそもそものプロパティの仕組みと効果はわかってないんだね こんな人ばかり : デフォルトの名無しさん (ワッチョイ c1b3-tte4) [sage] 2018/03/29(木) 15:57:57.60:or4Xspy50 何スレか前にもプロパティの議論あったんだけどね・・ 少なくともgetter/setterを自動生成する、みたいなクソな機能ではないぞ : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/03/29(木) 16:02:08.91:frx7qa9h0 俺もそのとき発言してた ttps://mevius.5ch.net/test/read.cgi/tech/1490917669/683 : デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/29(木) 17:26:54.17:T1PPEJjr0 Builderだけtry-finallyセクション使えたり次元が違う希ガス : デフォルトの名無しさん (ワッチョイ 5be7-Cooj) [sage] 2018/03/29(木) 20:10:56.09:LRHKAKcy0 A.extendWidth(20); それを書くことが便利で必要なクラスだったらそういう操作を作るべきだな : デフォルトの名無しさん (ドコグロ MMa3-PArs) [sage] 2018/03/29(木) 21:38:46.24:1OB4BLGUM あったよ も含めて当時はネイティブコードを吐くC#みたいな感じだった もう少し頑張れるかと思ったけど、Visual Studioの便利さに負けたと思ってる : デフォルトの名無しさん (ブーイモ MMb3-vInS) [sage] 2018/03/29(木) 21:46:54.75:6IJhuxisM カーンを首にしてアプリ側に振ったのが敗因だったな 膨大なdbaseの資産も全く使えなかったのはNetaWareと 同じだった : デフォルトの名無しさん (ワッチョイ d3cb-436e) [sage] 2018/03/30(金) 01:25:11.99:6elBmHqP0 え、違うの? : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/03/30(金) 04:42:18.00:AQ2aJRgB0 違うよ。 デフォルトでのゲッタ/セッタを提供したりすることはあるけども、 で言及している通り「変数に見せかける」機能。 : デフォルトの名無しさん (ドコグロ MMa3-PArs) [sage] 2018/03/30(金) 06:43:57.86:MnRWcQoLM そもそも変数に見せかけると言うプロパティ自体の話とgetter/setterの自動生成の話は全く別物でで比較してる意味がわからん たぶん本人もちゃんと理解できてないんだろうな... : デフォルトの名無しさん (オイコラミネオ MM6b-ePcA) [sage] 2018/03/30(金) 07:46:44.11:QwXbOxz8M 例えば座標なら+=使えた方が楽じゃね : デフォルトの名無しさん (ブーイモ MMab-q1Nq) [sage] 2018/03/30(金) 08:33:24.78:x9Ml4xAFM なんだそういうことか。それも含めて単なる自動生成だと認識してたよ。 : デフォルトの名無しさん (ワッチョイ 4150-W7mk) [sage] 2018/03/30(金) 08:34:01.73:trt/A0j+0 そうやってソフトが重くなって行くわけだな 数値の += なんて軽いと思って何度も呼んだら 実は描画や保存も何度も呼ばれてしまうとか : デフォルトの名無しさん (ワッチョイ 417f-kUw7) [] 2018/03/30(金) 08:42:16.05:u8hlmR9G0 それはプロパティに限った問題ではないな : デフォルトの名無しさん (スップ Sdf3-qGf7) [sage] 2018/03/30(金) 08:45:16.06:+sennHugd プロパティってそれ単体で取り出せるの? それなら使えるな : デフォルトの名無しさん (スップ Sdb3-W7mk) [sage] 2018/03/30(金) 08:52:02.87:HVaF4kSpd 呼ばれる側 : そんな何度も呼ばれるとは思わなかった 呼ぶ側 : 重いとは思わなかった : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/30(金) 09:52:35.47:mPLnga/50 少なくともAdd()なら何かしらの関数を呼んでいることはわかる : デフォルトの名無しさん (ワッチョイ 5be9-VlFK) [sage] 2018/03/30(金) 11:31:23.82:3ziE5qsO0 プロパティでもなんらかの関数が含んでいることはわかるが : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/30(金) 11:45:01.30:mPLnga/50 それがただの変数なのかプロパティなのかは調べるまでわからない : デフォルトの名無しさん (スッップ Sdb3-VlFK) [sage] 2018/03/30(金) 11:57:28.30:27QTfa4qd 調べろよ : デフォルトの名無しさん (ワッチョイ 417f-kUw7) [] 2018/03/30(金) 11:58:36.02:u8hlmR9G0 変数でも演算子がオーバーロードされてる場合もあるからな 結局調べないとダメ : デフォルトの名無しさん (スッップ Sdb3-VlFK) [sage] 2018/03/30(金) 12:01:32.59:27QTfa4qd っていうかいわく、publicな変数は有り得ないらしいし、そういう運用してるなら考えるまでもなくプロパティじゃん : デフォルトの名無しさん (ワッチョイ c1b3-kUw7) [sage] 2018/03/30(金) 15:53:31.37:l98ixrSj0 お前のレスの意味がわからん 実際C#もソースコード公開されてるソフトの改造程度にしか触ったことないんでちゃんと理解してないが getter/setterの自動生成するだけのクソ機能と誤解してる人がこのスレでも前スレでも見られたから を書いただけなんだが というか書き込む前の1〜2レスすら読めんのかお前は : デフォルトの名無しさん (ワッチョイ 1908-kUw7) [sage] 2018/03/30(金) 17:21:54.28:6y8tfNRe0 C++erが通常prvalueで返しているリファレンサを、データメンバにするってことなら テンポラリを作らなくなる分、速度的なメリットはありそうだな # でも、俺はイヤだな # データメンバがドカドカ増えるのがなんか気持ち悪い # 慣れの問題っちゃそうかも知れんが : デフォルトの名無しさん (スップ Sdf3-qGf7) [sage] 2018/03/30(金) 17:39:33.77:+sennHugd 言いたいことがわかった気がする : デフォルトの名無しさん (スップ Sdb3-W7mk) [sage] 2018/03/30(金) 17:42:52.50:HVaF4kSpd やっとかよ : デフォルトの名無しさん (ドコグロ MMa3-PArs) [sage] 2018/03/30(金) 20:19:26.33:MnRWcQoLM だからそんな誤解してるのはお前と同レベルのバカだけだろ w 言語仕様の話とIDEの機能の区別もつかないアホなんて放置でいい : デフォルトの名無しさん (ワッチョイ 5be9-VlFK) [sage] 2018/03/30(金) 20:30:23.19:3ziE5qsO0 自分から絡んで行ってバカ呼ばわりとはこれいかに : デフォルトの名無しさん (ドコグロ MMa3-PArs) [sage] 2018/03/30(金) 20:51:58.09:MnRWcQoLM またバカが絡んできたよ w : デフォルトの名無しさん (ワッチョイ c1b3-kUw7) [sage] 2018/03/30(金) 20:59:28.09:l98ixrSj0 いや、なんか根本的に誤解されてる気がするが C#とかだと、多分プロパティ作ると自動である程度書いてくれるんだろうけど その話じゃなくて「C++におけるpublicなGetXX(), SetXX()が暗黙的に作られる(だけ)」、みたいな誤解 (C#やBuilder知らずに議論をぱっと見するとそういう誤解しがち、俺も以前はしてたが) があるんだよな 説明不足だったかもしれんけどIDEの支援機能の話ではない というか前スレのリンクにあったブログの ttp://ufcpp.net/study/csharp/oo_property.html?key=property#property これが個人的にはわかりやすかった : デフォルトの名無しさん (ワッチョイ 5be7-Cooj) [sage] 2018/03/30(金) 21:21:54.96:FlBD8vqz0 Javaのイメージなのかな? あれはJavaBeansとかいうゴミ規約のせいで本当にGetXX()とSetXX()を作るだけのゴミ機能がIDEに標準装備だったりする : デフォルトの名無しさん (ワッチョイ 5be9-VlFK) [sage] 2018/03/30(金) 21:27:33.97:3ziE5qsO0 まあプロパティある言語触ったことないやつは勉強不足だから無視していいって言うのは一理ある : デフォルトの名無しさん (ワッチョイ 4150-W7mk) [sage] 2018/03/30(金) 21:59:35.93:trt/A0j+0 現状のメンバへの代入や値取得が 暗黙的に作られるgetter/setter プロパティが採用されてもこの辺はなんら変わらないかと : デフォルトの名無しさん (ブーイモ MMab-q1Nq) [sage] 2018/03/30(金) 22:16:15.58:8D6duvwPM お前らの書き込み見ると、プロパティがものすごい大発明なんじゃないかと錯覚するけど 変数のようにかける件を含めても糖衣構文以上のものじゃないだろ。 +=したけりゃそういうプロキシ書けばいい。 : デフォルトの名無しさん (ワッチョイ 4150-W7mk) [sage] 2018/03/30(金) 22:21:10.98:trt/A0j+0 お前らってだれだよ 一人だけだろプロパティ信者 : デフォルトの名無しさん (ワッチョイ 4150-W7mk) [sage] 2018/03/30(金) 22:25:41.11:trt/A0j+0 これ以上言語機能を増やさなくて良い コンパイラが規格に追い付いてなくて互換性が崩れる : デフォルトの名無しさん (ワッチョイ 5be7-Cooj) [sage] 2018/03/30(金) 22:28:08.90:FlBD8vqz0 クソ機能というわけではないが、ものすごく便利というわけでもない あればあったで使うけど、ないならないで困らないし、言語設計として採用するしないの判断はどっちもあり C++は採用しない判断をした その程度の話 : デフォルトの名無しさん [] 2018/03/30(金) 23:12:27.73 実体が関数なら漢らしく見た目も関数にしろよwww 見た目が変数なのに処理が走るとか、見た目が割り算なのに文字列連結するとか変態野郎は死にくされやwwwww : デフォルトの名無しさん (ワッチョイ c1b3-kUw7) [sage] 2018/03/30(金) 23:32:31.76:l98ixrSj0 その辺はC++のコンストラクタ・デストラクタに嫌悪感を示すCユーザーが昔よく言ってた台詞と似てるw 「裏で何が起きてるかわかりづらいから嫌だ」、とかね 別に本気でプロパティ推してるわけじゃないが、いざプロキシクラスで代用しようとするとめんどい ETなんかを仲介するとテンプレートの実体化の数でコンパイラへの負担がデカいし、 メンバ関数の呼び出しをサポートしようとすると継承が必要になるし・・・それなりに問題点はある : デフォルトの名無しさん (スフッ Sdb3-VlFK) [sage] 2018/03/30(金) 23:40:02.53:vpP76l93d 大発明じゃなくて、もはや常識。C++にはないって聞いて最初驚いたもん いやまあたしかになくてもいいんだけど、演算子オーバロードはあるのにプロパティはないって変な言語だわ : デフォルトの名無しさん (スフッ Sdb3-VlFK) [sage] 2018/03/30(金) 23:41:38.85:vpP76l93d それiostremディスってんの? : デフォルトの名無しさん (ワッチョイ d3cb-q1Nq) [sage] 2018/03/31(土) 00:11:17.76:o3PNwIlC0 お前が驚くと凄いことなん? : デフォルトの名無しさん (ワッチョイ d3bd-qsUw) [sage] 2018/03/31(土) 00:12:18.16:aFk+9CH40 はiostreamを擁護する気か : デフォルトの名無しさん (ワッチョイ 2b9a-ePcA) [sage] 2018/03/31(土) 00:19:06.77:iyPH7JTK0 ダイヤモンド継承使われてるんだっけ あれ使ったことないな いらない機能だと思うなら使わないってだけだしプロパティはあった方がらくだと思うけどね 独自拡張でつけてるのもあるし : デフォルトの名無しさん (スフッ Sdb3-VlFK) [sage] 2018/03/31(土) 00:25:31.98:NJ7AGlMvd 凄くないよ すまん。適当書いたけどiostremは擁護出来ねえわ : デフォルトの名無しさん (ワッチョイ 5be7-Cooj) [sage] 2018/03/31(土) 00:47:52.27:C63IJ9vb0 iostreamの<<チェーンが実は最近まで規格上未定義動作だった話は正直呆れた : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/31(土) 01:02:47.99:19OTzhSN0 採択されてもプロパティのアドレスをどうやって取るのかっていうことで標準化委員会で揉めて10年は停滞する : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/03/31(土) 01:48:24.57:nFIfPX7B0 サブオブジェクトがユニークアドレスを取れなくてもいいことを示す [[no_unique_address]] 属性が C++20 のドラフトに入った。 ttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0840r1.html オブジェクトがユニークなアドレスを持つ原則を捨てたわけ。 これを踏襲するなら、プロパティのアドレスは取れないってことにして解決するのが自然で、揉める余地はそんなにないと思う。 実際にアドレスは存在しないわけだし、存在しないものを返しようがないじゃん。 : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/31(土) 02:09:16.31:19OTzhSN0 最初のプロパティの提案がいつかはしらないけど 実際にこれが決まったとして最短で2020年 そこから更に何年かかるのか : デフォルトの名無しさん (ワッチョイ 9368-uaFS) [sage] 2018/03/31(土) 04:29:43.55:O6Ruc86y0 抽象クラス"Super"から派生した子クラス、"A", "B", "C"があったとします。 Super* obj1 = new A(); Super* obj2 = new B(); Super* obj3 = new C(); 訳あって動的に作成したインスタンスobj1〜3を一度deleteしたのち 再び同じ子クラスでインスタンスを作成しようと思います。 obj2がクラスBのインスタンスであることが一目で分からない場合に obj2がクラスBのインスタンスであることを突き止め、一度deleteし、 再度クラスBでインスタンスを作成する方法はあるでしょうか? ちなみに必死に考えて考えついた方法ですが クラスA, B, Cにそれぞれ「私はAクラスです」「私はBクラスです」みたいな 文字列を出力する共通メソッドをpublicで作成し、そのメソッドを実行して 帰ってきた文字列からそれがどのクラスのインスタンスか判別が付くのではないかなと思いました。 決してスマートな方法とは言えませんが・・・ もっとスマートな方法はありますか? : デフォルトの名無しさん (ワッチョイ db0e-uaFS) [sage] 2018/03/31(土) 04:37:13.22:350O8bDz0 ・・・? typeidじゃアカンの? : デフォルトの名無しさん (ワッチョイ 1908-kUw7) [sage] 2018/03/31(土) 05:55:27.21:15qJIIAA0 class B : public Super { public: Super* re_new() override { delete this; return new B{}; } }; : デフォルトの名無しさん (ワッチョイ 5be7-Cooj) [sage] 2018/03/31(土) 06:37:47.25:C63IJ9vb0 単純に &obj.int_prop と書いた時に、この式の型と値をどうするかは難しい問題じゃない? intの一時オブジェクトへのポインタ、intのぬるぽ、int_propのgetterへの関数メンバポインタ、ill-formed どれも問題あると思う : デフォルトの名無しさん (ワッチョイ 4104-2GNe) [sage] 2018/03/31(土) 06:47:39.87:8va89mAu0 プロパティを関数として実装したら関数のアドレスは取れるんじゃないかなぁ。はぁ、実装依存ですか。 : デフォルトの名無しさん (アウアウカー Sadd-LLtt) [sage] 2018/03/31(土) 08:02:21.38:5h07DQhTa 全然スマートじゃないがvisitorパターン使えば? : デフォルトの名無しさん (ワッチョイ 93b3-PArs) [sage] 2018/03/31(土) 09:03:59.00:OaeapR1O0 > 単純に &obj.int_prop と書いた時に、この式の型と値をどうするかは難しい問題じゃない? エラーにしちゃえばいいだろ : デフォルトの名無しさん (ワッチョイ 4150-W7mk) [sage] 2018/03/31(土) 09:14:46.66:HGehdmya0 つまり意識しなきゃならんてことか じゃあ素直に関数にしろよ : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/03/31(土) 09:16:04.32:nFIfPX7B0 一時オブジェクトへのポインタってことにする一択だと思うけどなぁ。 あくまでも「変数に見せかける」、 つまりは、ゲッタの呼出しに構文糖を付けて見かけ上だけ変数 (データメンバ) っぽいって立場を貫かないと、 余計な気を回してもわかり難さが増すだけだよ。 rvalue なのは仕方がない。 : デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/31(土) 09:16:21.25:Nj0xu+770 どうしてアドレスを取りたがるのかよくわからない クラスのメンバ関数だってアドレス取れないだろ : デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/31(土) 09:18:00.18:Nj0xu+770 ああメンバ仮想関数な : デフォルトの名無しさん (ワッチョイ 4104-2GNe) [sage] 2018/03/31(土) 09:18:37.44:8va89mAu0 メンバ関数のポインタ構文が何故あるのですか? : デフォルトの名無しさん (ワッチョイ 4104-2GNe) [sage] 2018/03/31(土) 09:18:44.11:8va89mAu0 あー。 : デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/31(土) 09:22:26.84:Nj0xu+770 訂正しただろ 仮想関数はアドレスが取れないだろ : デフォルトの名無しさん (ワッチョイ 1908-kUw7) [sage] 2018/03/31(土) 09:23:29.95:15qJIIAA0 取れるよ、何言ってんの そのポインタは動的結合までできる優れもの : デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/31(土) 09:25:45.36:Nj0xu+770 出来ないよ 何いってんの : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/03/31(土) 09:26:00.49:nFIfPX7B0 変数に見せかける以上は変数と同じようにふるまうことを期待するってのは普通の要求じゃないか? データメンバに対して操作するテンプレートはプロパティを操作するテンプレートとしても使えて欲しい。 でもまあ充分に「見せかける」ことが出来ないのなら問答無用でエラーになった方がマシではあるかもしれん。 : デフォルトの名無しさん (ワッチョイ 5be7-Cooj) [sage] 2018/03/31(土) 09:41:17.12:C63IJ9vb0 objがlvalueなのにobj.int_propがrvalueになるのはまずいと思うんだよなあ うっかり関数の戻り値でその参照なんか返そうものなら相当わかりにくいバグになる C#とかはその辺の問題どう解決してるのかしらね : デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/31(土) 09:48:31.98:Nj0xu+770 property int count { >>() {return count_ ; } // getter <<(int cnt) {SetCount(cnt):} // setter &() {return &count_;} // address getter }; みたいにアドレス抽出用のメソッドを追加すりゃ良いだけのような気がする : デフォルトの名無しさん (ワッチョイ 4150-W7mk) [sage] 2018/03/31(土) 10:00:37.36:HGehdmya0 コードを減らす為の規格追加でコードを増やす解決法 う〜ん : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/03/31(土) 10:21:02.77:nFIfPX7B0 これは抽象化の話なんだよ。 変数のように見せかけるためには何が必要かって話なの。 : デフォルトの名無しさん (ワッチョイ 1908-kUw7) [sage] 2018/03/31(土) 10:29:50.12:15qJIIAA0 ttps://ideone.com/1J8uwf : デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/31(土) 10:35:19.80:Nj0xu+770 property int count { () {return count_ ; } // getter =(int cnt) {SetCount(cnt):} // setter &() {return &count_;} // address getter ++() {return ++count; } // incrementer } この方がしっくり来るな : デフォルトの名無しさん (スップ Sdb3-W7mk) [sage] 2018/03/31(土) 10:56:40.26:aygih7Tkd 予約語を増やすとどれだけの影響があるか なんて考えたことはないのかな? : デフォルトの名無しさん (スップ Sdb3-W7mk) [sage] 2018/03/31(土) 10:57:47.19:aygih7Tkd まあここはC++相談室 おれが考えた最強言語を語るところじゃない : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/03/31(土) 11:05:17.81:nFIfPX7B0 opaque definition でゲッタを定義できるように拡張すればプロパティ専用の構文を導入する必要なく プロパティを実現できるのではないかと妄想していた。 : デフォルトの名無しさん (ワッチョイ 9334-3URi) [sage] 2018/03/31(土) 11:10:24.41:Nj0xu+770 using count = int { () {return count_ ; } // getter =(int cnt) {SetCount(cnt):} // setter &() {return &count_;} // address getter ++() {return ++count; } // incrementer }; 予約語増やさないならこんな感じに書けなくもない : デフォルトの名無しさん (ワッチョイ 5be9-VlFK) [sage] 2018/03/31(土) 11:21:25.52:Pb+ZodvD0 プロパティの実装の議論までここでするか? Dと同じでいいじゃん : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/03/31(土) 11:23:19.53:nFIfPX7B0 前提が違うものを同じには出来ないよ。 参考にすることはあると思うけど。 : デフォルトの名無しさん (スップ Sdf3-qGf7) [sage] 2018/03/31(土) 12:19:04.21:+mjd8c8id 仮想関数のアドレスが取れないという発言は何だったんだろう : デフォルトの名無しさん (ワッチョイ b37e-YG9/) [sage] 2018/03/31(土) 13:29:05.67:19OTzhSN0 std::pair<Super*,std::string> obj2 = std::make_pair(new B(), "ClassB"); : デフォルトの名無しさん (スップ Sdb3-W7mk) [sage] 2018/03/31(土) 13:32:44.21:aygih7Tkd スレチ 次スレまで引きずるなよ : デフォルトの名無しさん [] 2018/03/31(土) 13:50:16.75 クラスA, B, Cにそれぞれ自分自身のインスタンスを生成するstaticメソッドを用意し、 そのstaticメソッドへのポインタを返す共通メソッドを用意する。 : デフォルトの名無しさん (ワッチョイ d3bd-qsUw) [sage] 2018/03/31(土) 14:23:30.31:aFk+9CH40 リフレクションがある言語でGUIの画面またはユーザーコントロールを作成する際に YSIWYGで作ることをやれるIDEを作りたい、というときに、メンバー関数とプロパティーの2種類あったら便利なのや C++にプロパティー入れたらリフレクションも来るでこれは… もっとも上記課題解決のための技術は10年も前にWPFの登場で丸ごと過去の技術やがな… : デフォルトの名無しさん (ワッチョイ d3bd-qsUw) [sage] 2018/03/31(土) 14:30:32.65:aFk+9CH40 ていうかWPFのコンバーターの書き方とか、メンバ関数に逆戻りやぞ… (IValueConverter.Convert(), IValueConverter.ConvertBack(), IMultiValueConverter.Conver(), IMultiValueConverter.ConvertBack(), ... : デフォルトの名無しさん (アウアウウー Sa45-uaFS) [sage] 2018/03/31(土) 15:43:53.79:UG1yVXDXa リフレクションはゴミとまで言わないけどc++にはいらない機能 : デフォルトの名無しさん (ワッチョイ d180-3UCh) [] 2018/03/31(土) 16:09:17.20:D1vbg0pQ0 リフレクションがあれば死なずに済んだ人もいるだろうに。 : デフォルトの名無しさん (アウアウウー Sa45-uaFS) [sage] 2018/03/31(土) 16:37:26.06:UG1yVXDXa デバッグでリフレクション使うのか? : デフォルトの名無しさん (ワッチョイ d3cb-q1Nq) [sage] 2018/03/31(土) 20:24:42.16:o3PNwIlC0 C++相談室 part135 ttp://mevius.5ch.net/test/read.cgi/tech/1522495206/ もう糞テンプレいらないよね? あと死ね : デフォルトの名無しさん (ワッチョイ 9380-V9Xo) [sage] 2018/03/31(土) 22:27:57.63:u+oLKOIo0 うむごくろう。 : デフォルトの名無しさん (アウアウカー Sadd-LLtt) [sage] 2018/04/01(日) 18:13:20.31:JVL2cf0wa c++のfriendはprivateメンバーすべてにアクセスできてしまうけど特定の変数だけ、もしくは特定の関数だけfriendにする事は可能でしょうか? : デフォルトの名無しさん (ブーイモ MMab-q1Nq) [sage] 2018/04/01(日) 18:43:04.30:nEv6CmIlM ピンプるか、○○って俺の友達の友達なんだぜーにしてしまうか、かなー : デフォルトの名無しさん (アウアウウー Sa45-HAdz) [] 2018/04/01(日) 19:11:40.34:BG5JJopwa pimplイデオムはなんとなくわかるけど、俺の友達の友達は編集したい対象を別のクラスに分けてしまうこと? : デフォルトの名無しさん (ワッチョイ c1f2-kUw7) [sage] 2018/04/01(日) 20:21:44.04:WPbk7cUz0 そういえばシステムハンガリアンはしばしば批判されるのに、pimplのpは批判されているのを見たことがないな。 : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/04/01(日) 21:12:28.11:47FEpc5z0 ttps://www.google.com/search?q=%E5%8D%8A%E5%88%88%E3%82%8A&tbm=isch : デフォルトの名無しさん (ワッチョイ d3cb-q1Nq) [sage] 2018/04/01(日) 22:32:25.37:EwuQ9U5u0 (餃子が (御乱心 (されたぞー))) : はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-kUw7) [sage] 2018/04/01(日) 23:03:08.00:47FEpc5z0 そこは「ハンガリアンじゃなくて半刈りやん」って言って欲しかった。 : デフォルトの名無しさん (アウアウカー Sadd-LLtt) [sage] 2018/04/02(月) 07:54:09.78:t04teqlda いやいやこんなの丸刈りやん : デフォルトの名無しさん (ワッチョイ 19bd-kUw7) [sage] 2018/04/02(月) 09:36:33.18:E1iWIfmB0 YSIWYGってなに? : デフォルトの名無しさん [] 2018/04/02(月) 11:52:25.29 WYSIWYGのtypoなだけやん アスペか : デフォルトの名無しさん (ワッチョイ 19bd-kUw7) [sage] 2018/04/02(月) 12:50:23.03:E1iWIfmB0 訂正だろ? 態度悪いなおまえ : 1001 [] Over 1000Thread このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 72日 3時間 44分 41秒 : 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勢いランキング が作成したアーカイブです。削除についてはこちら 。