[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 11/29 08:20 / Filesize : 51 KB / Number-of Response : 241
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++14/C++1y



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;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 ]
うん






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<51KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef