- 1 名前:デフォルトの名無しさん mailto:sage [2013/10/28(月) 01:00:22.34 ]
- The C++ Standards Committee
www.open-std.org/JTC1/SC22/WG21/ Wikipedia https://en.wikipedia.org/wiki/C%2B%2B14 C++11/C++1y 18 toro.2ch.net/test/read.cgi/tech/1365073520/
- 159 名前:デフォルトの名無しさん mailto:sage [2013/11/12(火) 00:22:39.31 ]
- gccのfloat最適化が期待したほどじゃなかった人?
- 160 名前:デフォルトの名無しさん [2013/11/12(火) 08:45:52.81 ]
- >>159
誤爆か?
- 161 名前:デフォルトの名無しさん mailto:sage [2013/11/21(木) 12:03:51.85 ]
- 質問です
ideone.com/LDs6Av 2つのクラスの間でoperatorを定義したいのですが、先行宣言した方のクラスではdecltypeが書けません。 これをdecltypeを使えるようにするにはどのように書けば良いのでしょうか? この例ではdoubleと書いてありますが、templateで他の型も使えるようにしたいと思っています。
- 162 名前:デフォルトの名無しさん mailto:sage [2013/11/21(木) 12:57:06.26 ]
- テンプレにすりゃいいんじゃねーの
- 163 名前:デフォルトの名無しさん mailto:sage [2013/11/21(木) 14:05:23.08 ]
- >>162
ありがとうございます ideone.com/WPhg2Q これで行けそうです classの中でoperator*を定義しようとすると、もう一つのclassのdがprivateで 型を取得出来ないので、アクセサを付けるとカプセル化を破る事になるし、 だったらfriendでoperator*を外部に関数で定義した方が良さそうでした
- 164 名前:デフォルトの名無しさん mailto:sage [2013/11/22(金) 07:58:38.52 ]
- んな現行規格の話はC++初心者スレで聞けよ
- 165 名前:デフォルトの名無しさん mailto:sage [2013/11/22(金) 10:45:50.90 ]
- decltypeが現行規格か?C++11ならそうだけど
初心者スレは03までじゃないとスレチな気が
- 166 名前:デフォルトの名無しさん mailto:sage [2013/11/22(金) 12:34:18.94 ]
- >>165
スレタイ見て物を言え
- 167 名前:デフォルトの名無しさん [2013/11/22(金) 13:24:27.31 ]
- 現行規格は C++11
異論をはさむ余地はない ただし >>163 は decltype なくても typedef で解決できることだね template <class T> class A { public: typedef T D; private: D d; public: A(D a) : d(a) {} };
- 168 名前:デフォルトの名無しさん mailto:sage [2013/11/22(金) 13:34:32.78 ]
- >>167
typeを外に晒してもoperatorの戻すtypeは結局decltypeが必要になるんじゃね? どんなtypeとどんなtypeを演算するのかわからないんだから
- 169 名前:デフォルトの名無しさん [2013/11/22(金) 14:16:20.77 ]
- >>168
それは確かに C++11 で改良された点だが cout<< に流せる型なら特殊化でもしておけば? class T は理屈の上ではあらゆる型だが class A で達成しようとしている目的から外れすぎた 馬鹿げた T はシカトってのもよく使う手だね C++11 なら、これも type_traits や static_assert でもうちっと善処できるけど
- 170 名前:デフォルトの名無しさん mailto:sage [2013/11/22(金) 14:17:40.69 ]
- 特殊化したんじゃtemplateにする意味がない
どんな型でも受けたいんだから
- 171 名前:デフォルトの名無しさん mailto:sage [2013/11/22(金) 14:28:49.50 ]
- 結局>>167でdecltypeを使わずに具体的にどう書くかは示されてないのか
- 172 名前:デフォルトの名無しさん [2013/11/22(金) 14:29:55.90 ]
- あるいは何型の戻りを期待するのか陽に指定とかね
operator * では無理だけど、そんなら普通の関数だし
- 173 名前:デフォルトの名無しさん mailto:sage [2013/11/22(金) 14:42:23.80 ]
- どんな型でもって、特定のメソッド要求してる時点で型が限定されてんじゃん?
- 174 名前:デフォルトの名無しさん mailto:sage [2013/11/22(金) 17:46:59.67 ]
- >>173
特殊化されてない同名メソッドと 型に付随する特定のメソッドとは別概念じゃん?
- 175 名前:デフォルトの名無しさん mailto:sage [2013/11/22(金) 17:51:22.08 ]
- はよ初心者スレに帰れよ
- 176 名前:デフォルトの名無しさん mailto:sage [2013/11/22(金) 18:03:43.31 ]
- ガタガタ抜かさんと>>167書いた奴はideone.comに何かプログラム例上げてみ
- 177 名前:デフォルトの名無しさん [2013/11/22(金) 18:18:17.64 ]
- >>176
やだね、べろべろばー
- 178 名前:デフォルトの名無しさん mailto:sage [2013/11/22(金) 18:50:08.40 ]
- 書けない癖に偉そうな口を聞くからそうなるんだよアホ
- 179 名前:デフォルトの名無しさん [2013/11/22(金) 20:29:56.47 ]
- >>178
煽れば何か見せてもらえると思ってんだろバーカ
- 180 名前:デフォルトの名無しさん [2013/11/22(金) 23:43:06.64 ]
- お前のは見たくないからいいよ。
- 181 名前:デフォルトの名無しさん mailto:sage [2013/11/23(土) 02:17:07.60 ]
- 勿体付けてるんじゃなくて、本当に書けないのは誰が見ても分かる
- 182 名前:デフォルトの名無しさん mailto:sage [2013/11/23(土) 07:24:06.67 ]
- 退屈だからoperator ** (ベキ乗)でも定義するか
class num { double a; struct num2 { double a; num2(double src) : a(src) { } }; public: num(double src) : a(src) { } const num2 operator *() const { return num2(a); } double operator *(const num2& b) const { return pow(a, b.a); } double operator *(const num& b) const { return a * b.a; } }; int main() { num a(3.0), b(4.0); double c = a * b; //12 double d = a ** b; //81 return 0; }
- 183 名前:デフォルトの名無しさん mailto:sage [2013/11/23(土) 07:59:59.46 ]
- class num2 { friend num; double a; num2(double src) : a(src) { } };
としてもっと完全に隠蔽すべきだったな
- 184 名前:デフォルトの名無しさん mailto:sage [2013/11/23(土) 11:22:58.52 ]
- >>182-183
スレ違いだボケ
- 185 名前:デフォルトの名無しさん mailto:sage [2013/11/23(土) 12:36:41.30 ]
- threadとかasync周りについて詳しく解説したページない?
何かよくわからん
- 186 名前:デフォルトの名無しさん mailto:sage [2013/11/23(土) 13:07:54.38 ]
- >>185
このスレで聞くな
- 187 名前:デフォルトの名無しさん mailto:sage [2013/11/23(土) 13:22:08.54 ]
- threadはともかくasyncは出来損ないなので勉強するだけ無駄
- 188 名前:デフォルトの名無しさん [2013/11/23(土) 13:23:37.41 ]
- >>182-183
num2 無しにしたらどうよ class num { double a; public: num(double src) : a(src) { } operator double() const { return a; } const num *operator *() const { return this; } const num operator *(const num *p) const { return pow(a, *p); } const num operator *(const num &amp;b) const { return a * b; } }; int main() { num a(3.0), b(4.0), x(0), y(0); double c = a * b; //12 double d = a ** b; //81 x = a * b; //12 y = a ** b; //81 return 0; }
- 189 名前:デフォルトの名無しさん mailto:sage [2013/11/23(土) 13:28:58.41 ]
- >>188
荒らしかよおめーは
- 190 名前:デフォルトの名無しさん mailto:sage [2013/11/23(土) 13:47:35.56 ]
- 相手されないと死ぬ幼児です
- 191 名前:デフォルトの名無しさん mailto:sage [2013/11/23(土) 17:19:44.89 ]
- threadはどうなの
C++14で何か変更あるの
- 192 名前:デフォルトの名無しさん mailto:sage [2013/11/23(土) 18:18:35.60 ]
- shared_(mutex|lock)
- 193 名前:デフォルトの名無しさん mailto:sage [2013/11/23(土) 18:34:32.77 ]
- async 件、誰か kwsk!
- 194 名前:デフォルトの名無しさん mailto:sage [2013/11/23(土) 20:30:20.81 ]
- >>9
- 195 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 01:04:48.21 ]
- >>193
www.amazon.co.jp/C-Concurrency-Action-Practical-Multithreading/dp/1933988770
- 196 名前:193 mailto:sage [2013/11/24(日) 02:46:41.05 ]
- ごめん少し言葉足らずだった
asyncができそこないって件kwsk!
- 197 名前:デフォルトの名無しさん [2013/11/24(日) 04:47:47.62 ]
- getせずにfutureが破棄されたらどうすんのか決まってなかったけど、そのままデタッチしたら危ないから終了までブロックするようにした。
そしたら、 「それasync違うじゃん、止まってほしくない時まで止まっちゃうの問題じゃね?非同期処理を行いたい時はUIスレッド止めずにバックグラウンドで何かしたいときとかなのに!」 とか、 「非同期ならそのスレッド止めずに結果はコールバックで受け取るようにすべきで、そのライブラリ無いのおかしくない?でもそれ作ったらいまのasyncいらんよね。」 とか、 「Windowsだとこんな使い方してもスレッド起動のコストでかすぎて大抵遅くなるだけだわー」 とか、色々なネガティブ要素でもういっそdeprecateにしたほうがいいんじゃないか?って話しになってるんだと思ってる。 個人的にはできそこないって言うほどダメなもんでもないと思うけど・・・。 違ったら詳しいひとツッコミよろ
- 198 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 08:28:19.73 ]
- The C++ Standard Library 2nd ed - A Tutorial and Reference - Nicolai M. Josuttis
www.amazon.co.jp/The-Standard-Library-Tutorial-Reference/dp/0321623215 これいいな C++11わからんとか言ってるやつはここのサンプルプログラムを手で打ち込んで全部試してみれ 英語版しかないのが玉に瑕だがそんなに難しい英語じゃない
- 199 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 10:01:08.30 ]
- 時代はC++14
- 200 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 11:33:31.84 ]
- コンパイラがない
- 201 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 11:38:02.86 ]
- 僕達にはclangがある
- 202 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 11:55:58.66 ]
- vc++のことも忘れないであげてください
- 203 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 12:57:42.87 ]
- パターンマッチは入らないのかな
- 204 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 14:05:48.12 ]
- スマポが配列を指す時に苦労した
これデフォルトのデリータがdeleteなんだな だからカスタムデリータでdelete[]をラムダ式か何かで指定するか、 std::default_delete()を使わないといけないのか
- 205 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 14:42:02.32 ]
- デフォで配列版が用意されてるのはunique_ptrだけなんだな。
なぜだろ?
- 206 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 16:10:40.65 ]
- >>205
オブジェクトを複数のオブジェクトで共有するならまだしも、 生配列を複数のオブジェクトで共有して何に使うんだよ。 要は生配列共有すんなって事だ。
- 207 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 16:20:29.44 ]
- vectorかarrayを使っておけというところじゃね。
C++の動的配列って中途半端だよね。 delete[]で各要素のデストラクタ呼べるように サイズとか内部的に持っているのに普通には使えないとか。 deleteとdelete[]使い分けろとか。
- 208 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 16:38:04.69 ]
- >>207
new T;で生成したオブジェクトdeleteする時にnew T[];とどうやって区別するんだ。 常にnew T[]した時余計な情報載せるのか?
- 209 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 16:59:52.30 ]
- >>207
デストラクターが無い場合に要素数を持たないようメモリをケチること許す言語仕様ゆえ
- 210 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 17:07:57.10 ]
- >>209
Cの配列と互換性持たせるためでもあるな。
- 211 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 17:13:06.24 ]
- それは関係ないんじゃ
使う側が見たnew式の結果は区別が付かないだから
- 212 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 17:19:54.68 ]
- >>206
配列の時だけってか?
- 213 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 21:23:17.89 ]
- >>205
unique_ptrには他のスマポと違ってコピーコンストラクタがないから 配列版=>単一版への誤ったコピーが起きにくい。
- 214 名前:デフォルトの名無しさん [2013/11/24(日) 22:22:47.31 ]
- >>207
ぶぁか
- 215 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 23:26:15.38 ]
- >>211
単体のnewに要素数情報乗っけられるのも困るな 1000回newしたら8000バイト近くdeleteの為だけに主記憶領域食われるんだからな
- 216 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 23:41:30.04 ]
- >>213
テンプレートコンストラクタだから正しく言うとコピーコンストラクタじゃない
- 217 名前:デフォルトの名無しさん mailto:sage [2013/11/24(日) 23:49:40.23 ]
- コピコンじゃないの!?
- 218 名前:デフォルトの名無しさん mailto:sage [2013/11/25(月) 00:09:23.90 ]
- コピコンが無いってのは確かだが、配列=>単一のコピーの話をするんであれば問題なのはそこじゃない
- 219 名前:デフォルトの名無しさん mailto:sage [2013/11/25(月) 01:00:10.11 ]
- 配列=>単一のコピーってどういう話?
- 220 名前:デフォルトの名無しさん mailto:sage [2013/11/25(月) 06:19:02.67 ]
- >>219
unique_ptr<T[]> a(new T[8]>; unique_ptr<T> b(a>; ってのが通ったらまずいが、unique_ptrには下のコンストラクタがないから大丈夫。 shared_ptr<T[]> c(new T[16]>; shared_ptr<T> d(c); ってのが通ったらまずいが、shared_ptr<T[]>なんてものはないから大丈夫。
- 221 名前:デフォルトの名無しさん mailto:sage [2013/11/25(月) 09:59:08.91 ]
- shared_from_this()というのがいまいち理解できない
これどうなってんの?
- 222 名前:デフォルトの名無しさん mailto:sage [2013/11/25(月) 21:53:44.84 ]
- やってることはトリッキーだけど単純なことなんだがシンプルで具体的な使用例がだせないな
shared_ptrで管理されてるオブジェクトがなんらかの事情で普通のポインタで渡されたときに そのポインタから元のshared_ptrと管理権を共有するshared_ptrを得るというイディオムで使うんだけどな
- 223 名前:デフォルトの名無しさん mailto:sage [2013/11/25(月) 22:26:31.25 ]
- www.ogis-ri.co.jp/otc/hiroba/technical/boost/index.html
のコラム2
- 224 名前:デフォルトの名無しさん mailto:sage [2013/11/25(月) 22:40:55.34 ]
- なるほどかなり特殊なケースみたいだな
- 225 名前:デフォルトの名無しさん [2013/11/25(月) 22:42:55.82 ]
- >>222
「shared_ptrで管理されてるオブジェクトがなんらかの事情で普通のポインタで渡されたときに そのポインタから元のshared_ptrと管理権を共有するshared_ptrを得る」というイディオム 長えよ
- 226 名前:デフォルトの名無しさん mailto:sage [2013/11/26(火) 00:02:08.16 ]
- イディオム名はそのまま『shared from this イディオム』でそれはどういうもの?って説明が>>222だろ
- 227 名前:デフォルトの名無しさん mailto:sage [2013/11/26(火) 21:33:57.58 ]
- boost::shared_ptrに記憶領域の番地を入れた際、
要約値を鍵にした連想配列(hash map)に 記憶領域の番地を格納。 boost::shared_from_thisを実行した際、 この連想配列からthisの持つ番地で、 boost::shared_ptrをとってくるって仕組みじゃないか?
- 228 名前:デフォルトの名無しさん mailto:sage [2013/11/26(火) 22:00:12.84 ]
- 内部にthisを指すweak_ptr持ってるだけだよ
後はshared_ptrのコンストラクタがenable_shared_thisを継承したクラスを特別扱いしている
- 229 名前:デフォルトの名無しさん mailto:sage [2013/11/26(火) 22:40:40.37 ]
- 参照カウンターの整合性はどうなるんだ?
- 230 名前:デフォルトの名無しさん mailto:sage [2013/11/27(水) 09:48:18.32 ]
- >>229 どんなケースで問題が起こると思ってるの?
- 231 名前:デフォルトの名無しさん mailto:sage [2013/11/27(水) 18:38:48.13 ]
- newして返したboost::shared_ptrと、
boost::shared_ptrで確保した、boost::shared_ptrを返した時。 特に片方が共同所有権としてつかわれ、 片方がEventの委譲用とかよくありがちじゃん。
- 232 名前:デフォルトの名無しさん mailto:sage [2013/11/27(水) 18:42:03.66 ]
- それで何か問題になるのか
- 233 名前:デフォルトの名無しさん mailto:sage [2013/11/27(水) 19:47:52.61 ]
- >>232
二重delete
- 234 名前:デフォルトの名無しさん mailto:sage [2013/11/27(水) 21:00:11.72 ]
- 長文失礼
shared_ptrのオブジェクトの管理領域は次のようになっている 管理領域の参照カウンタ、オブジェクトの参照カウンタ、オブジェクトへのポインタ、デリータへのポインタ ここで、shared_ptrは管理領域、オブジェクト両方のカウンタを増減させる。 weak_ptrは管理領域のカウンタのみを変更する。 shared_ptrの破棄によってオブジェクトのカウンタが0になったとき、オブジェクトは解放される。 しかし、管理領域は全てのweak_ptrが破棄されるまで生存する そして、weak_ptrからshared_ptrを構築する際には、shared_ptrの管理領域へのポインタをweak_ptrが指す管理領域へのポインタへと設定している
- 235 名前:デフォルトの名無しさん mailto:sage [2013/11/27(水) 21:02:36.06 ]
- 長すぎと言われた、連レスすまん
enable_shared_from_thisは内部にweak_ptrを持っていて、shared_ptrのコンストラクタはenable_shared_from_thisを継承したクラスに対しては特殊な動作、すなわち内部のweak_ptrに管理領域へのポインタを設定する動作をする shared_from_this関数は内部のweak_ptrからshared_ptrを構築する関数で、前述のように同じ管理領域を指すポインタが新たに構築される 全てのスマートポインタが同じ管理領域を指しているので、二重解放は起こらない
- 236 名前:デフォルトの名無しさん mailto:sage [2013/11/28(木) 01:04:05.46 ]
- >>231
> newして返したboost::shared_ptr わからん。何を new ?返すってどこからどこに? > boost::shared_ptrで確保 わからん。 shared_ptr に何かを「確保」する機能なんて無いよね? さっぱりわからん。
- 237 名前:デフォルトの名無しさん mailto:sage [2013/11/28(木) 10:41:28.04 ]
- >>231 >>233
こいつはたぶんshared_ptrそのものを理解してない
- 238 名前:デフォルトの名無しさん mailto:sage [2013/11/28(木) 19:18:57.03 ]
- 普通に使えば普通に使えるライブラリを
浅知恵で細工して可読性もパフォーマンスもセキュリティもぶち壊す C++ではよくあること
- 239 名前:デフォルトの名無しさん mailto:sage [2013/11/28(木) 22:25:36.50 ]
- そういや shared_ptr を使っているインスタンスに対してVisitorパターンだったかやってみようとしたら
途中で生ポインタに変わっちゃうんであきらめたことがあった class Hage : public Element { virtual void accept(Visitor &v){ v.visit(this); } // <- このとき }; enable_shared_from_this ってのを知っていたらうまいことできたんだろうか
- 240 名前:デフォルトの名無しさん mailto:sage [2013/11/29(金) 01:14:30.49 ]
- うん
|

|