- 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
- 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++の仕様書を読み込んでたら
いつの間にかすごく強くなったという、ホリランみたいな。 [] - [ここ壊れてます]
|

|