1 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 09:05:42.21 ID:mJKRg6iz0.net] 次スレを立てる時は本文の1行目に以下を追加して下さい。 !extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part133 mevius.5ch.net/test/read.cgi/tech/1511509970/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 mevius.5ch.net/test/read.cgi/tech/1509780815/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 09:07:45.45 ID:mJKRg6iz0.net] STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 とかいうエラーが出るんだけどこれってどうすればいいの? #include <stdafx.h> 後死ね。 言葉が悪いな。それで教えているつもりか。 まぁヒントぐらいにはなったな。 うむごくろう。 いつまでこの糞テンプレ張り続けるんだおい ---- テンプレ ここまで ----
3 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 09:24:34.73 ID:i+Y70H5F0.net] 前スレのvectorのsize_tの質問した者だけど 実際gprofでvectorの[]が重い原因になってることを確認してる 次に重い原因がイテレータの比較なんだけど
4 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 09:35:10.31 ID:CFAgCrzx0.net] >>3 > 実際gprofでvectorの[]が重い原因になってることを確認してる どんな確認したのか知らんけど、確認しててあんな質問してるなら単なるバカとしか思えないが...
5 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 09:50:30.10 ID:AVDgMNZq0.net] またトンデモな使い方をしているのだろうな
6 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 11:02:33.41 ID:Bd+LbacS0.net] メモリ帯域が律速になる処理はわりとあるので 大容量のデータを処理してるならおかしくはない キャッシュ効かないメモリアクセスするコストに比べたら整数の拡張など微々たるもんだ
7 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 11:46:34.01 ID:slOCvU7H0.net] >>1 乙 ↓前スレの続き std::vector<double> vec((size_t)1000); ... size_t sz = vec.size(); for (int i = 0; i < (int)sz; ++i) { cout << i << " " << vec[i] << "\n"; } の方がiをsize_tにするよりループ命令の部分が軽量化されることにより早いかも試練(x64では気のせい? およびループ内で他に32 bit演算をやる場合、x64だと全てレジスタ上で賄える可能性が高まるから 速くなるかも試練、 結論: アセンブリコードを確認せよ
8 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 12:06:11.44 ID:slOCvU7H0.net] いやスマン 例が不適切やったわ; ループ内でstd::coutみたいな重量のある関数呼び出しをしたら 「全てレジスタ上で賄える」とか 「キャッシュが有効活用で劇速化」とかも糞も無いな
9 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 12:31:55.30 ID:w1mvJepJ0.net] noexceptってどういうときにつけたらいいですか。
10 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 13:45:44.65 ID:gdCBjjapd.net] >>3 [ ] が問題なら生ポ使えと書いてるんだけど無視?
11 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 13:51:38.35 ID:gdCBjjapd.net] >>8 重量の有り無しの前に 数値の文字列変換がsize_tとintじゃ違うだろ それがなければどっちでも変わらんよ 64bit環境ならレジスタも64bitなんで
12 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 14:00:41.11 ID:gdCBjjapd.net] >>3 ん? プロファイラの確認? だとしたら[ ] が遅いんじゃなくてメモリの読み込みが実際に遅い可能性があるのでは? そもそも、 [ ] が問題になるような小さなループで [ ] の時間を正しく測れるのか? いずれにしろ、生ポと比較してみるのが一番
13 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 14:02:23.47 ID:gdCBjjapd.net] メモリ帯域の問題なら もっと大きな視野で最適化をしないとな 複数ループをくっつけてメモリアクセスを減らすとか 細切れに処理をしてキャッシュを効かすとか
14 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 14:04:10.50 ID:C2bNNCkKM.net] []が問題になるわけ無いだろ。ソースコード見たのかよ。 ナマポで書き直すなんて無意味。抜本的にアルゴリズム見直せ
15 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 14:05:12.48 ID:gdCBjjapd.net] あ、可能性だけで言えば signedよりunsignedの方が速い 32bit から 64bit の符号拡張はコストが微妙にかかることもあるが、 ゼロ拡張はなにもしなくて良いから レジスタの上位32bitは勝手にゼロになる
16 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 14:07:10.18 ID:gdCBjjapd.net] >>14 問題になることもある 君こそソースを見たかな?
17 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 14:50:38.90 ID:CFAgCrzx0.net] >>15 今時のプロセッサでそんな奴見たことないけど? 妄想じゃないなら具体例よろしく
18 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 14:56:00.07 ID:gdCBjjapd.net] >>17 そんなやつって何だ? 符号拡張にコストがかかってゼロ拡張にコストがかからない例ならx86-64がそうだが
19 名前:デフォルトの名無しさん mailto:sage釣 [2018/01/20(土) 19:43:21.88 ID:J+aY78FJ0.net] MOVSXもMOVZXも0クロックでは処理できないと思うんだが ZXが0クロックで出来るってエビデンスはあるのかな? https://stat.ameba.jp/user_images/20180105/17/genten-nippon/2b/2b/j/t02200142_0640041414105871600.jpg
20 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 20:07:30.62 ID:aYLVMpQqM.net] 32bitデータをレジスタに書き込んだら上位32bitが0クリアされることを言ってるんでしょ コスト0って言うのはどうかと思うけど
21 名前:デフォルトの名無しさん [2018/01/20(土) 20:30:37.09 ID:w1mvJepJ0.net] 質問させてください。 以下のコードで push_back 時にコピーコンストラクタが呼ばれます。 ttps://ideone.com/Zodd94 こちらとしては、下のページにあるように、ムーブコンストラクタが呼ばれることを期待しています。 ttps://qiita.com/_meki/items/90f9815a1e899593daa3 なぜムーブではなくてコピーになるのか、教えて頂けないでしょうか。
22 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 20:43:12.42 ID:kYo2uzfm0.net] >>21 ムーブコンストラクタが定義されていないから A(A &&) = default; とでもしておけ。
23 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 20:49:44.91 ID:w1mvJepJ0.net] >>22 ありがとうございます。解決しました。
24 名前:デフォルトの名無しさん [2018/01/20(土) 21:07:26.00 ID:w1mvJepJ0.net] 追加で質問させてください。 コンパイラが自動生成する関数で、noexceptがついているのは ・デストラクタ ・ムーブコンストラクタ ・ムーブアサインメントオペレーター の3つでよろしいでしょうか。 よろしくお願いします。
25 名前:デフォルトの名無しさん mailto:sage [2018/01/20(土) 21:11:18.68 ID:Z4eZ5+gd0.net] 残り3つもデータメンバと基底クラスの同じものが全部noexceptなら付くよ
26 名前:デフォルトの名無しさん [2018/01/20(土) 21:18:07.18 ID:w1mvJepJ0.net] 回答ありがとうございます。 データメンバと基底クラスのそれぞれのデフォルトコンストラクタが全て noexcept なら、 noexcept なデフォルトコンストラクタが自動生成される。 コピーコンストラクタ、コピーアサインメントオペレーターも同上 という理解でよろしいでしょうか。 また、その条件が成立しないときは、>>24 で挙げた3つということになるのですしょうか。 よろしくお願いいたします。
27 名前:デフォルトの名無しさん [2018/01/20(土) 21:36:13.58 ID:w1mvJepJ0.net] >>26 について自己解決しましたので、質問を取り下げます。 ありがとうございました。
28 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 11:30:18.34 ID:LU9Vj3hRM.net] >>16 noexceptなしに = defaultで宣言した場合はどうなるの?
29 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 11:32:32.53
] [ここ壊れてます]
30 名前: ID:LU9Vj3hRM.net mailto: >>28 >> 25の間違いです [] [ここ壊れてます]
31 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 13:25:22.34 ID:XRSBBZxr0.net] もちろん宣言通りになる
32 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 13:32:54.03 ID:LU9Vj3hRM.net] >>30 thx
33 名前:デフォルトの名無しさん mailto:sage [2018/01/21(日) 19:49:20.49 ID:FwsOgvVZ0.net] 記述上 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 なら出来るのだが、こちらは逆に初期化部分で記述が増えるので、 それなら諦めようかな、って感じ。 というわけで回避策を思いつく人がいればお願いします。 何で値型で禁止されているか分かる人も居ればよろしく。
34 名前:デフォルトの名無しさん [2018/01/26(金) 13:51:50.30 ID:duEsoqcC0.net] イテレータでendの一つ前を表すのはありますか。 endからの引き算必須ですか。
35 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 13:58:16.53 ID:SmrT25am0.net] &back()
36 名前:デフォルトの名無しさん mailto:sage [2018/01/26(金) 14:00:31.27 ID:27cZOHeHM.net] >>33 用途に合うかどうか分からないけど rbegin, crbegin
37 名前:33 mailto:sage [2018/01/26(金) 14:14:09.94 ID:duEsoqcC0.net] サンクスです。できました。
38 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 07:12:46.54 ID:ZP0gkUPd0.net] rbeginはちょっとトリッキーな実装になってることがあるから注意
39 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 11:46:50.10 ID:RraDQJG10.net] 実装に依存しないような仕様に沿った使い方をすればいいんでないの? 仕様に合致していない実装ならどうしようもないが。
40 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 19:12:13.06 ID:Boft2e8Ea.net] SHA256のハッシュをkeyにしたmapを高速で扱いたいんだが、 keyのoperator <,>それぞれでmemcmpしてて、多分このせいで性能悪くなってる なんか良い解決策ってないですかね? Linuxのrbtreeと比較すると100万件あたり150msec程度差がついてました
41 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 19:13:43.71 ID:IajdzWB80.net] simd
42 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 19:44:42.49 ID:MtS5alc90.net] unordered_mapにsha256の関数渡せばええやん
43 名前:デフォルトの名無しさん mailto:sage釣 [2018/01/27(土) 20:08:58.78 ID:6QrTsC7zM.net] fpga
44 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 22:07:02.09 ID:bqR9C45e0.net] mapじゃなくてハッシュを実装しろとしか
45 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 22:15:03.18 ID:Im+FAy1Qa.net] >>40 便利そうだと思ったけど、データ構造的にアライメント揃えられないから使えなさそう >>41 ソート済みデータを扱いたいパターンもあるので使えないです コード的にさっくり改善する方法がなさそうなので map諦めてそこだけ完全自作することにしました レスしてくれた方々サンクスです
46 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 22:53:57.64 ID:ZP0gkUPd0.net] Compareの自作で何がいけなかったのかわからないけど解決おめ
47 名前:デフォルトの名無しさん mailto:sage [2018/01/27(土) 23:05:46.83 ID:r2gR5oNyd.net] 赤黒木ってスマートポインタを使って実装できますか? 親を弱参照で書いたらわけわかめに
48 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 01:55:54.91 ID:B1112Jntd.net] ハッシュをソートかあ
49 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 03:22:06.75 ID:vIDP+sWr0.net] コピーしたくないオブジェクトへのポインタ(ていうか全体をシリアライズするの可能性も考えたらindexがマジお勧め)の配列おソートすれば良い そういった実装の詳細はクラスの中に隠すことができる 何のためにC++を使っているのやヽ(`Д´)ノ!!!11!1
50 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 08:17:39.92 ID:abHZXNlp0.net] >>47 なんかモヤモヤするなそれw
51 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 11:41:38.50 ID:/ypN0hd6M.net] >>39 hashは値に対してユニークじゃないけどいいの?
52 名前:デフォルトの名無しさん [2018/01/28(日) 14:41:11.23 .net] そりゃハッシュ衝突用のフィールドくらい作ってるだろうよ 質問にないことは心配しなくていいよ
53 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 15:09:59.60 ID:RaXbFAH70.net] 心配してるんじゃなくてバカにしてるんだよw
54 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 15:44:58.16 ID:C2Jb//yt0.net] バカにしようとして失敗してるとしか見えないけど w
55 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 20:33:36.08 ID:NzqukFwp0.net] Impliment.h class Impliment { public: base; }; Interface.h class Interface {
56 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 20:42:03.84 ID:NzqukFwp0.net] すいません。途中で書き込んでしまいました。 以下のようなクラスを作ったのですが、 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 {} }
57 名前:はちみつ餃子 mailto:sage [2018/01/28(日) 20:56:07.47 ID:Xl/BPHGJ0.net] >>55 「XXの実装とインターフェイスが分かれている」ということをユーザが意識しないといけないのは抽象化の不足だと思う。 分離した形のデザインで開発するのはかまわないけど、ユーザに対してはなるべく隠すのが望ましい。 #include<Implement.h> #include<Interface.h> と書いたヘッダファイルを用意しておく程度のことでもだいぶんマシになる。 (インクルードガードはしておくこと)
58 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 02:50:08.46 ID:gQcv+kbG0.net] >>55 普通は interface.h の冒頭で implement.h をインクルードしておく
59 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 05:39:18.37 ID:+mqzfkB+0.net] >>55 このコードだけならインクルード順が逆でも問題ない。
60 名前:デフォルトの名無しさん mailto:sage [2018/01/30(火) 20:17:26.27 ID:fsahOVUj0.net] レスありがとうございます。 >>56 Implimentは複数あって、ユーザーが選ぶことができる というのを想像して作っていました。 >>57 template化する前はそこでインクルードしていました。 >>58 たしかに、このコードだけでは大丈夫ですね。 正確にはこのコードだけではないので、他に原因があるのかもしれません。 ご指摘ありがとうございます。
61 名前:デフォルトの名無しさん mailto:sage [2018/01/30(火) 21:08:08.01 ID:VkcoBYQV0.net] Implement入れ替えさせたいならユーザーに適当な所で template Interface<MyImplement>; って書かせりゃいいだけじゃないの?
62 名前:デフォルトの名無しさん mailto:sage [2018/01/30(火) 21:19:19.29 ID:Lbh+cCVN0.net] typename imp::base
63 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 11:20:04.76 ID:r6E1M8790.net] 質問ですが 「このクラスはバイト列としてコピーできる」ということを明らかにするために 明示的にコピーコンストラクタを書くとして、 どう書けば処理系に依存することなくデフォルトのコピーコンストラクタ以上の性能になることを保証できますか (もしくは、「このクラスはバイト列としてコピーできる」ということを明示する構文はありますか)
64 名前:片山博文MZ mailto:sage [2018/02/04(日) 11:26:54.06 ID:i7yJvuTcd.net] >>62 MyClass(const MyClass&) = default;
65 名前:はちみつ餃子 mailto:sage [2018/02/04(日) 11:36:31.71 ID:H9FebDBN0.net] デフォルトのコピーコンストラクタはメンバのコピーコンストラクタを起動するので、 そのクラス (に属するオブジェクト) 全体がバイト列としてコピーするわけではない。 trivially copyable class の要件を満たすように書けばバイト列としてコピー可能と保証される。 コンストラクタの書き方だけでは保証できない。
66 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 13:04:56.23 ID:WecC8o2P0.net] memcpyするコピコンをユーザー定義すればええやん
67 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 13:46:35.82 ID:r6E1M8790.net] >>63 なるほど「= default;」のありがたみがわかりた >>64 なるほどそれだと安全性の点でイマイチ… バイト列としてそのままリモートPCに送ったりするクラスに誰かが バイト列としてのコピーが可能でないコードを追加したとしても コンパイラで検出する術が無いっぽいように読める
68 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 13:47:37.01 ID:r6E1M8790.net] 訂正 誤:バイト列としてのコピーが可能でないコード 正:バイト列としてのコピーを不可能にするコード
69 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 13:47:46.54 ID:HBpG+TPK0.net] >>62 std::is_trivially_copyable<T>がtrueになるように書いて https://cpprefjp.github.io/reference/type_traits/is_trivially_copyable.html トリビアル型とは何かは検索して
70 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 13:52:58.38 ID:HBpG+TPK0.net] >>66 なおさらtype_traitsで条件に合わなければコンパイルを失敗させればよい
71 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 14:08:05.83 ID:r6E1M8790.net] >>69 おk
72 名前:はちみつ餃子 mailto:sage [2018/02/04(日) 16:47:05.72 ID:H9FebDBN0.net] >>65 まあ書こうと思えば書けないことはないが、 やった結果に整合性がとれるかどうかは別問題なのでな……。
73 名前:はちみつ餃子 mailto:sage [2018/02/04(日) 17:24:06.38 ID:H9FebDBN0.net] 流れをぶった切って質問するんだけど、 配列の一部をとる参照とかって作れない? 実際にはコンパイルが通らないけど、やりたいことはこんな感じ。 int a[3]; int (&b)[2] = static_cast<int (&)[2]>(a);
74 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 18:06:17.19 ID:B+seqFts0.net] reinterpret_castすれば?
75 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 18:22:52.47 ID:HJ1AdVlZ0.net] ポインタにして剥がせばいい
76 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 18:28:31.26 ID:HBpG+TPK0.net] 配列型はポインタではないので途中からとかない
77 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 18:55:06.41 ID:i/oNqC3f0.net] 一応うまく行ったけど規格で保証された挙動かどうかはよくわからない https://ideone.com/wVzc6b
78 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 19:14:07.38 ID:NcR26d4z0.net] でもポインタにしてしまうと困るシチュエーションなんてありうるの? マクロの中でsizeofしてるとか?
79 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 20:30:26.18 ID:WecC8o2P0.net] >>71 意味わかんねえ どーゆーこと?
80 名前:デフォルトの名無しさん mailto:sage [2018/02/05(月) 23:20:37.74 ID:y5vbQcAP0.net] メンバのコピーコンストラクタを起動すべきところをmemcpy()しかしない手製コピーコンストラクタで済ませようとしたら破滅が訪れる MyClass(const MyClass&) = default; なら勝手にやってくれるのでその心配が無いので安心
81 名前:デフォルトの名無しさん mailto:sage [2018/02/05(月) 23:28:20.73 ID:QTKEhMlZ0.net] しかしまあ >>68 なんていう便利なモノがあるとは フラフラこういうスレ読んでるのもためになるなあ
82 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 07:54:17.35 ID:CtmFRYuD0.net] >>79 >>62
83 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 08:05:48.85 ID:cp/uvOeq0.net] >>62 処理系に依存することなく「
84 名前:保証」なんて出来ない 以上 [] [ここ壊れてます]
85 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 08:27:38.08 ID:rGp9SuaC0.net] >>63 で解決している もしくは以下への回答も>>69 で出ている
86 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 09:14:20.61 ID:CtmFRYuD0.net] バイト列コピーが = default; なわけねーだろアホ
87 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 11:45:28.85 ID:rGp9SuaC0.net] よく読め バイト列コピーでokの保証は>>69 遅くならないコンストラクタの書き方が>>63
88 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 11:48:04.39 ID:rGp9SuaC0.net] そもそも「どうコンストラクタを書けば」ってのを質問してるんで バイト列コピーでコンストラクタを書けってのは単に>>65 の珍解答に過ぎない
89 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 11:51:41.68 ID:CtmFRYuD0.net] すまんが日本語でたのむ
90 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 11:54:37.03 ID:rGp9SuaC0.net] 元の質問>>62 は ・処理系に依存せずデフォルトより遅くならないことが保証されているコンストラクタの書き方 もしくは ・バイト列コピーでokと明示する構文 だろ。 前者は>>63 後者は>>68-69
91 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 12:36:57.61 ID:CtmFRYuD0.net] 元質問: デフォルトのコピーコンストラクタ以上の性能 おまえ: デフォルトより遅くならないこと よく読めをそのまま返す
92 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 12:57:03.34 ID:bHMYZ9Vj0.net] 以上っていうのは等しいかまたはそれを越えるという意味だぞ
93 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 14:01:35.47 ID:rGp9SuaC0.net] そもそも memcpy は前者の性能保証も後者の仕様の保証もどちらも満たしてない 仕様が保証されてるなら多分性能的に大丈夫だろうという程度 間違いを認めると死ぬ病気なんだろうからもうこれ以上は言わない。
94 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 14:38:54.29 ID:CtmFRYuD0.net] バイトコピーでmemcpyより高性能な手段を1つでも例示したらどうなんだ > 間違いを認めると死ぬ病気なんだろうから ああ、おまえがか
95 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 18:18:02.35 ID:cp/uvOeq0.net] https://stackoverflow.com/questions/28623895/why-is-memmove-faster-than-memcpy
96 名前:62 mailto:sage [2018/02/06(火) 22:02:19.27 ID:MckGyr3K0.net] memcpy()より速いコピー手段Xが仮にあったとして 論理的にmemcpy()で済むケースについてコンパイラが提供する デフォルトのコピーコンストラクタがコピー手段Xにならない理由がわからん… 個人的には「=default;」と書いたら最高性能なんなら毎回手でmemcpy()とか書きたくないカンジ
97 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 22:06:49.77 ID:CtmFRYuD0.net] >>94 class A { public: A() {} A(A const&) { std::cout << "aho"; } }; class B { public: A a; B() = default; }; int main() { B b, c = b; //this will call you. }
98 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 22:09:42.68 ID:MckGyr3K0.net] >>95 は「論理的にmemcpy()で済むケース」では無いからちげう
99 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 22:29:22.47 ID:CtmFRYuD0.net] だから日本語でたのむって言っただろ
100 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 22:29:24.08 ID:MckGyr3K0.net] どうした? 訂正はよ
101 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 23:07:57.82 ID:hdfY5rL3M.net] 間違いを認めて・・・死んだのか?
102 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 23:21:41.18 ID:MckGyr3K0.net] 仕方ないので漏れが訂正するわ; 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/ 漏れの国語力ではようわからんが、さすがに多分>>84 は間違いなんジャマイカ、
103 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 23:34:18.80 ID:Ur4dB7lv0.net] Cから来た連中ってどうしてmemcpyやmemset使いたがるんだろうな
104 名前:はちみつ餃子 mailto:sage [2018/02/07(水) 04:09:18.59 ID:OAPGz/K+0.net] >>76 reinterpret_cast でなければ通らないときはだいたい駄目なときやわ。
105 名前:はちみつ餃子 mailto:sage [2018/02/07(水) 04:
] [ここ壊れてます]
106 名前:22:37.75 ID:OAPGz/K+0.net mailto: >>100 「default がバイト列コピーとは『限らない』」という意味で >>84 は真。 [] [ここ壊れてます]
107 名前:デフォルトの名無しさん mailto:sage釣 [2018/02/07(水) 05:00:09.29 ID:1UF8v8gcM.net] 開始アドレス、終了アドレス、サイズが64bit等で割り切れれば バイトコピーより早いコピーはあるだろうね
108 名前:デフォルトの名無しさん [2018/02/07(水) 07:27:28.65 .net] 頭のいいコンパイラなら勝手にベクトル処理とかしてくれるんじゃないの? 知らんけど
109 名前:デフォルトの名無しさん [2018/02/07(水) 22:28:51.20 ID:MTpdY7NJ0.net] "!"!"!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>>>41 .3q}}}>1.2<0 .3φTALHOSI"0">>>105 .10<1.235<1.2>51≠52===55.632>V="E=0.835"of"1.32","632",0.683,1.end {
110 名前:片山博文MZ mailto:sage [2018/02/10(土) 19:52:35.19 ID:x9I4Wn6Pd.net] C++では、 int i; for (i = 0; i < 9; ++i) { ... } が、 for (int i = 0; i < 9; ++i) { ... } って書けるのは知っているだろう。( )の中で、変数を宣言できる。 だが、ifやwhileの( )の中で、変数を宣言できることを知らない人は多い。
111 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 04:31:12.99 ID:9irhhPDg0.net] C++17では if ( auto v = n; conditions ) { ... } が可能になるし、これからは広がってくれるかのう
112 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 06:11:03.22 ID:l3GMmVaq0.net] >>108 これホント待ち遠しい
113 名前:デフォルトの名無しさん [2018/02/11(日) 17:00:15.07 ID:RGzNlubj0.net] それほど待ち遠しいか?
114 名前:デフォルトの名無しさん [2018/02/11(日) 17:27:44.93 ID:QA9xO9uU0.net] 待ち遠しくない
115 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 17:34:07.64 ID:A61Ds/EIM.net] for( ) の制御変数はそのループでしか使わないことが多いから意味あったけど、if( ) でそんなケースはまれだしなぁ あれば使うけど待ち遠しいって言うほどじゃない気がする
116 名前: mailto:sage [2018/02/11(日) 17:36:34.68 ID:bT0HWvJB0.net] 理想主義的な文法ですが、実効性はあるのか疑問ですね
117 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 17:40:12.67 ID:KWDwqk940.net] 一瞬意図が分からなかったが ()の中が;で区切れるという話?
118 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 17:41:52.24 ID:rD0gl3AiM.net] dynamic_castとの組み合わせで使うとかどうよ
119 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 19:11:10.58 ID:av7bQMHG0.net] 結構あると思うけどね if(DWORD err = GetLastError(); err != NO_ERROR) この場合NO_ERRORが0だって分かってるから if(DWORD err = GetLastError()) で済むから無意味だけど
120 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 19:17:28.82 ID:yo2OB3cP0.net] >>116 前者の方が意図が明確だし意味はあると思う
121 名前:デフォルトの名無しさん [2018/02/11(日) 20:06:43.52 .net] >>116 >if(DWORD err = GetLastError(); err != NO_ERROR) 普通こうやろ if((DWORD err = GetLastError()) != NO_ERROR) 変数宣言は少しは意味あるかもしれんが(Perlと同じことができるってこと) 複文書けるのは特にメリット感じないわ
122 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 20:41:29.80 ID:Ag9E1Urq0.net] それ通らんよ こうだろ DWORD err;
123 名前: if((err = GetLastError()) != NO_ERROR) if内でしか使わないerrが外部に漏れてるのがよろしくないってこと [] [ここ壊れてます]
124 名前:デフォルトの名無しさん [2018/02/11(日) 20:56:03.30 .net] >>119 それが通るという変更だと思ってたわ こう書けるPerlのほうがまだ優位性あるね if((my $err = GetLastError()) != NO_ERROR)
125 名前:デフォルトの名無しさん mailto:sage [2018/02/11(日) 22:10:23.49 ID:p+z832PL0.net] if(init ; expr)だと初期化と式が関連していなくてもいいので>>120 とは違う構文になる だからこんなのでもよい 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; }
126 名前:デフォルトの名無しさん [2018/02/12(月) 12:22:30.52 ID:sATukCOa0.net] Cでは名前空間っていうのをすごい扱っていた気がするんだけどC++は名前空間扱うことってないの? 一つのアプリケーションも完成させたことがないど素人の質問ですまんが
127 名前:デフォルトの名無しさん mailto:sage [2018/02/12(月) 12:43:48.54 ID:qekpeHDJ0.net] >>122 まずは"C"の入門書を読んで、何を見間違えたのかはっきりさせてからにしようか。
128 名前:デフォルトの名無しさん mailto:sage [2018/02/12(月) 14:08:57.84 ID:sGdsmrZD0.net] 初心者スレに池
129 名前:デフォルトの名無しさん [2018/02/12(月) 20:44:41.93 ID:gfcybQxo0.net] >>122 気のせい。
130 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 00:10:36.10 ID:YGwN9DGw0.net] >>122 Cにnamespaceは無いだろ
131 名前:はちみつ餃子 mailto:sage [2018/02/13(火) 17:30:20.31 ID:tUR5ZBgZ0.net] 構造体タグと型名の名前空間が分かれているといったような意味での名前空間は C に有るが C++ では構造体タグはそのまま型名としても使えるし、そういう意味での名前空間の話かな?
132 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 17:45:08.06 ID:a1RYP/Gm0.net] こんな名前空間もあるね int x; int main(void) { x = 1; int x; x = 2; { int x; x = 3; } return 0; }
133 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 17:55:17.58 ID:Xr6xvVy+M.net] それはスコープでは
134 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 18:15:03.36 ID:a1RYP/Gm0.net] 変数だよ 代入でもあるね
135 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 20:09:02.02 ID:NNOtJgpO0.net] 謎すぎワロタがそこから上のスコープのxを参照してくれ
136 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 20:19:22.41 ID:Za/EZbH7M.net] ブロックって言ってる
137 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 21:49:01.90 ID:a1RYP/Gm0.net] アホばっかり がっかり
138 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 12:08:37.28 ID:Sgd3BwBT0.net] std::mapのように文字列や構造体をキーにした高速アクセスができて、 要素の数が一定数を超えたらLRU形式で勝手に削除してくれる、 キャッシュのような機能を実装したいのだけど、 C++でそのような仕組みを作れるクラスはないですか?
139 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 17:00:44.45 ID:GbCJk+7h0.net] 自分で実装するならどうにでもなるだろ そのための道具は全て標準で揃っている
140 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 18:15:51.96 ID:6url8MQd0.net] バックグラウンドならスレッド使うしかないんじゃないかな
141 名前:デフォルトの名無しさん [2018/02/15(木) 19:13:27.39 ID:CSnzpiZpM.net] C++のプログラマーって性格ねじ曲がってるなあ 初めてGo応援したくなったわ
142 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 19:34:35.63 ID:95vLe5Bi0.net] >>137 どんな点が、性格悪い、と思わせるのですか?
143 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 20:03:21.73 ID:qihnyYvs0.net] それだよそれ
144 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 21:14:35.68 ID:MoAPifjS0.net] C++は多分チューリング完全だと思う
145 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 21:20:32.50 ID:6nYos/bmM.net] >>136 要素数が閾値を超えるのは要素が追加される時だからその時に古い奴を削除すりゃいいだけじゃね?
146 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 23:50:52.95 ID:fG1U9Z3qM.net] >>135 簡単で良いのでサンプルコード書いてもらえませんか?
147 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 00:43:14.82 ID:uaG+5sVQ0.net] >>135 じゃないけどシンプルにいくなら { map<key,value> data; // 本来のデータ map<key,list<key>::iterator> lruindex; // list<key> lrulist; // LRUリスト ... // mapと同じインターフェイス } みたいなクラスで要素の追加・削除・参照とかの時にLRUリスト見て処理すればいい
148 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 03:16:29.76 ID:DpsRPWWQ0.net] 辞書・線形リスト・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
149 名前:デフォルトの名無しさん [2018/02/16(金) 04:31:51.17 .net] >>144 > # ary は、hash に追加・アクセスした順 参照のたびに最後尾に追加しなおすの?
150 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 06:27:04.53 ID:HICjIKnm0.net] プログラムを作っていて困っています。 プログラム動作環境、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\
151 名前:144 mailto:sage [2018/02/16(金) 07:56:00.35 ID:DpsRPWWQ0.net] >>145 >>134 で、LRU と書いてあるから、Hash に追加しようとした度に、 すでに存在する場合でも、配列の最後尾に追加しなおした どういう意味か、正確にはわからないけど
152 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 08:03:01.53 ID:TOIQut300.net] >>146 explorer.exeへのショートカットを作ってプロパティで作業ディレクトリを指定するか、 COMでIShellLink::SetWorkingDirectoryを使って同じことをするあたりか?
153 名前:134 mailto:sage [2018/02/16(金) 09:56:21.20 ID:+b2iJMK40.net] みなさんありがとうございます。 std::mapにLRUや最大要素数の仕組みを持たせた派生クラスでも 無いかと思ったのですが、標準ではやっぱり無いですか。 >>143 のように、std::mapをメンバの一つに持たせた独自クラスを 一から作っていくことになるんですかね。
154 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 10:11:55.71 ID:JoalkiMd0.net] amazonランキングの謎を解く とか言う本でmove-to-frontを見た 本の紹介「Amazonランキングの謎を解く」 www.kenkyuu.net/whatsnew/2011/08/book2011-08-01.html >「move-to-front規則」(最後に売れた順に並べる、つまり、注文のたびに1位にジャンプする) Move To Front - Wikipedia https://ja.wikipedia.org/wiki/Move_To_Front
155 名前: [] [ここ壊れてます]
156 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 10:54:10.09 ID:TOIQut300.net] ageだね
157 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 14:25:37.67 ID:UjPhOEUu0.net] >>149 「c++ lru map」でググったか? いくつかサンプルになりそうなコードが見つかるんだけど
158 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 18:05:58.99 ID:GGXfeEqkM.net] 江添さんのC++17本予約しようかな
159 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 18:26:06.12 ID:waI0am5S0.net] 予約しなくても売れ残るからいつでも買える
160 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 20:04:35.13 ID:1Lr9lxEpa.net] C++を勉強しようと思ってる者ですが書籍を探しております。Cはある程度書けるのでそれを前提とした書籍が欲しいです
161 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 20:33:50.33 ID:Rc+MuzY40.net] C++ クイック入門&リファレンス プログラミング言語C++ 第4版
162 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 20:36:34.10 ID:9b60nRDg0.net] >>155 C++11 以前だが accelerated c++, ここでフォローするよ
163 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 20:37:11.23 ID:TOIQut300.net] 禿4は俺も推奨する C++11の良本だ
164 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 21:09:12.34 ID:+EaaPhKWa.net] めっちゃ高いけどその価値あるのね
165 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 21:46:03.21 ID:5AmFsIq1M.net] こっちはフッサフサやでhttps://images-na.ssl-images-amazon.com/images/I/51fYzbYoXFL._UX250_.jpg
166 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 22:03:34.89 ID:qDhjnryl0.net] 誰がハゲやねん
167 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 09:43:48.64 ID:Lqib7/b9F.net] 以下のように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; }
168 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 09:51:35.08 ID:mykV+fTk0.net] delete psz2なんてしちゃだめconst関係ない
169 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 10:21:38.22 ID:4SqFrjwY0.net] 何故stringそのものじゃなくて内部データをdeleteしようと思ったのか newで確保した配列じゃないからdeleteはできない stringの内部データは静的な配列と動的な配列を組み合わせて表現されている mscvの場合先頭16文字はchar[16]でそれ以降は動的な配列に入るようになっている psz[0]のアドレスはchar[16]の先頭アドレスなので当然deleteできない msvcはdeleteに失敗しても落ちないのかな
170 名前:デフォルトの名無しさん [2018/02/17(土) 10:47:53.57 ID:IU1gsQgu0.net] >>155-159 本格的な本なら、ロベール、ハーバート・シルトの独習 軽めの本なら、柴田 望洋、林 晴比古、猫
171 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 11:22:13.08 ID:++v6vSjK0.net] ハンガリー人まだ絶滅してないのか。 stringはnull terminatedでないからpszはおかしい。 psz2もnull terminatedの保証がないからc_strを使うべき。 うまくいったらstrdupも調べとこうな。
172 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 11:25:45.81 ID:szUqPRvW0.net] >>162 char* psz2 = &(*psz)[0]; って char* psz2 = psz->c_str(); と同じなのかな? いずれにせよ delete psz; は出来る(するべき?)だけど、 delete psz2; は出来ないんじゃないかな。
173 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 11:30:29.43 ID:mykV+fTk0.net] 必要ないところでnew/delete使う人は根本からして
174 名前:何も分かってない [] [ここ壊れてます]
175 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 15:18:23.73 ID:YAgvIyFy0.net] >>162 お前はstringがただの配列だと思っているのか? このトンチキ野郎!
176 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 16:50:38.35 ID:Q4Uv6cZz0.net] >>162 弁護士の唐沢です しっかり「char* const」と「const char*」の違いを認識しなさい const char*は参照先の定数を変更しない事を保証する宣言であり、char*は参照先の定数を変更できる為、const char*で保持するアドレスをchar*にコピーする事は言語仕様により禁止されています。それは分かるよね? 最初に宣言したポインタを間違えて別アドレスで上書きしないようにconstで固定したいのなら、char* constを使うようにしましょう。とりあえずとりいそぎ
177 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 17:22:58.60 ID:0j+aLKWi0.net] >>162 strdupという手があるが何がしたいのか今一つ分からない const char* asdf = "asdf"; char *p = strdup(asdf); std::cout << p << std::endl; delete p;
178 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 17:31:15.32 ID:CLg9GPlRM.net] >>170 それ誰に指摘してんの?とりいそぎ。
179 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 17:34:22.09 ID:4SqFrjwY0.net] >>167 データは連続しているので同じになる 16文字まではスタックを使い、それ以上の長さになるとヒープにコピーされる 実装ではメンバの配列には何かしらのエスケープ文字が入る ちなみにmsvcでは実装の都合上free(&str[0])で強引に解放できる
180 名前:173 mailto:sage [2018/02/17(土) 17:49:08.26 ID:4SqFrjwY0.net] 補足 スタックとヒープを使い分けるかどうかは実装依存 gcc、clang、msvcでは行われている したがって短い文字列でnewを避けるためにstringを使わないというのは意味が無い
181 名前:デフォルトの名無しさん [2018/02/17(土) 18:06:03.81 .net] >>171 strdupで確保した領域をfreeでなくdeleteするのは正しいの?
182 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 18:09:26.31 ID:Lp1rq1Kt0.net] 良いみたいだ 中でmallocで確保している
183 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 18:10:04.88 ID:Lp1rq1Kt0.net] 違う、freeで開放する
184 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 18:14:21.37 ID:Q4Uv6cZz0.net] >>175 弁護士の唐沢です mallocとdeleteは併用厳禁です。freeを使用してください
185 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 18:18:24.62 ID:DOQJ47ER0.net] 昔から気になってるんだが「解放」だよね...
186 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 18:25:00.27 ID:Lp1rq1Kt0.net] そうでした、ごめんね
187 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 18:25:45.10 ID:JVoP/9zU0.net] >>176 良くねえだろ ぼけ >>179 開放はpublic的なニュアンスだよな
188 名前:はちみつ餃子 mailto:sage [2018/02/17(土) 18:45:39.74 ID:uBckbaXI0.net] >>162 ぶっちゃけた話、 strcpy が一番短いと思う。
189 名前:デフォルトの名無しさん [2018/02/17(土) 18:59:50.35 .net] >>182 strdup という答えが出てるのに何言ってるの?
190 名前:はちみつ餃子 mailto:sage [2018/02/17(土) 19:05:58.96 ID:uBckbaXI0.net] >>183 strdup は C++ の仕様の範囲内ではないので……。 POSIX と MSVCRT に有るからほとんどの場合に十分といえば十分なのかもしんないけど。
191 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 19:07:20.59 ID:u7LZaTzx0.net] >>166 接頭辞を見ればデータ内容の属性がワカルというメリットは他に代え難い ttp://local.joelonsoftware.com/wiki/間違ったコードは間違って見えるようにする あといちいちthis->xと書くよりも、すすんでm_xと書きましょう
192 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 19:21:01.63 ID:u7LZaTzx0.net] strdup()だと明示的に開放コードをどっかに書かなくてはならなくて必ず忘れるので せっかくC++なのでスマポ的にwrapすると良いと思う
193 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 19:37:41.81 ID:JVoP/9zU0.net] ホワイトボックスなCでは許せるが ブラックボックスなC++の流儀には全く合わない それがstrdup
194 名前:167 mailto:sage [2018/02/17(土) 19:53:11.68 ID:szUqPRvW0.net] >>173-174 教
195 名前:えてくれてありがとう。 返されるアドレスは等しい値なのか、という単純な質問だったんだけど、 読み直してみたら分かりにくい質問文だと思っていた次第。 それにしても &(*psz)[0] って結構ややこしいのね。 オーバーロードされた[]演算子が返すcharへの参照、 に対してアドレス演算子&を作用させた結果、て感じかな。 [] [ここ壊れてます]
196 名前:162 mailto:sage [2018/02/17(土) 20:37:30.76 ID:uaRb1j8RM.net] すみません、たくさんレスありがとうございます。 _strdupにしてみたら期待の動作ができました。 ありがとうございました。
197 名前:162 mailto:sage [2018/02/17(土) 21:27:34.68 ID:uaRb1j8RM.net] また質問してすみません。 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; }
198 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 22:11:53.16 ID:IU1gsQgu0.net] (T *&) そもそも、ポインタ・参照を、同時に使えるのか?
199 名前:片山博文MZ mailto:sage [2018/02/17(土) 22:23:52.63 ID:EwTJGG8Pd.net] new hoge()は変数じゃないから、代入できない。
200 名前: mailto:sage [2018/02/17(土) 22:35:58.53 ID:I0BNlfaX0.net] >>165 独習C++ はいいですね、特に演習問題「std::stringを再実装する」を絶賛します これが書けるようになったらC++初級者をかたってもいいかもしれない、もしかすると解答は載ってなかったかもしれないけれども
201 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 22:35:58.70 ID:++v6vSjK0.net] >>185 どこから引用したのか知らんけど、そのページ読んでないだろ… システムハンガリアンはまるで役に立たないって書いてあるぞ。
202 名前: mailto:sage [2018/02/17(土) 22:43:42.94 ID:I0BNlfaX0.net] >>194 (システム)ハンガリアンってそんなに悪いものなんですかねえ いや、win32api がバンバンハンガリアンしているので、そんなもんか、と思っていましたが
203 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 22:51:12.84 ID:++v6vSjK0.net] >>195 OOPともTMPとも型推論とも相性が悪いからね。 MS自身ももう使うなって言ってる。
204 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 22:52:19.16 ID:YAgvIyFy0.net] 頭悪いヤツが多様するハンガリアン
205 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 22:54:25.25 ID:YAgvIyFy0.net] 嫌いだからハンガリアン意地でも使わなかった dwやらszやらせっかくのフリーフォーマッとが台なしだよ
206 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 22:59:56.16 ID:Q4Uv6cZz0.net] フリーフォーマットはクソコードの温床ナリよ
207 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 23:03:12.11 ID:4SqFrjwY0.net] 型を変えるたびに変数名も変えるのか ごくろうやな
208 名前: mailto:sage [2018/02/17(土) 23:08:35.57 ID:I0BNlfaX0.net] >>191 それは「ポインタ変数の参照」で、たしか便利に使えた気がしますが… 明日にでもちょっと書いてみます、今日は疲れました…
209 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 23:22:18.45 ID:2kmwzB0g0.net] >>195 システムハンガリアンは弊害ばかりだろうけど、アプリケーションハンガリアンは適切に使えば有益だよ。
210 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 23:25:09.87 ID:4SqFrjwY0.net] mとかいらなくねってなって削ったら_から始まるようになった
211 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 23:38:55.74 ID:u7LZaTzx0.net] データの属性としてサイズとか型そのものを明示したいときはシステムハンガリアンするしかないし、 よってWIN32APIがシステムハンガリアンを使って定義されるのは全く正しい 問題なのはアプリケーションハンガリアンすべきときと システムハンガリアンすべきときが区別できない香具師が適当に使うと 被害甚大だということやがな…
212 名前:デフォルトの名無しさん [2018/02/17(土) 23:41:05.97 ID:YmD9lIL
] [ここ壊れてます]
213 名前:j0.net mailto: 今時システムハンガリアンは無いだろ 20年前で時間が止まってるのかよ [] [ここ壊れてます]
214 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 23:42:44.53 ID:u7LZaTzx0.net] >>205 なぜシステムハンガリアンが有り得ないのかkwsk DWORDを渡すABIがある日突然気まぐれにUSHORTに変わったりしたら困りはしまいか
215 名前:デフォルトの名無しさん [2018/02/17(土) 23:49:32.45 ID:YmD9lILj0.net] ググればいいだろ 積極的批判 システムハンガリアンを使っているソースコードを修正してデータ型を変更した際、同時に変数名も変更するコストがかかる。変更を怠ると、たちまち不整合となり、保守の障害となるだけで一利もない。 C++やC#のような言語では型付けが存在するためにシステムハンガリアンを使用することによる利点はない[3]。 移植性を阻害する。 総称型、メタプログラミングとの相性が悪い。 消極的批判 いわゆる良書と呼ばれるようなC++本で、現在[いつ?]システムハンガリアンを採用している例が皆無。 かつてWindows API/MFCにおいてハンガリアンを全面的に採用していたMicrosoft自身が、.NET Frameworkではハンガリアンを禁止[1]している。
216 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 23:52:28.19 ID:YEFSbrC50.net] 申し訳ないがコピペディアからのウィキペはNG
217 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 23:54:40.85 ID:4SqFrjwY0.net] 型なんてマウスオーバーなりすれば表示されるだろ 変数名に書いておかなきゃわからないとかメモ帳で書いてるのかよ
218 名前:はちみつ餃子 mailto:sage [2018/02/18(日) 00:10:56.39 ID:OOIPfNvY0.net] >>190 デリータはポインタが指す先のリソースを後始末するのが仕事であって、 ポインタが無効になるという処理は unique_ptr の側でやってくれるので、 ヌルを代入する必要はない。 むしろ unique_ptr 内で管理しているものをデリータが勝手に弄るのは好ましくないので、 参照で受けるのはやめてさしあげろ。 私なりに仕様を読んでこの場合をエラーにする根拠は発見できなかったが、 エラーになってくれる方がありがたい場面だと思う。
219 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 00:16:38.53 ID:Ct2k6iqr0.net] デリータに渡されるのは左辺値と限らないからだろう。
220 名前:はちみつ餃子 mailto:sage [2018/02/18(日) 00:25:54.07 ID:OOIPfNvY0.net] N3337 だと 516 ページの説明がデリータの要件だと思うんだけど、 デリータ d の型が D で ptr の型が unique_ptr<T, D>::pointer のとき式 d(ptr) が valid であることと書いてあって、 ptr が rvalue か lvalue かってのは特に指定がない。 (どこかに書いてあったりする?) この説明で言ってる ptr が変数名なのだとしたら暗に lvalue とほのめかしてるようにも思えなくもないし、よくわからん。 わからんことは避けて通りたい。
221 名前:はちみつ餃子 mailto:sage [2018/02/18(日) 00:30:57.46 ID:OOIPfNvY0.net] 私なりの見解としては未定義だと思ってる。 未定義ならばやったらエラーになる方向にしてくれる方がありがたいという思い。
222 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 00:35:36.09 ID:ju8BsRCFM.net] >>206 ABIにシステムハンガリアン関係ないだろ… APIを指してるとして、呼び出し側はリファレンスマニュアルなりIDE機能なりを利用して引数の型情報も システムハンガリアンが付いている仮引数名と同時に参照しているはずだよね?情報重複してるけど本当に必要? 仮引数名のシステムハンガリアンの有無に関わらず、APIのシグネチャは用意に変更してはならないものだけど、 そもそも仮引数名はシグネチャじゃないからシステムハンガリアンがついていたって何の保証にもならないよ?
223 名前:はちみつ餃子 mailto:sage [2018/02/18(日) 00:51:32.90 ID:OOIPfNvY0.net] 重複する情報をコンパイラの支援なく一致させ続けることが出来るだろうか。 いや、できない。 って話よね。 まあ世の中にはそういうのを検査するツールとかもあるんだろうけどさぁ、 そういうツールを導入できる環境ならまともな IDE だって使えるだろう。
224 名前:162 mailto:sage [2018/02/18(日) 08:06:35.40 ID:F3zIry6ZF.net] >>210 >>211 レスありがとうございます。 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 }
225 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 12:41:44.81 ID:OWXn9djh0.net] >>207 藻前はレスをきちんと読んでいないのではないか >システムハンガリアンを使っているソースコードを修正してデータ型を変更した際、同時に変数名も変更するコストがかかる。(>>207 ) に直接対応する元レス>>206 は、 >データの属性としてサイズとか型そのものを明示したいとき(>>204 ) について述べているのでデータ型変更時のコストを言い立てても批判にならない 消極的批判については、アプリケーションハンガリアンすべきときと システムハンガリアンすべきときが 区別できない香具師の的外れな批判がクソウゼーからそうなったのかもしれん、 (ちな両者を区別できない香具師への警戒も>>204 で言及済み
226 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 12:42:38.82 ID:OWXn9djh0.net] >>214 十分賢いIDEが人間のミスを完璧に排除してくれるんならそうかもしれんが システムハンガリアンをしてはいけないという積極的理由にはやはりならないのであった それとも「間違ったコードは間違って見えるようにする 」(>>185 )の効能を全否定する? APIの定義は変わらなくとも、それを利用するソースコードがころころ変わり得るわけで、 byStrLength にある日だれかがDWORD型の値を突っ込んだとしたら… こういうケースを考えたら、「接頭辞を見ればデータ内容の属性がワカルというメリット(>>185 )」は ありえないぐらい賢いIDEでも使わないと他に代え難いと思うがどうか、 >>198 >嫌いだからハンガリアン意地でも使わなかった おk ようやく建設的な議論に着手できる、
227 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 13:01:54.53 ID:Tc3/Tap60.net] あり得ないくらいバカなプログラマのことなんか考慮してない
228 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 13:02:14.72 ID:hSV7DJYb0.net] マウスオーバーで変数の型を確認できたり、縮小変換に警告を出してくれたりする程度のありふれた機能が、ありえないぐらい賢いとな お前さんはメモ帳でコーディングしてるのか
229 名前: mailto:sage [2018/02/18(日) 13:06:54.12 ID:AAhzNgFK0.net] >>220 emacs にもそんな機能がほしいと思うことがあります
230 名前:デフォルトの名無しさん [2018/02/18(日) 13:20:53.92 ID:y51LwXumd.net] システムハンガリアンでミスを減らせるなんて事はない むしろ害悪
231 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 13:27:53.30 ID:Tc3/Tap60.net] >>221 俺のemacsには搭載されてるんだが 環境構築もプログラマの腕のうちだからな
232 名前:はちみつ餃子 mailto:sage [2018/02/18(日) 13:30:05.77 ID:OOIPfNvY0.net] >>221 有るよ。 irony-eldoc や company-mode を入れろよ。 Emacs こそ最強の IDE だろうが。
233 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 13:38:55.48 ID:R2RwPqEs0.net] 今時システムハンガリアンを使うやつはあり得ないくらいのバカだということが決定しました
234 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 13:41:43.01 ID:IMbK2zhKM.net] >>218 間違ったコードは間違ったように見えるようにする、について、 あなたが指し示した引用元が言及してるのはアプリケーションハンガリアンについてなんだけど… システムハンガリアンについては否定的意見。 ちゃんと読んだの?
235 名前: mailto:sage [2018/02/18(日) 14:10:40.14 ID:AAhzNgFK0.net] >>223 >>224 thanks a lot!!
236 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 14:15:44.65 ID:IMbK2zhKM.net] >>218 APIの仮引数にシステムハンガリアンをつけたことで、間違ったAPI呼び出しが間違ったように見えるのはいつ? APIのリファレンスなり宣言文なりを自分のコードと見比べたときでしょ?その時必ず型情報も見てるよね?情報重複してるよ? あとIDEが自動でミスを排除してくれるなんて書いてないよ?ちゃんと読んで
237 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 15:46:49.02 ID:Tc3/Tap60.net] 入れる変数の型と引数の型を確認しない奴とかいるのか 暗黙の型変換は警告を出せばいいし どうしても見落とすのならコンパイルエラーにしてしまえばいい あとメンバ変数もテキストの色を変えればいいからm_もいらない
238 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 16:01:36.00 ID:dLlRK2Wa0.net] m_はホント見苦しい
239 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 20:07:07.34 ID:8oVyjimH0.net] m_だけならまだ我慢できるけど this->を必ず付けるルールと併用するのは本当にやめろどっちかにしろ
240 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 20:15:52.43 ID:eae4wPFh0.net] > this->を必ず付けるルール 破門だろ C++使うなそんなボケどもは
241 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 21:14:42.68 ID:SQcbDAgv0.net] ちげえんだよなぁ thisというキーワードが存在してるから、その存在そのものが、それを書かねばならないような強制力を産み出してる 「存在するが、書かなくてもいい」っていうどっちつかずが、一番論争になる その反対が「存在しないから書けない」だ これだと単純明快だ なんせ、書けない 「書くべきか書かざるべきか」のどーーーでもいい二択に迫られると、とたんに宗教になる
242 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 21:16:52.71 ID:eae4wPFh0.net] キーワードが存在するのと実体が存在することの違いがそんなに大事なのか? じゃあvtableのキーワードが存在しないことを、おまえはどう考えている?
243 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 21:33:09.71 ID:Pbt6vSqU0.net] >>231 オケツに_をつけてますわ
244 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 21:33:14.46 ID:dLlRK2Wa0.net] おれがそのソースを引き継いだらまず初めにやることは一つ 「this->」から「」への全ソース一括置換
245 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 21:56:25.56 ID:Ct2k6iqr0.net] 「m_」はダメで「_」ならいいってのはなんというか、合理的な理由よりも感覚・感情的なものかね。
246 名前: mailto:sage [2018/02/18(日) 21:57:31.39 ID:AAhzNgFK0.net] this-> つけるほうが分かりやすくていいと思うのですが、変てこな接尾辞・接頭辞よりも
247 名前:デフォルトの名無しさん [2018/02/18(日) 22:00:36.01 ID:tWqaO5mz0.net] m_xxx も xxx_ もなんの保証にもならんからな this->は必ずメンバになるけど
248 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 22:37:59.28 ID:UEE7OeWn0.net] _はグーグルスタイルの圧力
249 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 22:42:10.00 ID:WjKwYRHz0.net] 余計な命名規約を作るくらいなら言語機能を使った方が良いわな this->派だわ
250 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 23:21:23.43 ID:AjuHfv4B0.net] thisで明示した方が所在がハッキリして良いナリ 当職は名前空間もusingせずに明示しろ派ナリ 安易な省略はタイプ数を減らすという軽微なメリットと引き換えに可読性を落としケアレスミスを誘発するという恐ろしいデメリットを孕むナリ
251 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 00:00:39.93 ID:hDVR9PRD0.net] >>237 「m_」はいらないな ↓ ローカル変数とかと名前が被ってめんどくさい ↓ キャメルケースにはしたくない ↓ 「_」だけ残る
252 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 00:14:25.92 ID:o8qstbSZ0.net] _付けるなら変数の後ろだろ
253 名前:デフォルトの名無しさん [2018/02/19(月) 00:18:14.94 .net] C/C++なら必然的に末尾に付けるしかない 先頭に_付けるような情弱は死ねばいい Perl/Pythonだと先頭に付けるけどな
254 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 00:42:17.66 ID:SSx66hQd0.net] やらんけど、前一つなら規約には引っかからないんじゃなかったけ
255 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 00:57:15.60 ID:hDVR9PRD0.net] 未定義なのは _始まりでグローバルスコープにあるもの _始まりでアルファベットの大文字が続くもの全て __で始まるもの全て 1番目の_始まりなだけならローカル変数、引数、メンバで
256 名前:ヘ予約されていないので使ってもよい [] [ここ壊れてます]
257 名前:はちみつ餃子 mailto:sage [2018/02/19(月) 01:15:36.25 ID:gMMBYzvP0.net] >>238 名前に変なルールを導入するか this を付けるかの二択であれば this の方がマシというのはわかる。 わかるが、必ずつけるルールにしちゃうとかなりウザいわって話。
258 名前:はちみつ餃子 mailto:sage [2018/02/19(月) 01:20:40.79 ID:gMMBYzvP0.net] >>242 わかるんだが、そういうルールってすぐに教条主義に陥るからうんざりする。 技巧として使う using にまでグダグダ言うやつが絶対に出てくる。
259 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 02:05:55.66 ID:hDVR9PRD0.net] コーディング規約はうろ覚えだけど自由度の高いBoostスタイルを薦める publicな識別子はstdに合わせて小文字スネークケース マクロはBOOST_から始める インデントはスペース、一行の文字数は80文字を推奨 意味のある名前を付けることを推奨 ファイル構成に関するもの その他細々としたもの ライブラリごとのローカルルールがある場合もある あとは自由 thisを付けろだとか改行の仕方だとかは一切書かれてない
260 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 02:37:36.58 ID:SEa8F8NC0.net] >>248-249 お互いにマナーを守る世界は過ごしやすいがマナーの厳守を要求し出すと途端に息苦しくなるナリ 自分にも他人にも読み易いコードを書こうという気遣いが見て取れるなら細かく突っ込んだりはしないナリ
261 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 05:40:18.76 ID:wBFQMwB50.net] this->で必ずメンバというやつら じゃあ必ずブロック内変数という表記もしたらどうだ
262 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 12:45:29.69 ID:yTAVcy/Ya.net] 使うライブラリや開発環境の内部のスタイルに合わせるけどな。 派生クラスとかAPIのラッパークラスとか作り始めると、 どうしても内部の書き方に合わせておいた方が読みやすいし。 今でもWin32とかMFCでやることもあるけど、 そのときはm_とかpとかhとかdwとかバンバンつける。
263 名前:はちみつ餃子 mailto:sage [2018/02/19(月) 13:19:17.15 ID:gMMBYzvP0.net] 使う側の都合に合わせろよ。 ラップしてるのに中身のスタイルが漏れてるんじゃラップの甲斐がなくね? 中身を知ってる人がちょっとした便利のためだけに薄いラッパを作る場合ならそういう選択もあるだろうけど。
264 名前:デフォルトの名無しさん [2018/02/19(月) 14:36:30.11 ID:00nJVfHA0.net] コンバータにあわせろよ。C#で作ってコンバータかけた方が綺麗スッキリするんだから。
265 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 19:36:41.65 ID:2cNNs3G6M.net] >>253 そりゃAPIに渡す構造体でdwSizeとか使われてたらそこだけは合わせざるを得ないけど自分のコードスタイルを合わせる必要はないだろ
266 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 20:29:38.46 ID:czaD+lHv0.net] >>230 m_のmは目立つのm、 >>228 ここ構造体メンバとか、
267 名前: mailto:sage [2018/02/21(水) 00:43:21.00 ID:jU0tYaxw0.net] Windows メインで作業されている方で、 valgrind を併用している方はおられませんか? もしよろしければ使用感をお聞かせいただけませんか operator new()/operator delete() 乗っ取りデバッグに限界を感じてしまっている状況です (cl や bcc32/bcc32c/bcc64 では new/delete 乗っ取りができません) いや、さっさと入れればいいのですが、仮想環境とかよくわからないし…Vine Linux 以来触ってないし…
268 名前:デフォルトの名無しさん mailto:sage [2018/02/21(水) 01:13:14.52 ID:wPLJFyuu0.net] windowsならapplication verifier使えば?
269 名前:デフォルトの名無しさん mailto:sage [2018/02/21(水) 09:49:28.54 ID:8k15W99L0.net] 以下のURL
270 名前:のプログラムでSFINAEを試してみていて https://wandbox.org/permlink/LqKmn50PaPbtohs5 BOOST_TTI_HAS_MEMBER_FUNCTIONを使えば has_funcというメタ関数を使わずに済んで、短くできないかと試行錯誤中なのですが うまく行きません。 どうやったらビルドが通るようになるでしょうか? [] [ここ壊れてます]
271 名前:デフォルトの名無しさん mailto:sage [2018/02/21(水) 18:31:01.90 ID:8+abUSIR0.net] まずはそのうまく行かないコードを示したら?
272 名前:片山博文MZ mailto:sage [2018/02/21(水) 19:26:19.92 ID:UifE8nP3d.net] >>260 https://stackoverflow.com/questions/87372/check-if-a-class-has-a-member-function-of-a-given-signature
273 名前:260 mailto:sage [2018/02/21(水) 19:34:37.06 ID:EmINyJBAF.net] すみません、BOOST_TTI_HAS_MEMBER_FUNCTIONを使って短くする以前に元々が間違っていました。 以下の3つでオーバーロードしたかったのでした。 ・funcというメンバ関数を持つダブルポインタ ・funcというメンバ関数を持たないダブルポインタ ・それ以外 それで思ったのですが多分、Boost.TTIライブラリで 〇〇というメンバ関数を持つクラス、を識別するメタ関数は作れても 〇〇というメンバ関数を持つクラスのダブルポインタ、は無理な気がしてきました。 一旦諦めようと思います。
274 名前:260 mailto:sage [2018/02/21(水) 23:10:49.37 ID:EmINyJBAF.net] msvcでもGCCでもビルドできるのが どうにかできました。お騒がせしてすみませんでした。 https://wandbox.org/permlink/HDwsuoVReqJEXWsO
275 名前:デフォルトの名無しさん mailto:sage [2018/02/22(木) 10:26:41.79 ID:qwLRFwLN0.net] >>263 あと2年待てばconceptできるかもよ
276 名前:デフォルトの名無しさん mailto:sage [2018/02/22(木) 21:31:34.66 ID:SOkZDC9P0.net] (VBみたいな名前付き引数が実現されたら システムハンガリアン否定論者をぎゃふんと言わせられるのに…
277 名前:デフォルトの名無しさん mailto:sage [2018/02/22(木) 21:55:24.65 ID:qwLRFwLN0.net] システムハンガリアン発祥の会社が何か作ったら否定論者がぎゃふんと言うのか? おまえの頭の中は論点先取だか循環論法だかがグルグル回っているようだな
278 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 22:10:42.23 ID:XlnyEs6k0.net] ↑ 想像してごらん全ての人々が dwRet = ::WaitForSingleObject( hHandle = m_hThread, dwMillisecond = m_hTCTmo ) と書く世界を、
279 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 22:11:40.62 ID:XlnyEs6k0.net] ごめ 誤: m_hTCTmo 正: m_dwTCTmo 見れば間違いがワカルのがハンガリアンの極めて良いところ
280 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 22:21:40.17 ID:R3lraTlNM.net] >>269 >>196
281 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 10:44:07.22 ID:mn7A8TMg0.net] 一分間で間違いに気づいてはいるものの そもそもの書く瞬間にはどうやら人智を用いても気付けないらしいから IDEにエラー出してもらった方が早いんじゃあねえの 実は人間の集中力を超えたところにある方法論で、実践するとストレスが溜まるっぽいから、機械任せにした方がいい それに、書いてる最中は変数の型まで考えたくない 見て分かることは、機械任せにすれば見なくても分かるから、 今のご時世、人間の有限の集中力を目視チェックなんかに使いたくない 脳みそのリソースはもっと別のところに使うべきだ つまりは、書いてる最中は脳みそが「それが正しい」と思い込んでるから、 間違いは自分自身では絶対に分からない これがバグを作り込む h
282 名前:だったかdwだったかを脳が自動的に混同してるから、その分だけ余計に脳のリソースを使っている 「なんで書いている最中に自分自身で気付かないのか」、これ、とても重要だよ [] [ここ壊れてます]
283 名前:デフォルトの名無しさん [2018/02/24(土) 11:11:20.01 ID:51zBno3Kd.net] 変数名と型が一致してるという保証がゼロだからシステムハンガリアンなんて無駄以外の何物でもない 無駄というか悪
284 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 12:15:45.87 ID:mm9B9rZ50.net] >>272 俺のレスもプログラムも表現と意図が一致してるという保証がゼロ、 まで読んだ
285 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 12:23:50.23 ID:b3ZDZ7IS0.net] その場合、やめられる方だけやめればいいな つまりハンガリアンを。
286 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 12:27:42.98 ID:pqM6ijVV0.net] まともな開発環境使っていれば必要ないのでは
287 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 12:34:43.53 ID:B9f7/evx0.net] ハンガリアンはもうだめだ。 ポーランドを使おう。
288 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 12:51:07.68 ID:d7+fd25J0.net] >>272 そういう事言い出すと「関数名と機能が一致してる保証がゼロ」や「クラスメンバの隠蔽が完璧である保証がゼロ」などといくらでも難癖を付けれるナリ ヒューマンエラーを理由に不要と結論付けるのならあらゆるコーディング規約が不要という結論になってしまう、これはいけない 命名規則は可読性の向上に結びつくものでなければならない、規約を違反する事で起きるトラブルはプログラマ側の責任、それは分かるよね?
289 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 13:26:14.86 ID:b3ZDZ7IS0.net] ヒューマンエラーが起きる部分は極力排除して機械任せにできる部分は機械任せにすればいい ハンガリアンを導入する理由はもはや無いな。可読性悪いし。
290 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 14:24:10.94 ID:yWQ45jBy0.net] >>278 いや、ハンガリアンは可読性はよくなる方だよ 整合性維持に難があるだけで
291 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 14:29:08.35 ID:mm9B9rZ50.net] 可読性ぐらいテンプレートによる高度なメタプログラミングに慣れた諸兄なら ハンガリアンごとき目を慣らして解決できるはずなんじゃ…
292 名前:はちみつ餃子 mailto:sage [2018/02/24(土) 15:03:19.72 ID:ohURjCBl0.net] https://www.google.co.jp/search?q=%E5%8D%8A%E5%88%88%E3%82%8A&tbm=isch
293 名前:はちみつ餃子 mailto:sage [2018/02/24(土) 15:06:09.97 ID:ohURjCBl0.net] >>276 Lisper「せやな!」
294 名前:デフォルトの名無しさん mailto:sage [2018/02/24(土) 17:03:03.20 ID:agv5rOmv0.net] >>276 >>282 両者は共存不可能な対立概念ではないけどね。 細かいことを言わせてもらえば、 「ハンガリアンとポリッシュ」か「ハンガリーとポーランド」と 並べてくれた方が座りがいい気もするけど…。 「ハンガリアン記法とポーランド記法」だとあまり気にならない不思議。
295 名前:デフォルトの名無しさん mailto:sage釣 [2018/02/24(土) 17:08:35.75 ID:4JIC+wG/M.net] なぁにその内、ロシアが併呑してくれるさ
296 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 14:16:53.97 ID:8l5JrV0a0.net] >>266 名前付き引数イディオムとenable_if<is_same<...>::value>が最強と言うことだな ※プログラマが、使用者が型を間違えないようにと気を使うのが正しいなら、間違えたらコンパイルエラーになるこれが最強だろ?
297 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 14:35:24.31 ID:zhzj1IkW0.net] >>277 ちげえんだよんぁ 可読性じゃねえんだよ >>268 を見てみろよ、 読む時じゃなくて書く時のヒューマンエラーだ なんで入り込んだのか全く分からんようなミステイクだ プログラミングが工業的生産の一種なら、その手のヒューマンエラーは無い方がいい で、改めて>>268 を見てみると、「可読性」があってプレフィクスの間違いに気付いてはいるものの、 そもそも書く段でなんで間違えたのか、それが全く分からない 他人はおろか本人すらも自覚できない謎の理由でプレフィクスを間違えてる(これがヒューマンエラーなんだけどな) な
298 名前:んで、後だしジャンケンだと、「プレフィクスが最初から無ければ、間違いも発生しえなかった」、とも言える もしかすると、書く時に間違える/読む時に間違える の比率を考えると、ハンガリアン記法は書く時に間違えやすいが読むときに間違いにくい……のトレードオフなだけかもしれん 要するに、可読性と生産性のトレードオフだけなんじゃあねえのか? それに、読む時のヒューマンエラーと書く時のヒューマンエラーをわざと混同してるのはいただけない [] [ここ壊れてます]
299 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 16:15:03.29 ID:s5td7qK+0.net] void func(int a) {
300 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 16:15:31.06 ID:s5td7qK+0.net] void func(int a) { //aが何型かわからない //アホかおまえは }
301 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 16:46:37.12 ID:s5td7qK+0.net] template <typename T> void func(T lpszA) { //lpszって書いてあるからTはLPSTR型だな //アホかおまえは }
302 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 19:14:43.19 ID:4jIr3vvu0.net] >>288 func()が常に1画面に収まって1万行の関数とかでありえないという根拠は >>289 テンプレート定義時の引数に対して引数内容固有の命名が難しいのは ハンガリアンに限ったことではないからハンガリアンに対する批判になんね テンプレート批判論者には考える力がないのかね…
303 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 19:15:39.42 ID:4jIr3vvu0.net] ごめ ×:テンプレート批判論者 ○:ハンガリアン批判論者
304 名前:デフォルトの名無しさん [2018/02/25(日) 19:29:08.16 ID:s+qaK1zS0.net] テンプレートに対してはハンガリアンは全くの無力だよなあ 一貫性の観点からやっぱりハンガリアンは無い方がいいわ
305 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 19:48:52.19 ID:4jIr3vvu0.net] .>>290 のレスを見てテンプレートの実体化時までハンガリアンが無力なことにされてはかないませんなあ…
306 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 20:11:05.52 ID:fbPK05Px0.net] そもそも関数が長い場合は型情報を持たすのもありだよな システムハンガリアンをやめさせようとして先に関数を短くしなきゃだめだなと追う結論に至って放置した
307 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 20:37:38.24 ID:s5td7qK+0.net] //1万行の最長不倒関数を書く //アホかおまえは
308 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 21:00:14.67 ID:s5td7qK+0.net] void func(int lpszA) { //lpszって書いてあるからLPSTR型だな //アホかおまえは }
309 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 21:58:30.83 ID:qLuvVokt0.net] システムハンガリ理解してない人の例上げてね?
310 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 22:45:03.97 ID:4jIr3vvu0.net] >>295 「1画面に収まらない」を都合よく無視しないように
311 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 23:43:59.89 ID:yscCG2q60.net] システムハンガリアンはDWORDをintに型名変更するだけでその変数名全部終わるからなしかも一瞬で
312 名前:デフォルトの名無しさん [2018/02/25(日) 23:57:37.89 .net] >>299 dwをiに置換するだけだからリファクタリングが楽っていう意味?
313 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 00:59:51.78 ID:VDQLjiDS0.net] まったく逆だ dwからiに全部置換していかないと変数名の意味を為さなくなるからシステムハンガリアンは愚かさ甚だしいと云うておる
314 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 01:02:48.27 ID:VDQLjiDS0.net] アンパンマン調で例えるなら型名変えるだけでメンテ百倍みたいな
315 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 01:10:40.33 ID:jQ6YvoyL0.net] 組み込み型はいいけどクラスはどうすんのさ 意味の分からないサフィックスを付けられても困るぞ
316 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 01:11:26.04 ID:VDQLjiDS0.net] ハンガリアン!新しい型だよ! 有難う!デザパタ娘ちゃん! メンテ百倍!ハンガリアン!
317 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 01:55:04.49 ID:4PPe6ndQ0.net] そもそもDWORDをintに変えることが滅多にない
318 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 02:10:59.71 ID:jQ6YvoyL0.net] dwとか書かれてもDWORDの定義を知らないと意味不明だし やるなら符号の有無とサイズが分かるように書かないと意味ないでしょ
319 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 04:56:46.87 ID:lxlU26hn0.net] >>298 おまえは間違いなく1万行と書いた その史実を誤魔化すことはできない 「ありえないという根拠は」という問いを反論として用いるのは 俺が「ありえない」と言った(事実と違うが)ことが おまえが「ありうる」と思っているのと違ったからだろう いずれにせよ「アホかおまえは」にふさわしいハチャメチャだな
320 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 08:02:35.99 ID:SPD4iDfM0.net] ポインタのpとか参照のrとかは今でも使ってる
321 名前:デフォルトの名無しさん [2018/02/26(月) 08:09:57.39 .net] >>307 史実とか言っちゃうのって。。。
322 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 08:16:32.18 ID:TvC1o7QC0.net] >>307 もうちょっとまとめて喋れ 読みづらい
323 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 09:55:53.14 ID:lxlU26hn0.net] >>308 俺も使う ただし名前そのものをポインタっぽくするだけで ハンガリアンのプリフィックスとしてではない
324 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 09:56:14.50 ID:lxlU26hn0.net] >>310 ニホンゴワカリマスカ?
325 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 10:44:04.77 ID:U+kFnN5D0.net] ハード直叩きのドライバ屋はデータバスやレジスタの幅を間違えると大変だから 物理層の実装ではハンガリアン使うこともあるよ
326 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 10:55:31.04 ID:n/n1Eejna.net] >>313 むしろそれはアプリケーションハンガリアンじゃね?
327 名前:デフォルトの名無しさん [2018/02/26(月) 11:21:30.74 ID:mt/mMzV6d.net] 間違えると大変だからハンガリアンを使ってはならないんだよ 偽の情報に頼るんではなくて元を逐一確かめないと
328 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 11:33:14.68 ID:yfGCkThX0.net] 今勉強してるんだけどC++ではポインタを使わずに参照で書くのがデフォルトなの?
329 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 11:36:50.47 ID:TvC1o7QC0.net] >>315 不一致が存在しない事が保証されてれば問題無いんやな そういう事ならつまり変数宣言とプレフィックスが全て一致してるかチェックするスクリプトとかがあれば満足って事でええんか?
330 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 11:38:09.46 ID:n/n1Eejna.net] >>316 ポインタも必要に応じて使うけど、メモリ管理の煩雑さとミスの危険性を避けるために参照やスマートポインタやコンテナ、イテレータなど他に適切な物がある時はなるべくそちらを使うのが流儀かな。
331 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 11:51:17.55 ID:lxlU26hn0.net] >>316 デフォ・・・まあ、そう言えなくもないか 参照でもポインタでもどっちでもいい用途には参照 ポインタでしかできないことはNULLに++や絶対番地指定 参照でしかできないことは一時オブジェクトやコピコン類
332 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 12:15:47.61 ID:z/vehsiL0.net] 書き込むときは参照ではなくポインタにしろと言ってた人がいた。 理由を聞いたら「なんか書き込んでる感がない」だった。
333 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 12:17:18.65 ID:lxlU26hn0.net] std::cin >> &a; やだよ、こんなの
334 名前:デフォルトの名無しさん [2018/02/26(月) 12:21:09.58 ID:W3q5coR10.net] グーグル規約だと書き込む引数は参照ではなくポインタにしろってなってる でも標準ライブラリが普通に参照で書き込んでるので意味ないかなと思う
335 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 13:05:03.30 ID:LqmnPPXld.net] やC++糞
336 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 13:30:49.55 ID:jQ6YvoyL0.net] 好きな方使えとしか言いようがない ただ参照はnullポインタが無いという特性はある
337 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 13:42:09.37 ID:z/vehsiL0.net] >>322 自分もその人の気持ちは理解できた。 func(a, &b); と書かれていると、bに結果を書き込んでいる感があるし。
338 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 13:44:00.32 ID:yfGCkThX0.net] レスサンクス cからだからポインタで書いちゃいそうだわ
339 名前:デフォルトの名無しさん [2018/02/26(月) 18:25:47.85 ID:aHz4HBvIM.net] ローカルで宣言したunique_ptrを他のメソッドに渡してデータをつめたいばあいってどういう引数で渡せば良いの? unique_ptr<Hoge> ptr(new Hoge); hogehoge(ptr); Hogehoge::hoge(const unique_ptr<Hoge>& ptr){ ptr->aaa = 123; } これでいける? なんかウェブサイトみてると&&二つとかあったりするの見かけて混乱してきた
340 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 18:46:48.22 ID:6OgFttId0.net] &&は所有権ごとぶん投げる時に使う 渡した後も呼び出し元で使うんだったらそれて合ってるぞ
341 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 19:00:19.12 ID:r2m2Cr000.net] >>327 それだったらunique_ptrじゃなくて参照渡せば良いだけじゃ
342 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 19:31:15.52 ID:NcBRNf650.net] 知らない間に、&& みたいな参照渡しもできた Rust の所有権ムーブの事
343 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 19:58:16.47 ID:jQ6YvoyL0.net] 何年も前からある
344 名前:デフォルトの名無しさん [2018/02/26(月) 21:01:42.73 ID:k0ghrbBh0.net] 所有権を渡すのってstd:move()だと思ってたんだけどconst &&でもいけるの??
345 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 21:42:25.99 ID:adcc2IaV0.net] C++17でstd::iteratorが非推奨ってなっているみたいだけど代わりに何使うの?
346 名前:デフォルトの名無しさん mailto:sage [2018/02/26(月) 23:56:58.87 ID:4PPe6ndQ0.net] []
347 名前:デフォルトの名無しさん mailto:sage [2018/02/27(火) 00:00:22.09 ID:o+FKgYKC0.net] >>333 自分で実装する
348 名前:はちみつ餃子 mailto:sage [2018/02/27(火) 02:00:32.40 ID:+XEdVvf40.net] >>332 std::move は rvalue にキャストするだけで、それ自体にはムーブする機能はない。 実際にムーブの処理をするのはムーブコンストラクタやムーブ代入演算子の方やで。
349 名前:はちみつ餃子 mailto:sage [2018/02/27(火) 02:10:59.44 ID:+XEdVvf40.net] && は単純に右辺参照って意味しかないから、 rvalue を受け取れるってだけ。 だけど lvalue でもムーブしてぇってときは std::move で rvalue にキャストすんの。
350 名前:デフォルトの名無しさん mailto:sage [2018/02/27(火) 02:19:45.35 ID:o+FKgYKC0.net] そこら辺はめんどくさいからテンプレート使え
351 名前:デフォルトの名無しさん [2018/02/28(水) 18:07:41.72 ID:IZRayiSM0.net] 右辺値参照とか難しいなー 最近ようやくC++11使えるようになったから全然いってることがわからん
352 名前:片山博文MZ mailto:sage [2018/02/28(水) 18:34:51.95 ID:jmOf6Upnd.net] 右辺値参照が使えなかった頃は、std::swapでスピード最適化していた。ポインタとメモリー確保を含む構造体は、 単純にスワップしたり、単純にバイト単位コピーしたりするのはまずいことがある。 そういうときに、std::swapを使う。右辺値参照は、それよりちょっと速くて賢いが、テンプレート型を理解してないと多分理解できないと思われる。
353 名前:片山博文MZ mailto:sage [2018/02/28(水) 18:43:18.32 ID:jmOf6Upnd.net] 右辺値参照の型はテンプレートを使った特殊な型だと考えるのが自然。 T&& === rvalue_ref<T>. std::move(T&)はrvalue_ref<T>という型。
354 名前:片山博文MZ mailto:sage [2018/02/28(水) 18:44:28.64 ID:jmOf6Upnd.net] 訂正。 std::move(T&)の戻り値はrvalue_ref<T>という型。
355 名前:片山博文MZ mailto:sage [2018/02/28(水) 19:01:47.21 ID:jmOf6Upnd.net] すみません、テキトーなことを書いたので、銃殺されます。
356 名前:はちみつ餃子 mailto:sage [2018/02/28(水) 19:18:07.29 ID:7ezW7mFb0.net] 実際のところヘッダファイルから 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 してるだけ。
357 名前:片山博文MZ mailto:sage [2018/02/28(水) 19:24:03.59 ID:jmOf6Upnd.net] そのstd::remove_reference<T>::typeはTから左辺値参照や右辺値参照をはずした型になるね。それに&&を付けるんだから、左辺値参照が右辺値参照になる。
358 名前:片山博文MZ mailto:sage [2018/02/28(水) 19:25:31.22 ID:AZJp7LrB0.net] やはり、constexprやnoexceptを付けた方が性能がいいんだな。
359 名前:はちみつ餃子 mailto:sage [2018/02/28(水) 19:35:33.38 ID:7ezW7mFb0.net] C++17 では noexcept は型の一部という扱いに変更された。 例外を投げないなら投げないと書いておかないと他のライブラリとの組合せで型エラーになったりすることもあるかもしれんぞ。
360 名前:片山博文MZ mailto:sage [2018/02/28(水) 19:43:54.33 ID:jmOf6Upnd.net] やっぱ江添亮様ってスゲーや。
361 名前:デフォルトの名無しさん mailto:sage [2018/02/28(水) 21:22:30.07 ID:BlsGZA5I0.net] 江添本にこの辺りのチートシートと問題集いれたら100部くらい売り上げ増えるのでは
362 名前:デフォルトの名無しさん mailto:sage [2018/02/28(水) 21:27:43.47 ID:LDTKKB+20.net] 江添ってあれか
363 名前:。ニートの時にやることないからたまたま目についたC++の仕様書を読み込んでたら いつの間にかすごく強くなったという、ホリランみたいな。 [] [ここ壊れてます]
364 名前:デフォルトの名無しさん mailto:sage [2018/02/28(水) 21:32:34.60 ID:eOQjYTv40.net] おまえそれをバカにできるのか? 仕事ってそういうもんだぜ 目の前の案件のために必死こいても付け焼き刃にできることは知れてるんだよ 「ヒマ」なときに遠くを見て投機的にコツコツ努力したことが あとで花咲くことがあるし咲かないこともある 賭に勝った者を、降りたやつがバカにできるのか? え、おい
365 名前:デフォルトの名無しさん mailto:sage [2018/02/28(水) 22:02:12.40 ID:debsNNov0.net] >>320 >>322 書き込むときポインタ渡しにするのは C++には参照渡しがin/out/refのどの意味なのか表すシンタックスが現状無いから というのが主要な動機だと思うが inならconst T& aというのは比較的読み筋だが T* pと書いただけだとoutなのかrefなのかやっぱりわからん…
366 名前:デフォルトの名無しさん mailto:sage [2018/02/28(水) 22:22:45.57 ID:n9jVMobsM.net] >>352 outは**だろ
367 名前:デフォルトの名無しさん mailto:sage [2018/02/28(水) 22:38:47.40 ID:ugxprRf80.net] && は、Rust のmove の事。 所有権移転。移転元が空になる 基本的に数年は、ドワンゴ江添と共に、山ごもり! 江添が空海なら、漏れは最澄w 悟りを開くまで、空海・最澄の一問一答が、延々と続くw
368 名前:はちみつ餃子 mailto:sage [2018/02/28(水) 23:03:26.56 ID:7ezW7mFb0.net] rvalue reference 自体はムーブしねぇつってるだろ。
369 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 02:40:44.97 ID:Cta7ST2f0.net] &&は所有権付き参照オブジェクトのようなものだな
370 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 07:05:17.46 ID:/bb7E7Gp0.net] &&参照は「このオブジェクトもういらないからぶっ壊してもいいよ」というサイン 言うなれば肉屋へ行く馬車 野生のオブジェクトは誰に断る必要もないので勝手に連れてかれて解体される 家畜を渡す時は解体に同意するサイン(std::move())が必要
371 名前:デフォルトの名無しさん [2018/03/01(木) 07:13:49.75 ID:YKLxBKOvM.net] Fooクラスのunique_ptrがつまったvectorを作って、他クラスのメンバ変数にセットするときはどう渡すべき? 作った元ではもう使わないから所有権放棄していいとする const参照渡しにして、渡された側でvectorの中身を全部std:move()して新しいvectorにつめるのが一番最初に思い浮かんだ そんなことしなくても最近ここででてる、&&つけて渡してそのままセットすれば解決するのかな?
372 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 07:20:14.18 ID:/bb7E7Gp0.net] vectorを丸ごとmove付けてコンストラクタに渡せばいいよ 出来上がった後で渡したいならswapすればいい
373 名前:デフォルトの名無しさん [2018/03/01(木) 08:22:01.82 ID:YKLxBKOvM.net] なるほどー コードにするとこんな感じかな? 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; }
374 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 08:51:22.88 ID:Z75vpagFM.net] >>360 最後にmove必要
375 名前:はちみつ餃子 mailto:sage [2018/03/01(木) 08:54:17.19 ID:1485DW7Q0.net] せやな。 rvalue reference は lvalue だぞ。
376 名前:デフォルトの名無しさん [2018/03/01(木) 10:38:08.68 ID:YKLxBKOvM.net] ありがとう!勉強になりました
377 名前:デフォルトの名無しさん mailto:sage [2018/03/01(木) 22:06:37.33 ID:fp7iC0tG0.net] >>353 ちげう
378 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 07:10:33.20 ID:GbvR6g/La.net] noexceptにtrue,falseがある理由については #include <type_traits> template<typename T> void test(T t)noexcept(is_unsigned<T>){ //Tの型がunsignedの時だけは例外は投げない } こういう事が出来ると書いてあ
379 名前:チたけど、c++17以降も問題なく使えるだろうか? [] [ここ壊れてます]
380 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 07:15:24.27 ID:bNTu0vGw0.net] is_unsigned_vだろ なぜC++17以後で廃止になると思ったんだ?
381 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 07:38:40.59 ID:GbvR6g/La.net] stdも抜けてた。。。 廃止になるじゃなく面倒な事になりそうだと。
382 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 08:07:40.62 ID:mIGjbFX+0.net] unsigned は組み込み用だろ 0 〜 255 のカウンターなどで、無限にループする。 255の次に、0が来る overflow にされると困る
383 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 08:51:13.35 ID:Du7whmdSM.net] >>368 組み込みでなくても極々普通に使うし、標準ライブラリ使ってれば知らぬ間に使ってる。
384 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 09:14:23.17 ID:vziGgrtU0.net] size_t
385 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 09:29:49.65 ID:bNTu0vGw0.net] それを言うなら uintptr_t
386 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 12:01:58.77 ID:D+SIA0G1d.net] 普段は uint_xxt と size_t しか使わんわ int と ptr あんまり相互に変換しないし
387 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 22:27:40.22 ID:3pZ6Fb9JF.net] visualstudio2017 でスタックトレースがしたいのですができません。 最初はBoost.StackTraceで試みたのですがMSVCでは行数やファイル名の出力が非対応で アドレスまでしか取れませんでした。 次にWinAPIを使って解決させようとしたのですがこれもうまく行きません。 SymGetSymFromAddrを使うとどうやってもエラー126が帰ってきてしまいます。 以下のプログラムがVisualstudio2017で動作している人はいないでしょうか? ttps://github.com/shive/blogpost/blob/master/20130918-stacktrace/main.cpp
388 名前:デフォルトの名無しさん [2018/03/02(金) 23:27:18.83 ID:KYEHMUiK0.net] スタートレックと空目した
389 名前:デフォルトの名無しさん mailto:sage [2018/03/02(金) 23:40:43.96 ID:vziGgrtU0.net] >>373 こうなった ---- 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 ----
390 名前:片山博文MZ mailto:sage [2018/03/02(金) 23:47:44.16 ID:7K8TE86Qd.net] https://stackoverflow.com/questions/22481126/why-isnt-symgetsymfromaddr64-working-it-returns-error-code-126 未確認
391 名前:373 mailto:sage [2018/03/03(土) 01:05:16.48 ID:7bxI8Ps/M.net] >>375 プロジェクトの設定はdbghelp.libを追加しただけでしょうか? あとWindows10ですか?7ですか? >>376 自分もそれを読んでx86とx64両方試したのですがダメでした、、、
392 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 01:52:28.21 ID:e0EB+SLu0.net] >>377 Windows10で実行 ライブラリは追加したのと このFileNameがchar*でmsvcでは通らないから適当に文字列のバッファを作って渡した >94 line.FileName = "?";
393 名前:373 mailto:sage [2018/03/03(土) 07:43:32.07 ID:MjEj/kk+F.net] >>378 自分はWindows7&VisualStudio2017なのですが dbghelp.lib、dgbhelp.hを探すと以下の場所にあるのでWin10でしか対応していないのかなと… C:\Program Files (
394 名前: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関数で呼べばいけるのかも [] [ここ壊れてます]
395 名前:373 mailto:sage [2018/03/03(土) 08:51:25.52 ID:MjEj/kk+F.net] 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をインストールするかしかないのかもしれません;;
396 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 09:17:35.93 ID:iGrPHQq30.net] >>380 Visual Studio 2017 スレの919あたりから話題になっているけど、 VS2017 の Windows 旧バージョンサポートはおかしいみたい。 2015と同じツールセット、SDKを用いても動作が違う。 2015をインストールするのがいい気がする。 参考 Visual Studio 2017 Part4 ・ mevius.5ch.net/test/read.cgi/tech/1509244956/ https://www.visualstudio.com/ja/vs/older-downloads/
397 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 10:29:47.52 ID:eUUf6Fhxd.net] コンパイラを作っているんですが、char 10bit short 18bitの時はsizeofはいくつを返せばいいんですか?
398 名前:デフォルトの名無しさん mailto:sage釣 [2018/03/03(土) 10:36:52.34 ID:/0Rk5gcF0.net] >>382 アドレス単位を返す。ワードアドレッシングなら通常全て1になる
399 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 10:42:04.53 ID:iGrPHQq30.net] メモリ上のレイアウト次第 その18ビットを隙間だらけでchar8個分のメモリに置いてるなら8だし、 詰めて2個分で置いてるなら2
400 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 10:51:46.74 ID:sKvL+uoJ0.net] sizeof(char)は必ず1じゃなかったっけ?
401 名前:デフォルトの名無しさん [2018/03/03(土) 12:49:02.99 .net] sizeofが小数を返しちゃいけないって誰が決めたの?🙄
402 名前:はちみつ餃子 mailto:sage [2018/03/03(土) 13:15:05.21 ID:uc6Z/AdW0.net] >>386 仕様。 C99 だと 7.17 に size_t は sizeof 演算子の結果の符号無し整数型って書いてある。 C++11 だと 5.3.3 に sizeof 演算子の返却値の型は size_t って書いてあって、 18.2 に size_t は符号無し整数型って書いてある。
403 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 13:20:00.43 ID:Yc5zIgYv0.net] sizeof(bool) == 0.125 であって欲しいのかw
404 名前:はちみつ餃子 mailto:sage [2018/03/03(土) 13:43:14.93 ID:uc6Z/AdW0.net] どうせ汎整数昇格で int になることばかりなので、 アドレス単位以下の小さなオブジェクトにする意味なんてないよ。 大きな配列で扱いたいときは std::bitset が有るし。
405 名前:デフォルトの名無しさん [2018/03/03(土) 14:56:24.32 .net] >>387 ありがとう🤣
406 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 15:45:51.52 ID:+GZAkR500.net] >>389 もしsizeofが小数を返したら汎整数昇格は適用されないんじゃない?
407 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 16:09:32.75 ID:e0EB+SLu0.net] 使用者が混乱するような仕様はちょっと
408 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 18:28:41.77 ID:OIzMcqKj0.net] この板に書いてあることがほとんどわかっていないようなクソ素人ですみませんがちょっとお聞きしたいことがあります。 Windows 7でOpenCVをTDM-GCCにて動かしたいと思っているのですが、どなたかこの設定で動かされている方など居られ
409 名前:ワすでしょうか? もしくは素直にVisualStudioなど使ったほうが良いのでしょうか? 昨日からあれこれ試しているのですがまったく動かないです。 [] [ここ壊れてます]
410 名前:片山博文MZ mailto:sage [2018/03/03(土) 19:01:36.20 ID:ZgUZF4A1d.net] >>393 俺ならパッケージマネージャがあるMSYS2+MinGW使うよ。 パッケージマネージャがないTDM-GCCなら、まず、OpenCVをビルドして、リンクできるようにしないといけない。 まあ、めんどうくさい訳で。
411 名前:片山博文MZ mailto:sage [2018/03/03(土) 19:37:06.06 ID:ZgUZF4A1d.net] 初心者はVSやるとよろし。NuGetというパッケージマネージャがあるよ。
412 名前:デフォルトの名無しさん [2018/03/03(土) 20:12:29.49 ID:OIzMcqKj0.net] 片山様 レスありがとうございます。 そうですね、VSは重いという理由で避けていましたがやはりまずはちゃんと王道からやっていこうと思います。 慣れたらソースからビルドもしてみたいですが、まずはOpenCVであれこれしたいのでやりやすい環境で頑張りたいと思います。 ありがとうございました。
413 名前:はちみつ餃子 mailto:sage [2018/03/03(土) 20:37:52.59 ID:uc6Z/AdW0.net] VS の統合開発環境を外したツールセットだけの SDK もあったはず。 でもまあ初心者は統合開発環境があった方がいいってのは同意だな。
414 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 21:19:46.86 ID:oo1zjTPVa.net] C++の文字列、u16やu32stringとか乱立してるけど今時TCHARとか使わないでしょうか? string,wstring,u16string,u32string...どれか決め打ち?
415 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 21:37:46.21 ID:iGrPHQq30.net] 主に使ってるライブラリ/フレームワークに合わせれば? 何でもいいなら multibyte で utf-8 一択だろう ucs2 (16bit) にしても ucs4 (32bit) にしてもどうせ 合字とかで1コードポイント1文字にならないから意味ないし コンテナは string でも何でも好きなものを
416 名前:はちみつ餃子 mailto:sage [2018/03/03(土) 21:52:22.75 ID:uc6Z/AdW0.net] どうやろな? Windows だと API が UTF-16 前提だからそれで揃えるってのは悪くない選択だと思うし。
417 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 21:55:03.34 ID:e0EB+SLu0.net] >>398 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>とか使ってもいい
418 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 22:02:34.74 ID:i5AAIiVZ0.net] OpenCVのビルドぐらいCMakeでGUIでできる
419 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 22:07:02.05 ID:i5AAIiVZ0.net] >std::basic_string<TCHAR>とか使ってもいい ほんとそれ ていうかWin32APIでサポートされるうちはやっぱマルチバイトが無難
420 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 22:12:10.73 ID:q1dNIabI0.net] ShiftJisなんて廃止して、UTF8に統一してしまえば良かったよね
421 名前:デフォルトの名無しさん mailto:sage釣 [2018/03/03(土) 22:19:12.96 ID:/0Rk5gcF0.net] UTFはソートのコストが高いから痛し痒しだけどね SJISはその点は優秀かと
422 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 22:38:49.13 ID:pbvBV+5A0.net] Windows10はutf8モードにできたような
423 名前:はちみつ餃子 mailto:sage [2018/03/03(土) 22:56:38.78 ID:uc6Z/AdW0.net] 文字コードを統一したところでロケールの切替えはどうせ必要なわけだし、 内部的な処理が UNICODE に統一されたので良しとするしかなかろ。
424 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 23:43:29.67 ID:q1dNIabI0.net] utf8に統一したら、ロケールの切替って表示する文字列の言語を決める位の意味しか無いのではないかな 異なる言語の文字列でもそのまま字化けせずに表示出来た方が都合が良いように思うけど
425 名前:はちみつ餃子 mailto:sage [2018/03/04(日) 00:38:00.37 ID:R9gQD4Ga0.net] Windows はもう 20 年以上前から Unicode 化はやってるんだってば。 UNICODE 版の API を正しく使う限り文字化けしない。 フォントの設定とかで化けることはあるかもしれんけど、 それも今はフォントリンクとかでおおよそ上手いこと処理してまうしな。 UNICODE 化できていない今までに作られたカスなアプリが消し去れないし、 カスなアプリのために ANSI 版の API (の挙動を制御するためのコードページの切替えの仕組み) は残しておかなきゃならないけど、 Unicode への統一そのものは出来てるから満足するしかない。 っていう話ね。
426 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 00:59:55.95 ID:LharAyAs0.net] だったらVisualStudioで作ったソースファイルのデフォルトがShiftJIS固定なのをそろそろなんとかしてくれよ
427 名前:はちみつ餃子 mailto:sage [2018/03/04(日) 01:01:33.87 ID:R9gQD4Ga0.net] せやな。
428 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 01:07:55.85 ID:BtVPmkEs0.net] LinuxとかのシステムコールもUnicode化されたら考えるわアデューノシ
429 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 01:14:01.78 ID:fY1aJvVU0.net] >>410 2017で治ったんじゃなかったか
430 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 01:15:23.20 ID:BtVPmkEs0.net] だいたいwchar_tとかcharの倍容量を食うじゃん? 2が3になるとかならまだしも1が2になるというのは精神的にインパクトがデカイ L"Hello World!"のバイナリをダンプしてみたらトラウマを抱え込むレヴェル というのもあるし他環境とのソースコード共通化も視野に入れる場合やっぱマルチバイトしか…
431 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 01:35:20.32 ID:pARrwnK20.net] WindowsのUNICODE版APIはUTF-8と相性が悪いからクソ
432 名前:はちみつ餃子 mailto:sage [2018/03/04(日) 01:39:19.42 ID:R9gQD4Ga0.net] せやろか? 内部表現として使う文には UTF-16 って良いと思うけどな。 UTF-8 との間なら変換コストも大したことないし。
433 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 02:20:02.75 ID:8pLLmBBd0.net] >>416 iOS / macOS / Windows / Java と多くのプラットフォームの API で文字列としてUTF-16 が使われてるから割と使うけど、 近年多用される絵文字とかが全然1文字1符号にならんので ロジックを基準する上ではUTF-8より便利ってわけでもない。 文字列の処理を描くときは合字以外は1文字1符号になるUCS4 の方が良い。
434 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 02:23:18.11 ID:FSOQNU6I0.net] なぜ世界中の頭脳を集結させても完璧な文字コードは作れないのか
435 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 02:28:31.88 ID:BtVPmkEs0.net] x86アーキテクチャーがRISC-Vに置き換わったら考えるわノシ
436 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 02:42:05.74 ID:BtVPmkEs0.net] ていうかコルモゴロフ複雑性が計算可能関数だったら考えるわノシ
437 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 02:53:03.62 ID:QKjmCs/V0.net] 韓国がUNICODEにすごい文字数予約済みにしてあるとか聞いたことある
438 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 03:02:28.08 ID:ymM0nha90.net] あの言語動的に文字生成でもしないと無駄多杉だろ
439 名前:はちみつ餃子 mailto:sage [2018/03/04(日) 03:02:39.39 ID:R9gQD4Ga0.net] >>417 どうせイテレータでアクセスするから、合字はどうしようもないにしても 先頭からコードポイント単位で読む分にはどの符号化を使っててもあんまり変わらん気がするが。
440 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 03:56:38.94 ID:8pLLmBBd0.net] >>423 UTF-16 だとサロゲートペアが出てくるからマルチバイトがマルチワードになるだけ ucs4 だとそれが要らなくて符合とコードポイントが1:1対応になるんだよ。 何年か前まではサロゲートペア?なにそれおいしいの?でも済んでたけど 今の時代それは無理だし
441 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 04:09:09.92 ID:8pLLmBBd0.net] 要は utf-8、utf-16 → 1符合 ≠ 1コードポイント ≠ 1文字 ucs4 → 1符合 = 1コードポイント ≠ 1文字 だから完全自作の文字列処理ではucs4が楽だよという意見でした テキストなんてたいしてメモリ食わないしね おしまい
442 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 04:09:59.70 ID:FSOQNU6I0.net] charset_cast<utf_8>()みたいなの欲しい
443 名前:はちみつ餃子 mailto:sage [2018/03/04(日) 08:42:48.43 ID:R9gQD4Ga0.net] おっと、 u16string のイテレータはサロゲートペアは解決してくれないのか。 まあそれも小さなラッパを作ればどうとでもなる。
444 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 09:34:29.91 ID:LharAyAs0.net] UTF16でサロゲートでガチャガチャやるくらいならUTF8でちゃんとやった方が実り多いし そんなんやりたくないならUTF32使えばいいし 中途半端だよねUTF16
445 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 09:38:06.05 ID:ZPPAxORI0.net] ワイドのようで実はマルチ
446 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 10:55:23.96 ID:kJ02m0gha.net] どこかでみたけど歴史的にはutf32やutf16よりutf8が新しいんだろ?
447 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 12:59:59.04 ID:hIgSiiXH0.net] オリジナルのXEROXのコードへの先祖返りではないかな?
448 名前:デフォルトの名無しさん mailto:sage [2018/03/04(日) 14:09:11.62 ID:GeBypOU0F.net] 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のテスト アダプター」はデフォルトでインストールされるようになっていたので インストールされています。
449 名前:デフォルトの名無しさん [2018/03/06(火) 00:41:37.37 ID:MSLc23us0.net] 標準ライブラリを前方宣言にすることに意味ってありますか?
450 名前:デフォルトの名無しさん [2018/03/06(火) 00:45:13.63 ID:jqoml9jL0.net] メイヤーズは普通にインクルードしろって言ってた
451 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 01:45:01.96 ID:RorZBCxf0.net] >>434 それどこに書いてあるの?
452 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 06:16:57.53 ID:HL6NWtm0a.net] newした配列がいつの間にか解放されてて、 プログラムの最後でdeleteすると必ずアクセスエラーで落ちるんですが、 newは勝手に解放されることあるんですか?
453 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 07:19:59.92 ID:18YefqDd0.net] >>436 どっかで未定義動作に堕ちてるならそんな結果になることもあるだろね。
454 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 07:39:27.47 ID:YXZKPZh60.net] ・どっかでメモリの取り扱い間違えてnewの管理情報を踏んづけて壊してる ・unique_ptrやshared_ptr、その他スマートポインタ的なものに理解せずに渡してる 多分このどっちか
455 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 07:56:08.66 ID:4Jw7uGdF0.net] ポインタがnewで帰ってきたアドレスと違う可能性
456 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 11:04:41.26 ID:PuW1uuBL0.net] >>436 「解放されてて」というのは、どうやって確認した? たとえば要素のデストラクタが実行されているとか、 別件で確保するメモリに再使用されているとか、 そういうことが起きているのか?
457 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 13:48:19.62 ID:xvhpcg6j0.net] >>436 constructor destructor copy constructor operator=() のいずれかに誤りがあるのでは? 概念コードを書いてみなさい
458 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 13:50:16.42 ID:xvhpcg6j0.net] >>436 operator new() operator delete() を捕捉するのもいいかもね、根本的に見直す時期だと思う
459 名前:デフォルトの名無しさん [2018/03/06(火) 15:12:07.82 ID:p6GeX8860.net] ファイル分割をしてみたく、プログラムをヘッダファイルとcppファイルに分割しようと挑戦したのですがよくわからないエラーが出まくります・・ プログラム超初心者なので凄い初歩的な部分を間違えているかもしれません・・・ エラーですが、ヘッダファイルの方で 'vector':'std'のメンバーではありません 'vector':定義されていない識別子です '
460 名前:string':定義されていない識別子です 'cv': 識別子がクラス名でも名前空間名でもありません。 'Mat':定義されていない識別子です 'ofstream':'std'のメンバーではありません 'ofstream':定義されていない識別子です みたいなエラーが出ます。 ヘッダファイルは、二重インクルードガードと関数のプロトタイプ宣言しかしていないのですが 上のようにそ、のプロトタイプ宣言の型とかに対してのエラーが出まくります 何かヘッダファイルに付けたほうがいいのでしょうか? 分かる方がいたら、教えていただけますでしょうか。 ちなみに、visual studio で作業していて、プロジェクトはコンソールアプリケーションで作っています。 もしかして、自分でmakefileとかを作る必要があるのでしょうか? [] [ここ壊れてます]
461 名前:片山博文MZ mailto:sage [2018/03/06(火) 15:14:49.26 ID:W0MQjqG0d.net] ヘッダーの方で #include <vector> などが足りないのでは。 ヘッダーは、自己完結にした方がいいらしい。
462 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 15:40:05.75 ID:p6GeX8860.net] よく見たら、自分の参考にしていたページでヘッダファイルのincludeは最小限に抑えると書いていました… てっきり、ヘッダファイルではincludeはしないものなのかと… 最小限というのは、エラーが回避できるstdio.hとかの最小限のファイルだけヘッダでincludeして、他のmath.hなどはcppファイルでincludeすればいい感じですか?
463 名前:片山博文MZ mailto:sage [2018/03/06(火) 15:50:38.20 ID:W0MQjqG0d.net] 最小限というのは、コンパイル時間、ビルド時間を短縮するためだから、小さなプログラムでは気にする必要はない。 cppとhppで#includeを分けるというのはよくあることだ。
464 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 16:05:55.81 ID:p6GeX8860.net] ありがとうございます!
465 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 16:16:08.19 ID:r6wtBatS0.net] >>443 の書きぶりからして 自作のヘッダファイルに std::vector を使った関数のプロトタイプがある、 しかしヘッダファイルの先頭では <vector> を#includeしてない、て感じね。 これは >>444 と同じ話。 あと >>445 で <stdio.h> と書いてるところを見ると 参考にしてるページは少々古い情報かも。 「あえて<cstdio>でなく<stdio.h>をインクルードする」ことについて 何か理由があるのかも知れないけど。
466 名前:デフォルトの名無しさん [2018/03/06(火) 17:54:41.92 .net] Cソースのincludeの位置にヘッダファイルの中身を貼り付けたときにコンパイルできなきゃだめ たぶんCソースの中で他のincludeよりも前に新しいヘッダファイルのincludeを書いてるんだろう
467 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 18:15:37.24 ID:p6GeX8860.net] >>448 なるほど、cstdioの方が良いんですね なんか二種類あるけど、どっちなんだろーと思ってたので、勉強なります 次からそちらを使います
468 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 22:17:21.07 ID:i8Fah5dFa.net] >>438 前者っぽいでした
469 名前:デフォルトの名無しさん [2018/03/06(火) 23:34:50.60 ID:pZOZvbRza.net] C++のリファレンスとかで[first,last)というふうに左右で括弧が違う表記があるんだけど、これはIteratorに関しての表記ですか?
470 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 23:42:46.07 ID:xvhpcg6j0.net] >>452 数学方面の書き方を源流にしていると思います [x, y) は x は含み、y は含めない半開区間を示しますが、それを類推したものでしょう
471 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 23:43:09.96 ID:ey0B6I8l0.net] >>452 範囲の数学的な書き方、半開区間とかなんとか それだとfirst以上last未満の範囲、ということ
472 名前:デフォルトの名無しさん mailto:sage [2018/03/06(火) 23:47:04.41 ID:MSLc23us0.net] https://ttsuki.github.io/styleguide/cppguide.ja.html#Forward_Declarations 前方宣言ってしたほうがいいのか、しないほうがいいのかどっちなんですかね
473 名前:デフォルトの名無しさん [2018/03/06(火) 23:50:38.84 ID:pZOZvbRza.net] >>453 ,454 数学でしたか!勉強になります。
474 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 00:29:35.52 ID:+JS1hm360.net] 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>がスコープから外れアンロック というシーケンスを期待しています。
475 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 00:29:47.60 ID:6+ILModc0.net] endならともかくlastは区間内の最後の要素なんじゃ…
476 名前:デフォルトの名無しさん [2018/03/07(水) 10:09:55.97 ID:ukyKg6LAa.net] 基本的な質問なのですが、以下のプログラムがエラーになるのはなぜでしょうか? char* pc = "abc"; pc[0] = 'z'; cout << pc << endl; 以下のプログラムでは意図通りに動きます。 char ac[] = { 'a', 'b', 'c', '\0' }; cout << ac << endl; ac[0] = 'z'; cout << ac << endl;
477 名前:はちみつ餃子 mailto:sage [2018/03/07(水) 10:14:51.80 ID:TWOfgg7C0.net] >>459 上は変数 pc はリテラル文字列の先頭を指すポインタ。 下の変数 ac は配列で、それを文字列 "abc" で初期化するって意味。 リテラルの破壊は未定義。 破壊しないことをあてにして破壊不可能なセクション (メモリ領域) に配置されたりすることもあるので、アクセスエラーが生じる。 あくまで未定義だから出来ちゃうこともあるし、コンパイラオプションで制御できたりもするけど、基本的にはあかんやつ。
478 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 10:30:06.22 ID:ylRgY7un0.net] >>458 仮引数名をendにすると関数名のendと紛らわしいからだよ 説明の文中にendが出てくる度毎にいちいち仮引数か関数か断るハメになる
479 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 10:35:31.71 ID:ukyKg6LAa.net] >>460 ありがとうございました。 Pythonでimmutableとかいうのがありますが、それでしょうか?
480 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 11:10:02.03 ID:ukyKg6LAa.net] すみません、また、ベーシックな質問です。 char* pc1 = 1; → エラー char* pc2 = NULL; → OK char* pc3 = 0; → OK なぜ、2番目と3番目はOKなのでしょうか? char* pc1 = 1; がエラーになるのは、 int 型の値で char* 型の変数を初期化できないからだとすれば、 char* pc3 = 0; もエラーになると考えることもできると思います。
481 名前:はちみつ餃子 mailto:sage [2018/03/07(水) 11:10:26.68 ID:TWOfgg7C0.net] >>462 Python なんか知らんがな。 Python の immutable は Python の immutable であって、それが C++ の何物かであったりはしないよ。 C++ のリテラルを破壊した結果は未定義というのは C++ のリテラルを破壊した結果は未定義という規則であるだけ。 似て感じられたとしても一対一に対応付くような単純なものではないので、 背景にあるメカニズムを理解せずに翻訳して理解しようとするような方法はお勧めできない。
482 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 11:14:31.86 ID:ukyKg6LAa.net] >>464 なるほど、そういう規則だからリテラルを破壊しようとするとコンパイルエラーにするわけですね。 ありがとうございました。
483 名前:はちみつ餃子 mailto:sage [2018/03/07(水) 11:22:08.82 ID:TWOfgg7C0.net] >>465 書き忘れてたけど、 C++ の文字列リテラルの型は const char[] なので、 const 付きでないポインタに渡すと単純に型が合わなくてエラーになるはず。 C だと型に const が付いてないのに破壊するのは未定義ってことになっててあまりにもクソだったから改められた。
484 名前:はちみつ餃子 mailto:sage [2018/03/07(水) 11:32:07.41 ID:TWOfgg7C0.net] >>463 0 はポインタに型変換可能で、型変換した結果が空ポインタと等しいことが保証されてる特別な存在。 (ビットパターンが等しいとは限らないことには注意が必要。) 互換であることが保証されているので、処理系によっては #define NULL 0 として定義していることもある。 余談だが、これはオーバーロードされた関数でうっかりしやすいので気を付けた方がいい。 たとえば関数 foo が以下のような型でオーバーロードされている場合、 void foo(int); void foo(int*); これを foo(NULL) と呼び出すと void foo(int) が呼び出されたりする。 今ではヌルポインタを表すキーワード nullptr が用意されたので、 NULL はあまり使わない方が良い。
485 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 12:03:25.28 ID:ukyKg6LAa.net] >>466-467 ありがとうございました。 >>466 Visual Stuidoを使っていますが、以下でエラーは発生しませんでした。 char* pc = "abc"; cout << pc << endl;
486 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 12:29:38.25 ID:ylRgY7un0.net] >>468 それはISO/IEC14882:1998の4.2で許されていたことに由来する その後ISO/IEC14882:2011のC.1.1で廃止されたが 古いソースを通すために故意に違反状態のままにしている
487 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 16:15:14.65 ID:nnB4Kxzea.net] c++の規約に違反にしないためには一度変数に代入する必要があるという事?
488 名前:はちみつ餃子 mailto:sage [2018/03/07(水) 16:24:01.54 ID:TWOfgg7C0.net] オプションで指定できるんじゃね? 俺は GCC を使ってるから知らんけど。
489 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 16:29:51.37 ID:ylRgY7un0.net] 違う 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以後ではこう書く
490 名前:デフォルトの名無しさん [2018/03/07(水) 17:54:06.02 .net] >>472 それもだめじゃね? const領域に非constでアクセスするなんて罪深いことなんだから、ちゃんと別領域にコピーしてから扱わないと。
491 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 18:18:25.20 ID:TnxtYBSc0.net] >>459 >char* pc = "abc"; 文字列リテラルは不変だから、const を付けないといけない 古いライブラリで、const を付けていないものを動作させるために(互換性)、 例外的に使う場合だけに許される >>463 >char* pc3 = 0; → OK この0 は、数値型の0じゃない。 予約語を増やすのが嫌だから、= 0 と書いたら、特別な意味に解釈する。 分かりにくい、クソ仕様 virtual func( ) = 0; これも、そう。 純粋仮想関数という特別な意味を表す
492 名前:はちみつ餃子 mailto:sage [2018/03/07(水) 18:49:53.33 ID:TWOfgg7C0.net] >>473 書き込まなければ問題は無い。 が、 const 外しが必要な状態ってのが良くないことは確か。
493 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 20:52:49.95 ID:ylRgY7un0.net] >>474 いいや数値型の0だ 翻訳時に0と確定できる汎整数型の定数に限り ポインタに暗黙変換できるという特例になっている 純粋仮想関数と関連付ける条項はない
494 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 22:07:54.67 ID:eXkgxxlqd.net] 純粋仮想関数と関連付けてはいないだろう それはともかくとして char * p = 7-7; // no error class T { virtual void f() = 7-7; // error }; となる気がするので言ってることは合ってるか
495 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 22:10:57.06 ID:NKcGF/Sn0.net] C言語でNULLが0をdefineしたものだったというだけだろ
496 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 22:12:59.22 ID:eXkgxxlqd.net] C言語では ((void*)0) だった気がする
497 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 22:34:03.79 ID:ylRgY7un0.net] >>477 7-7は定数式なので0と完全に等価 純粋仮想関数の = 0 はA.8のpure-specifierで=0という特定のスペルと規定されているので7-7がエラーになるのは当然
498 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 22:41:42.97 ID:eXkgxxlqd.net] いや疑問も呈していないし否定しているわけでもないのに当然と言われてもな…
499 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 22:52:11.20 ID:ylRgY7un0.net] じゃあ何のために、7-7とか言い出したんだ?
500 名前:はちみつ餃子 mailto:sage [2018/03/07(水) 23:02:40.75 ID:TWOfgg7C0.net] >>479 それはあかん。 ひょっとしたら古い処理系でやってるのはあるかもしれんが、 規格違反のはず。
501 名前:はちみつ餃子 mailto:sage [2018/03/07(水) 23:12:03.15 ID:TWOfgg7C0.net] >>483 と、思って調べてたんだけど、 C++ だと確実にあかんようだけど C だとアリなのかもしれない。
502 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 23:58:27.20 ID:/Jrz1mw60.net] offsetof()がどう実装されているかやね
503 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 02:18:11.16 ID:BQ11IIJi0.net] >>476-477 C++14 からリテラルだけに限定されてるよ。 d.hatena.ne.jp/yohhoy/20140305/p1
504 名前:はちみつ餃子 mailto:sage [2018/03/08(木) 03:31:21.90 ID:+04GXVK30.net] おっ、こんな基本的なことで変更が入ってたのか。 でも当然といえば当然の処置よな。
505 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 06:41:46.04 ID:DSeYC6Qd0.net] Cの無意味な汚いゴミが掃除されるのは良いことだ
506 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 07:33:41.79 ID:dmEui5aT0.net] >>484 しっかりして 流石にこの件では C と C++ 混同されたら対話が成り立たないよ
507 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 18:35:02.35 ID:uuOHCrug0.net] C++の勉強+機械学習も勉強しようとVisual Studio 2017でtiny-dnnを用いたいのですが、tiny-dnn内でコンパイルエラーが発生します。 具体的にはxcontainer.hpp内でC3203というエラーが頻発したり、feedfoward_layer.hppではC2760というエラーが発生したりしています。 環境はWindows 7でVisual Studio 2017 communityです。 プロジェクトはwindowsデスクトップアプリケーションを用いています。 tiny-dnnのインクルードはプロパティのインクルードディレクトリに追加しています。 どなたか心当たりのある方がいらっしゃれば教えていただけると嬉しいです。
508 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 19:27:19.96 ID:i2S5Knpdd.net] linux windows両対応のコードを考えている最中の質問です unsigned int型の変数xの32bitに、char型の配列y[4]の8bit×4を当て込みたいです y[0]から順にxの先頭ビットに入れたいのだけど そういう時はどのようなコードになるのでしょうか 符号の問題で単純に24bitシフト+16bitシフト...みたいなことをすると期待の値にならないときが存在してます
509 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 19:50:56.79 ID:2k5PL6f/a.net] unionでどう?
510 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 20:26:39.82 ID:FhiFltVyd.net] >>491 シフトする前にunsigned charにキャストする
511 名前:デフォルトの名無しさん mailto:sage [2018/03/08(木) 20:29:17.36 ID:FhiFltVyd.net] 参考 https://stackoverflow.com/questions/2437283/c-c-packing-signed-char-into-int
512 名前:はちみつ餃子 mailto:sage [2018/03/08(木) 22:47:08.29 ID:+04GXVK30.net] >>489 スマソ
513 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 11:50:12.37 ID:XHk1xHdH0.net] ヘッダーファイルの関数定義から関数ポインタをtypedefする事は可能ですか? C++98辺りのコンパイラです。
514 名前:はちみつ餃子 mailto:sage [2018/03/09(金) 12:25:38.00 ID:nl8HCt1x0.net] >>496 昔の C++ には decltype が無いもんな。 出来ないと思うよ。
515 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 12:57:58.47 ID:zqzgOSq4d.net] テンプレート使えないかな?
516 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 13:06:17.52 ID:XHk1xHdH0.net] 出来ませんか。ありがとう。 再定義が面倒だったので楽したいだけだったんですけどね。
517 名前:はちみつ餃子 mailto:sage [2018/03/09(金) 13:35:32.12 ID:nl8HCt1x0.net] >>498 その手があったか。 でも C++98 で自動で推論させようとするとヘルパー関数を使う必要があるじゃろ。 意味のないオブジェクト生成 (最適化で消えるかもしれんけど) がださい感じはするよね。
518 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 19:06:34.98 ID:CekgNpjOM.net] >>496 たくさんあるなら > ヘッダーファイルの関数定義から関数ポインタをtypedefする コードを生成するツールを作るとか
519 名前:デフォルトの名無しさん [2018/03/09(金) 22:17:46.30 .net] >>496 マクロ駆使すれば TYPEDEF_FUNC_DE
520 名前:CL(なんちゃら); FUNC_DEF(かんちゃら) { return; } みたいな書き方できないのかな? なんちゃらは識別名と戻り値と引数 かんちゃらは識別名を指定するイメージ [] [ここ壊れてます]
521 名前:デフォルトの名無しさん [2018/03/09(金) 23:46:50.00 ID:yn7GHiyb0.net] >>491 unsigned int x; char y[4]; . . . memcpy(&x, y, 4);
522 名前:デフォルトの名無しさん mailto:sage [2018/03/09(金) 23:57:54.33 ID:5+PoAx/E0.net] >>491 xの先頭ビットとはMSBなのかLSBなのか
523 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 00:45:01.61 ID:8ENKFfsbd.net] メモリ上でのレイアウトとかもあるのでuint8_t経由でのシフトがいい クロックが(メモリアクセスが問題にならない程)低くてシフトが遅いマイクロプロセッサは別
524 名前:デフォルトの名無しさん [2018/03/10(土) 04:49:25.72 .net] >>503 x = ntohl(x); も忘れずに
525 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 06:32:30.15 ID:Tg3hDFxK0.net] >>491 先頭ビットって32ビット目のことか?
526 名前:デフォルトの名無しさん [2018/03/10(土) 17:21:32.19 ID:a2p+alti0.net] >>506 それが必要になるかどうかは場合による。
527 名前: mailto:sage [2018/03/10(土) 17:42:35.32 ID:+Ww908Qw0.net] ネットワークバイトオーダーがここで関係あるのだろうか?
528 名前:デフォルトの名無しさん [2018/03/10(土) 19:22:25.29 .net] >unsigned int型の変数xの32bitに、char型の配列y[4]の8bit×4を当て込みたいです >y[0]から順に っていう要件だから、ホストバイトオーダーがビッグエンディアンかリトルエンディアンか分からない以上は常にntohlを付けるべき
529 名前:デフォルトの名無しさん [2018/03/10(土) 19:24:15.74 .net] char y[4] = { 0x12, 0x34, 0x56, 0x78 }; unsignd in x = 0x12345678; これを等価にしたいという意味だろうから。
530 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 21:52:35.38 ID:My21AM/A0.net] 独習c++終わりそうなんだが次によむべき本とかある?
531 名前: mailto:sage [2018/03/10(土) 22:03:20.54 ID:+Ww908Qw0.net] >>512 https://mevius.5ch.net/test/read.cgi/tech/1493844476/312 あと STL の教科書、これもC++11以前のもの https://www.amazon.co.jp/dp/4881357786/
532 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 22:09:22.02 ID:Tk41qGXE0.net] 本ばかり読まず実践しよう
533 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 22:09:43.95 ID:lWictyCS0.net] >>512 cpprefjp
534 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 22:28:49.18 ID:tBgkA+tH0.net] プログラミング言語C++とかどうやろ
535 名前:デフォルトの名無しさん mailto:sage [2018/03/10(土) 22:50:35.99 ID:My21AM/A0.net] ありがとうございます ひとまず>>513 の本にしてみます
536 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 00:41:56.08 ID:6KlfnVLZ0.net] そういえば最新版のEffective STLみたいな本って無いのか?
537 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 00:53:03.16 ID:Bd/2u4u/0.net] あると思うが訳者がへたくそで右辺値左辺値あたり意味ワカランかったぞ
538 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 00:57:27.74 ID:Bd/2u4u/0.net] その辺りの参考にするなら下手な日本語文献探るよりか英文そのまま読んだ方がいい希ガス なんでもかんでも日本語訳してあるとほんと意味ワカランから
539 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 01:11:03.65 ID:n48SUKtd0.net] cpprefjpのstd::min_elementとstd::max_elementの例文が間違ってるので誰か直してください。 自分はGitHubのアカウント持ってないので編集できません。 https://cpprefjp.github.io/reference/algorithm/min_element.html https://cpprefjp.github.io/reference/algorithm/max_element.html 誤:return a > b; 正:return a < b;
540 名前:デフォルトの名無しさん [2018/03/11(日) 01:22:57.30 ID:ry5KQfC80.net] unsigned int x; char y[4]; . . . x = ((y[0] & 0xff) << 24) | ((y[1] & 0xff) << 16) | ((y[2] & 0xff) << 8) | (y[3] & 0xff);
541 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 01:34:50.04 ID:P1lOCLpn0.net] Scott Meyers Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)、2014 Effective Modern C++ ―C++11/14プログラムを進化させる
542 名前:42項目、2015 Effective C++ は、昔の本のリバイバルかな? 内容が新しいかどうかまでは、分からないけど [] [ここ壊れてます]
543 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 08:34:37.66 ID:XWEx9Mlwd.net] テンプレートを使ったメタプログラムの有用性が分からん。コンパイル時処理で定数の階乗を計算してるけど実行時に値を変えれないなら、答えをベタ書きすればいいだけでは?
544 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 08:43:14.65 ID:zMqNV6vza.net] その値をベタ書きする手間をコンパイラにまかせることが出来るのが利点だと思うよ。
545 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 08:48:18.87 ID:XWEx9Mlwd.net] 3の階乗を、tmpするより6とタイプした方が早いだろ
546 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 09:03:15.99 ID:6KlfnVLZ0.net] >>526 3ならいいけど10の階乗は?15の階乗は?21の階乗は? それは整数型で表現できるか? それは何桁になるのか? 適切な型をどうやって選ぶのか? その値を静的な配列のサイズにしたいが数値を変えるたびに電卓で計算はしたくない ならばfactorial<N>::valueと表現できれば便利ではないか ということ
547 名前:デフォルトの名無しさん [2018/03/11(日) 09:03:17.33 ID:0BygLdlM0.net] その3という数値が別のファイルの特定の値に依存してる場合もあるし
548 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 09:08:13.99 ID:6KlfnVLZ0.net] 意地悪するのはこの辺にしておいて それはメタプログラミングでこいういうこともできるよ程度のものにすぎない テンプレートメタプログラミングとはテンプレートを使ってソースコードを生成することだ ソースコードを作るためのプログラミングだと思ってくれてかまわない 一般的な目的としてはジェネリックプログラミングを実現するために使われる 標準ライブラリではvectorからchoronoやtupleまでテンプレートメタプログラミングありきの設計になっている
549 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 09:08:56.54 ID:zMqNV6vza.net] 値が小さいうちはそうかもしれんが16の階乗とか値が大きくなってもベタ書きが良い? ちなみにconstexprが使えるc++11以降の話と考えてOK?
550 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 10:19:34.71 ID:i1Cv6XBY0.net] 階乗の例はいい例とは言えんな TMPで操作したいのはメインは型の方だからな 値も出来るよって例が階乗なだけで
551 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 10:40:47.13 ID:z1FVyjSJ0.net] >>529 > ソースコードを作るためのプログラミングだと思ってくれてかまわない そこまでやるならPL/Iみたいに%FOR %SELECTみたいな普通の制御構文で書ける方がいいわ
552 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 10:50:57.85 ID:zMqNV6vza.net] そんな貴方にtemplate+constexpr(c++14以降)
553 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 10:58:38.38 ID:6KlfnVLZ0.net] >>532 頑張って古代人用のコンパイラ作ってくれ
554 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 11:03:02.47 ID:z1FVyjSJ0.net] >>534 お前アホだろ w 方向性がおかしいって話だぞ
555 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 11:13:25.26 ID:6KlfnVLZ0.net] >>535 現代の言語でジェネリクスをサポートするのは一般的 テンプレートをこねくり回して整数演算をするのはおかしいという意味なら、普通の構文で書けるconstexprが追加されたからそっちを使うように
556 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 11:58:27.43 ID:TvwI/h8S0.net] テンプレートで再帰ができたらナア…('A`)
557 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 12:00:06.04 ID:TvwI/h8S0.net] とわいいつつ、実はC++のテンプレートはチューリング完全になってしまっていた(らしい ttps://cpplover.blogspot.jp/2013/10/blog-post_20.html
558 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 12:05:49.26 ID:93lmuZEGM.net] >>536 costexprで階乗書いてみてから言えよ
559 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 16:36:05.55 ID:i1Cv6XBY0.net] constexpr unsigned long long factorial(int n){ unsigned long long r=1; for(int i=1;i<=n;++i){r*=i;} return r; } うん、簡単だね!
560 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 16:41:07.00 ID:Bd/2u4u/0.net] 毎回毎回コンパイラが計算するのか
561 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 17:05:53.05 ID:6zDmjp+70.net] たまにソースコードを見て、あ、この数字なんだっけって考えるよりも 10000回コンパイルさせるほうが早いと思うよ
562 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 17:18:40.81 ID:Dtt3qpb50.net] マジックナンバーの本質
563 名前:片山博文MZ mailto:sage [2018/03/11(日) 17:51:32.86 ID:4ez4tjCrd.net] >>540 オーバーフローのチェックがないからやり直し。
564 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 18:36:06.03 ID:i1Cv6XBY0.net] はーい 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); }
565 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 18:40:21.07 ID:i3q5YI3y0.net] コンパイルエラーになるほうがいいなぁ
566 名前:片山博文MZ mailto:sage [2018/03/11(日) 19:45:19.23 ID:4ez4tjCrd.net] static_assert使え。
567 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 20:16:22.23 ID:XWEx9Mlwd.net] >>529 実行時計算で答え算出してそれを貼った方が楽じゃね?
568 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 21:15:39.44 ID:ezoYy+fr0.net] >>548 それで事足りるケースならそれでいいよ
569 名前:デフォルトの名無しさん [2018/03/11(日) 21:19:50.46 ID:0BygLdlM0.net] >>548 なんでそんなめんどくさくてミスしそうな方法をチョイスするんだよ
570 名前:デフォルトの名無しさん [2018/03/12(月) 01:21:50.18 .net] >>548 計算&書き換え手順をマニュアル化して、何十種類の仕向け別にバージョンアップの度に人海戦術で計算&書き換え&コードレビュー&テストするんですね、わかります
571 名前:デフォルトの名無しさん mailto:sage [2018/03/12(月) 05:00:24.40 ID:kBVT8YZa0.net] min_factorialable() は、階乗を正しく計算できる最大の値を返す constexprな関数(コンパイル時にint定数に置き換えられることを期待)、 と読み取ったんだけど、なぜにmin_なの?
572 名前:デフォルトの名無しさん [2018/03/12(月) 05:41:37.75 .net] 上限を求めるときに使うのはminだから、かな 知らんけど
573 名前:デフォルトの名無しさん mailto:sage [2018/03/12(月) 06:20:08.42 ID:I9Is/5l40.net] 最初min_nonfactorialableでnon取った時に直し忘れました
574 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 09:59:46.06 ID:CGjn2uNbd.net] 一日の秒数を86400と書いてたらマジックナンバーやめろと言われたんだけど、 プログラムを少しでも書く人間にとってその数字は常識でいいよね? 60*60*24 と書いて「その60とか24は何だ?」と言われないでしょ? それと同じレベルだと思ってるんだけど。
575 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 10:10:13.70 ID:oQx4WixC0.net] うるう秒でクラッシュするクソソフトウェアの出来あがり ニュートン力学と天文学と暦学からやりなおした方がいい
576 名前:デフォルトの名無しさん [2018/03/13(火) 10:13:40.69 ID:bAh/W6qqd.net] >>555 言われないとわからない奴は言ってもわからないだろうから お前は一生マジックナンバー使いまくりでいいぞ
577 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 10:38:37.74 ID:pKedwP800.net] そろそろ標準に日付計算のライブラリ欲しいわ
578 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 11:02:13.56 ID:92t/zLSk0.net] >>558 欲しいね chronoが中途半端でイラつく
579 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 11:32:32.41 ID:CGjn2uNbd.net] >>556 それだと 60*60*24 と書いても同じだよね。 うるう秒とかは関係ない定数管理してる場合の話ですよもちろん。
580 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 11:37:27.38 ID:CGjn2uNbd.net] >>557 86400がプログラマの常識的にマジックナンバーなのかどうか、って話ですよ
581 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 11:45:44.57 ID:cL/fN0Uj0.net] 所で皆さんmakefileはどう編集してます あまり触れていないようなので気になります
582 名前:デフォルトの名無しさん [2018/03/13(火) 11:45:51.13 ID:92t/zLSk0.net] 2147483647なら俺の常識だが
583 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 11:47:54.17 ID:Hyr8QuVd0.net] >>562 趣味では汎用のmakefile作ってそれを使い回してる 仕事ではautotools
584 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 12:00:55.79 ID:qHQADaBY0.net] 他人と共有するコードならなるべく要素を分解して分かりやすく書いた方が好ましい 2の倍
585 名前:数も直接記述するのではなくシフト演算使った方が綺麗 [] [ここ壊れてます]
586 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 12:18:10.82 ID:23dHbGxb0.net] くくるんじゃなくて… クラス宣言 int main() {....} あとは c++ スレで
587 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 12:18:34.80 ID:23dHbGxb0.net] 誤爆しました
588 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 12:51:25.09 ID:YF2y/th/d.net] 常識なんて集団が変われば変わる そのコードを見せる事を想定した集団の常識かどうかを考えろ
589 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 14:10:31.07 ID:cL/fN0Uj0.net] 2進数8進数10進数16進数のみではないということ 60進数や24進数の話でしょ時計を語るときは必須の常識
590 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 14:26:54.36 ID:cL/fN0Uj0.net] これをn進数って言うんだよ
591 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 14:37:04.66 ID:CGjn2uNbd.net] 集団の常識ってことなら、'86400' をマジックナンバーと思ってる人間は少数派っぽいので、 文句はやんわりと無視する方向で行きますわ
592 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 14:53:30.50 ID:qHQADaBY0.net] というかマジックナンバー言われるのって数字の意味とか集団の常識とかじゃなく書式の問題だよね 計算式の中に定数ポン置きしてる書き方してる奴がチームにいたらそりゃマズいよ、変数とか定数に置き換えろって俺も言う
593 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 14:59:18.81 ID:qHQADaBY0.net] 定数を定数に置き換えるってなんだよ リテラルは定数なり変数なりにって感じで読み替えといて
594 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 15:34:48.40 ID:VrugGyEjd.net] >>572 しかしこうはしないだろ? 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 はどうかというのが>>561 個人的には知らない人でも暗算もせずに初見で合ってるかどうかわかるか、 を基本にすべきだと思う (小さな2の冪乗は除く。2の冪乗知らん奴はシネ)
595 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 15:51:51.20 ID:92t/zLSk0.net] uint16_t word = (hi << CHAR_BIT) | lo; これCHAR_BIT != 8な環境を意識するんなら、16って書いてあるのも問題だね const int micro_per_sec = 1000000; int us = sec * micro_per_sec; こう書けって言われたら俺はお断りする
596 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 16:10:54.91 ID:lXm9DcKjM.net] e = 2.71828; p = 3.1415;
597 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 16:11:31.80 ID:VrugGyEjd.net] >>575 bit_per_char や shortでもintでもなく int8、uint16_t と明記したのは所与の仕様のつもり。 最近のapiはよくナノ秒返してくるから1000000000 倍 1000.0*1000*1000と分かち書きしたくなる
598 名前:デフォルトの名無しさん [2018/03/13(火) 16:29:39.63 ID:cL/fN0Uj0.net] 時刻を自動的に合わせますというコマンドボタンを作って 押すだけで済むのに
599 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 16:33:12.95 ID:92t/zLSk0.net] >>577 それを言うなら1'000'000'000だろjk
600 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 18:34:24.26 ID:5mSkIm9zd.net] 86400って書くと、ideで定義の参照も使えんし 86400で検索したときに 1日の秒数なのか、適当に決めたタイムアウトとかの秒数なのか、ただのIDなのか、連番で出てきただけの数値なのかとか、無意味な数列なのかまざってわからんくなるやろ
601 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 18:56:33.51 ID:U9FOV+VD0.net] #define SEC_PER_DAY (60*60*24) なんてやる人いないのかな
602 名前: mailto:sage [2018/03/13(火) 19:22:
] [ここ壊れてます]
603 名前:14.64 ID:4gb3BCLn0.net mailto: >>581 #define は基本使わない、int const ABC = 12345; なら時々使う [] [ここ壊れてます]
604 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 19:52:43.56 ID:0AXLQ0hnd.net] constexpr……
605 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 20:19:53.55 ID:My0TInc10.net] さっさとこう書けるようにしてくれ 今の<chrono>クソすぎんよ int sec_par_day = static_cast<int>(std::chrono::second{std::chrono::day{{1}});
606 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 20:25:30.79 ID:pKedwP800.net] クソというか機能が圧倒的に足りてない
607 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 20:28:38.82 ID:/ChP+Vc3M.net] 86400とか1440でわかるけど 24*60*60とか24*60って書けばいいだけだと思う
608 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 20:30:42.63 ID:My0TInc10.net] 21世紀も5分の1が過ぎようかっていうこの時代に 何が悲しゅうてたかが時刻を扱うだけでtime_pointの他にtmやらtime_tやらをガチャガチャさせられにゃならんのだよまったく
609 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 22:01:42.63 ID:vZM1ymmwM.net] >>586 お前が正解 他はバカ
610 名前:デフォルトの名無しさん [2018/03/13(火) 22:08:40.50 .net] 86400って何のために使うんだろう うるう日とかうるう秒とか考慮しなきゃ気持ち悪くね?
611 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 22:17:29.51 ID:U9FOV+VD0.net] 予め考慮しようがない
612 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 22:22:44.39 ID:pKedwP800.net] 考慮する必要性があるものかどうかが分からないからなんとも 例えば時系列データをその時点から1日分の数を使うというものなら閏秒を考える必要がないし
613 名前:デフォルトの名無しさん [2018/03/13(火) 22:28:43.21 .net] >>591 1日に1秒満たないかもしれないだろ
614 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 22:35:46.84 ID:2iGA+O2n0.net] int t = 86400; // 24*60*60 これで解決
615 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:06:58.39 ID:+Yto8Znfd.net] 閏秒の有無等で可変のものなら可変のものなりの書き方するでしょ 計算して変数に入れるとか 問題は不変の数値定数をどう正規化して書くか、正規化する必要はあるか。 24*60*60 派の人と 60*60*24 派の人が両方プロジェクト内にいたらなんか嫌だな
616 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:12:45.19 ID:U9FOV+VD0.net] プロジェクトで誰かが決めたらそれに従うよ 派閥作るほどの問題じゃないでしょ
617 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:17:41.96 ID:+Yto8Znfd.net] 絡むわけじゃないけど 決めたら従うのは当たり前で、それが「決める」ってことだろ。 派閥の話じゃなく混ざってたら気持ち悪いってことが言いたかったんだよ。
618 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:20:55.63 ID:pKedwP800.net] あっちこっちに書き散らすものじゃないから混ざってるとかあり得ない 1カ所になるまでリファクタリングしろ
619 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:44:10.62 ID:U9FOV+VD0.net] 気持ち悪いと思うかどうかは感性の問題だからなあ 例えばある日地球の回転速度が変わって1分が61秒になった プログラムを修正しろと言われて、 場所によって書き方が違っていると大変だね と言う話なら理解出来るけど
620 名前:デフォルトの名無しさん mailto:sage [2018/03/13(火) 23:51:40.27 ID:pKedwP800.net] constexpr int min = 60; constexpr int hour = min * 60; constexpr int day = hour * 24;
621 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 06:39:53.70 ID:4nqAllCK0.net] hoursは<chrono>にあるだろ それとoperator""h
622 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 06:41:16.16 ID:4nqAllCK0.net] operator""dayがねえんだよな<chrono>って
623 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 07:36:00.34 ID:eC4PF2tM0.net] chronoのhoursはstd::chrono::duration<int, std::ratio<3600>>のエイリアスなので daysはこうすればよい using days = std::chrono::duration<int, std::ratio<86400>>
624 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 08:15:03.73 ID:ylQhqnt4M.net] >>602 > daysはこうすればよい > using days = std::chrono::duration<int, std::ratio<86400>> >>555 へ戻る w
625 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 08:42:21.15 ID:eC4PF2tM0.net] 閏秒を考慮するのと1日を86400秒とするのは全く関係ないのに閏秒がどうとか言い出した奴が悪いのでは 丁寧に書くなら計算の根拠として60*60*24を見えるところに書いておけばいい
626 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 09:17:22.64 ID:MwJCRjiPd.net] 知ってる知識を披露したかっただけだろうから罪は軽い
627 名前:デフォルトの名無しさん [2018/03/14(水) 10:28:48.31 .net] >>604 全く関係ないは言い過ぎ
628 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 10:52:42.70 ID:a7dBFlsI0.net] ほぼ関係ないな、難癖もいいとこ 実用上は全く関係ない
629 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 11:03:01.46 ID:2oR7xNCJ0.net] うるう秒がどうのこうのと言う、問題じゃなく86400秒をそこでしか使わないって根拠が無いんだよね 後でまたその数値が出てくるとしてその度に86400と書くのか、もしその数値を修正する事になったら全部書き直すのか、2回3回使うようになって始めて変数なり定数なりに入れるのか それなら最初から式中に出てくる数値は変数に格納してから使えって統一した方が話が早い
630 名前:デフォルトの名無しさん [2018/03/14(水) 11:14:21.74 ID:G0IAn/x5d.net] 今時マジックナンバーとか昭和からタイムスリップしてきたのかよ
631 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 11:43:33.36 ID:xovkfTzX0.net] プログラムにおけるマジックナンバー(英: magic number、魔法の数字)とは、何らかの識別子もしくは定数として用いられる、プログラムのソースコード中に書かれた具体的な数値である。 そのプログラムを書いた時点では製作者は数値の意図を把握しているが、他のプログラマーまたは製作者本人がマジックナンバーの意図を忘れたときに閲覧すると「この数字の意味はわからないが、とにかくプログラムは正しく動く。 まるで魔法の数字だ」という皮肉を含む。 by Wikipedia
632 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 11:50:45.96 ID:I+60yKfra.net] 「1日の秒数」って定数を86400って書いて怒られたって話じゃないんだ?
633 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 12:06:59.05 ID:L/3+Hz1H0.net] >>609 じゃあオマエ、構造化もしてないのか? 昭和時代ほど耳にしなくなっても廃れたのではない話は結構あるぞ
634 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 13:01:38.98 ID:MwJCRjiPd.net] >>611 怒られたという程じゃなくて、 一日の秒数 = 86400; と書いたら「マジックナンバーやめろ」と言われたってことさ
635 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 13:18:59.19 ID:eC4PF2tM0.net] わかりきった定数はマジックナンバーではない
636 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 14:08:58.84 ID:IrrOEbi1d.net] >>613 それをヘッダに移動させるだけやん
637 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 14:14:27.78 ID:MwJCRjiPd.net] >>615 そうじゃなくて 60*60*24 て書いて欲しいんだってさー 謎
638 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 14:16:09.81 ID:2oR7xNCJ0.net] >>616 まぁ可読性高くて損する事は無いし、なるべく要素は分解して書いた方がいいんじゃないの 何かどうしても86400じゃなきゃ困る理由とかあるなら話は別だろうけど、無いだろ?
639 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 14:34:38.65 ID:IrrOEbi1d.net] >>616 クソどうでもいいな
640 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 15:05:38.89 ID:hFOwW8jGM.net] ITのエンジニアって こういうくだらないことで 給料貰ってるんだろうなあ
641 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 15:18:02.33 ID:xovkfTzX0.net] こういうクソみたいなことでもウンチク垂れてテコ入れしろと提案することにより仕事してます感かもし出す為だろうな
642 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 15:45:56.81 ID:L/3+Hz1H0.net] >>619 結果のわからない投機的な模索をしているときは 逆にマジックナンバー地獄なコードだよ 他人に渡すコードを清書するときの書き方・考え方とは真逆
643 名前:デフォルトの名無しさん [2018/03/14(水) 16:27:34.05 ID:9D6+Eo6Z0.net] 俺がわかるからみんなわかるだろうというコードはすげー困るな 例えその場の全員がわかったとしても今後わからない奴が出てきた時の事を考えて できうるかぎりわかりやすいコードを書くべきだな
644 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 17:02:40.84 ID:L/3+Hz1H0.net] そのためのコストにもよる 空想論じみた「わかりやすさ」にまで付き合ってらんないこともある 特に最低限のプロとしてのスキルを
645 名前:欠く者を想定することはしない ちょっと飛躍するがプログラム言語だってそうなっている マシンの性能を使いやすさに振るということを無限にはやらない どのくらいのアホまで付き合ってやるのか性能とのトレードオフで 色んなバランスで棲み分けになっている [] [ここ壊れてます]
646 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 17:03:50.56 ID:2oR7xNCJ0.net] まぁ別に自分だけが使う分にはいくら分かりづらく書いてくれても構わんけどな
647 名前:デフォルトの名無しさん [2018/03/14(水) 17:11:14.36 ID:9D6+Eo6Z0.net] 86400を60*60*24と書くことにはなんのコストも支払ってないから書けばいいな いちいち話を飛躍させる奴はなんなんだ
648 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 17:20:37.67 ID:I+60yKfra.net] 人によっては>>599 みたいにしろって言うだろうし 結局は人それぞれってことじゃないの 16を2*2*2*2っていちいち書く人はいないでしょ まぁ1<<4って書けと言われるかもしれんが
649 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 17:21:05.80 ID:jowRUKsS0.net] 学校の試験問題で一日の秒数としてソースに86400を書いたら マジックナンバーだからと減点された、納得いかない。 みたいな発端じゃないのかなぁ。
650 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 17:22:38.07 ID:L/3+Hz1H0.net] それをfindとsedでやる勇気あるか? たとえば俺なんかは1箇所ずつよく見て有機的に判断しないと怖いし それの残業代は貰えるのか心配だ
651 名前:デフォルトの名無しさん [2018/03/14(水) 17:51:03.64 ID:9D6+Eo6Z0.net] 当然その程度のリファクタリングはするべきだしそもそもマジックナンバーをどうにかするべきだし お前の残業代とかいう飛躍した話はどうでもいい
652 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:19:55.18 ID:L/3+Hz1H0.net] 飛躍じゃねえ実話だよ ずいぶん昔、社内BBSでそれ系のことを言い出したやつが 偉い人から突っ込まれてた
653 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:35:58.25 ID:MwJCRjiPd.net] プロとか言い出してる人がいるけど、それこそ飛躍では?
654 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:40:08.58 ID:y6ADsCAy0.net] プログラムの話題から外れてきていると思いませんか?
655 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:48:14.13 ID:uMO7yRavM.net] >>614 だからわかりきってるかどうかは人によって違うって話 プログラムの前に日本語の勉強しろよ w
656 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:48:33.76 ID:2oR7xNCJ0.net] まぁコスト次第で可読性を犠牲にするケースもあるだろうけど この場合はメモリ食う訳でも処理遅くなる訳でもソースの構造が変わる訳でもない 86400でも十分分かりやすいかも知れんが60*60*24なら更に分かりやすくなる どっちが良いかなんて議論の余地無いよね
657 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:50:15.11 ID:L/3+Hz1H0.net] >>631 別にプロでなくてもいいんだけどさ おまえさんなりに、同じプロジェクトにいて欲しくない足手まといが どのくらいから下というのはあるだろ
658 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:54:56.26 ID:uMO7yRavM.net] >>626 > 16を2*2*2*2っていちいち書く人はいないでしょ > まぁ1<<4って書けと言われるかもしれんが 状況次第だろ 場合分けの条件が4個あって各々2状態をとるとかなら2*2*2*2って書くかもしれない 下から4ビット目のマスクが欲しいなら1<<4って書くこともある
659 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 18:58:33.90 ID:2oR7xNCJ0.net] >>636 ビットフィールド使えば?
660 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 19:09:24.20 ID:L/3+Hz1H0.net] シフト使うな、ビットフィールドで書け なんて言われると、俺は相手にもよるが逆らいそう
661 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 19:37:46.29 ID:uMO7yRavM.net] >>637 ビットフィールドは割り付け順序が処理系定義だったりしたからあまり使ったことがない
662 名前:デフォルトの名無しさん mailto:sage [2018/03/14(水) 21:26:40.49 ID:kWAHqA+uM.net] たまには2進リテラルちゃんのことも思い出してあげてください
663 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 06:36:14.64 ID:F+InEeO+0.net] 議論の本筋(1日の秒数として即値で86400と書くことの是非)とはさらに離れるけど、 ビットシフトを使う定数は常にカッコで囲んでくれ。 res = a + 1<<4 + b; res = a +(1<<4)+ b;
664 名前:デフォルトの名無しさん [2018/03/15(木) 07:15:43.22 .net] >>641 3つ以上の項があると静的解析ツールで怒られるから res = (a +(1<<4))+ b; と書く
665 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 08:58:15.76 ID:x1WHRaDf0.net] >>641 下のつもりで上書いたらただのバグじゃん
666 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 09:19:10.68 ID:3Ym40JOm0.net] 算術と混用するときは結合順位に注意せよ、というだけのことを いちいち必ずだ!ルールだ!と金切り声で吠えついてくるやつはウザい
667 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 09:55:31.41 ID:LkpAylTJM.net] >>642 可読性悪くしてかえって品質低下招きそうな指摘だな
668 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 13:29:47.33 ID:O2sRH7tT0.net] vectorをつなげる際、copyが良いとか、insertを使えとか色々書いてあるのですが、どれが良いのでしょうか?
669 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 13:54:37.80 ID:XNo6/02A0.net] あらかじめ領域を広げておく必要があるけどinsertの方がチェックが入らない分速い
670 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 15:23:48.90 ID:9f/t5+6G0.net] reserveしてinsertだな
671 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 15:36:42.69 ID:q9z+dA6Ga.net] insertの直前にreserveって意味あるのか?
672 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 16:32:16.09 ID:XNo6/02A0.net] reserveは終端のポインタが更新されないからresizeじゃないとだめ
673 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 16:57:46.96 ID:R5/WYUtW0.net] reserveしてback_inserterでcopy
674 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 17:05:27.14 ID:QEAEy0DH0.net] >>648 insertはサイズチェックしてるでしょ。 >>649 iteratorを2つ受け取るタイプのinsertなら意味あるんじゃね? >>650 resizeは不味いだろ。
675 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 17:09:09.32 ID:QEAEy0DH0.net] >>652 アンカしくった。 サイズチェックの指摘は>>647 向け
676 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 17:21:30.23 ID:XNo6/02A0.net] ごめんinsertとcopy逆だった
677 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 17:28:15.72 ID:q9z+dA6Ga.net] >>652 insertの中で追加数数えてreserveと同じことしてるでしょ まさかループで一個ずつ挿入なんて実装はあるまい
678 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 19:10:49.64 ID:QEAEy0DH0.net] >>655 失礼。挿入位置のiteratorもあるから、3つ受け取るタイプの誤り。
679 名前:デフォルトの名無しさん [2018/03/15(木) 22:07:51.82 ID:dQGk6ayHa.net] cpprefjpの任意の式によるSFINAEの頁でdecltype(a + b, bool())と記載されているコードがあるんだけれど、 このa+b, bool()はラムダ式? 該当頁 https://cpprefjp.github.io/lang/cpp11/range_based_for.html
680 名前:デフォルトの名無しさん [2018/03/15(木) 22:09:23.09 ID:dQGk6ayHa.net] アドレス間違えた https://cpprefjp.github.io/lang/cpp11/sfinae_expressions.html
681 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 22:15:55.91 ID:3Ym40JOm0.net] ラムダ式が[で始まらないことってあるのか?
682 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 22:41:44.53 ID:ubsUN4Yb0.net] >>657 カンマ演算子とdecltypeでコンパイル時に評価される decltypeの中身を左から順に評価し、結果は一番右の型が帰る この場合はa+bの型が評価出来ればbool、できなければSFINAE
683 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 22:41:47.80 ID:XNo6/02A0.net] >>657 >a + b a + bが可能かどうか調べる >, 次の式を評価する >bool() bool型の初期値を返す つまりdecltype(a + b, bool())はa + bでSFINAEをしつつカンマ演算子でdecltypeにbool型の値を与えて返り値の型をbool型にしている
684 名前:デフォルトの名無しさん [2018/03/15(木) 22:57:18.20 ID:dQGk6ayHa.net] decltypeで,も使えたんですね。一番右の型が帰るということはdecltype(a+b,a-b,a*b,a/b,bool())とかしてもよさそう。。。 自分ではその機能を説明してるページを見つけれませんでした。 ありがとうございます。
685 名前:はちみつ餃子 mailto:sage [2018/03/15(木) 23:50:51.42 ID:VBbQqJBt0.net] >>660-661 それで良いのか。 いいこと知った。 いちいち enable_if をしとったわ。
686 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 07:54:12.89 ID:UGENGinrd.net] decltypeって実行時の型を得れる?
687 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 09:23:42.20 ID:Qbg0TjKpa.net] >>656 a.reserve(a.size()+b.size()); a.insert(a.end(),b.begin(),b.end()); こんな感じのことをやるのかと思ったんだけど、これ意味ないでしょ?
688 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 10:04:08.28 ID:SYp9l/ZId.net] >>664 declとはdeclareの略であることを考えると
689 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 10:17:31.56 ID:g2YO+i2m0.net] a.reserve(a.size()+b.size()); copy(b.begin(),b.end(),back_inserter(a));
690 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 15:36:10.69 ID:0r9PteXTM.net] >>665 random iteratorの場合の特殊化実装がありました。ごめんなさい
691 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 18:08:23.55 ID:Al45BtF0p.net] >>662 decltype comma trickでググれ
692 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 20:56:30.80 ID:DBylbaSH0.net] まあoperator,()が定義されてるとまずいんだけどな
693 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 22:50:10.89 ID:OQSUItjMd] codepad.org/C8t9k4fD ソース自体をプログラムに読み込ませると #includ で止まってしまうんですけど何が問題でしょうか
694 名前:デフォルトの名無しさん [2018/03/19(月) 18:07:03.75 ID:/U1oheuNa.net] インスタンスにdeleteかけたとき、メンバ変数が破壊されるのとデストラクタが実行されるのはどっちが先? 今書いてるコードがデストラクタでメンバ変数アクセスすると落ちることがあるから、破壊されるのが先なんだろうか?
695 名前:はちみつ餃子 mailto:sage [2018/03/19(月) 18:15:15.06 ID:RG1qd9Pc0.net] >>672 原則としては構築の逆順って覚えておくと間違えない。
696 名前: mailto:sage [2018/03/19(月) 18:33:44.24 ID:lFWK67Qs0.net] >>672 delete this; とかしてませんか、これは基本的に避けたほうがいい
697 名前:片山博文MZ mailto:sage [2018/03/19(月) 18:43:06.07 ID:SpFx62hRd.net] >>674 に同意。確保と破棄は生ポインタを触らずに自動化した方がいい。スマートポインタとかコンテナとか。 二回deleteを避けるためにポインタにNULLを代入する技もある。
698 名前:デフォルトの名無しさん [2018/03/19(月) 21:03:24.06 ID:kCg91IvDa.net] そろそろNULLは駆逐してnullptrに移行させたい
699 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 22:46:40.23 ID:jnDGFLZz0.net] >今書いてるコードがデストラクタでメンバ変数アクセスすると落ちることがある へ〜んなの ていうかメモリを壊しているかすでにdeleteされた死骸を再deleteしてるとしか、 >二回deleteを避けるためにポインタにNULLを代入 OpenCVのC言語インターフェースのやつ、
700 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 22:57:33.17 ID:cmSuhSLP0.net] C++勉強中の者です。 codepad.org/C8t9k4fD ソース自体をプログラムに読み込ませると #includ で止まってしまいます。 Cのfgets()のようには使えないのでしょうか。
701 名前:デフォルトの名無しさん [2018/03/19(月) 23:06:01.35 .net] >>678 According to the C++ reference 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.
702 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 23:26:45.72 ID:cmSuhSLP0.net] >>679 区切り文字を読まないとfail状態になってそれ以降は失敗し続けるので止まってしまうということですかね
703 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 23:27:24.60 ID:jnDGFLZz0.net] std::getline()は読み込んだ文字列に改行文字を含めないから 行末まできちんと読んだのか 文字数カウントのせいで読み込みが行の途中でぶちきれたのか 直ちにはわからないといいうアホウな仕様 判別には結局std::basic_istream<T>::unget()の助けが要る C++標準ライブラリのうちストリーム関連だけは腐っているからC言語のを使いなしゃれ ※ 個人の感想です
704 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 23:28:25.97 ID:jnDGFLZz0.net] 訂正 △: C++標準ライブラリのうちストリーム関連だけは腐っているからC言語のを使いなしゃれ ◎: C++標準ライブラリのうちストリーム関連だけは本当に腐っているからC言語のを使いなしゃれ
705 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 01:02:22.15 ID:mI6/gPTY0.net] 入出力はCもC++もクソまみれだからなぁ ちょっとコンソール出力を整形しようとして、あの肥溜めのクソくだらない落とし穴地獄にいちいち付き合わされた結果 プログラミングそのものが嫌いになる人達が山のようにいるのが本当に残念だ
706 名前:デフォルトの名無しさん [2018/03/20(火) 01:12:22.56 ID:PXcTmg8I0.net] いるか?
707 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 01:20:34.94 ID:mI6/gPTY0.net] 自分が知ってる昔はいっぱいいたけど 最近だとスクリプト言語から先に入るから減ってるのかね?
708 名前:はちみつ餃子 mailto:sage [2018/03/20(火) 01:21:52.68 ID:N1yoGURK0.net] オブジェクトの外部表現を型ごとに定義できる iostream は悪くない設計だと思うんだけどなぁ。
709 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 01:41:51.26 ID:PjVFN34O0.net] ローカライズに向いてない。 打鍵数が倍増どころじゃない。 モダン言語はみなprintfライクだしねー
710 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 02:48:01.36 ID:PXcTmg8I0.net] printf()は便利ではあるが桁を揃えて出す時に面倒になることもある。 特にこの頃は UTF-8 で漢字混ざりだと文字幅とバイト数または文字数が一致しない。 そもそもそんなものの一致をあてにすること自体が間違いかも知れないが、Unicode には一応 HALF WIDTH, FULL WIDTH 等があるんだから何とかしてこれを生かした フォーマッタが欲しいところではある。
711 名前:デフォルトの名無しさん [2018/03/20(火) 06:49:53.60 ID:eswqOupsM.net] >>673 >>674 あるクラスがあって、その中でスレッド立ててるの それでクラスのデストラクタが呼ばれたら、メンバ変数のスレッドポインタをつかってスレッドcancel->joinってやろうとしてて それでjoin呼ぶあたりで落ちるんだよね 作られた逆順ってことはデストラクタのほうが先に実行かな?それだとメンバ変数はいきてるよね
712 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 06:55:01.02 ID:83N3dpVy0.net] streamはコンソールの入出力のためだけにあるわけじゃないから
713 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 06:55:05.50 ID:Wsijl5j90.net] つーてもcoutだってsetw/setfillはあんまり使いやすくないしなあ operator<<をユーザー定義できるのはありがたいけどね
714 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 13:10:27.33 ID:geezFnQ40.net] >>689 デストラクタの実行中はそのクラスとその派生元クラスのメンバ変数はまだ使える 必ず落ちるならデバッガでバックトレース見てみたら?
715 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 19:32:56.49 ID:mI6/gPTY0.net] 別の原因に見える まずデストラクタじゃなくて普通のメンバ関数で明示的に呼んで止めた時に大丈夫か確認してはどうか
716 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 19:45:17.42 ID:KQMGt9+Dd.net] pthread_cancel はいろんなことがよく分かっている人しか使ってはいけない
717 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 22:33:41.91 ID:f35CyiEk0.net] >>686 「<<」と「>>」の2種類しか用意できんやんけ それらを表示と入力に割り当ててしまえば結局シリアライズのための固有なメソッドなりインターフェースなりを別途作らねばならんぬ、 そもそもの構想からして頓挫してゐる、 頓挫してゐるのだ…!
718 名前:はちみつ餃子 mailto:sage [2018/03/20(火) 23:55:08.06 ID:N1yoGURK0.net] >>695 表示用とシリアライズ用はストリームの性質で切り替える筋合いのものだろ? シリアライズ用のストリーム
719 名前:型を用意してオーバーロードすればいいんじゃね。 [] [ここ壊れてます]
720 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 00:33:52.80 ID:7c9Ne47J0.net] ちょっなんで数億年の生物史史上はじめて ようやっとSTDINとSTDOUTとSTDERRの3種類に世界が抽象化されたストリームという概念|を 細分化するという元の木阿弥にしますか;; 藻前は some_command | tee result.txt > some_file.bin とかいったパイプやリダイレクトを表示専用とかシリアライズ専用とかに分けたいのかっていうか、
721 名前:デフォルトの名無しさん [2018/03/21(水) 00:44:24.33 ID:p0rFESlF0.net] なに藻前って
722 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 01:10:44.31 ID:MouF+uE40.net] >>697 お前は何を言ってるんだ。 ここで言ってるストリームは C++ 用語のストリームだぞ。 「ストリーム『型』」ってわざわざ書いてるんだからわかれよ。 下位レイヤでは好きなところに繋げればいい。
723 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 01:18:27.48 ID:9NBOfW2C0.net] streamとstreambufの違いを理解しよう
724 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 01:24:40.58 ID:MouF+uE40.net] 要するに std::basic_ostream を継承した何かを作ればいいんだ。
725 名前:デフォルトの名無しさん [2018/03/21(水) 06:52:22.30 ID:fTbDiwfs0.net] ストリームはもう捨てたほうが良いぞ。 おじさんからの警告だ。
726 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 07:14:12.04 ID:2n7LolrI0.net] 便利そうに見えて便利に使えない それがstream
727 名前:デフォルトの名無しさん [2018/03/21(水) 07:18:35.01 ID:zecIlzA/0.net] 「29歳既婚、2年前に会社を辞めた。ボードゲーム作りを始めて3700万円を 売り上げたけど何か聞きたいことはある?」回答いろいろ labaq.com/archives/51880196.html 日本ボードゲーム界の異端児に聞く!ボードゲームデザイナーとして生きていくには? https://bodoge.hoobby.net/columns/00013 はじめてボードゲームを作ってはじめてゲームマーケットに出店した ので、ひとり反省会をしてみる。 datecocco.hatenablog.com/entry/2015/11/26/000000 はじめて作ったボードゲームを売った話 nrmgoraku.hateblo.jp/entry/2017/05/17/210000 ボードゲームイベント「ゲームマーケット」から業界が見えた! https://entertainmentstation.jp/61107 ゲームマーケットに挑む人向けガイド spa-game.com/?p=4830 ボードゲームはどう作るのか、自分なりに考えた roy.hatenablog.com/entry/2014/07/09/124824 オトナも遊べるボードゲーム!自作するといくらになるのか www.d-laboweb.jp/special/sp312/ ボードゲームの展示イベント「ゲームマーケット」の成長記録からこれからの 市場に必要なことを妄想してみた。6年間の来場者数推移(2016年4月時点調べ) https://bodoge.hoobby.net/columns/00001 ボードゲーム市場がクラウドファンディングの出現で急成長を遂げ市場規模を拡大中 gigazine.net/news/20150820-board-game-crowdfunding/
728 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 10:36:30.48 ID:DQv7yGEy0.net] >>697 カンブリア紀からオルドビス紀にかけて行われた抽象化は 今でいうインターフェイスの考え方で、当たり前だが インターフェイスを継承する実装クラスは無数にあってよい そういうのは元の木阿弥とは言わないぞ
729 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 15:09:48.71 ID:MouF+uE40.net] >>697 さっき >>699 で説明した C++ の話題を置くとしても、 (まあ C++ スレで C++ の話題を置いちゃうのはどうかと思うが) 標準入力、標準出力、標準エラー出力のみっつしかないってことはない。 エラー出力をリダイレクトするときに 2> って書くの、どういう意味だと思ってる? 2 はファイルディスクリプタな。 デフォでオープンされてるのが 0, 1, 2 ってだけで、やりたければ 3 でも 4 でも使っていい。
730 名前: mailto:sage [2018/03/21(水) 15:42:02.21 ID:ZGJmhAHm0.net] >>706 空いているディスクリプタが使用されるとしても、自分で特定の数字を指定してディスクリプタにすることはできなかったんじゃなかったかな?
731 名前: mailto:sage [2018/03/21(水) 15:50:19.07 ID:ZGJmhAHm0.net] >>707 失礼、dup2() というのがあったね…
732 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 15:58:29.69 ID:9NBOfW2C0.net] coutがSTDOUTにつながってるだけでここは何につなげてもいいということ streambufの中身はただの配列でもいいし、アプリケーションのロガーでもいいし、循環バッファでもいいし、通信のポートでもいい
733 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 19:28:41.53 ID:TV3lE0eZ0.net] シリアライズするときはバイナリ表現にしたいし ログするときは文字列表記にしたいし
734 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 20:00:34.84 ID:MouF+uE40.net] >>710 だからそれはストリームオブジェクトの型で切り替えろって言ってるんだろうが
735 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 20:30:34.07 ID:VVSY5O5Ed.net] それを嫌だって言ってんだよ バイナリの読み書きは write() だの read() で十分
736 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 20:33:11.12 ID:MouF+uE40.net] read なり write なりを「使う」のは別にいいよ。 それを C++ 上でどのように抽象化すればいいかって話なんだから。 そういうレイヤの違う話を混ぜ込んでくるなよ。
737 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 20:43:51.09 ID:KgSvodNyd.net] そこで新しい型を設けてまで << を使う意味がない cout にバイナリでシリアライズするときはどうすんの? size_t serialize(const T& t, ostream& os) とかを各型用に書く方がマシ
738 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 20:47:43.15 ID:KgSvodNyd.net] バイナリでシリアライズするに際して 別の型のストリームオブジェクトを作ってまで << だの dec だの endl を使えるようにすることの利点を説明して欲しい
739 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 21:36:05.23 ID:9NBOfW2C0.net] 例外を除いて operator<<()は書式化出力 write()は非書式化出力 なのでバイナリを出力するときはwrite()を使うべき >size_t serialize(const T& t, ostream& os) シリアライズのような複雑な操作をするときはこれは悪い選択じゃない というかstreamそのものを放り込むのはたまに見かける
740 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 22:02:23.07 ID:52xrh1HkM.net] えっブロックデバイスにもStreamを
741 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 22:15:54.63 ID:MouF+uE40.net] >>716 書式化 (formatted) ってのと、結果がバイナリかというのは直行する概念だよ。 シリアライズってのはオブジェクトのバイト列をそのまま出力することじゃなくて、 バイナリ形式の特定のフォーマットにして出力することだろ。 それは書式化って言うんだよ。
742 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 22:26:24.75 ID:MouF+uE40.net] >>715 マニピュレータを使える意味はないかもな。 使えないように定義することも出来るし、意味がないなら使えないようにしておくべき。 ここでは抽象化の話をしているんだ。 出力先が人向けのテキスト表現であるか機械向けのシリアライズ表現であるかによって 書き方を変えなきゃならない、相手を意識しなきゃならないというよりは、 相手によって自動で切り替わって欲しいってことなんだよ。 意識しなくていいデザインってのは意識しにくくなるってことと表裏一体だから、 見えなくなるのが気にくわないってのならわかる。
743 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 22:26:32.59 ID:OwhHF7Zm0.net] 直交
744 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 22:29:29.81 ID:MouF+uE40.net] >>720 スマソ。 >>718 の直行は直交の書き間違いやね。
745 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 23:13:33.75 ID:NRxI71LE0.net] 無意味な処理が嫌だとか言っておきながら ここでは無駄の塊みたいな方法を勧める アホですね
746 名前:はちみつ餃子 mailto:sage [2018/03/21(水) 23:50:04.75 ID:MouF+uE40.net] >>722 俺は一貫して抽象化の話をしてるつもりなんだが。 プログラマの意図を表現できる書き方をすべきって話をしてんの。 無意味な処理をしろと書いてあるのをプログラマの意図として読み取っていいのか? そうじゃないだろう。 C++ がせっかく用意しているライブラリを活用するのが無駄なのか? そうじゃないだろう。
747 名前:デフォルトの名無しさん [2018/03/22(木) 07:21:49.59 ID:tiDItZ1f0.net] ハッキリ言ってストリームは蛇足だったわ。 廃止したほうが良いわ。
748 名前:デフォルトの名無しさん [2018/03/22(木) 07:25:52.15 ID:tiDItZ1f0.net] Boostもそうだけど、有り余るC++のパワーをカッコよく使いこなそうとしてやっちまったみたいな。 もうちょっと使う側の立場にたつべきだな。
749 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 08:38:59.71 ID:0Y4DSJfq0.net] 黒魔術だなんだ言って楽しめないようではC++は向いていない
750 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 10:14:29.52 ID:Q5Rs9TJ/0.net] 蛇足ねえ。。。 禿本1stでoperator overloadのデモ用に作られたサンプルなんだが そういうのは後で取って付けた存在といえるのか?
751 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 17:28:14.63 ID:PBLsyShY0.net] 業界全体としては奥の深さを求める人(求道者)を一か所に集め留めるのには非常に有益な言語
752 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 17:34:08.02 ID:0Y4DSJfq0.net] そのうちAsioやRangeあたりも標準化されるだろうし もうその方向に突き抜けてほしい 使いやすい言語なんか他にいくらでもある
753 名前:はちみつ餃子 mailto:sage [2018/03/22(木) 17:41:04.44 ID:HExEyyqO0.net] 具体的にどういうときに不便なのか語れよ。 使いにくいってだけじゃ何にもわからん。
754 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 17:43:00.10 ID:0Y4DSJfq0.net] C++に関しては慣れてない人がそう言ってるだけだから
755 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 19:57:57.53 ID:sR+euIcT0.net] >>727 どの資料だったか覚えてないけど、演算子オーバーロードに関して 先生は「元の演算子の意味とかけ離れた挙動をさせるのは避けるべきだ」 みたいなことも書いてるよな。 まぁ、原則は指針であって絶対の規則じゃないわけだけど、 << >> をビットシフトからストリーム入出力に振り替えておいて どの口で言うか、このハゲッー! とか思ったり。
756 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 20:06:11.34 ID:0Y4DSJfq0.net] >>732 ストリームのような周知の事実になっているものはそれには当てはまらないでしょ
757 名前:はちみつ餃子 mailto:sage [2018/03/22(木) 20:22:42.90 ID:HExEyyqO0.net] >>732-733 まああれくらいのものになると、オブジェクトに追加で突っ込んでいくような動作が「元の演算子の意味」になっちゃってるよな。 そんなことより C++20 に入る予定のカレンダーでは日付を 2018y/mar/22 とか書けるらしくて、 これはさすがにクソやろ……。 これもいずれ普通に受け入れる気持ちになるだろうか。
758 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 20:47:25.31 ID:0Y4DSJfq0.net] >>734 既にfilesystemのpathが/で階層作れるから current_path / "aho" / "baka"みたいに C++の演算子は連想ゲームだ
759 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 22:18:28.94 ID:Q5Rs9TJ/0.net] >>732 あの頃の禿はreverse_iteratorなんて思いもよらず operator+が減算の動作をすることを否定してたね
760 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 00:38:32.35 ID:2SqL+aT8a.net] >>734 日付の表記は何種類かあるし年/月/日でも日/年/月でも表せるなら結構便利だと思う。
761 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 08:21:50.21 ID:VCdaFb7Y0.net] >>734 標準に「日付を表す型」みたいのが追加され、 それ用リテラルの接尾語(のひとつ)が ""y で 2018y
762 名前: は2018年を表す、 さらにこの型では / は日付要素を区切る演算子としてオーバーロードされてる。 …といった感じか? 確かに虚心坦懐に / を見れば、割り算のコンピュータ向け代用記号だけでなく 日付の区切りや、ファイルシステムの階層区切りでもあるけど。 [] [ここ壊れてます]
763 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 09:13:18.25 ID:xSYf1jdZ0.net] aのb乗 a^b a**b
764 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 10:31:52.82 ID:fMiQp2pkd.net] こんだけ演算子は深いのになぜか未だに[]は引数を一つしか取れない
765 名前:デフォルトの名無しさん [2018/03/23(金) 10:45:38.60 ID:COiOJTLla.net] 「静的」、「動的」というのがよく分からないのですが、詳しく書いてある本はありますか? ヒープ領域がどうたらとかいうのもよく分かりません。 スタックとかいうのもよく分かりません。 詳しく解説している本を教えてください。
766 名前:デフォルトの名無しさん [2018/03/23(金) 10:48:57.55 ID:COiOJTLla.net] ロベールのC++の本を読んでいて疑問に思いました。
767 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 19:28:55.75 ID:FQA7q+b8M.net] >>738 > …といった感じか? そんな感じらしい d.hatena.ne.jp/yohhoy/touch/20180322/p1 日本だと基本 年/月/日 しかないしソースコードに 睦月、如月、弥生 なんて書く奴はいないからいまいち便利さがわからんけどあちらの人にとっては便利なんだろうか
768 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 19:30:12.07 ID:5ELqDBlL0.net] ポップとプッシュの概念もよく分かってないのでは www.cc.kyoto-su.ac.jp/~yamada/ap/stack.html これが分かって来るとC++に於けるバッファオーバーフローBOF攻撃の仕組みが分かって来る
769 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 19:42:22.13 ID:5ELqDBlL0.net] バッファオーバーフロー: #1 概要 https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c901.html
770 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 19:52:45.96 ID:e6tCc9HsM.net] 五曜は対応してくれると有り難いかも知れないけど 他はいらんな
771 名前: mailto:sage [2018/03/23(金) 19:55:59.42 ID:J4dYcx4H0.net] >>741 C/C++ のメモリ構造について、になります。 これは基本的な事項で、初級を脱するためにはぜひとも必要な知識なんですが、 そのわりにあまりに解説されることがないような気がします 適切な説明がないものか…
772 名前: mailto:sage [2018/03/23(金) 19:59:40.83 ID:J4dYcx4H0.net] >>741 まず、メモリの管理方法として 1. スタックエリア、に格納するやり方 2. ヒープエリア、に格納するやり方 の大きく分けて二通りがあり、 2. ヒープエリア、二格納するやり方について 2-1. 「静的」:static キーワードを使うやり方 2-1. 「動的」:malloc()/free() または new/delete を使うやり方 が分類されます。
773 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 20:10:28.07 ID:e6tCc9HsM.net] データセグメントって無くなったの?
774 名前:デフォルトの名無しさん [2018/03/23(金) 20:39:25.53 ID:COiOJTLla.net] >>747-748 ありがとうございました。 あまりそういう本はないんですか。 もしかしたら、ヘネシーらのコンピュータのハードの本とか読まないといけないんですかね? あるいはコンパイラの本ですかね?
775 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 20:40:47.42 ID:l1/KZZgNM.net] >>748 一般的に、静的領域をヒープとは呼ばんだろ
776 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 20:41:24.55 ID:qmCr5Czp0.net] こういうのはネットで覚えたからどういう本に書いてあるかはわからん
777 名前: mailto:sage [2018/03/23(金) 20:45:34.35 ID:J4dYcx4H0.net] >>750 手っ取り早いのは「マシン語」を書いてみる、マシン語(アセンブリ言語)のルーチンを C にリンクさせる、ていうのが王道ですが、 昨今はマシン語のいい教科書がない、という気がします gcc のインラインアセンブラとかが有望だとは思いますが、まあ簡単にマシン語を記述している教材なんていうものが思いつかない、マシン語の需要というか動機がないのかもしれませんが
778 名前: mailto:sage [2018/03/23(金) 20:46:44.14 ID:J4dYcx4H0.net] >>751 うーむ、たしかに static を「ヒープ」とは言わないかもしれませんね…
779 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 20:47:37.33 ID:COiOJTLla.net] >>753 ありがとうございました。 マシン語の本を探してみます。 >>752 ありがとうございました。 本に書いていない場合には仕方がないのでネットで調べてみることにします。
780 名前:はちみつ餃子 mailto:sage [2018/03/23(金) 22:32:48.28 ID:ehYNLgPn0.net] どうだろ? C++ の言語仕様的にはオブジェクトの寿命に違いがあるだけで、 それを実現するメカニズムについては詳細な規定があるわけではない。 まずは C++ のパラダイムの中で理解を深めれば自然に理解できるんじゃないの? 手を広げすぎても収集が付かなくなる気もするんだけどなぁ。
781 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 22:56:58.27 ID:io4DvPx8a.net] マシン語に手を出すのは飛躍しすぎだしやめといた方がいい。ある程度C++になれてより深く理解したいと思うようになってからがいいよ。 動的、静的は大雑把に言えば、コンパイル時つまりソースを書いた時点で決まるものを静的、実行時に変化するものを静的と呼ぶ。 変数の型とかメモリ領域の確保の仕方とか、いろんな文脈で使われる。
782 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 22:57:57.59 ID:io4DvPx8a.net] >>757 実行時に変化するのは動的でした
783 名前:デフォルトの名無しさん mailto:sage [2018/03/23(金) 23:15:38.28 ID:g9Gf634nM.net] >>757 決まる、決まらないの主語は何でしょうか?
784 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 00:54:38.69 ID:LvcaB4Q+0.net] メモリについて知りたいんならC言語から始めたら良い Unixの移植目的で設計されたC言語は、実行効率のためほとんど必然的にメモリが透けて見える言語になったんである 『プログラミング言語C』という名著もある これの後ろの方のmalloc()の実装サンプルまで通読したら シングルCPUの範疇ならメモリについて嫌でもワカル 『プログラミング言語C++』と違って三日もあれば読めれる手頃な分量やしな!
785 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 01:27:57.09 ID:eFb1d56B0.net] >>759 横だが。 何でも、だよ。 型なら静的型、動的型というし、メモリ確保なら静的確保、動的確保という。 マシン語は飛躍しすぎ。 CのエンハンスとしてC++を使うのならマシン語(インラインアセンブラ)もありだが、 C++をJava/C#/C++の並びで使うつもりならインラインアセンブラとか禁止でしょ。 というかそもそもその辺が分からない=全くの初心者がC++からやろうというのが間違い。 PythonかRubyあたりから始めとけ。(どっちも俺は知らんけど)
786 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 01:40:25.62 ID:nPxx/G4d0.net] コンパイラがコンパイル時に決めるものが静的、出来上がったプログラムを実行した時に決まるのが動的 C++だとそういう理解の方がわかりやすいと思う マクロ、テンプレート、constexpr、リテラル、式や変数や関数やクラスの宣言型なんかは静的 静的なものは全部コンパイラが決めるからプログラムの実行時にはいちいち計算しないし、バグで決められなかったらコンパイラが怒る 変数やインスタンスの中身、関数呼び出し、仮想クラスのオブジェクト型なんかは動的 実行環境や食わせた入力・ファイルなんかに依存するからプログラムを実行してみないと決まらない 動的なバグはコンパイラは感知できないから客先でプログラムを実行するとクラッシュする 適当だけどだいたいこんな感じ
787 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 02:04:25.06 ID:eFb1d56B0.net] 細かいようだが、 コンパイル時に確定=静的 実行時に確定=動的(=コンパイル時に確定できない) で若干の例外(staticとか)があるが大体あってる。 「プログラミング言語C」はやめとけ。名著だが、あれは 「既にプログラミングを出来る人が、C言語を学ぶ」用であって、全くの初心者じゃ読めない。 「プログラミング言語C++」も止めとけ。あれも「既にCを使える人が…」で以下同文。 他本は総じてゴミなのも事実だが。
788 名前:デフォルトの名無しさん [2018/03/24(土) 02:06:26.05 ID:Z79Bg+7E0.net] 特定のアドレスにデータを配置して割り込みかける必要があるからじゃないだろか。
789 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 02:09:36.82 ID:nPxx/G4d0.net] 予約語のstaticは転用されまくってわけわからなくなってるので 「静的」とソースコード上のstaticは全く別物だと思った方がいい
790 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 02:15:26.90 ID:qYWJwKPe0.net] その辺整理されないんだろうかね そう言うものだという説明で 不本意ながら納得する事何十年
791 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 02:29:56.73 ID:eFb1d56B0.net] そんなに混乱するか?例外としてしまって問題ないと思うが。 俺は規格には詳しくないが、(というより色々混ざってしまっているが) ・Cのstatic関数=ファイルスコープに限定、externの反対 --- (A) はC++ではなんとかされたのではなかったっけ?(どうせ使わないからどうでもいいが) ・staticクラス、あるいはクラスのstaticメソッド --- (B) は「静的」で矛盾しないから、そもそも問題ない。 ・関数内static変数でプチグローバル(みたいなやつ) --- (C) も普通にクラスにしろ、って話でしかないし、使わないだろ。 結果、普通に使う分には特に混乱しないと思うが。 文法オタクは気にするのかもしれんが。 (C)は「動的関数にしよう」という意図があったのかもしれんが、 結局C/C++の世界は静的関数しかないから、意味無かったし。 というかそもそも俺は動的関数のメリットがよく分からん。 C#は動的関数だが、結局ロード/アンロードはアセンブリ単位=ほぼ起動時に纏めて、 であって、活用してない。 Javaは動的関数でメリットを享受してるんだっけ?(知らんから教えて)
792 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 02:33:41.17 ID:y/z0A0hW0.net] https://ideone.com/Epp30z お兄ちゃん助けて、コンパイルが通らないの。 VCで開発してます。 jsonのメモリーモデル研究にとりあえずシェアードPTRの組んでそれからやっぱユニークPTRの変更しました。 色々いじってるのですが、意味不明なエラーが出てさっぱりわかりません。 自前のコードなら自分でどうにかするのですが、コードステップするとライブラリの中でえらーおこしててさっぱりです。 どなたかご教示ください。お願いします。
793 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 02:46:21.51 ID:nPxx/G4d0.net] std::vector<UniqueObject>にstd::pair<UniqueObject,UniqueObject>突っ込もうとしてんじゃん ちゃんとエラーメッセージ読めよ
794 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 02:51:39.38 ID:y/z0A0hW0.net] え?何行目ですか?そんなバカな・・・。え?
795 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 03:47:44.28 ID:jOWDr2Es0.net] static関数は恐らくリンク工程がdynamicの場合があるため それに対してのstaticなんだろな
796 名前:デフォルトの名無しさん [2018/03/24(土) 03:55:06.40 ID:Z79Bg+7E0.net] 毎回思うんだけど、なんでgccで勉強しようとするんだろうな。 エラーメッセージ読めと言われても読めるわけがない。 一番わかりにくいメッセージを出すコンパイラで勉強する子が不憫でならない。
797 名前:デフォルトの名無しさん [2018/03/24(土) 04:28:06.63 .net] >>772 VCで開発って書いてんだろーが
798 名前:デフォルトの名無しさん [2018/03/24(土) 04:30:46.18 ID:Z79Bg+7E0.net] 確かに書いてあるな。 じゃあエラーメッセージ読めよ。
799 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 05:34:00.15 ID:GrrVfR010.net] 読む気のない奴は何使ってもダメだという良い例
800 名前:デフォルトの名無しさん [2018/03/24(土) 06:12:32.26 .net] いつも大量のWarningが出るのを真面目に対処せず放置してるからErrorが出ても理解できない罠
801 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 06:12:34.93 ID:y/z0A0hW0.net] https://ideone.com/FN5IrI 理屈の一つは多分。 イニシャライザーリストが要素をconstで構築するからmoveできない? 内部でconst_castするわけないしこれ詰んでない? あるぅぇ〜。なんでじゃー。
802 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 06:25:04.10 ID:0qB0BmlJ0.net] static_castの動作内容は翻訳時に全て確定する dynamic_castの動作内容は実行時のvtableにより変化する static_assertは翻訳時に検査を行う assertは実行時に検査を行う static link libraryは翻訳時に結合する dynamic link libraryは実行時に読み込む
803 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 06:57:20.04 ID:XPzSeRia0.net] どうやら >>741 の質問は 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/
804 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 09:00:52.23 ID:eFb1d56B0.net] >>779 質問者はそれ以前の、プログラミング一般の「静的」「動的」の区別が付いてない。 スレ移動しても意味無い。というかどこのスレでも同じ。 C++のstaticは、Cのグダグダな仕様を引きずっているからおかしくなっているだけで、 C++で新たに設定されたstaticは他言語とも整合取れてる。 これに関しては「Cが悪い」でいいと思うよ。 説明している本が無いのは、そもそもそんなところで引っかからないだろう。 教習所でハイオクの話をしても意味無い。 一通り動く物を組めるようになるまではそれにフォーカスしろ、でいい。
805 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 09:28:18.28 ID:nPxx/G4d0.net] 静的動的の区別は大事だし引っかかりやすい所でもあるでしょ テンプレート引数に変数突っ込んでなんで動かないのぉぉとか初心者はよくあるよ 説明してる本がないって本当か?本当なら世の本がクソすぎる
806 名前:デフォルトの名無しさん [2018/03/24(土) 10:20:48.01 ID:Z79Bg+7E0.net] で、静的と動的の違いは何なんだよ。 ガンダムで説明してくれ。
807 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 10:26:44.70 ID:UtKAK1R90.net] staticとauto
808 名前:デフォルトの名無しさん [2018/03/24(土) 10:38:33.14 ID:Z79Bg+7E0.net] ガンダムで説明できないうちは理解できてることにならないぞ。
809 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 10:49:46.91 ID:jOWDr2Es0.net] アインシュタインみたいなこと言ってんじゃねえよ
810 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 11:08:12.95 ID:aqtEECgt0.net] ガンダム言語の表現力を信じろ
811 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 11:10:56.81 ID:eFb1d56B0.net] >>784 じゃあお前が説明しろよ。 お前は馬鹿だから出来ないと思うがな。 そもそも>>764 は誰向けのレスだよ?
812 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 11:18:43.16 ID:aqtEECgt0.net] コーディング規約にchar aznable禁止っていうのを見たことあるから C++にガンダム要素を入れるのはタブー
813 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 11:28:25.89 ID:eFb1d56B0.net] >>781 > テンプレート引数に変数突っ込んでなんで動かないのぉぉとか初心者はよくあるよ ねえよ > 説明してる本がないって本当か?本当なら世の本がクソすぎる 世の本は概して糞だ。これは事実だ。 というかここら辺の認識がずれるのは世代ギャップだ。 現状の本を書いてきている世代は全員CをやってからC++をやっている。 だから「静的」「動的」の区別が付かない状態でテンプレートを触ることがなかった。 当然そこを解説した本もそんなにあるはずがない。 お前らの世代がCをやらずにいきなりC++を始め、それで色々苦労した経験があるのなら、 お前らの世代の連中が本を書かなければならない。ただそれ以前に、 俺はその必要(全くの初心者がCをやらずにC++を始める)があるとは思えないが。 入門書を書いている連中はプログラマでも宣教師でもなく、ただのテクニカルライタだ。 だから需要(売れる)があれば書くだけ。今無いのは需要がないと見られているから。 俺もこの見方については同意する。 最初のプログラミング言語がC++ってのは単純に選択を間違えてる。
814 名前:デフォルトの名無しさん [2018/03/24(土) 11:30:12.41 ID:Z79Bg+7E0.net] C++とJavascript以外学ぶ必要があるとは思えない。
815 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 12:01:13.85 ID:3GLZsUhUM.net] >>790 それはさすがに世間が狭すぎる 土方志望としてもJava程度は触っとけ
816 名前:デフォルトの名無しさん [2018/03/24(土) 12:18:09.21 ID:Z79Bg+7E0.net] Javaは当初の理念を失ってしまったように感じる。
817 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 12:21:12.10 ID:aqtEECgt0.net] JavaはJVM上で動く一言語に成り下がったからな
818 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 17:03:55.62 ID:nPxx/G4d0.net] 今からJavaやるくらいならC#にしとけ
819 名前:デフォルトの名無しさん [2018/03/24(土) 18:05:30.46 ID:upExxHyGa.net] みなさん、ありがとうございました。 カーニハン他の本をまず読んでみようと思います。 >>794 そうなんですか? Robert SedgewickらのAlgorithmsという教科書がJavaで書かれているため、 Javaの本も買って読んでいます。 ところで、学術的?な本では、オブジェクト指向言語としてC++かJavaが 大抵使われていますが、C#は使われていません。これはマイクロソフト という一企業が設計した言語だからでしょうか?
820 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 18:06:22.88 ID:upExxHyGa.net] たとえば、プログラミングコンテスト関係の本では大抵C++が使われています。
821 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 18:07:40.93 ID:upExxHyGa.net] そういう理由から、本当はC++ではなくC# + Visual Studioを勉強したいのですが、 C++の本(ロベール)を買って読んでいます。
822 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 18:12:06.94 ID:aqtEECgt0.net] そのうち大抵の言語は経験なくてもリファレンス片手に使えるようになるから好きなもん使え
823 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 18:12:52.16 ID:0qB0BmlJ0.net] C++だって元々はAT&T製なんだが
824 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 18:20:10.81 ID:LkK69e8iM.net] javaも神託に従わないと訴えられるという…
825 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 18:50:18.42 ID:eFb1d56B0.net] >>797 なら素直にC#やっとけ。 その後に必要ならC++で何も問題ない。 C#は商業的につまずいたのでJavaほどの知名度はないが、 言語自体はJavaよりは断然いい。(後発だから当然だが)
826 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 19:07:41.38 ID:weQnYJFBd.net] ねーねー。 STL作った人は、共産主義国で食中毒にあって、ベッドの上で朦朧とした頭で閃いたって話だった気がしたけど、どっかにその話のソースある? ググっても見つからないよー
827 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 19:12:27.84 ID:UtKAK1R90.net] 神託は絶望の淵やタヒぬ直前に見えたりするもんやで
828 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 19:18:50.87 ID:LkK69e8iM.net] >>802 見つけてきたぞ。何処かで発表か何かするの? www.stlport.org/resources/StepanovUSA.html ところでこのインタビューにあるtamagawa numberってなんだろう
829 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 19:25:16.65 ID:upExxHyGa.net] 玉河数 https://ja.wikipedia.org/wiki/%E7%8E%89%E6%B2%B3%E6%81%92%E5%A4%AB に書いてありました。
830 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 19:30:46.97 ID:LkK69e8iM.net] 玉川数じゃ出てこないわけだ
831 名前:801 mailto:sage [2018/03/25(日) 06:55:48.47 ID:FlrNzX5dd.net] 皆様ありがとーございます。 論文の枕で書こうかと思いまして
832 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 11:36:01.08 ID:Lywxeunja.net] char* str = "abc"; とは書かずに、 const char* str = "abc"; と常に書くようにと本に書いてあります。 理由は文字列リテラルは直接書き換えてはいけないからであると書かれています。 ●コンパイルは通っても、実行するとエラーになることもある。 ●同じ内容の他の文字列リテラルまで書き換えられてしまうことがある。 とも書かれています。 禁止されているにもかかわらず、コンパイルが通る可能性があるというのはどういう ことなのでしょうか? (1)コンパイルエラーが発生 (2)コンパイルは通るが実行するとエラーが発生 (3)コンパイルは通り、実行してもエラーが発生しないが、同じ内容の他の文字列 リテラルまで書き換えられてしまうという不具合が起こることがある。 コンパイラーの設計者には、(1)、(2)、(3)の選択肢があるのはなぜでしょうか? 禁止されているのだから、一律にコンパイルエラーにするのが自然に思われます。 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
833 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 11:39:58.12 ID:Lywxeunja.net] 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)
834 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 11:41:04.91 ID:tMBl9Z88M.net] >>808 >>469
835 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 11:44:30.72 ID:Lywxeunja.net] すみません。 カーニハンらの本の日本語版のp.127に書いてありました。 char amessage[] = "now is the time"; char *pmessage = "now is the time"; の違いについてです。 そして、文字列の内容を変えようとすると、その結果は不定となる と書かれいます。なぜ不定としているのかについては理由は書いてありません。
836 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 11:46:43.36 ID:Lywxeunja.net] >>810 ありがとうございました。 故意に違反状態にするということもあるんですね。 正直言って無駄に分かりにくいところがあるんですね。
837 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 12:26:26.43 ID:NNknxHvv0.net] うん過去のもうメンテナンス不能なコードは膨大なんでそうするしか仕方ないんだよ
838 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 12:40:02.16 ID:L+/M5ACh0.net] 以前にも同じ質問出たし荒しかとおもた
839 名前:デフォルトの名無しさん [2018/03/25(日) 13:01:03.23 .net] C++相談室で出す話題でもなかろに
840 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 13:06:46.65 ID:zn3nsIh00.net] 一応初心者向けのスレっていう体じゃなかったのか?
841 名前:デフォルトの名無しさん [2018/03/25(日) 13:52:43.26 .net] ここか、 C言語なら俺に聞け 145 mevius.2ch.net/test/read.cgi/tech/1519046038/ せめてここ向きの質問だろう 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 mevius.2ch.net/test/read.cgi/tech/1509780815/
842 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 15:10:26.39 ID:9t80sXyiM.net] >>811 旧K&Rつまり第一版は書換可能だったの
843 名前:デフォルトの名無しさん [2018/03/25(日) 15:22:53.51 .net] C++スレでK&Rの話すんなや
844 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 17:38:21.10 ID:S7OmeNGW0.net] >>808 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に従う限りコンパイルは通ることになっていた名残だ
845 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 17:59:44.09 ID:oI54xnZZ0.net] するなと言われてもスーパーセットなんだからC言語の記法がどこまで通じるかは重大な問題だと思う
846 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 18:24:54.69 ID:S7OmeNGW0.net] 建
847 名前:O「それは間違い」なんだが 本音ではそのとおり [] [ここ壊れてます]
848 名前:はちみつ餃子 mailto:sage [2018/03/25(日) 18:36:39.65 ID:vqcfoPV60.net] >>821 スーパーセットにするというよりは、 つかず離れずというポジションかなぁ。 C++ が先にやったのを C で取り入れたことも有るし。
849 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 18:55:57.82 ID:HW+VfLnzM.net] 可変長配列とか名前付きの構造体初期化とかc++に取り込まれたんだっけ? スーパーセットは20年前にとっくに終わったんじゃないかと。 すでに導入されてたらスマソ
850 名前:はちみつ餃子 mailto:sage [2018/03/26(月) 05:22:15.91 ID:S9VCdiyC0.net] >>824 たぶん入ってないな。 可変長配列 (VLA) って確か C でもオプショナルに格下げされてただろ。 (C11 から) C++ のイニシャライザはだいぶん複雑になっちゃったから辻褄の合うようにするの大変だろうし、 もうやらないんじゃないかな。
851 名前:デフォルトの名無しさん mailto:sage [2018/03/26(月) 11:36:03.37 ID:pTR+m2Zc0.net] 実用レベルではほぼスーパーセットといっても差し支えない
852 名前:デフォルトの名無しさん [2018/03/26(月) 11:51:36.03 .net] 実用レベルではCがC++のサブセットだし🙄
853 名前:デフォルトの名無しさん mailto:sage [2018/03/26(月) 12:28:17.38 ID:tDSLT7/Xd.net] 実用レベル:=C++にも存在する機能に制限されたC
854 名前:デフォルトの名無しさん mailto:sage [2018/03/26(月) 22:04:18.63 ID:cCKTbT1E0.net] C11の_GenericとかそれCで敢えてやる必要あるの?って思う
855 名前:デフォルトの名無しさん mailto:sage [2018/03/26(月) 23:52:36.66 ID:TogAHTIh0.net] 微妙に使い辛い機能だし分からんでもないけど、本当の名前がちゃんと見えてるのはちょっと安心感
856 名前:デフォルトの名無しさん mailto:sage [2018/03/26(月) 23:58:29.09 ID:bouVP8Z10.net] >>829 スイッチで選択するのをスマートにした感じやな。 イマイチ〜〜。 テンプレート一個書いて複数にジェネレートさせる方が好み。
857 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 01:36:13.83 ID:tW2Kdf3t0.net] あるクラスAのラッパークラスWで A&を受け取る場合はWの全てのメソッドが使えて const A&を受け取る場合はWのconstメソッドだけが使えるように制限する設計って ありましたっけ?
858 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 01:42:41.92 ID:6oSpwfuc0.net] おーばーらいど。
859 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 06:31:21.75 ID:m3riabwu0.net] あとは operator -> でポインタ返すやり方とかだな
860 名前:デフォルトの名無しさん [2018/03/27(火) 06:53:48.55 .net] >>832 制限っていうのは、コンパイルエラーにしたいの?
861 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 07:01:18.53 ID:tW2Kdf3t0.net] 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メソッドが対応して存在している みたいな
862 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 07:12:14.69 ID:6oSpwfuc0.net] 設計がダサい気がするけど、何に使うんだろう。
863 名前:デフォルトの名無しさん [2018/03/27(火) 07:35:02.82 .net] >>836 NGっていうのは、コンパイルエラーにしたいの?
864 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 07:36:16.27 ID:tW2Kdf3t0.net] >>838 そうですね
865 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 07:40:26.10 ID:ofLFYE4b0.net] >>837 明確な欠点を指摘出来ない時に使う言葉だな 「ダサい」
866 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 11:34:17.37 ID:bA2HN2rY0.net] クラスを W MutableW (変更可能なW) と分けるのがよく使われる現実的な解だと思う MutableW は W の派生型として実装すると楽 >>836 >で、Wの非constメソッドには必ずconstメソッドが対応して存在している この部分は意味不明なので聞かなかったことにしておく
867 名前:デフォルトの名無しさん mailto:sage [2018/03/27(火) 12:08:25.74 ID:tW2Kdf3t0.net] なるほど、ありがとうございます
868 名前:はちみつ餃子 mailto:sage [2018/03/28(水) 16:37:44.82 ID:jJD3k2j80.net] >>832 テンプレートにしておいて SFINAE で分岐するという方法はとれるが……。
869 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 18:32:49.43 ID:rzqMRle+a.net] C言語ってこんなので就職できるらしい… 【企業】「”C言語…?どこかで見た”程度でOK」 名古
870 名前:屋のアテック、求人広告が話題に エンジニアの人材不足、面白求人でカバーできる? https://asahi.5ch.net/test/read.cgi/newsplus/1522229305/ 本物のC++プログラマーを募集してる某社とはえらい違いだな [] [ここ壊れてます]
871 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 20:11:10.89 ID:nsQQ2hCk0.net] 永久にPHP弄らせる要員としては十分
872 名前:デフォルトの名無しさん [2018/03/28(水) 20:50:12.70 .net] >>844 言語ヲタなんてプロジェクトに一人いれば十分だし 兵隊は言語の知識よりコミュニケーション能力、報連相、Excel方眼紙スキルが大事よ
873 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 20:55:08.40 ID:NO5LUaew0.net] 上司を黙らせるスキルでしょ 盛らないでね
874 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 22:09:32.87 ID:nsQQ2hCk0.net] 会社員なのだから上司が納得することだけが重要
875 名前:デフォルトの名無しさん [2018/03/28(水) 22:29:42.33 .net] 上司なんか関係ないやろ お客さんを味方に付けることや
876 名前:デフォルトの名無しさん mailto:sage [2018/03/28(水) 22:33:35.60 ID:fYzIlbdt0.net] 関係あるだろ
877 名前:デフォルトの名無しさん [2018/03/28(水) 22:46:49.55 ID:2H+8IznE0.net] 上司も客も関係無いよバカども プログラミングの話だバカども
878 名前:はちみつ餃子 mailto:sage [2018/03/28(水) 23:56:58.42 ID:jJD3k2j80.net] マ板でやれ
879 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 00:40:46.75 ID:zCjdEvGWM.net] visualstudio2017 Win32アプリケーションでSQLiteを使いたいのですが Nugetにそれらしきものが合ったのでインストールしようとしたのですが以下のエラーでインストールできません。 https://www.nuget.org/packages/SQLite/ パッケージ 'SQLite 3.13.0' をインストールできませんでした。このパッケージを 'native,Version=v0.0' を対象とするプロジェクトにインストールしようとしていますが、 そのフレームワークと互換性があるアセンブリ参照またはコンテンツ ファイルがパッケージに含まれていません。 どうすればよいのでしょうか。
880 名前:デフォルトの名無しさん [2018/03/29(木) 00:42:57.97 ID:+dX3Weor0.net] CoAppのタイムスタンプ調べてみて。 NuGetは捨てろ。
881 名前:デフォルトの名無しさん [2018/03/29(木) 00:48:50.94 ID:+dX3Weor0.net] 代わりに何を使うか。 VCPKG。 ただし、MSは三年後にVCPKGも捨てているだろう。 逆に我々がVSを捨てる時期に来ている。
882 名前:デフォルトの名無しさん [2018/03/29(木) 00:53:15.59 ID:+dX3Weor0.net] MSの方針としてC++を捨ててC#に移行させるというのがあって、C++ユーザーはあの手この手で改宗を迫られる。 もはやVSでC++は苦行。 というか、WindowsでC++が苦行。
883 名前:デフォルトの名無しさん [2018/03/29(木) 00:55:08.86 ID:+dX3Weor0.net] C++を捨ててC#に移行するか、Windowsを捨ててOSXかLinuxに移行するか。 二択。 WindowsではC#が正解。 なぜならMSがそれを望んでいるから。
884 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 01:05:50.70 ID:xx4XvERn0.net] C++のチームも頑張って更新してるけどな IDEとコンパイラは十分なのに ・パッケージマネージャーがクソ ・再起動しないとPATHが更新されない ・VSのプロジェクトが用意されていないとビルドが面倒 と環境が整備されてなさすぎる
885 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 01:09:04.86 ID:y/yCqDtn0.net] C# + C++/CLI + C++ という選択肢
886 名前:デフォルトの名無しさん [2018/03/29(木) 01:14:03.03 ID:+dX3Weor0.net] 我々が間違っている公算も高い。 我々はC++を使いこなせる。 だから、C++なら簡単にできるのになぜそうしない?と思ってしまうが、これから学ぶならC#のほうが簡単だろう。 MSがC#を推すのは正しいのかもしれない。
887 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 01:20:39.82 ID:xx4XvERn0.net] C#はビジネス用だから より早く大量にコードを生産することを目的としているからC++とは用途が違う
888 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 02:12:12.07 ID:Hc4kPWXM0.net] Android でも iPhone でも Windows でも使える共通部分のコードは c++ で、 ってのを C# に変えたいのかもしれんが 別段 c++ で不自由ないしなあ… てか c# って .Net のイメージ強すぎて単体で使える気がまるでしない
889 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 03:27:22.16 ID:T1PPEJjr0.net] 未だにproperty実装出来ていないC++標準仕様が異常なんだぜ そりゃMSも堪忍の尾が切れるってもんだぜ
890 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 04:16:13.07 ID:Ng8O1HeK0.net] ら、ライブラリで実装できるから・・・。 ちなみに、プロパティっぽい提案は過去出てるが、全くテーブルに乗らない。
891 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 04:45:16.84 ID:xx4XvERn0.net] 誰もプロパティを欲していないのである
892 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 06:44:05.72 ID:izMMXIg60.net] 俺も欲しくない コスト予測し辛杉デフ
893 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 07:38:47.09 ID:LRHKAKcy0.net] C#はいい言語だよ Linq便利だし ただC++とは用途が違うってだけ
894 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 08:06:33.99 ID:qluMmKIH0.net] 何度聞いてもプロパティが欲しいという思いが沸かないんだが
895 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 08:10:21.70 ID:FDAIDKLE0.net] ウィンドーズホンでネイティブC++とC++/CXの間を取り持つwrapperを書くのに使う Wrapperを書くのに便利
896 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 10:37:15.71 ID:+tUOh99Na.net] プロパティが使えたらMFCのような糞環境でUpdateDataを使わなくてよくなる プロパティに代入で表示が変わり プロパティからそのまま値が取り出せる
897 名前:デフォルトの名無しさん [2018/03/29(木) 10:39:27.42 ID:+dX3Weor0.net] しかしVisual Studioは何だってUTF-8で保存されるのをそんなに嫌うんだろうか。 あの手この手でUTF-8で保存するのを妨害してくるけど。
898 名前:デフォルトの名無しさん [2018/03/29(木) 10:40:42.80 ID:+dX3Weor0.net] VSで開発してLinuxに移植されるのを嫌がってるんだろうかね。 その割にはgdbと接続できるようにしてるし。
899 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 10:47:23.77 ID:Hc4kPWXM0.net] >>870 ナイナイ 今だって setFoo() だの getFoo() だの実装すりゃできるけど初学者以外はやらないだろ? 実装するにも使うにも効率が悪いからね。
900 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 10:47:32.92 ID:+dsdqxPO0.net] >>870 それはsetter/getterではできないことなんだな?
901 名前:デフォルトの名無しさん [2018/03/29(木) 10:57:10.36 ID:HNpF58Nud.net] a.Hoge+=100; みたいな事をできて便利だなと思うことはあるけど無けりゃないでいいわレベル
902 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 11:06:30.37 ID:q+sj+Afe0.net] プロパティはメソッドともフィールドとも区別できるメタデータとしての活用が唯一の動機なんだが 結局のところ実行時の型システムまで整備しないととただの構文糖だしなあ
903 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 11:06:41.49 ID:+tUOh99Na.net] >>874 A.Width+=20; と A.setWidth(A.getWidth()+20); どっちがいい?;
904 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 11:10:04.25 ID:jtsbgEO5a.net] >>877 後者の方が好きだな
905 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 11:14:39.59 ID:+tUOh99Na.net] a.value++とかif(a.Width==100)とか 普通に書けるものをわざわざgetter setter書きたいんだな 変ってる
906 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 11:32:58.49 ID:Hc4kPWXM0.net] UI とのバインディングを失笑されたら シンタックスシュガーでこんなに楽にかける!と主張し始めたよw そりゃ楽にかけて便利だよな。 そのためのものだもの。そこは同意する
907 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 11:35:30.24 ID:+tUOh99Na.net] GUIだけじゃなくて他にも使えるというか 他がメイン
908 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:12:32.14 ID:xx4XvERn0.net] >>879 そういう風にお手軽にメンバを書き換えるのは事故のもとなのでやめましょうってことでめんどくさくしたのに 戦争を知らない世代みたいな 現状でもa.value()++とかif(a.Width()==100)でできるしな これまでのコードとの一貫性を破壊してなおかつ年代物のコンパイラに更に複雑なパースをさせて得られるものがちょっと括弧を省略するだけとは
909 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:14:06.74 ID:mREgEFijd.net] プロパティのメリットは最初publicで適当に実装しといても後からgetter/setter付きのprivateに変えれる所じゃない?
910 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:18:25.09 ID:xx4XvERn0.net] 変数がない状態でもテストに通るように作るべきだからpublicで変数を持たせる機会が一瞬もない
911 名前:デフォルトの名無しさん [2018/03/29(木) 12:18:48.50 ID:+dX3Weor0.net] C++builderってプロパティなかったっけ。 たいそう便利だったような気がするのだが、思い違いだろか。
912 名前:デフォルトの名無しさん [2018/03/29(木) 12:19:57.65 ID:+dX3Weor0.net] そもそも最近のGUIビルダってC++ビルダーの影響受けまくってるような感じがする。
913 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:20:28.54 ID:ONnwnPbh0.net] トップダウンで理想から考えるのが早い どういう風に書ければ満足するんだ
914 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:26:29.79 ID:f5JOZCzba.net] >>882 パースが面倒になるとは思えない 変数と同じ使い方なんだから変数のようにパースするだけだと思うが… それにお前はコンパイラつくらないじゃん
915 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:28:52.39 ID:f5JOZCzba.net] c++0x()以降の理念で仕様策定だけしたらいいじゃん 基本機能を妨げないように仕様追加 使うかどうかは本人次第 誰も強制しない
916 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:30:14.95 ID:f5JOZCzba.net] 拡張forもautoも馬鹿みたいに文句言ってたけど今でも使うなって言う人はいるのかな
917 名前:デフォルトの名無しさん [2018/03/29(木) 12:31:30.92 ID:+dX3Weor0.net] 使うな!
918 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:31:44.70 ID:f5JOZCzba.net] わかりました使いません…
919 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 12:59:19.47 ID:mREgEFijd.net] 頭かったwwww
920 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 13:03:56.15 ID:xx4XvERn0.net] >>888 これらを採択する人の中にGCCやMSVCの人がいないわけないじゃん 関数として扱うのか、変数として扱うのか決めなきゃいけない そしてどうやってポインタをとるのかなど色々な問題がある そしてさっきも言ったけど括弧を少し減らせるだけでできることが増えるわけじゃないというのが最大の問題
921 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 13:16:13.95 ID:f5JOZCzba.net] 得意げにご高説を垂れ流してる最中に申し訳ありませんが a.value++; と a.value()++; は別物 あえてみんなスルーしてくれてるのに
922 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 13:20:41.15 ID:ng76gyv10.net] >>895 参照返しなら同じでは?
923 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 13:33:25.09 ID:f5JOZCzba.net] ん? 参照した値を変えるとGUIの表示とか更新してくれんの? getterとsetterあったとして実行してくれんの? a.width()とa.widthが同じgetter的な動作してくれるのはわかるけど
924 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 13:38:37.15 ID:mREgEFijd.net] アンチプロパティの人なんでそんなに必死なん?
925 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 13:47:08.78 ID:xx4XvERn0.net] >>897 プロキシクラス
926 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 14:39:11.63 ID:BTFPAIj5d.net] GUIの表示を更新するように作れば更新される
927 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 14:39:13.31 ID:DoW8QBEn0.net] a.value()++; が参照返しとかどんだけヘボいんだよw リファレンサのprvalueだろjk
928 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 15:02:55.47 ID:f5JOZCzba.net] プロパティ不要とは言うけどそもそものプロパティの仕組みと効果はわかってないんだね こんな人ばかり
929 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 15:57:57.60 ID:or4Xspy50.net] 何スレか前にもプロパティの議論あったんだけどね・・ 少なくともgetter/setterを自動生成する、みたいなクソな機能ではないぞ
930 名前:はちみつ餃子 mailto:sage [2018/03/29(木) 16:02:08.91 ID:frx7qa9h0.net] 俺もそのとき発言してた https://mevius.5ch.net/test/read.cgi/tech/1490917669/683
931 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 17:26:54.17 ID:T1PPEJjr0.net] >>885 Builderだけtry-finallyセクション使えたり次元が違う希ガス
932 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 20:10:56.09 ID:LRHKAKcy0.net] >>877 A.extendWidth(20); それを書くことが便利で必要なクラスだったらそういう操作を作るべきだな
933 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 21:38:46.24 ID:1OB4BLGUM.net] >>885 あったよ >>905 も含めて当時はネイティブコードを吐くC#みたいな感じだった もう少し頑張れるかと思ったけど、Visual Studioの便利さに負けたと思ってる
934 名前:デフォルトの名無しさん mailto:sage [2018/03/29(木) 21:46:54.75 ID:6IJhuxisM.net] カーンを首にしてアプリ側に振ったのが敗因だったな 膨大なdbaseの資産も全く使えなかったのはNetaWareと 同じだった
935 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 01:25:11.99 ID:6elBmHqP0.net] >>903 え、違うの?
936 名前:はちみつ餃子 mailto:sage [2018/03/30(金) 04:42:18.00 ID:AQ2aJRgB0.net] >>909 違うよ。 デフォルトでのゲッタ/セッタを提供したりすることはあるけども、 >>904 で言及している通り「変数に見せかける」機能。
937 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 06:43:57.86 ID:MnRWcQoLM.net] そもそも変数に見せかけると言うプロパティ自体の話とgetter/setterの自動生成の話は全く別物で>>903 で比較してる意味がわからん たぶん本人もちゃんと理解できてないんだろうな...
938 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 07:46:44.11 ID:QwXbOxz8M.net] >>906 例えば座標なら+=使えた方が楽じゃね
939 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 08:33:24.78 ID:x9Ml4xAFM.net] >>910 なんだそういうことか。それも含めて単なる自動生成だと認識してたよ。
940 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 08:34:01.73 ID:trt/A0j+0.net] そうやってソフトが重くなって行くわけだな 数値の += なんて軽いと思って何度も呼んだら 実は描画や保存も何度も呼ばれてしまうとか
941 名前:デフォルトの名無しさん [2018/03/30(金) 08:42:16.05 ID:u8hlmR9G0.net] それはプロパティに限った問題ではないな
942 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 08:45:16.06 ID:+sennHugd.net] プロパティってそれ単体で取り出せるの? それなら使えるな
943 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 08:52:02.87 ID:HVaF4kSpd.net] 呼ばれる側 : そんな何度も呼ばれるとは思わなかった 呼ぶ側 : 重いとは思わなかった
944 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 09:52:35.47 ID:mPLnga/50.net] 少なくともAdd()なら何かしらの関数を呼んでいることはわかる
945 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 11:31:23.82 ID:3ziE5qsO0.net] プロパティでもなんらかの関数が含んでいることはわかるが
946 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 11:45:01.30 ID:mPLnga/50.net] それがただの変数なのかプロパティなのかは調べるまでわからない
947 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 11:57:28.30 ID:27QTfa4qd.net] 調べろよ
948 名前:デフォルトの名無しさん [2018/03/30(金) 11:58:36.02 ID:u8hlmR9G0.net] 変数でも演算子がオーバーロードされてる場合もあるからな 結局調べないとダメ
949 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 12:01:32.59 ID:27QTfa4qd.net] っていうか>>884 いわく、publicな変数は有り得ないらしいし、そういう運用してるなら考えるまでもなくプロパティじゃん
950 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 15:53:31.37 ID:l98ixrSj0.net] >>911 お前のレスの意味がわからん 実際C#もソースコード公開されてるソフトの改造程度にしか触ったことないんでちゃんと理解してないが getter/setterの自動生成するだけのクソ機能と誤解してる人がこのスレでも前スレでも見られたから >>903 を書いただけなんだが というか書き込む前の1〜2レスすら読めんのかお前は
951 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 17:21:54.28 ID:6y8tfNRe0.net] C++erが通常prvalueで返しているリファレンサを、データメンバにするってことなら テンポラリを作らなくなる分、速度的なメリットはありそうだな # でも、俺はイヤだな # データメンバがドカドカ増えるのがなんか気持ち悪い # 慣れの問題っちゃそうかも知れんが
952 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 17:39:33.77 ID:+sennHugd.net] >>899 言いたいことがわかった気がする
953 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 17:42:52.50 ID:HVaF4kSpd.net] やっとかよ
954 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:19:26.33 ID:MnRWcQoLM.net] >>924 だからそんな誤解してるのはお前と同レベルのバカだけだろ w 言語仕様の話とIDEの機能の区別もつかないアホなんて放置でいい
955 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:30:23.19 ID:3ziE5qsO0.net] 自分から絡んで行ってバカ呼ばわりとはこれいかに
956 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:51:58.09 ID:MnRWcQoLM.net] またバカが絡んできたよ w
957 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:59:28.09 ID:l98ixrSj0.net] >>928 いや、なんか根本的に誤解されてる気がするが C#とかだと、多分プロパティ作ると自動である程度書いてくれるんだろうけど その話じゃなくて「C++におけるpublicなGetXX(), SetXX()が暗黙的に作られる(だけ)」、みたいな誤解 (C#やBuilder知らずに議論をぱっと見するとそういう誤解しがち、俺も以前はしてたが) があるんだよな 説明不足だったかもしれんけどIDEの支援機能の話ではない というか前スレのリンクにあったブログの ufcpp.net/study/csharp/oo_property.html?key=property#property これが個人的にはわかりやすかった
958 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:21:54.96 ID:FlBD8vqz0.net] Javaのイメージなのかな? あれはJavaBeansとかいうゴミ規約のせいで本当にGetXX()とSetXX()を作るだけのゴミ機能がIDEに標準装備だったりする
959 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:27:33.97 ID:3ziE5qsO0.net] まあプロパティある言語触ったことないやつは勉強不足だから無視していいって言うのは一理ある
960 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:59:35.93 ID:trt/A0j+0.net] >>931 現状のメンバへの代入や値取得が 暗黙的に作られるgetter/setter プロパティが採用されてもこの辺はなんら変わらないかと
961 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 22:16:15.58 ID:8D6duvwPM.net] お前らの書き込み見ると、プロパティがものすごい大発明なんじゃないかと錯覚するけど 変数のようにかける件を含めても糖衣構文以上のものじゃないだろ。 +=したけりゃそういうプロキシ書けばいい。
962 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 22:21:10.98 ID:trt/A0j+0.net] お前らってだれだよ 一人だけだろプロパティ信者
963 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 22:25:41.11 ID:trt/A0j+0.net] これ以上言語機能を増やさなくて良い コンパイラが規格に追い付いてなくて互換性が崩れる
964 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 22:28:08.90 ID:FlBD8vqz0.net] クソ機能というわけではないが、ものすごく便利というわけでもない あればあったで使うけど、ないならないで困らないし、言語設計として採用するしないの判断はどっちもあり C++は採用しない判断をした その程度の話
965 名前:デフォルトの名無しさん [2018/03/30(金) 23:12:27.73 .net] 実体が関数なら漢らしく見た目も関数にしろよwww 見た目が変数なのに処理が走るとか、見た目が割り算なのに文字列連結するとか変態野郎は死にくされやwwwww
966 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 23:32:31.76 ID:l98ixrSj0.net] その辺はC++のコンストラクタ・デストラクタに嫌悪感を示すCユーザーが昔よく言ってた台詞と似てるw 「裏で何が起きてるかわかりづらいから嫌だ」、とかね 別に本気でプロパティ推してるわけじゃないが、いざプロキシクラスで代用しようとするとめんどい ETなんかを仲介するとテンプレートの実体化の数でコンパイラへの負担がデカいし、 メンバ関数の呼び出しをサポートしようとすると継承が必要になるし・・・それなりに問題点はある
967 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 23:40:02.53 ID:vpP76l93d.net] >>935 大発明じゃなくて、もはや常識。C++にはないって聞いて最初驚いたもん いやまあたしかになくてもいいんだけど、演算子オーバロードはあるのにプロパティはないって変な言語だわ
968 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 23:41:38.85 ID:vpP76l93d.net] >>939 それiostremディスってんの?
969 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:11:17.76 ID:o3PNwIlC0.net] >>941 お前が驚くと凄いことなん?
970 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:12:18.16 ID:aFk+9CH40.net] >>942 >>942 はiostreamを擁護する気か
971 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:19:06.77 ID:iyPH7JTK0.net] ダイヤモンド継承使われてるんだっけ あれ使ったことないな いらない機能だと思うなら使わないってだけだしプロパティはあった方がらくだと思うけどね 独自拡張でつけてるのもあるし
972 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:25:31.98 ID:NJ7AGlMvd.net] >>943 凄くないよ >>944 すまん。適当書いたけどiostremは擁護出来ねえわ
973 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:47:52.27 ID:C63IJ9vb0.net] iostreamの<<チェーンが実は最近まで規格上未定義動作だった話は正直呆れた
974 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 01:02:47.99 ID:19OTzhSN0.net] 採択されてもプロパティのアドレスをどうやって取るのかっていうことで標準化委員会で揉めて10年は停滞する
975 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 01:48:24.57 ID:nFIfPX7B0.net] >>948 サブオブジェクトがユニークアドレスを取れなくてもいいことを示す [[no_unique_address]] 属性が C++20 のドラフトに入った。 www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0840r1.html オブジェクトがユニークなアドレスを持つ原則を捨てたわけ。 これを踏襲するなら、プロパティのアドレスは取れないってことにして解決するのが自然で、揉める余地はそんなにないと思う。 実際にアドレスは存在しないわけだし、存在しないものを返しようがないじゃん。
976 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 02:09:16.31 ID:19OTzhSN0.net] >>949 最初のプロパティの提案がいつかはしらないけど 実際にこれが決まったとして最短で2020年 そこから更に何年かかるのか
977 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 04:29:43.55 ID:O6Ruc86y0.net] 抽象クラス"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で作成し、そのメソッドを実行して 帰ってきた文字列からそれがどのクラスのインスタンスか判別が付くのではないかなと思いました。 決してスマートな方法とは言えませんが・・・ もっとスマートな方法はありますか?
978 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 04:37:13.22 ID:350O8bDz0.net] ・・・? typeidじゃアカンの?
979 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 05:55:27.21 ID:15qJIIAA0.net] class B : public Super { public: Super* re_new() override { delete this; return new B{}; } };
980 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 06:37:47.25 ID:C63IJ9vb0.net] >>949 単純に &obj.int_prop と書いた時に、この式の型と値をどうするかは難しい問題じゃない? intの一時オブジェクトへのポインタ、intのぬるぽ、int_propのgetterへの関数メンバポインタ、ill-formed どれも問題あると思う
981 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 06:47:39.87 ID:8va89mAu0.net] プロパティを関数として実装したら関数のアドレスは取れるんじゃないかなぁ。はぁ、実装依存ですか。
982 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 08:02:21.38 ID:5h07DQhTa.net] >>951 全然スマートじゃないがvisitorパターン使えば?
983 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:03:59.00 ID:OaeapR1O0.net] >>954 > 単純に &obj.int_prop と書いた時に、この式の型と値をどうするかは難しい問題じゃない? エラーにしちゃえばいいだろ
984 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:14:46.66 ID:HGehdmya0.net] つまり意識しなきゃならんてことか じゃあ素直に関数にしろよ
985 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 09:16:04.32 ID:nFIfPX7B0.net] >>954 一時オブジェクトへのポインタってことにする一択だと思うけどなぁ。 あくまでも「変数に見せかける」、 つまりは、ゲッタの呼出しに構文糖を付けて見かけ上だけ変数 (データメンバ) っぽいって立場を貫かないと、 余計な気を回してもわかり難さが増すだけだよ。 rvalue なのは仕方がない。
986 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:16:21.25 ID:Nj0xu+770.net] どうしてアドレスを取りたがるのかよくわからない クラスのメンバ関数だってアドレス取れないだろ
987 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:18:00.18 ID:Nj0xu+770.net] ああメンバ仮想関数な
988 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:18:37.44 ID:8va89mAu0.net] >>960 メンバ関数のポインタ構文が何故あるのですか?
989 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:18:44.11 ID:8va89mAu0.net] あー。
990 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:22:26.84 ID:Nj0xu+770.net] 訂正しただろ 仮想関数はアドレスが取れないだろ
991 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:23:29.95 ID:15qJIIAA0.net] 取れるよ、何言ってんの そのポインタは動的結合までできる優れもの
992 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:25:45.36 ID:Nj0xu+770.net] 出来ないよ 何いってんの
993 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 09:26:00.49 ID:nFIfPX7B0.net] >>960 変数に見せかける以上は変数と同じようにふるまうことを期待するってのは普通の要求じゃないか? データメンバに対して操作するテンプレートはプロパティを操作するテンプレートとしても使えて欲しい。 でもまあ充分に「見せかける」ことが出来ないのなら問答無用でエラーになった方がマシではあるかもしれん。
994 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:41:17.12 ID:C63IJ9vb0.net] objがlvalueなのにobj.int_propがrvalueになるのはまずいと思うんだよなあ うっかり関数の戻り値でその参照なんか返そうものなら相当わかりにくいバグになる C#とかはその辺の問題どう解決してるのかしらね
995 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:48:31.98 ID:Nj0xu+770.net] property int count { >>() {return count_ ; } // getter <<(int cnt) {SetCount(cnt):} // setter &() {return &count_;} // address getter }; みたいにアドレス抽出用のメソッドを追加すりゃ良いだけのような気がする
996 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:00:37.36 ID:HGehdmya0.net] コードを減らす為の規格追加でコードを増やす解決法 う〜ん
997 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 10:21:02.77 ID:nFIfPX7B0.net] >>970 これは抽象化の話なんだよ。 変数のように見せかけるためには何が必要かって話なの。
998 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:29:50.12 ID:15qJIIAA0.net] >>966 https://ideone.com/1J8uwf
999 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:35:19.80 ID:Nj0xu+770.net] property int count { () {return count_ ; } // getter =(int cnt) {SetCount(cnt):} // setter &() {return &count_;} // address getter ++() {return ++count; } // incrementer } この方がしっくり来るな
1000 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:56:40.26 ID:aygih7Tkd.net] 予約語を増やすとどれだけの影響があるか なんて考えたことはないのかな?
1001 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 10:57:47.19 ID:aygih7Tkd.net] まあここはC++相談室 おれが考えた最強言語を語るところじゃない
1002 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 11:05:17.81 ID:nFIfPX7B0.net] opaque definition でゲッタを定義できるように拡張すればプロパティ専用の構文を導入する必要なく プロパティを実現できるのではないかと妄想していた。
1003 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 11:10:24.41 ID:Nj0xu+770.net] using count = int { () {return count_ ; } // getter =(int cnt) {SetCount(cnt):} // setter &() {return &count_;} // address getter ++() {return ++count; } // incrementer }; 予約語増やさないならこんな感じに書けなくもない
1004 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 11:21:25.52 ID:Pb+ZodvD0.net] プロパティの実装の議論までここでするか? Dと同じでいいじゃん
1005 名前:はちみつ餃子 mailto:sage [2018/03/31(土) 11:23:19.53 ID:nFIfPX7B0.net] 前提が違うものを同じには出来ないよ。 参考にすることはあると思うけど。
1006 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 12:19:04.21 ID:+mjd8c8id.net] 仮想関数のアドレスが取れないという発言は何だったんだろう
1007 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 13:29:05.67 ID:19OTzhSN0.net] >>951 std::pair<Super*,std::string> obj2 = std::make_pair(new B(), "ClassB");
1008 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 13:32:44.21 ID:aygih7Tkd.net] スレチ 次スレまで引きずるなよ
1009 名前:デフォルトの名無しさん [2018/03/31(土) 13:50:16.75 .net] >>951 クラスA, B, Cにそれぞれ自分自身のインスタンスを生成するstaticメソッドを用意し、 そのstaticメソッドへのポインタを返す共通メソッドを用意する。
1010 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 14:23:30.31 ID:aFk+9CH40.net] リフレクションがある言語でGUIの画面またはユーザーコントロール
1011 名前:作成する際に YSIWYGで作ることをやれるIDEを作りたい、というときに、メンバー関数とプロパティーの2種類あったら便利なのや C++にプロパティー入れたらリフレクションも来るでこれは… もっとも上記課題解決のための技術は10年も前にWPFの登場で丸ごと過去の技術やがな… [] [ここ壊れてます]
1012 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 14:30:32.65 ID:aFk+9CH40.net] ていうかWPFのコンバーターの書き方とか、メンバ関数に逆戻りやぞ… (IValueConverter.Convert(), IValueConverter.ConvertBack(), IMultiValueConverter.Conver(), IMultiValueConverter.ConvertBack(), ...
1013 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 15:43:53.79 ID:UG1yVXDXa.net] リフレクションはゴミとまで言わないけどc++にはいらない機能
1014 名前:デフォルトの名無しさん [2018/03/31(土) 16:09:17.20 ID:D1vbg0pQ0.net] リフレクションがあれば死なずに済んだ人もいるだろうに。
1015 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 16:37:26.06 ID:UG1yVXDXa.net] デバッグでリフレクション使うのか?
1016 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 20:24:42.16 ID:o3PNwIlC0.net] C++相談室 part135 mevius.5ch.net/test/read.cgi/tech/1522495206/ もう糞テンプレいらないよね? あと死ね
1017 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 22:27:57.63 ID:u+oLKOIo0.net] うむごくろう。
1018 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 18:13:20.31 ID:JVL2cf0wa.net] c++のfriendはprivateメンバーすべてにアクセスできてしまうけど特定の変数だけ、もしくは特定の関数だけfriendにする事は可能でしょうか?
1019 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 18:43:04.30 ID:nEv6CmIlM.net] >>991 ピンプるか、○○って俺の友達の友達なんだぜーにしてしまうか、かなー
1020 名前:デフォルトの名無しさん [2018/04/01(日) 19:11:40.34 ID:BG5JJopwa.net] pimplイデオムはなんとなくわかるけど、俺の友達の友達は編集したい対象を別のクラスに分けてしまうこと?
1021 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 20:21:44.04 ID:WPbk7cUz0.net] そういえばシステムハンガリアンはしばしば批判されるのに、pimplのpは批判されているのを見たことがないな。
1022 名前:はちみつ餃子 mailto:sage [2018/04/01(日) 21:12:28.11 ID:47FEpc5z0.net] https://www.google.com/search?q=%E5%8D%8A%E5%88%88%E3%82%8A&tbm=isch
1023 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 22:32:25.37 ID:EwuQ9U5u0.net] (餃子が (御乱心 (されたぞー)))
1024 名前:はちみつ餃子 mailto:sage [2018/04/01(日) 23:03:08.00 ID:47FEpc5z0.net] >>996 そこは「ハンガリアンじゃなくて半刈りやん」って言って欲しかった。
1025 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 07:54:09.78 ID:t04teqlda.net] いやいやこんなの丸刈りやん
1026 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 09:36:33.18 ID:E1iWIfmB0.net] >>984 YSIWYGってなに?
1027 名前:デフォルトの名無しさん [2018/04/02(月) 11:52:25.29 .net] >>999 WYSIWYGのtypoなだけやん アスペか
1028 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 12:50:23.03 ID:E1iWIfmB0.net] 訂正だろ? 態度悪いなおまえ
1029 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 72日 3時間 44分 41秒
1030 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています