1 名前:デフォルトの名無しさん (ワッチョイ f37a-QmV0) mailto:sage [2017/03/31(金) 08:47:49.65 ID:UkLjKqcm0.net] 次スレを立てる時は本文の1行目に以下を追加して下さい !extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part129 echo.2ch.net/test/read.cgi/tech/1483940967/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 echo.2ch.net/test/read.cgi/tech/1478440682/ ■長いソースを貼るときはここへ。■ 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
652 名前:デフォルトの名無しさん (ワッチョイ 6111-wjSU) mailto:sage [2017/07/05(水) 21:04:30.49 ID:tZeoWZVY0.net] >>644 てことは fgetc+自前スペース解析+atoi :175ms fread++自前スペース解析+atoi :80ms 読み込みのオーバーヘッドで175-80=95msロスしてるわけか atoiは変換不能文字とか16進とかチェックしてるからその分遅くなるんだろう 自前で10進のみに特化させるのが一番なんだけどもな
653 名前:デフォルトの名無しさん (スップ Sdc2-Pf3w) mailto:sage [2017/07/05(水) 21:05:36.71 ID:O+22iBefd.net] 複数スレッドに分けてアセンブラの自作関数で回す
654 名前:デフォルトの名無しさん (スップ Sdc2-Pf3w) mailto:sage [2017/07/05(水) 21:07:40.11 ID:O+22iBefd.net] 各スレッドも、複数数値を並列で動かす
655 名前:デフォルトの名無しさん (スップ Sdc2-Pf3w) mailto:sage [2017/07/05(水) 21:08:36.26 ID:O+22iBefd.net] C++スレだった すまんこ
656 名前:はつみつ餃子 ◆8X2XSCHEME (ワッチョイ 8215-CicO) mailto:sage [2017/07/05(水) 21:23:34.13 ID:YH3wEyty0.net] どういう風に並列化できる?
657 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd62-3ntT) mailto:sage [2017/07/05(水) 21:26:33.09 ID:2aUA7xnEd.net] 処理すべきブロックに対して、ちょうどいい区切りで、等分割に近い分割をやって、それぞれを別々のスレッドで処理する。 スレッドがすべて終わったら、処理結果を結合する。
658 名前:デフォルトの名無しさん (ワッチョイ 6111-wjSU) mailto:sage [2017/07/05(水) 21:28:54.47 ID:tZeoWZVY0.net] スレッドもインラインアセンブラもC++の範疇だよ ただIOはロックされるから解放待ちの時間が出来てしまう ラインごとに随時読み込んでスレッド振り分けかな パースに時間がかかるならそれも悪くないんだろうけど簡易atoi程度じゃ差は出にくい
659 名前:デフォルトの名無しさん (ワッチョイ c21b-8PSv) mailto:sage [2017/07/05(水) 21:34:38.31 ID:slEXI2jh0.net] 原理的にはブロッキングIOのファイル読み出しの待ち時間を有効に活用すれば それが最速だけど並列化のオーバーヘッドを最小にしようと思ったら OS毎あるいはファイルIOのライブラリ毎に特化しなきゃならない気がするので面倒くさい
660 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd62-3ntT) mailto:sage [2017/07/05(水) 21:40:11.90 ID:2aUA7xnEd.net] #ifdef _WIN32 // Windowsの場合 ... #elif ...
661 名前:デフォルトの名無しさん (ワッチョイ c99a-Pf3w) mailto:sage [2017/07/05(水) 23:16:04.44 ID:icFnMa9s0.net] 各スレッドも、前から順番にやってたら遅い 各スレッドのなかでも複数を同時にやらないと 例えば>>638 みたいなのだと、各ステップが終わらないと次のステップに進めない 演算の遅延があるので、各演算ポートはスカスカになる HTで少しはマシにはなるが、それでもスカスカ 整数演算は同時に3個〜4個出来るのだ これを活かさないと まあいずれにしろファイルなんか使ってたら読み込み時間がほとんどなので、ガリガリにアセンブラで組む価値もないけど
662 名前:デフォルトの名無しさん (ワッチョイ be91-DoE+) mailto:sage [2017/07/05(水) 23:24:23.81 ID:9lrezxXx0.net] C++のすごい人お願い教えて!!!functionにメンバ関数を代入するにはどうすればいいのか全然わからんのや!!! #include <iostream> #include<functional> using namespace std; struct C{ int i=0; function<void()> f; void A(){ cout << i;} void B(){ f=A;//ここで「reference to non-static member function must be called; did you mean to call it with no arguments?」 //関数A();をstaticにすればエラーは消えるものの、C::A()を呼びたいのではなくc.A();を呼び出したい f(); } }; void main(void){ C c; c.B(); }
663 名前:デフォルトの名無しさん (ワッチョイ 06a6-F+4p) mailto:sage [2017/07/05(水) 23:25:58.77 ID:pl4REjuI0.net] 釣りならもっと議論の余地のあるネタにしろ
664 名前:デフォルトの名無しさん (ワッチョイ 06a6-F+4p) mailto:sage [2017/07/05(水) 23:36:21.55 ID:pl4REjuI0.net] f = [this]{A();}; c.f = [&]{c.A();}; 二度と来んなカス
665 名前:デフォルトの名無しさん (ワッチョイ b7ea-rvkC) mailto:sage [2017/07/06(木) 09:30:12.16 ID:x5DiEtc40.net] ファイル読み取りの待ち時間を別スレッドに割り当てるってのは、 誰もが考えつく話だけど、誰もがどうでもいいやと投げ出す話。
666 名前:デフォルトの名無しさん (ワッチョイ f7e2-pw7F) mailto:sage [2017/07/06(木) 20:44:37.47 ID:3RH7JsNg0.net] テンプレートクラスの継承で↓みたいなことをやりたいんですが エラーが出てコンパイルが通りません どこが間違っていますか?もしくはもっと良い方法はありますか? template< typename T > class alpha { private: T mVar; public: alpha( T var ) : mVar( var ) {} }; class bravo : public alpha< float > { public: bravo( float var ) : alpha( var ) {} };
667 名前:デフォルトの名無しさん (ワッチョイ bfaf-VFUi) mailto:sage [2017/07/06(木) 20:54:42.22 ID:1SuD/0Q50.net] コンパイル通りそうだけど どんなエラー?
668 名前:デフォルトの名無しさん (ワッチョイ 976f-U373) mailto:sage [2017/07/06(木) 20:54:56.95 ID:r4C+2lo90.net] なぜ肝心のエラーの内容を書かないのか
669 名前:デフォルトの名無しさん (ワッチョイ f7e2-pw7F) mailto:sage [2017/07/06(木) 20:58:24.06 ID:3RH7JsNg0.net] 658です コンパイル通りました すまんこ
670 名前:デフォルトの名無しさん (ワッチョイ bfe4-LW8t) mailto:sage [2017/07/06(木) 21:29:46.08 ID:RDUi9QjP0.net] ゆるさねえからな
671 名前:デフォルトの名無しさん (スプッッ Sd3f-RGC3) [2017/07/06(木) 22:12:30.80 ID:8iMXbcNhd.net] いえいえどういたしまして
672 名前:デフォルトの名無しさん (ワッチョイ 9f8f-gRQY) [2017/07/07(金) 00:01:47.76 ID:lYH0c+880.net] ヽ(・ω・)/ズコー
673 名前:デフォルトの名無しさん (ワッチョイ 1f1b-6//c) mailto:豊田の姉松居一代 [2017/07/10(月) 06:02:24.59 ID:kxDJWNLg0.net] 最近は3年毎に仕様改訂されてるC++なので プロパティはどーなってるのカナー♪ RWPropertyて・・・ このハゲーーーー!!! 違うだろ ち・が・う・だ・ろーーーー!!! C#みたいに class Body{ size_t Chimpo{ get; set;} }; Body Oreno; Oreno.Chimpo = 20; cerr << Oreno.Chimpo <<"cm\n"; と簡単に書きたいんです・す・す
674 名前:デフォルトの名無しさん (ワッチョイ 1f1b-6//c) mailto:豊田の姉松居一代 [2017/07/10(月) 06:06:24.38 ID:kxDJWNLg0.net] テンプレートなんかでお茶濁し腐って 言語仕様として実装しろつってんだよハゲーーーー!!! ぶち殺すぞ
675 名前:デフォルトの名無しさん (ワッチョイ 9709-8gU5) mailto:sage [2017/07/10(月) 06:07:31.30 ID:NdIMybBN0.net] C#のあれ結局関数だから、下駄と雪駄書きなさい。
676 名前:デフォルトの名無しさん (ワッチョイ 1f1b-6//c) mailto:豊田の姉松居一代 [2017/07/10(月) 06:21:29.79 ID:kxDJWNLg0.net] はやっ なんでこんな時間に2chなんかやってんだよ
677 名前:デフォルトの名無しさん (ワッチョイ 9709-8gU5) mailto:sage [2017/07/10(月) 06:42:08.85 ID:NdIMybBN0.net] オマエモナー。
678 名前:デフォルトの名無しさん (ワッチョイ 1f1b-6//c) mailto:sage [2017/07/10(月) 06:48:01.08 ID:kxDJWNLg0.net] 俺は超早く寝て朝4:30に起きるように 生活習慣変えたから
679 名前:名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ 9709-8gU5) mailto:sage [2017/07/10(月) 07:03:50.00 ID:NdIMybBN0.net] 俺は、夜行性なだけだ。 今日は用事があるからこのまま起きてるが。
680 名前:デフォルトの名無しさん (スップ Sd3f-nGAm) mailto:sage [2017/07/10(月) 11:54:33.30 ID:okOc14zTd.net] 単独プロパティでゲットセット? あまり需要ないなあ。(個人の感想です)
681 名前:デフォルトの名無しさん (ワッチョイ 7f32-MxGc) mailto:sage [2017/07/11(火) 00:29:34.07 ID:4iHLvMGp0.net] メンバ変数はない方がいいし、アクセスする必要がある時点で、隠蔽が崩れ始めてると思った方がいいと思う。 特定のパターン除けば、外からメンバ変数にアクセスしたいケースってすくなくない? get/setは、リフレクションと命名規則に依存するフレームワークがあるから便利なのであって、c++には微妙じゃね?
682 名前:デフォルトの名無しさん (ワッチョイ bfe4-LW8t) mailto:sage [2017/07/11(火) 01:25:20.72 ID:7V5lebao0.net] 自動実装のgetsetってpublicなメンバ変数と何が違うんだ
683 名前:デフォルトの名無しさん (ワッチョイ 9709-8gU5) mailto:sage [2017/07/11(火) 01:29:35.46 ID:CDrVRBQX0.net] >>675 何度目だろう。 なんか、関数にしておくとオーバライドできて関数内で加工できるから違うって聞いた。
684 名前:デフォルトの名無しさん (ワッチョイ 174b-R6aQ) mailto:sage [2017/07/11(火) 01:48:50.09 ID:8G8H3ksE0.net] ゲッタセッタとか使いたくなるような場面ならそもそもpublicな構造体使った方がいい説はある
685 名前:デフォルトの名無しさん (ワッチョイ 174b-R6aQ) mailto:sage [2017/07/11(火) 01:50:07.47 ID:8G8H3ksE0.net] 配列のlengthとかあったか やっぱ取り消し
686 名前:デフォルトの名無しさん (ワッチョイ b7ea-rvkC) [2017/07/11(火) 06:32:58.41 ID:nM0jXF630.net] 関数オーバーロードやプロパティによるget/setの乱用は、メソッド名の文字列検索によるソースコード追跡ができなくなりかえって難読性が高まる。
687 名前:デフォルトの名無しさん (ワッチョイ 1f1b-6//c) mailto:sage [2017/07/11(火) 07:59:11.17 ID:MCsEtOKi0.net] ↓のテンプレートとジェネリックの違い、にある https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/generics/differences-between-cpp-templates-and-csharp-generics トップ項目にある ・C# ジェネリック クラスでは、ユーザー定義演算子は呼び出すことができますが、算術演算子を呼び出すことはできません。 "算術演算子を呼び出すことはできません"ってどーいう意味っすか? 算術演算子って+-*/のこと?
688 名前:デフォルトの名無しさん (アウアウウー Sa5b-X9Wr) [2017/07/11(火) 08:03:15.77 ID:ZtZ4WBZMa.net] C++すれでC#聞かれても。。。
689 名前:デフォルトの名無しさん (ワッチョイ 9f9f-ieup) mailto:sage [2017/07/11(火) 08:05:01.05 ID:bgByaxVg0.net] 頭悪いからだろ
690 名前:デフォルトの名無しさん (ワッチョイ 1f1b-6//c) mailto:sage [2017/07/11(火) 08:18:43.46 ID:MCsEtOKi0.net] >>681 あ、C#スレ行きます
691 名前:はつみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f15-rvkC) mailto:sage [2017/07/11(火) 18:08:51.11 ID:W3h9V8nz0.net] 理解が逆なんだよ。 関数の組 (ときには片方のこともある) を変数として抽象化しようとするのがプロパティであって、 メンバ変数のアクセサとしても使えるのは用例のひとつでしかない。 ゲッタとセッタが自動生成できるとかいうのはまた別問題だるぉおおお
692 名前:デフォルトの名無しさん (ワッチョイ 5711-rvkC) mailto:sage [2017/07/11(火) 18:54:25.62 ID:dSS1j36W0.net] [][Tebla][] } 000-"Yob*RtStrike"[%Kil\]MO,fla>%$9999VLTS 001-GYORLith"0\R"/"ESUBA"%$% HADO-"EM","L","O","NU"###END
693 名前:デフォルトの名無しさん (スップ Sd3f-nGAm) mailto:sage [2017/07/11(火) 19:07:21.76 ID:DqTb1LDQd.net] >>684 素人なので「変数として抽象化」ってとこがよくわからない
694 名前:デフォルトの名無しさん (ワッチョイ d796-rvkC) mailto:sage [2017/07/11(火) 19:17:50.67 ID:dG3xud1d0.net] みなさんが複雑すぎて糞と言われるC++を使う理由を教えて下さい。
695 名前:デフォルトの名無しさん (ワンミングク MM7f-hrVG) mailto:sage [2017/07/11(火) 19:37:55.48 ID:FP4c/tWpM.net] >>684 なるほど、そんな捉え方があるのか データ抽象の一つの形としてプロパティなるものがあるって考え方ね
696 名前:デフォルトの名無しさん (スップ Sd3f-nGAm) mailto:sage [2017/07/11(火) 19:40:41.20 ID:DqTb1LDQd.net] >>687 言われるほど複雑じゃないから
697 名前:デフォルトの名無しさん (ワッチョイ bfe4-LW8t) mailto:sage [2017/07/11(火) 19:43:55.52 ID:7V5lebao0.net] >>687 複雑すぎではないし糞でもないから
698 名前:デフォルトの名無しさん (ワッチョイ bfaf-VFUi) mailto:sage [2017/07/11(火) 19:45:13.43 ID:YnoqV4V50.net] SDKがC++しかなくて仕方なく・・・
699 名前:デフォルトの名無しさん (ドコグロ MM2b-d65a) mailto:sage [2017/07/11(火) 20:21:24.75 ID:Wcul0TB2M.net] ネイティブコードを吐けるオブジェクト指向言語でメジャーな奴は C++ ぐらいしかないし
700 名前:デフォルトの名無しさん (ワッチョイ d796-rvkC) mailto:sage [2017/07/11(火) 21:14:29.35 ID:dG3xud1d0.net]
701 名前:人は複雑じゃないもん 二人は仕方なし [] [ここ壊れてます]
702 名前:デフォルトの名無しさん (ワッチョイ 9f89-EAWM) mailto:sage [2017/07/11(火) 21:42:20.62 ID:VLYeJXw20.net] いちばん使い慣れていて、使い勝手の良い道具だから。
703 名前:デフォルトの名無しさん (ワッチョイ d79a-0UkT) mailto:sage [2017/07/11(火) 22:06:48.92 ID:qjau/h5c0.net] 複雑だが糞ではない
704 名前:デフォルトの名無しさん (ドコグロ MMbf-rPCP) mailto:sage [2017/07/11(火) 22:11:10.23 ID:mCNEANh4M.net] >>686 同じ書き方で呼び出せる、ということ。 値を受け取るときに何か処理するようにしたとしても、プロパティなら関数呼び出しに書き換える必要がない。
705 名前:デフォルトの名無しさん (スップ Sd3f-nGAm) mailto:sage [2017/07/11(火) 22:18:58.63 ID:DqTb1LDQd.net] >>696 期待していた答えと違う 期待していた答えと違う
706 名前:デフォルトの名無しさん (ワッチョイ bfe4-LW8t) mailto:sage [2017/07/11(火) 22:30:22.09 ID:7V5lebao0.net] >>696 わざわざパースの難易度を上げてまで入れる価値はないな C++の場合変数に見える関数なんて落とし穴にしかならない
707 名前:デフォルトの名無しさん (ドコグロ MMbf-rPCP) mailto:sage [2017/07/11(火) 22:35:06.05 ID:mCNEANh4M.net] >>697 それじゃこう? 呼び出し元が同じ概念で扱えるように、呼び出し先のメンバ変数の読み込みと0変数関数、メンバ変数書き込みと1変数関数をプロパティという概念で同一視している。
708 名前:デフォルトの名無しさん (ワッチョイ 176f-zXdO) mailto:sage [2017/07/11(火) 22:35:38.41 ID:jUUyBjmf0.net] ビットローテーションについての相談です 今やりたいことは128文字の文字列を暗号化したい その中で4バイトごとに区切って、4バイトごとにビットローテーションして暗号化を考えている それの実現方法で悩んでいます 想定では右シフト char a[128] = 文字列; int x = a[0] << 24 + a[1] << 16 + a[2] << 8 + a[3]; // 下位2bitを上位2bitでtmp作成 int tmp = a[3] << 30; x = x >> 2 + tmp; これを繰り返す。 こんな感じのを考えたのだけどもっと良い方法はあるだろうか?
709 名前:デフォルトの名無しさん (ワッチョイ d79a-0UkT) mailto:sage [2017/07/11(火) 22:42:18.86 ID:qjau/h5c0.net] 環境依存で良いなら色々と思い付く とりあえず、<<より+の方が優先度が高いので()を付けないと | なら()は不要 コストは多分ほとんどの環境で同じ 8086とかだと | の方が速かったり
710 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-R88v) mailto:sage [2017/07/11(火) 22:43:45.50 ID:7IW2GOwZd.net] >>700 数学や計算機科学を知らない素人が暗号化方式を考えるのは、おそらく無駄であり、出来たとしてもすぐハッキングされてしまう。 暗号化方式は、先人の研究によって評価されている手法を使うのが一般的。より良い暗号化方式を 考えるのは計算機科学者の仕事であり、プログラマーはその手法をプログラムに取り入れるだけだ。
711 名前:デフォルトの名無しさん (ワッチョイ d79a-0UkT) mailto:sage [2017/07/11(火) 22:45:09.93 ID:qjau/h5c0.net] どっちみち>>700 の時点で環境依存だ
712 名前:デフォルトの名無しさん (ワッチョイ d79a-0UkT) mailto:sage [2017/07/11(火) 22:46:16.83 ID:qjau/h5c0.net] >>702 目的による 家の鍵もプロが1分以内で開けられるから意味ない?
713 名前:デフォルトの名無しさん (ワッチョイ bfaa-rPCP) mailto:sage [2017/07/11(火) 23:06:53.51 ID:01bGuLEG0.net] >>704 家の鍵を素人が作るのは意味ない。
714 名前:デフォルトの名無しさん (ワッチョイ 9f89-EAWM) mailto:sage [2017/07/11(火) 23:17:01.14 ID:VLYeJXw20.net] 質問者の目的が言語の学習とか、ちょっとしたテキストの難読化なのかもしれないのに、 外野が憶測で否定したり変な方向で議論を展開したり…。 相談室なのだから、もうちっと質問者の為になる話の流れにならないかなと思う。
715 名前:デフォルトの名無しさん (ワッチョイ bfe4-LW8t) mailto:sage [2017/07/11(火) 23:17:54.39 ID:7V5lebao0.net] >>700 少なくともこうしないと期待通りに動かないよ int x = (a[0] << 24) + (a[1] << 16) + (a[2] << 8) + a[3];
716 名前:デフォルトの名無しさん (ワッチョイ 176f-zXdO) mailto:sage [2017/07/11(火) 23:21:49.34 ID:jUUyBjmf0.net] >>706 さんの言うとおりにテキストの難読化が目的です bit演算に触れてみるのにちょっとした暗号化が良いレベルなのかなって思ってチャレンジしているところ やっぱり演算子の優先度とかで注意点あるね 環境依存するのかな?この方法
717 名前:デフォルトの名無しさん (ワッチョイ 176f-zXdO) mailto:sage [2017/07/11(火) 23:23:13.79 ID:jUUyBjmf0.net] >>701 環境依存で良いっていうとこの他にも色々あるんだ 自分の知っている限りの方法でできるならこれしか思いつかなかった…
718 名前:デフォルトの名無しさん (オッペケ Srcb-sNxi) mailto:sage [2017/07/11(火) 23:33:54.38 ID:L5b0rMHKr.net] >環境依存するのかな? むしろこのコードで動く環境が珍しいような
719 名前:デフォルトの名無しさん (ワッチョイ 9f89-EAWM) mailto:sage [2017/07/11(火) 23:45:11.34 ID:VLYeJXw20.net] char型が負数を表すかが環境依存。 負数を左シフトした結果が環境依存。 だからunsigned型の変数を使う。 負数を左シフトした結果が負数だったとして、それを加算したら想定してた結果にならないから、加算ではなくビットORを使う。
720 名前:デフォルトの名無しさん (ワッチョイ bfe4-LW8t) mailto:sage [2017/07/11(火) 23:50:08.05 ID:7V5lebao0.net] 思いつきで変な暗号作るより検索するなりしてまともな基礎的なアルゴリズムを実装したほうが勉強になる
721 名前:デフォルトの名無しさん (スップ Sd3f-nSBM) mailto:sage [2017/07/11(火) 23:55:54.87 ID:KCPaJcrVd.net] 文盲多すぎね? bit演算をやる方法を学びたい的な雰囲気なのに暗号作る方をメインに読み取ってるやつおおくね? しかもレスもあったあとなのに
722 名前:デフォルトの名無しさん (ワッチョイ 176f-zXdO) mailto:sage [2017/07/11(火) 23:59:49.23 ID:jUUyBjmf0.net] >>711 charが負を表すか否かってのはどこも同じではない…? あと最後の加算ではなくビットORってのは一体
723 名前:デフォルトの名無しさん (オッペケ Srcb-sNxi) mailto:sage [2017/07/12(水) 00:01:29.72 ID:XspFYFk7r.net] >>702 を文盲と断定する根拠は見あたらないが >>706 がアスペなのは間違いない
724 名前:デフォルトの名無しさん (ワッチョイ bfe4-LW8t) mailto:sage [2017/07/12(水) 00:04:15.65 ID:WTh+eJgx0.net] >>713 bit演算については何も聞いてないだろ もう一回読み直せや 式がおかしいからツッコミ入ってるだけで質問の趣旨に対しては検索しろとしか言いようがない
725 名前:デフォルトの名無しさん (スップ Sd3f-nSBM) mailto:sage [2017/07/12(水) 00:06:40.65 ID:vUTYJqrrd.net] >>716 いやどう見ても「bit演算に触れてみるのに」って書いてあんじゃん その後に暗号化については重きをおいていないレスもかかれているのに思い付きで変な暗号を考えるより〜とかレスしてんじゃん
726 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9f15-rvkC) mailto:sage [2017/07/12(水) 00:15:27.23 ID:trGyb9bp0.net] >>714 単に int と書いたら signed int と書いたのと同じ意味になるからよく誤解されるんだけど、 char は signed char でも unsigned char でもない固有の型なんだよ。 オーバーロードで試してみたらすぐわかる。 表現できる範囲は signed char か unsigned char のどちらかと同じではあるけど、 どちらかは処理系が選択していい。 処理系によってはオプションで変えられる場合もある。
727 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-R88v) mailto:sage [2017/07/12(水) 00:22:30.14 ID:mvEs3lAId.net] #include <cstdint> unsigned char a[128]; ... unsigned char prev4bits = (a[128 - 1] >> 4); for (int i = 0; i < 128 - 1; i++) { unsigned char b = (a[i] >> 4); a[i] <<= 4; a[i] |= prev4bits; prev4broken = b; }
728 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-R88v) mailto:sage [2017/07/12(水) 00:29:02.98 ID:mvEs3lAId.net] >>719 訂正。 #define NUM_BYTES 123 unsigned char a[NUM_BYTES]; ... unsigned char prev4bits = (a[NUM_BYTES - 1] >> 4); for (int i = 0; i < NUM_BYTES; i++) { unsigned char b = (a[i] >> 4); a[i] <<= 4; a[i] |= prev4bits; prev4bits = b; }
729 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-R88v) mailto:sage [2017/07/12(水) 00:42:16.50 ID:mvEs3lAId.net] あるいは #define NUM_BYTES 128 unsigned char a[NUM_BYTES]; ... unsigned char prev4bits = (a[NUM_BYTES - 1] >> 4); for (int i = 0; i < NUM_BYTES / sizeof(int); i++) { unsigned char b = (a[(i + 1) * sizeof(int) - 1] >> 4); ((int *)a)[i] <<= 4; a[i * sizeof(int)] |= prev4bits; prev4bits = b; }
730 名前:片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdbf-R88v) mailto:sage [2017/07/12(水) 00:46:41.27 ID:mvEs3lAId.net] >>721 訂正。 #define NUM_BYTES 128 unsigned char a[NUM_BYTES]; ... unsigned char prev4bits = (a[NUM_BYTES - 1] >> 4); for (int i = 0; i < NUM_BYTES / sizeof(unsigned int); i++) { >unsigned char b = (a[(i + 1) * sizeof(unsigned int) - 1] >> 4); ((unsigned int *)a)[i] <<= 4; a[i * sizeof(unsigned int)] |= prev4bits; prev4bits = b; }
731 名前:デフォルトの名無しさん (ワッチョイ 9f8f-gRQY) [2017/07/12(水) 01:19:28.71 ID:L1I2nS9y0.net] >>711 負数を左シフトしても問題ないだろ
732 名前:デフォルトの名無しさん (ワッチョイ 9f8f-gRQY) [2017/07/12(水) 01:21:26.50 ID:L1I2nS9y0.net] ああ、元の式を見てなかった まさか足し算してるとは… そのまま符号付きで使うことを意図してたら、確かに問題だな
733 名前:デフォルトの名無しさん (ワッチョイ ffaa-PX3H) mailto:sage [2017/07/12(水) 05:56:30.63 ID:HQm2gXhD0.net] LLVM, MISRA-Cでも決められているけど、 int, char など、処理系依存の型は使うな。 必ず、ビット数・符号の有無を明示すること unsigned char unsigned int32
734 名前:デフォルトの名無しさん (ワッチョイ d79a-0UkT) mailto:sage [2017/07/12(水) 06:25:07.29 ID:Mf+sZV2C0.net] >>700 環境依存なのは、 intが4バイト charが8ビット 負の数の表現方法 バグは 演算子の優先順位 xの右シフト
735 名前:デフォルトの名無しさん (ワッチョイ d79a-0UkT) mailto:sage [2017/07/12(水) 06:33:18.90 ID:Mf+sZV2C0.net] >>720 元の意図とは違う結果に見える >>722 ビッグエンディアンじゃないと違う結果 バイトアクセス可能っていう条件もつく
736 名前:デフォルトの名無しさん (スップ Sd3f-nGAm) mailto:sage [2017/07/12(水) 06:33:41.93 ID:7DtiXvdjd.net] >>718 関係ないけどそれをどう捉えるべきか ・だからC++は複雑 ・C++は言われるほど複雑じゃない
737 名前:デフォルトの名無しさん (ワッチョイ 9709-8gU5) mailto:sage [2017/07/12(水) 06:35:07.19 ID:DgqX1C+L0.net] C++はそろそろbyte型が入るよ。 多分エーリアスだけどね。
738 名前:デフォルトの名無しさん (ワッチョイ d79a-0UkT) mailto:sage [2017/07/12(水) 06:38:05.27 ID:Mf+sZV2C0.net] unsigned int x = (unsigned int)a[0] << 24 | (unsigned int)a[1] << 16 | (unsigned int)a[2] << 8 | (unsigned int)a[3]; x = x << 30 | x >> 2; 互換性と簡潔さのバランスで、こんな感じじゃない? unsigned intが32bit charが8bit 限定
739 名前:デフォルトの名無しさん (ワッチョイ d79a-0UkT) mailto:sage [2017/07/12(水) 06:44:26.17 ID:Mf+sZV2C0.net] もうちょっと簡潔さ重視だと、キャスト無しで
740 名前:デフォルトの名無しさん (ワッチョイ d79a-0UkT) mailto:sage [2017/07/12(水) 06:50:51.01 ID:Mf+sZV2C0.net] バリバリ環境依存で速度重視なら intrinsicでAVX2やAVX512とか インラインアセンブラはこのスレ的には反則?
741 名前: ◆QZaw55cn4c (ワッチョイ 176d-hafE) mailto:sage [2017/07/12(水) 07:30:39.07 ID:9q9UgJkW0.net] >>725 かならずしも賛同できない、必要なときに unsigned/signed を指定すればいいのでは?
742 名前:デフォルトの名無しさん (ワッチョイ 9709-8gU5) mailto:sage [2017/07/12(水) 07:31:30.65 ID:DgqX1C+L0.net] cstdintを使おう。
743 名前: ◆QZaw55cn4c (ワッチョイ 176d-hafE) mailto:sage [2017/07/12(水) 07:31:53.68 ID:9q9UgJkW0.net] >>732 インラインで自由にかけてこそのC/C++ だと思うんだが、最近は嫌われるみたいだね
744 名前:デフォルトの名無しさん (オッペケ Srcb-sNxi) mailto:sage [2017/07/12(水) 07:59:55.87 ID:SNfdy8Tor.net] MISRAさんパネェな for (int = 0;i <= n; i++) // きんし! X operator ++(int); // きんし! int main() {} // きんし!
745 名前:デフォルトの名無しさん (スップ Sd3f-nSBM) mailto:sage [2017/07/12(水) 08:23:54.55 ID:vUTYJqrrd.net] >>730 あとの問題はあれだな 応用利かせるなら128文字が129文字になったときにどうするかなどの規約的な話にも対応できるようなコードにする方が 後にちに勉強になりそう
746 名前:デフォルトの名無しさん (ワッチョイ bfe4-LW8t) mailto:sage [2017/07/12(水) 08:47:06.94 ID:WTh+eJgx0.net] バイト単位で回転させるだけならstd::rotateやstd::copyでいい
747 名前:デフォルトの名無しさん (ワッチョイ 1706-pw7F) mailto:sage [2017/07/12(水) 10:52:11.36 ID:QOR+1nCC0.net] 自作クラスで他の自作クラスのインスタンスのコレクションを返すメソッドを追加したい のですがクラス設計ってどうすればいいでしょうか??ガチガチの最適化?まではしなくていいので 普通ぐらいの最適化?ぐらいでOKです。 public: std::shared_ptr<std::vector<std::shared_ptr<CMyClass>>> EnumeateMyClasses() こんな感じで設計すればいいでしょうか? C#なら IEnumerable<CMyClass> EnumeateMyClasses() とかにするんですが
748 名前:デフォルトの名無しさん (ワッチョイ 9709-8gU5) mailto:sage [2017/07/12(水) 11:12:35.14 ID:DgqX1C+L0.net] 返したものをどこら辺まで使うんやろ。 たらい回しにするんだったら、スマポでも良いけど、一時でやるんだったらこんすと参照でも良いし。 でも、内部で持ってるものを外でたらい回しにされるのは気持ち悪いな。
749 名前:デフォルトの名無しさん (ワッチョイ 1706-pw7F) mailto:sage [2017/07/12(水) 11:30:49.11 ID:QOR+1nCC0.net] Enumerateメソッドは内部ではインスタンス作りますが、内部でその参照を保持することは ないですね、メソッド内で作って呼び出し元に返すだけです。 どれくらいたらい回すかは使う側次第です。 >たらい回しにするんだったら、スマポでも良いけど、一時でやるんだったらこんすと参照でも良いし こんすと参照とかもあるんですか・・ まぁ、先ほども書いたようにC++に深入りすると死にそうなので、 とりあえず、C#erの人がちょっと毛が生えた程度でC++を使うレベルでいいので。
750 名前:デフォルトの名無しさん (ワッチョイ 9709-8gU5) mailto:sage [2017/07/12(水) 11:34:33.27 ID:DgqX1C+L0.net] >>741 どう伝えればいいかわかんない。 識者求。
751 名前:デフォルトの名無しさん (ワッチョイ bfe4-LW8t) mailto:sage [2017/07/12(水) 12:51:39.26 ID:WTh+eJgx0.net] >>739 それでもいいと思うけど コンパイラの最適化が期待できる状況ならvectorをshared_ptrで包む必要は無い
752 名前:デフォルトの名無しさん (スプッッ Sd3f-nGAm) mailto:sage [2017/07/12(水) 13:59:49.69 ID:HO+tEfFId.net] うん、ただvectorを返せばいいと思うけど