1 名前:デフォルトの名無しさん (ワッチョイ 7fc9-G+K4) mailto:sage [2016/04/03(日) 00:22:24.07 ID:ZT/2NYWz0.net] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part123 echo.2ch.net/test/read.cgi/tech/1456040187/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.97【環境依存OK】 peace.2ch.net/test/read.cgi/tech/1439849418/ ■長いソースを貼るときはここへ。■ codepad.org/ ideone.com/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
684 名前:デフォルトの名無しさん (ブーイモ MM1f-/3cR) mailto:sage [2016/05/12(木) 08:53:10.66 ID:4BYM8qUWM.net] c++プログラマなら使えるところは常に前置だろjk
685 名前:デフォルトの名無しさん (ワッチョイ 4b7b-XzP0) mailto:sage [2016/05/12(木) 08:59:45.88 ID:rpWGZ4yl0.net] >>666-667 後置はアウトオブオーダー実行が上手く働く可能性が高い
686 名前:デフォルトの名無しさん (ワントンキン MM9f-/3cR) mailto:sage [2016/05/12(木) 09:05:01.86 ID:c1sDAwi0M.net] いやいや…
687 名前:デフォルトの名無しさん (ワッチョイ 937b-UkU1) [2016/05/12(木) 09:18:46.59 ID:BxH3pzV60.net] ttp://cpp.aquariuscode.com/preincriment-vs-postincriment この件かな
688 名前:デフォルトの名無しさん (ワッチョイ 4b7b-XzP0) mailto:sage [2016/05/12(木) 09:33:56.48 ID:rpWGZ4yl0.net] >>671 本来は後置++の方が等速あるいは速い、但しstd::iteratorに限っては前置++の方が速い そのページはstd::iteratorでも前置++が速いと言う主張だろ
689 名前:デフォルトの名無しさん (ワッチョイ 937b-UkU1) [2016/05/12(木) 09:48:47.40 ID:BxH3pzV60.net] >>672 数行のまとめすら読めないのか
690 名前:デフォルトの名無しさん (ワッチョイ 937b-UkU1) [2016/05/12(木) 09:51:14.28 ID:BxH3pzV60.net] >>672 と、思ったらそれ以上のバカだったのかな? いいから後置の方が早い理由を示せよ
691 名前:デフォルトの名無しさん (ワッチョイ 4b7b-XzP0) mailto:sage [2016/05/12(木) 09:58:38.72 ID:rpWGZ4yl0.net] >>673 誤字を鬼の首取ったように突っ込むな 誤 そのページはstd::iteratorでも前置++が速いと言う主張だろ 正 そのページはstd::iteratorでも後置++が速いと言う主張だろ
692 名前:デフォルトの名無しさん (ワッチョイ 937b-UkU1) [2016/05/12(木) 10:02:26.01 ID:BxH3pzV60.net] >>675 読んだらそんな結論にならないと思うんだけど
693 名前:デフォルトの名無しさん (ワッチョイ 4b7b-XzP0) mailto:sage [2016/05/12(木) 10:03:07.66 ID:rpWGZ4yl0.net] >>674 取り敢えずキミは、pentium以降のCPUの高速化技術を検索して、理解してから出直しなさい。
694 名前:デフォルトの名無しさん (ワッチョイ 4b42-Wsqh) mailto:sage [2016/05/12(木) 10:10:22.66 ID:3WPpAXGg0.net] 特定のCPUを持ち出す必要があるんですか?
695 名前:デフォルトの名無しさん (ワッチョイ 937b-UkU1) [2016/05/12(木) 10:11:24.20 ID:BxH3pzV60.net] >>677 取り敢えずキミは、提示された資料を読めるようになってから出直しなさい。もう手遅れかもしれんけど。
696 名前:デフォルトの名無しさん (ワッチョイ 4b7b-XzP0) mailto:sage [2016/05/12(木) 10:12:01.44 ID:rpWGZ4yl0.net] >>676 そのページが参照してる > インクリメントの前後置速度比較 のソース読んでから出直す事だ > ゲームエンジンアーキテクチャ第二版 プレインクリメント vs ポストインクリメント の主張を全然反映してないベンチマーク引用してるから、理解力が不足してると迷宮に囚われる
697 名前:デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX) mailto:sage [2016/05/12(木) 10:13:08.97 ID:DRM/51U40.net] なるほどなー。 ldしてincしてstoreしてからじゃないと++fooの結果は使えないけど foo++ならldするだけで使えるって事か。 確かに
698 名前:、主作用の方の値を使いたいなら後置の方が実行速度が高くなりうるな。 ちょっと試してみた バージョンはgccが4.8.4、clangが3.7.0、環境はXubuntu on VMWare on Win7 on i7-5820k 3.3GHz https://gist.github.com/pixie-grasper/d71c6e8ef13992c426559256e520beca まとめると、clang/gccで-O0/-O3について比較したら gcc -O0については前置より後置の方が3%くらい速くなったけど 他では後置より前置の方が速くなった。 結論:前置より後置の方が速くなる事はある。 [] [ここ壊れてます]
699 名前:デフォルトの名無しさん (ワッチョイ 937b-UkU1) [2016/05/12(木) 10:17:36.81 ID:BxH3pzV60.net] >>681 それ同じ処理じゃねえから、ベンチマークとして不適切
700 名前:デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX) mailto:sage [2016/05/12(木) 10:21:09.51 ID:DRM/51U40.net] >>682 うん、確かに10億分の1だけ前置のほうが早く終わる処理になってるけど それでも後置のほうが3%くらい速くなるケースが実際にあった。 10億分の1と3%の比較は出来る?
701 名前:デフォルトの名無しさん (ワッチョイ 937b-UkU1) [2016/05/12(木) 11:04:31.19 ID:BxH3pzV60.net] >>683 いや、俺が悪かった。 後値を前値に単純に置き換えられるような処理で後値の方が早くなるケースなんてほぼないもんな。
702 名前:デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX) mailto:sage [2016/05/12(木) 11:28:30.44 ID:DRM/51U40.net] >>684 そうなー。 後置を前置で単純に置き換えれるって事は副作用しか使ってないわけで 副作用しか要求しておらず、コンパイラが最適化をサボる場合には、 余計なインスタンスの生成が走りうる後置よりin-placeな前置の方が速い。 但し、intなんかのbuilt-inな型はコンパイラが最適化してくれる &そうでない型も処理が見えてればコンパイラが頑張って最適化してくれるので 副作用しか使わなければどっちでも同じ機械語列になるって事は書いてあるね。 でも>>671 の先から引用を引用すると 「しかし、値が使われる場合、CPUのパイプラインでストールを生じさせないので、 ポストインクリメントの方が優秀である。 したがって、プレインクリメントの動作が絶対に必要である場合を除いて、 必ずポストインクリメントを使う習慣を身につけたほうがよい。」 とあって、パイプラインストールが起こりうるなら後置のほうが良い事もあるってのが元々の論旨だから もっと露骨にパイプラインストールが起こるようにコンパイラの最適化を邪魔したら -O3しても後置のほうが速くなったわ https://gist.github.com/pixie-grasper/6d9c560601f191df0dd205911866cc1e
703 名前:デフォルトの名無しさん (ミカカウィ FF6f-Wsqh) mailto:sage [2016/05/12(木) 14:57:11.64 ID:oq6xjtF8F.net] 質問です。 class data{ public: int score; }; class test{ public: std::vector<data> *v; }; void main(){ test abc; test *d = &abc; (*(d->v))[1].score = 1;// } (*(d->v))[1].score;の他に書き方無いでしょうか? アロー演算子を2重に使うとかやってみましたができませんでした。 配列を使う方法と、[1]をポインタ演算にして書く方法があれば両方教えてほしいです。
704 名前:デフォルトの名無しさん (ワッチョイ cb3c-EA1W) mailto:sage [2016/05/12(木) 15:55:07.83 ID:MyP06V7u0.net] d->v->data()[1].score = 1; d->v->at(1).score =1; // ただし境界チェックが入る (d->v->begin() + 1)->score = 1;
705 名前:デフォルトの名無しさん (ワッチョイ ef9f-Wsqh) mailto:sage [2016/05/12(木) 16:02:27.95 ID:LsrVgu920.net] >>687 ありがとうございました。そういうやり方があったんですね。
706 名前:デフォルトの名無しさん (ワッチョイ 377b-nbuf) mailto:sage [2016/05/12(木) 16:02:54.52 ID:e6oRkxgP0.net] そんなことよりなんでtest::vがポインターなんだよ newしてないし、[1]にはアクセスできないし、それ動かないよ いずれにせよ初心者歓迎スレ案件だな
707 名前:デフォルトの名無しさん (ワッチョイ ef9f-Wsqh) mailto:sage [2016/05/12(木) 16:15:54.25 ID:LsrVgu920.net] あ、質問スレ他にあったんだ。ここだと思った。
708 名前:デフォルトの名無しさん (ワッチョイ 237b-/3cR) mailto:sage [2016/05/12(木) 17:49:55.66 ID:e7uDPICZ0.net] これってよく言われる前置か後置かの問題じゃないでしょ。 変数更新タイミングを使用直前にするか更新可能な一番早いタイミングで行いかの違いで、アルゴリズムの変更を伴う可能性が高い。 その場合後者の方がいいが、コピーして前置でも結果は同じ。 前置か後置かで前置がいいと言われているのは、あくまで単に+1したいってとき。所謂forの3つめ
709 名前:デフォルトの名無しさん (ワッチョイ 6fcc-/3cR) mailto:sage [2016/05/12(木) 18:41:37.34 ID:V7G0arWW0.net] >>686 いちいちポインタに直すメリットは?
710 名前:デフォルトの名無しさん (スプー Sd1f-/3cR) [2016/05/12(木) 19:09:46.88 ID:V8j8LQpxd.net] メリットデメリットなんて問題にしてないから
711 名前:デフォルトの名無しさん (ワッチョイ 033c-hNIp) [2016/05/12(木) 19:23:08.71 ID:wtk4J6jy0.net] ポインタの方がカッコイイじゃないですか。 頭良さそうで。
712 名前:デフォルトの名無しさん (ワッチョイ dbb1-yliF) [2016/05/12(木) 20:19:14.11 ID:u4rYymiL0.net] (d->v)とか最高に頭悪そうだな 流れは違うが前置と後置がわかってない、以前に憶える気がない
713 名前:684 (ワッチョイ cbcf-Wsqh) mailto:sage [2016/05/12(木) 20:25:17.26 ID:6ncal6FL0.net] >>689 >そんなことよりなんでtest::vがポインターなんだよ 要素数100万くらいのvectorが10個くらいあって、 必要なvectorにいちいちポインタを書き換えてる、じゃダメ? 入門書以外で他人のコード読むことないからぐちゃぐちゃやってる。
714 名前:デフォルトの名無しさん (ワッチョイ 377b-nbuf) mailto:sage [2016/05/12(木) 20:36:16.87 ID:e6oRkxgP0.net] >>696 ごめん。何言いたいのか分からない 1M要素くらいの配列が10個くらいあるからってなんだって言うんだろう?
715 名前:デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX) mailto:sage [2016/05/12(木) 21:04:50.54 ID:DRM/51U40.net] >>696 生のポインタなんて使わずにstd::shared_ptrを使え。 class test{ public: std::shared_ptr<std::vector<data>> v; }; d->v = std::make_shared<std::vector<data>>(1000000);
716 名前:デフォルトの名無しさん (ワッチョイ b79d-hNIp) mailto:sage [2016/05/12(木) 21:12:08.75 ID:k4tl7img0.net] >>697 俺も>>696 が何言いたいのかわからんが、 >>686 の質問からして初心者だろうから、あんまり突ついてもって思う。 少しレベル上がると、今のコード見て恥ずかしい・頭悪いやり方してたんだ って思うんじゃないか。
717 名前:デフォルトの名無しさん (ワッチョイ 7f13-Q4kq) mailto:sage [2016/05/12(木) 21:15:46.74 ID:R6+MliT10.net] >>663 後置インクリメント,前置デクリメントは68系の慣習
718 名前:デフォルトの名無しさん (ワッチョイ 9f8b-EA1W) mailto:sage [2016/05/12(木) 21:35:16.27 ID:xhYAhim/0.net] Z-80のpopとpushもそう
719 名前:デフォルトの名無しさん (ワッチョイ 9f8b-EA1W) mailto:sage [2016/05/12(木) 21:36:56.40 ID:xhYAhim/0.net] ていうか今日日のコンパイラが インクリメント前のcの値を使わないケースでも c++を++cと違うコードに落とすとはにわかには信じ難い この世には知らないほうが幸せなことがあるのかもしれない…
720 名前:デフォルトの名無しさん (ワッチョイ 2310-0YMq) mailto:sage [2016/05/12(木) 22:01:48.84 ID:2OPIh6as0.net] >>686 d->v->operator[](1).score = 1;
721 名前:デフォルトの名無しさん (ワッチョイ 937b-qps8) mailto:sage [2016/05/13(金) 08:07:22.18 ID:ApLv0E8+0.net] return c++; とかで外で値を受け取らないケースで最適化が上手く動くもしくは動かないケースとかなら あるかもとは思うけど、そんなどうでもいいケース考えてどうすんの?って話ではある。
722 名前:デフォルトの名無しさん (ワッチョイ 37bf-/3cR) mailto:sage [2016/05/13(金) 08:44:07.94 ID:Ja7udZmR0.net] ・クラス化されたiteratorを使う時には、言語レベルでの手順差が明らかにあるから、とりあえず全て前置使っとけば問題ないでしょ ていう方法論の話と、 ・整数プリミティブ型の場合は後置の方が速い事がある って言う実測論に近い話をごっちゃにしてはいけないと思うの。
723 名前:デフォルトの名無しさん (スプー Sd1f-/3cR) mailto:sage [2016/05/13(金) 11:31:14.81 ID:G/A+aqfad.net] 「言語レベル」の手順差?
724 名前:デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX) mailto:sage [2016/05/13(金) 13:01:39.98 ID:ZUyuraMo0.net] >>702 人間としては同じ意味のコードでも、言語の意味論上は別な意味として解釈しなければならないのだから 最適化前のコードは異なって当然。 んでもって、違うコードを初期地点として独立に最適化を掛ける訳だから 最適化後のコードは異なる可能性がある(偶然一致する可能性もある)。 そういうお話
725 名前:デフォルトの名無しさん (ワッチョイ a763-/3cR) mailto:sage [2016/05/13(金) 20:48:02.35 ID:EayoOtAj0.net] >そういうお話 という幻覚を見てしまったようです。 統合失調症ID:rpWGZ4yl0、ID:DRM/51U40と その他の健常者との噛み合わない会話
726 名前:662 (ワッチョイ 9fa6-Wsqh) mailto:sage [2016/05/13(金) 20:56:04.60 ID:y6JoVpFh0.net] 鼻ほじりながら書いたら>>666-668 あたりで予想通りのレスが返ってきて、それで終わるのかと思いきや 意外と後を引いててワロタw
727 名前:デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX) mailto:sage [2016/05/13(金) 21:28:43.56 ID:ZUyuraMo0.net] >>708 残念、糖質じゃなくてアスペでした
728 名前:デフォルトの名無しさん (ワッチョイ 2730-o0Hb) mailto:sage [2016/05/13(金) 21:41:15.90 ID:na9JUjrP0.net] キチガイの一言で解決しろや
729 名前:デフォルトの名無しさん (ワッチョイ 9302-Wsqh) mailto:sage [2016/05/13(金) 23:27:56.30 ID:akm6bXau0.net] いいからアセンブラのコード見ろよ
730 名前:デフォルトの名無しさん (ワッチョイ 937b-UkU1) [2016/05/14(土) 01:22:12.62 ID:guvuQQ9l0.net] 前値を後値に変更して効率的になる場所なんて限られてるからどうしてもその場所のパフォーマンスを上げたいって時の知識として知っててもいいかなぐらいの事だよ 常に後値で書かれたらデメリットが大きすぎる
731 名前:デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX) [2016/05/14(土) 08:57:39.96 ID:BsF9lC3v0.net] アセンブリも読めないc++erなんて滅びればいい
732 名前:デフォルトの名無しさん (ワッチョイ a763-/3cR) mailto:sage [2016/05/14(土) 09:11:42.00 ID:EHXndh+50.net] アセンブリが読めてもパイプラインの正しい知識の無い人に言われても…
733 名前:デフォルトの名無しさん (ワッチョイ 9302-Wsqh) mailto:sage [2016/05/14(土) 10:34:04.60 ID:5qwu2L7o0.net] デジタル回路の正しい知識も必要
734 名前:デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX) mailto:sage [2016/05/14(土) 10:37:31.14 ID:BsF9lC3v0.net] そうだね。 1段NOTゲートと3段NOTゲートの違いくらい説明できなきゃね。
735 名前:デフォルトの名無しさん (ワッチョイ 9302-Wsqh) mailto:sage [2016/05/14(土) 11:45:07.22 ID:50Ljn6jM0.net] 半導体の物性を理解していない人にC++を使って欲しくない
736 名前:デフォルトの名無しさん (ワッチョイ a763-/3cR) mailto:sage [2016/05/14(土) 11:53:10.78 ID:EHXndh+50.net] むしろC++を語るのに半導体物性とかアセンブリ言語とかどうでもいい
737 名前:デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX) mailto:sage [2016/05/14(土) 12:13:40.02 ID:BsF9lC3v0.net] 基礎は大事だろ。 何処まで掘り下げるかって問題はあるけど
738 名前:デフォルトの名無しさん (ワッチョイ 233c-/3cR) mailto:sage [2016/05/14(土) 12:43:01.47 ID:eiJc4QAX0.net] なにが悲しくてアセンブリを理解しなきゃならんのだ。 そんなのは言語開発者とコンパイラの仕事だ。
739 名前:デフォルトの名無しさん (ワッチョイ 4b42-Wsqh) mailto:sage [2016/05/14(土) 12:53:34.15 ID:jHuAeQfl0.net] ビジネスアプリケーション専門の人ならそうかもしれないが ハードウェア資源を有効利用しようとした途端アセンブラレベルの知識は必要になるだろ 理解する必要はないが、理解している奴の仕事を代わって引き受けられないな
740 名前:デフォルトの名無しさん (ワッチョイ 3775-yliF) [2016/05/14(土) 12:56:54.42 ID:4NwAroGq0.net] なぜか事務処理系の案件もやったことがあるが ちょっとしたバカの壁を透過するのにアセンブラ使ったぞ
741 名前:デフォルトの名無しさん (JP 0H6f-mfIb) mailto:sage [2016/05/14(土) 13:35:56.95 ID:fLeelvLJH.net] なにが悲しくてC++を理解しなきゃならんのだ。 そんなのは組込み・基盤システム開発者の仕事だ。
742 名前:デフォルトの名無しさん (スプー Sd1f-/3cR) mailto:sage [2016/05/14(土) 13:59:43.12 ID:K+XlGAeBd.net] まじかよアセンブラer最低だな
743 名前:デフォルトの名無しさん (ワッチョイ 937b-qps8) mailto:sage [2016/05/14(土) 14:38:23.70 ID:UFikrM320.net] なにが悲しくてc++を理解しなきゃならんのだ。 そんなのはc++エバンジェリストの仕事だ。
744 名前:デフォルトの名無しさん (ワッチョイ 6fcc-/3cR) mailto:sage [2016/05/14(土) 14:42:24.09 ID:QuevABMG0.net] アセンブリの基礎を判ってないとregisterの使い道すらわからんだろ
745 名前:デフォルトの名無しさん (ワッチョイ 6fcc-/3cR) mailto:sage [2016/05/14(土) 14:45:28.79 ID:QuevABMG0.net] アセンブラ理解出来てない奴は最適化失敗するときのステートメントの修正方法すら判断つかんだろ
746 名前:デフォルトの名無しさん (ワッチョイ 937b-UkU1) [2016/05/14(土) 14:46:17.04 ID:guvuQQ9l0.net] C++使ってるのは移植性のためでもあるからレジスタ直接触ることなんてほぼないわ
747 名前:デフォルトの名無しさん (ワッチョイ 233c-/3cR) mailto:sage [2016/05/14(土) 14:52:23.85 ID:eiJc4QAX0.net] アセンブリだのレジスタだの、そういう低レベルな処理をプログラマが考える必要を無くしていくのがコンパイラとその設計者の仕事でしょうが。
748 名前:デフォルトの名無しさん (スプー Sd1f-/3cR) mailto:sage [2016/05/14(土) 15:12:38.19 ID:K+XlGAeBd.net] まじかよアセンブラer大海を知らずだな
749 名前:デフォルトの名無しさん (ワッチョイ 4b42-Wsqh) mailto:sage [2016/05/14(土) 15:34:48.60 ID:jHuAeQfl0.net] 移植のこと効力するなら、それこそソースレベルで分けていけばいい話だと思うけどね
750 名前:デフォルトの名無しさん (ワッチョイ 4b42-Wsqh) mailto:sage [2016/05/14(土) 15:35:45.78 ID:jHuAeQfl0.net] × 移植のこと効力するなら ○ 移植のことを考慮するなら
751 名前:デフォルトの名無しさん (ワッチョイ 9f8b-EA1W) mailto:sage [2016/05/14(土) 15:41:24.26 ID:XQsBVmZY0.net] >>729 リーナスに殺されるぞ…
752 名前:デフォルトの名無しさん (ワッチョイ 9f8b-EA1W) mailto:sage [2016/05/14(土) 15:45:05.04 ID:XQsBVmZY0.net] 漏れの無い抽象化は言うほど簡単ではない C++ぐらいではまだまだ低水準レイヤーの話を切り離すわけにはいかない そもそもこの言語の最初の開発動機がSimulaの高速化であって 抽象化された高水準レイヤーとCPUアーキテクチャとメモリが透けて見える低水準レイヤーの 境にあるんである
753 名前:デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX) mailto:sage [2016/05/14(土) 16:37:14.60 ID:BsF9lC3v0.net] 今はグラフ彩色アルゴリズムで準最適なレジスタ割り当てが出来るってばっちゃが言ってた register使ったこと殆ど無いわ crubyのC拡張書くのに使った事はあるけど
754 名前:デフォルトの名無しさん (ワッチョイ 937b-UkU1) [2016/05/14(土) 16:57:46.20 ID:guvuQQ9l0.net] registerってキーワードの事言ってるの?
755 名前:デフォルトの名無しさん (ワッチョイ a763-/3cR) mailto:sage [2016/05/14(土) 17:15:25.88 ID:EHXndh+50.net] >>727 から733まではCPUレジスターの話だったけど 突然>>736 がstorage class specifierの話をし出した
756 名前:デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX) mailto:sage [2016/05/14(土) 17:18:52.05 ID:BsF9lC3v0.net] > アセンブリの基礎を判ってないとregisterの使い道すらわからんだろ この文を適切に補完すると (それはCの一要素でありながら) (ry ってなるだろうからキーワードの方だと思ったけど 違った?
757 名前:デフォルトの名無しさん (ワッチョイ a763-/3cR) mailto:sage [2016/05/14(土) 17:27:09.65 ID:EHXndh+50.net] 一見その様な日本語にも見えるが、 規格では「殆どの処理系で無視されるのでdeprecated」になっていて 次期改訂のドラフト4582からも削除されてしまったキーワードについて 使い道を主張するとは考えにくい
758 名前:デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX) mailto:sage [2016/05/14(土) 17:31:14.33 ID:BsF9lC3v0.net] にほんごむずい
759 名前:デフォルトの名無しさん (ワッチョイ 4b42-Wsqh) mailto:sage [2016/05/14(土) 18:05:33.36 ID:jHuAeQfl0.net] register キーワードはアセンブリというより、コンパイラの知識じゃないのかな 今のコンパイラは賢いから最適化して割り当てるので、 変に使うとかえって効率を落としかねないから使うなって教わった
760 名前:デフォルトの名無しさん (ワッチョイ 6f3c-/3cR) mailto:sage [2016/05/14(土) 18:06:21.55 ID:W/mpGy/20.net] >>740 >>727 がそう言うことを熟知していると仮定するのもどうかと思うが
761 名前:デフォルトの名無しさん (ワッチョイ 937b-UkU1) [2016/05/14(土) 18:35:40.54 ID:guvuQQ9l0.net] registerキーワードが無意味なのは常識だと思ってた
762 名前:デフォルトの名無しさん (ワッチョイ 9302-Wsqh) mailto:sage [2016/05/14(土) 18:36:20.83 ID:50Ljn6jM0.net] 無意味にスタックに積んでからすぐ取り出して使うゴミみたいなコンパイラならそれを止められるから意味ある
763 名前:デフォルトの名無しさん (ワッチョイ b79d-hNIp) [2016/05/14(土) 20:30:12.22 ID:stGv22ss0.net] 組み込みの開発ってやったことないんだけど、ベンダーが提供するコンパイラ しか使えない場合が結構あるんでしょ? そうなるとそれがゴミみたいな代物 なら >>745 だと思う。
764 名前:デフォルトの名無しさん (ワッチョイ 937b-UkU1) [2016/05/14(土) 21:33:09.63 ID:guvuQQ9l0.net] 大抵gccベースだけどな
765 名前:デフォルトの名無しさん (ワッチョイ 3764-yliF) [2016/05/15(日) 06:32:49.04 ID:U+van56a0.net] >>742 教わった、のはいいが ちゃんと自分で再検証したか?
766 名前:デフォルトの名無しさん (ワッチョイ 27a8-Wsqh) mailto:sage [2016/05/15(日) 09:35:30.57 ID:IffsDtB30.net] >>742 言語仕様上の制約として register キーワード付きの変数はアドレスを取ることが出来なくなる。 (まともなコンパイラならアドレスを取ろうとするとエラーを通知する。) 当然だがアドレスが存在しなければならない変数はレジスタに載せられない
767 名前:フで、 その逆にアドレスを取らなくていい変数であることを確約することで結果的にレジスタに載りやすくなる可能性はある。 gcc などは register キーワードの有無は変数をレジスタに載せるかどうかの決定を左右しないが、 レジスタに載せることが可能な変数の選択肢が多ければ結果的に最適化しやすくなるかもしれない。 まあ、よほど速度に厳しい箇所をチューニングするのでもなければ付けなくていいと思うけどね。 [] [ここ壊れてます]
768 名前:デフォルトの名無しさん (ワッチョイ 937b-UkU1) [2016/05/15(日) 09:45:04.30 ID:WYUaDR6g0.net] ここはC++のスレでregisterはC++17で削除される。clangなんかだと使ってるだけで警告もでる。 よって単にregisterは使ってはいけない。それ以上でも以下でもない。
769 名前:デフォルトの名無しさん (ワッチョイ 9f8b-EA1W) mailto:sage [2016/05/15(日) 10:12:20.69 ID:SQ5j33E00.net] ポインタになら現行でもrestrictを付けることでaliasが無いものとコンパイラに通知され、 >>749 の懸念は半分無用となるが(注:アドレスをとってもエラーにはならない) 参照にもつけられるようになるんだっけ;
770 名前:749 (ワッチョイ 9f8b-EA1W) mailto:sage [2016/05/15(日) 10:18:51.93 ID:SQ5j33E00.net] 訂正 ×:アドレスをとってもエラーにはならない ○:Aliasを作ってアクセスしてもエラーにはならない ていうかaliasが存在しないことの保証とか、コンパイラは宇宙の果てまでは追いきらん
771 名前:デフォルトの名無しさん (ワッチョイ a763-/3cR) mailto:sage [2016/05/15(日) 10:42:40.03 ID:TLapgfGj0.net] >言語仕様上の制約として register キーワード付きの変数はアドレスを取ることが出来なくなる 大昔に聞いたような記憶がよみがえった 26年前の別の言語の仕様でな
772 名前:デフォルトの名無しさん (ワッチョイ a763-/3cR) mailto:sage [2016/05/15(日) 10:46:36.48 ID:TLapgfGj0.net] >ポインタになら現行でもrestrictを付けることで 大昔に聞いたような記憶がよみがえった 16年前の別の言語でな
773 名前:デフォルトの名無しさん (ワッチョイ 37bf-/3cR) mailto:sage [2016/05/15(日) 12:42:51.94 ID:heRU3dbC0.net] >>753 C89?
774 名前:デフォルトの名無しさん (ワッチョイ 37bf-/3cR) mailto:sage [2016/05/15(日) 12:43:35.52 ID:heRU3dbC0.net] >>754 C99?
775 名前:751 (オッペケ Sr2f-/3cR) mailto:sage [2016/05/15(日) 12:59:06.40 ID:Ep7D2rxvr.net] >>755 C89は知らんけどC90では禁止されていたような 調べたらC11でも禁止されたままだった >>756 イエス、マダーム
776 名前:デフォルトの名無しさん (ワッチョイ 377b-nbuf) mailto:sage [2016/05/15(日) 13:07:07.31 ID:vsTAFBzF0.net] C++じゃまだrestrictは規格的にはサポートされてないよ C99との互換性のために書いてもエラーにせず無視することになってるけど(C++14 $17.2/2) でも殆どのコンパイラで__restrictが使えるけどね
777 名前:デフォルトの名無しさん (ワッチョイ 4b42-Wsqh) mailto:sage [2016/05/15(日) 13:12:53.03 ID:dHmJMeXo0.net] 禁止と言うことは、無視されるではなく、 エラーになる(可能性がある)って理解で良いですか?
778 名前:デフォルトの名無しさん (ワッチョイ 377b-nbuf) mailto:sage [2016/05/15(日) 13:18:12.39 ID:vsTAFBzF0.net] >99との互換性のために書いてもエラーにせず無視することになってるけど(C++14 $17.2/2) ごめん。これ嘘 GCCでもClangでもrestrictはエラーになる
779 名前:デフォルトの名無しさん (オッペケ Sr2f-/3cR) mailto:sage [2016/05/15(日) 13:54:04.82 ID:Ep7D2rxvr.net] >>759 イエス、マダーム register int x; &x;
780 名前:デフォルトの名無しさん (ワッチョイ 87cb-Wsqh) [2016/05/15(日) 18:54:11.89 ID:vMirLtIS0.net] struct hoge { int val; }; hoge h; int* val = static_cast<int*>( &h ); のようにhoge*をint*にキャストしたら自動的に&hoge::valが得られるようにしたいんですが どうすればいいですか。
781 名前:デフォルトの名無しさん (スプー Sd1f-/3cR) mailto:sage [2016/05/15(日) 18:57:44.93 ID:YfWps9FTd.net] そんなことをやろうとしない
782 名前:デフォルトの名無しさん (ワッチョイ 937b-UkU1) [2016/05/15(日) 19:11:08.36 ID:WYUaDR6g0.net] ポインタからじゃなくていいならキャスト演算子のオーバーロードで出来る
783 名前:デフォルトの名無しさん (ワッチョイ a763-/3cR) mailto:sage [2016/05/15(日) 19:16:44.98 ID:TLapgfGj0.net] >>762 >>763 の言うとおり。別の解を探さないと、マトモな方法では難しい ideone.com/4D984F
784 名前:デフォルトの名無しさん (ワッチョイ 9302-Wsqh) mailto:sage [2016/05/15(日) 19:17:38.83 ID:jxnGY8hD0.net] >>762 int* val = (int*)&h;