【初心者歓迎】C/C++室 Ver.79【環境依存OK】
m_はウンコだったハンガリアンが残した唯一の正の遺産
そういえばthis->の強要って出来るんかな
> 978+1 :デフォルトの名無しさん [sage] :2012/06/30(土) 18:03:27.62
>
>>976 > 見ることが目的であって、記述ミスが目的じゃないだろ
> そもそも、thisなしで困るような関数書くな。
> 結局this忘れでも、メンバーにm_つけ忘れでも大差ねぇよ
メンバにm_付け忘れは宣言の時一回気をつければいいだけ
this忘れは使う時に毎回気をつけなければならない
Pythonのselfと対をなす問題だな
>>3 副作用をちゃんと意識してプログラム組んでんのか?
ローカル変数でも可能な限り副作用は避けて、
副作用に特に気をつけるべきメンバ変数には目印を付ける
バグを減らすには重要だよ
変数のスコープってのはとても重要な概念で、狭いほどバグは出にくい スコープが広いほど副作用に気をつける必要がある いつどこで変更されるか分かり辛くなる グローバル変数はその最たる物だが、 メンバ変数もスコープが広くそれなりに危険な物で、 メンバ変数とそれ以外は区別がついた方が良い 副作用に対する意識の程度が m_の重視/軽視に繋がると思うね
メンバはアッパーキャメルにしてるからm_は付けない
なにそれキモい
JavaとかC#じゃよく見るけどC++ではどうだろ
メソッドやプロパティはともかく、メンバ変数にアッパーキャメルはJava,C#でも見ないよw
いつまでこの話続けるんだよ
>>6 Pythonはself(C++のthis相当?)が必須なのか。それいいな。
Rubyは@がつく こういう風に文法で制限してあるといいよね
->*をthisなしで書ければいいなとは思ったことがある。
クラス外かどうかで扱いが変わるのを避けたかったのかな 普通のメンバ関数も扱いが変わるのだから気にする必要もないと思うが
そういえばメンバ関数にプリフィクスを付けるのは聞いたことがないや
スコープの壁を突き破って力強く大胆に変数を操作したい漢にとって 必要な手間なんでしょ
->* アッー!な演算子だな。 自分で使うときはいつも思うよw
それにしても時々->=演算子が欲しいと思うときがある。 リストとか木でp->=next だの p->=leftだのと書けたら楽やなぁと。
>>19 稀に見る事はある
ただ、グローバル名前空間での関数定義を行う事が少ないので
あまりプリフィクスが必要にはならない
クラスの定義が大量の内部クラスのせいで500行くらいいきそうなんだけどこれって普通?
行数が基準になるわけじゃないけど多いと思うなら分けなさいよ 内部クラスを出来るだけ兄弟クラスにして それらをファイル分けて名前空間もnamespace detail{}って押し込めたらいい
あーそっかファイルもディレクトリ作れば衝突しないからそれでよかったんだ ありがとうございました
1000行とか普通に行く 他人と共有しないならいいんじゃね?
最近C++の存在に気づき やり始めようと思ったのですが 色々言語があるらしく 自分の性格だと最初の部分で詰みそうで困ってます。 どうしたらよいですか?
無理だったら詰めばいいんじゃね?
難しさにやりがいを感じないと合わないよね
>>28 とりまクラス使ってみ
Cとの違いに驚くよ
>>28 > 色々言語があるらしく
C++じゃねーのかよ?
>>22 .=演算子がCにあったら->=演算子も作られていただろうね
C/C++言語は結構対称性を重視した設計になってるように見える(PDP-11の思想が
入り込んだんでしょうね)だからかな
68000にPDP-11の思想がそのまま受け継がれ、68000が乗ったPC(X68000等)の
Cコンパイラが吐くコードもまた綺麗だった
しかしシェアをIntelに奪われ今はColdfireだけになってしまった
8086に最初にCがインプリメントされた時にはレジスタの使用目的が固定されていたため
制約が多く、最適化に著しく不利だった
それにセグメントの問題でメモリモデルという面倒な概念を導入せざるを得なかった
80386になって大幅に制約が取り払われてようやくC言語が簡単にインプリメント出来る
ようになった、というか明らかにC言語を意識してるよねあの命令セット
x64でレジスタが倍増してさらにCコンパイラから見ると楽になったがREXプリフィックスは
お世辞にも綺麗とは言えない、だが互換性のためには仕方がない
SetProcessWorkingSetSizeExで FlagsにQUOTA_LIMITS_HARDWS_MIN_DISABLE|QUOTA_LIMITS_HARDWS_MAX_DISABLEを 指定する場合と、 SetProcessWorkingSetSizeは同じですか? 両方ともソフトリミット?
GetProcessWorkingSetSizeEx使ってためしてみたら? 多分、Set〜Size(,,) とフラグを指定しない Set〜SizeEx(,,,0)は フラグを変更しないんじゃないかな
そっか、読めばいいのか。 簡単なことにきがつかんかった。 すんません。
cppでのクラスのメンバ関数定義の前にメンバ変数に値を代入してるような文があるのだけど、これはなにを意味しているの?
初期化子リスト
snprintf()やstrncpy()など、について質問です。 これらの関数は書きこむバイト数を指定できますが、 その値を超える文字列を書きこもうとした場合の場合、正常に書き込まれるものの最後に\0が入りません。 さて、バッファのポインタとサイズが正常に指定されている場合、 文字数に関わらず、書き込み用バッファの最後に決め打ちで\0を突っ込むだけで十分に安全と考えて良いでしょうか。 大丈夫そうだとは思うのですが、何か問題があれば教えてください。
用途次第
目的はバッファオーバーランを防ぎたい。 また、1つのバッファを\0区切りで複数に分けたり、すでにある文字列を置換するような使い方はしない。
moveについての質問. struct Hoge { Hoge&& foo() { Hoge tmp(*this); ... return std::move(tmp); } ... }; Hoge x; Hoge y = x.foo(); できるだけコピー減らすためにこんな使い方をすべきなのかと思ったのだけど これじゃやっぱりyのムーブコンストラクタの前に戻り値は破棄される? 素直に値返しにすべきだろうか 値返しにしたとしても関数の戻り値がrvalueになって yのムーブコンストラクタを呼ぶっていう認識があっているかも聞きたい
returnした変数は返り値へ勝手にムーブされるし 返り値はrvalue(より細かく言えばprvalue)だからそんな小細工いらないよ
おおわかりやすい,ありがとう ムーブコンストラクタすら呼ばれないこともあるとは思わなかったけど 確かにそれで済むのか いろいろメンバ追加してみたりしても呼ばないような最適化かけられてるようだし 下手なことすると最適化の邪魔してしまうのかな,これは prvalueだとかxvalueだとかの区別がわかってないんでそっちも理解しようとしてみる
>>46 なるほど,やっぱり先に関数スコープ抜けた段階で破棄されちゃうんだね
ムーブコンストラクタに渡るのは不定値か
手元でやってたのがうまく行ってるように見えたり
どこが原因かわからない不整合があったりしてたんだけどすっきりした
コピーを作って(何かしら操作した後で)返すならやはり値返しが必要で
かつ最適化はかかるからコスト的にも気にすることはないと
48 :
デフォルトの名無しさん :2012/07/04(水) 22:38:43.01
std::shared_ptr ってg++でも使えますの? 4.4系ですが
おれのg++では使える
OK 4.4系じゃ使えないわ
std::tr1::shared_ptr ならどうだ
boost入れろ
try { if( argc ) throw; } catch(...) { puts( "From Throw" ); } MS C/C++ Optimized Compiler 9.0だとgotoに最適化されねぇのな。 糞だな。
gotoに最適化とかアホじゃないの
clangとかするけどな。(厳密にはjmp命令だが)どこがアホだと思ったのやら
C++03のソースをC++11コンパイラでコンパイルするときに 気をつけなければならないのはautoの扱いだけ?
とりあえず何も気にせずコンパイルしてエラーが出たりなにか動作が違うような気がしたら調べろ
C++03でわざわざautoなんて使わねーだろ
規定が全部staticのスパコン用コンパイラーはどうするんだよ
それもうC++03じゃなくね
規格違反のコンパイラなんて知らないよ!
ローカル変数が既定でautoかどうかは未定義だったろ、11は知らんけど
デフォでstaticに出来ないんならなんのためにautoキーワードが生き残ってたんだと思うんだよ。
30年前に書かれたソース用
30年前のソースのためにautoが残ってたんなら なんでorverrideキーワードがあっさり消えたんだよ デフォルトstaticな処理系が現役だからに決まってるだろ
少なくとも未定義ではないだろ・・・
charT ってなにをincludeすれば使えるの?
charTてなーに?
エスパーさん出番です
basic_stringっぽい雰囲気?
テンプレートパラメータだろ。charかwchar_tを指定しろ 厳密には要件を満たすようなchar_traits<charT>の特化版を用意しておけばどんな型でもとりあえずいいんだろうけど
オペレータって、=以外は継承されるの?
>>75 継承されないもの
コンストラクタ
コピーコンストラクタ
デストラクタ
代入演算子関数
friend属性
そういう意味ではoperator=() 以外は継承されると言ってもいいな
今C++の勉強してるのですが、本には「cstdio」をインクルードした場合、 「stdout」の記述も「std::stdout」となるような記述がありますが、 Borland C++で試した所、「std::stdout」は未定義でした。 普通に「stdout」とすれば問題なく使用できます。 本が誤っているのでしょうか?処理系の実装の違いでしょうか?
BCCのバージョン何よ 5.5.1なんか問題外だぞ
度々すみません。
>>78 に誤りがありました。
> Borland C++で試した所、「std::stdout」は未定義でした。
> 普通に「stdout」とすれば問題なく使用できます。
上記はBorland C++ではなくVisual C++でした。
Borland C++の場合、いずれでもコンパイル時にエラーが出ます。
>>79 > 5.5.1なんか問題外だぞ
5.5.1でした。
どこで最新版を入手できますか?
>>81 BCCの無料版は5.5.1のみ
後は製品版のXE2とかに付属してる
IDEは金払わないと評価期間が終了すると使用不能になるけどBCCだけは使える
正式名称はEmbarcadero C++ 6.44
そのうちこちらにもプロテクト掛けられるかもしれないけど
俺は金払ってるから関係ない
来年からXE3が出て64bitもコンパイル出来るようになる(予定)
>>82 ご丁寧にありがとうございました。
今後、所持する環境で余りにも差異があるようでしたら、
Embarcadero C++ 6.44の導入を検討します。
ANSI C++準拠謳っていたので不思議に思っただけだったので、
stdout等の識別子に関しては、
今は実装の違いと言うことで流しておきます。
来年じゃなかった今年8月か まだパンフ来てないけど
ちなみにこれECC 6.44でやったら通らない #include <cstdio> int main(void) { fprintf(std::stdout, "test\n"); return 0; } これなら通った #include <cstdio> int main(void) { fprintf(stdout, "test\n"); return 0; } つー事で準拠度を期待するならVCかgccにしとけ
何でBCC5なんて12年も昔の超古いコンパイラ使ってるんだ? 今はWindowsならVisual C++ Express, Linuxならclangがあるじゃん 両方とも無料だし
Visual C++に統一してくれ〜 ちょっと前のだったら教本に Borlandのつかわれてる
88 :
雲雀 :2012/07/10(火) 05:05:44.94
>>86 ちょっと前でも、2003年ごろからPlatform SDKと.Net Framework SDKで
コンパイラーがタダで手に入ってたのにな。
つかgcc使えよ。
string hoge = "hoge"; printf("hoge=%s\n",hoge); //★ warning: format ‘%s’ expects type ‘char*’, but argument 2 has type ‘int’ になっちゃうけど、c_str()を呼ぶことなく使いたいので どうしたらよいでしょうか
printfを投げ捨ててboost::formatを使う
それは五十歩百歩
C++で型安全性がないprintf使うとかねぇわ
97 :
95 :2012/07/12(木) 16:43:16.31
整数値や文字列でも結構ややこしいのに浮動小数点数の実装は想像つかんな
99 :
95 :2012/07/12(木) 17:25:38.99
stringだけ対応すればいいのだろう
つかC言語の関数使うのにC言語文字列を返すc_str()を使いたくないってどういうことだよww CかC++どっちかで統一しろよw
>>100 %s ってわかってんだからconst char*にキャストしろよ
ってことだよ
言語仕様に%s認識する機能はねーよwww
C++って可変引数どうなってんだろ
どうも何もC++内のCの機能は基本的にそのままだ
,演算子をオーバーロードしてなんとか
暗黒色の波紋疾走(アイティーブラックオーバードライブ)
>>106 Britz++がやってる
変態過ぎて感心する
変態でもなんでもないだろ基本的なことだし
でもMore Effective C++には&&, ||, カンマ演算子はオーバーロードしないように ガイドライン書かれてたろ理由を付けて 読んだ?
ME C++はこの世の真理でも神でも法律でも無いからな ME C++に書いてある問題を理解していないのは論外だが 理解した上でどういう行動に出るかは好きにしたらいい
禿は罪作りだな
>>112 あっEffective C++ 第3版も持っているんだった
今読んだら&&、||、, に関する項目は見つからず
More Effective C++ 第3版は洋書でも出ていない
日本語版のみ訳が酷すぎたので新装版が出ているだけ
さっさと出せゴラ(▼_▼メ)
俺も例外や演算子オーバロードはおかしな機構だと思ってたんだよ
特定のクラスの特定のメソッドをあるプロジェクトの中では外部から呼び出すことを禁止したいのだけど可能かな? 例えば標準のベクターの[]演算子は禁止してatのみを許したいといった感じで
友達
C++にメソッドなんて機能はないからな 自前でメソッド機能用意してるなら、自分でなんとかしろとしか
119 :
デフォルトの名無しさん :2012/07/15(日) 15:07:09.82
初めて質問させていただきます。 現在私はシューティングゲームを製作中で オブジェクト(弾や敵、プレイヤー等)生成時に製造番号を振ってくれるクラスを作成したのですが IDを解放する時に、std::listの挙動がおかしくなっていて、困っています。 IDの生成は各オブジェクトのコンストラクタで IDの解放は各オブジェクトのデストラクタで呼び出しています。 改行が多いと言われてしまったので、次にコードを書きたいと思います。 場所をとってしまってすみません。
120 :
119 :2012/07/15(日) 15:12:00.05
以下がコードです //IDを生成するクラス class ID_Factory { public: //コンストラクタ _ID_Factory(){} public: _//IDを生成する _int CreateID(); _//IDを解放する _void ReleaseID( int id ); //メンバ private: _std::list< int > active_id; //使用されているID _std::queue< int > free_id; //開放されたID };
121 :
119 :2012/07/15(日) 15:13:15.60
//IDを生成する int ID_Factory::CreateID() { __//使いまわし可能なIDがある場合 __if( !free_id.empty() ) __{ ____//先頭を取り出す ____int id = free_id.front(); ____//先頭削除 ____free_id.pop(); ____//使用中のIDとして登録する ____active_id.push_back( id ); ____return id; __} __//新たにIDを作成する必要がある場合 __else __{ ____//現在使用されているID数+1の値を次のIDとする ____int id = active_id.size() + 1; ____active_id.push_back( id ); ____return id; __} } //IDを解放する void ID_Factory::ReleaseID( int id ) { __free_id.push( id ); __active_id.remove( id ); }
122 :
119 :2012/07/15(日) 15:14:07.88
ReleaseID呼び出し時にエラーで落ちるので、 active_id.remove( id ); の直前にブレークポイントをつけて値を確認したところ active_idの値が以下のようになっていました。 [0] 1 int [1] 2 int [2] -17891602 int [3] CXX0030: エラーです: 式を評価できません (error) 0 int (error) 0 int (error) 0 int (error) 0 int (error) 0 int removeやeraseを使って、正常にノードの関連付けが行われない場合があるのでしょうか..? 連投すみませんでした。
ReleaseID自体に問題はないとおもうがあ 落ちる要素がメモリ不足以外にないし まあこんなこだわった仕様にしなくてもゲームだったらIDは整数インクリメントして返すだけで十分だと思うよ 普通のゲームならシーンごとにIDリセットすれば32bitの整数を全範囲使いきることはまず不可能
std::list<T>のeraseってT取れないはずだが。。。
問題はあんたが書いてないところにある
ってeraseじゃなくてremoveか。 念のため聞いとくけど、スレッド使ってないよね?
127 :
119 :2012/07/15(日) 16:04:27.54
>>123 うーん、そうですか..
原因は今後探っていく事にして、とりあえず仕様変更する事にします。
確かに使いまわす必要もないので、インクリメントして使うようにします!
ありがとうございました。
128 :
119 :2012/07/15(日) 16:08:19.01
>>124 eraseでもコンパイルエラーは出ませんでしたが、removeと同様に落ちました
>>125 もっと監視する範囲を広げて確認してみます
>>126 スレッドは使っていません
配列の文字列数を調べるために、配列に文字が入っているかどうかを調べたいのですがどうすればいいでしょうか? //word[i]は入力した文字列 int moji; for (int i=0;i<=40;i++){ if(word[i] >= 0) moji = i-1; break; } これでword[i]の文字を一文字ずつずらして調べたんですが、条件がどうもうまくいかないみたいです。
もとのプログラムを尊重した修正をするなら //word[i]は入力した文字列 int moji; for (int i=0;i<=40;i++){ if(word[i] == 0){ moji = i-1; break; } } って感じか ちゃんと\0入ってるか疑問だが
std::wstring を使うのが色々楽だろう
132 :
デフォルトの名無しさん :2012/07/16(月) 06:47:07.02
>>129 break;したらi++はされないと思うんだな
133 :
129 :2012/07/16(月) 14:13:18.26
参考にして弄ったらなんとかなりました、 ありがとうございました。
>>119 Release時に入力したIDが存在しないIDなんじゃないか?
そもそもIDなんのためにIDなんて使うんだ?
ディスクに保存する際の永続化にでも使うのか?
単に対象のオブジェクトを指すポインターで十分じゃないのか?
ポインターとsetの組み合わせの方が管理が楽だと思うぞ。
初めてで通信かよ・・・ boostとかのシリアライザー使ったら? 今の問題解決力じゃ難しいだろ
URLのホスト名を抽出するプログラムがわからない。
悪いことは言わんからPythonみたいなテキストプロセッサー系の 動的片付け言語使ったら?
ルンバみたいな?
パイソンって組み込み簡単? テキスト処理とかめんどい事はルア使ってんだが
あるスレッドで作成したFiber、またはSetTimer、またはQueueUserAPCに 他のスレッドから切り替えさせる方法はありませんか?
門柱にでもヘッドバットして単語「スレッド」を忘れればいいと思うよ
>>141 簡単だよ〜
IronPythonってやつ便利だぜ
146 :
デフォルトの名無しさん :2012/07/18(水) 23:09:29.86
何でもいいだろお前の感知するところではない
OSの無いマシンでwebサーバ作んなきゃなんなくなったんだけど どっかにコピペ可能なサンプルある? なきゃ諦めてチマチマ作るしかないんだけど
149 :
142 :2012/07/19(木) 13:20:46.58
数秒制御が返ってこない関数の最中にWndProcを処理したいんです。 SetTimerはメッセージポンプ(?)が、 QueueUserAPCはSleepExなどが関数を呼び出しているだけみたいなので それを別スレッドからやるのは難しそうです。 なんとかSwitchToFiberを他のスレッドからやらせられないでしょうか。
数秒制御が返ってこない関数の最中にWndProcを処理したい という主な理由は? WndProcを処理しなければならないスレッド中に 数秒制御が返ってこない関数(Dialog以外)を含ませるのは設計が微妙なキガス
他からやりたい…って何のためのファイバーなんだろう… まじめにスレッド化した方がいいんじゃないの?
>>149 数秒制御が返ってこない関数を別スレッドで動かせない?
普通はそうするんだけど。
"処理中"ダイアログを出したり、キャンセルや一時停止出来るようにするために
153 :
142 :2012/07/20(金) 13:05:05.84
スタック、コンテキストスイッチ、スレッドローカルなどをちゃんと分かってやってるならいいが・・・ 数々の地雷を埋め込んだプログラムになりそうな予感がする
別スレッドのメッセージキューの中身って奪えるんだろうか? スレッド(キュー)指定可能なGetMessageでも無いとWndProcの処理は出来ないと思うけど
むしろ別スレッドでUIスレッドを動かす
C/C++に微塵も関係ないから余所でやれ
「別スレッドで試しましたが、落ちてしまいました。」 を直すほうがずっとまともな解決策だと思う。
VECTORから一つだけ抜き出すことって出来ませんか? そのままintやfloatに入れようとするとやっぱりエラー…
日本語かコードで書いてくれ
int const bar[] = {1, 3, 4}; std::vector<int>foo = bar; int hage = * foo.begin(); int hoge = foo.at(1); 何がどうエラーだといいたいのだろう……
そもそも >std::vector<int>foo = bar; この時点でコンパイルエラーだろう
あーすまん、サンプル書こうとして間違えた。 std::vector<int> foo(bar, bar + 3); で。
161=164だろ。
C++11の規格票を読みながらvectorの初期化を書いてみた いろんな意味でC++11は気持ち悪いけど使っているうちによく改良されていると思えてきた #include <vector> #include <iostream> #include <iterator> int main() { std::vector<double> d = {1.0, 2.0, 3.0}; for (double& x : d) std::cout << x << ' '; std::cout << std::endl; std::initializer_list<int> il = {4, 5, 6}; std::vector<int> i(il); for (int& x : i) std::cout << x << ' '; std::cout << std::endl; }
うはっ、for_each()を使うためだけに関数にしなくていいのか。 と思ってしまった私も最早……
もはやostream_iteratorの出番が無くなってくるな・・・
実数の乱数を生成したいのですが、 doubleで表現可能なすべての実数を生成するアルゴリズムを教えてください。
バイト列を無理やりdoubleにキャストして、それが doubleとして有効かどうかを判定する方法を教えて
fpclassify() に相当するのを探す
メルセンヌ・ツイスタは結構いい線行っているな でも「doubleで表現可能なすべての実数を生成」するほど周期が長い擬似乱数発生器 なんてないんじゃないか?
>>175 一様乱数なバイト列ならdouble表現にしても
符号部,仮数部,指数部どれも一様になる気がするけどならないの?
>>177 そもそも全doubleが一様分布じゃないでしょ
64bitの乱数ならメルセンヌ二回回せばいんちゃう? 周期は半分になるけど大差ないでしょ
そもそもdoubleの乱数ってどうすれば一様になるのかわからん 指数部と仮数部をランダムにするだけでいいの?
>>178 どういうこと?
上で出てるisnan,isinfや-0を除外する話でなく?
182 :
デフォルトの名無しさん :2012/07/24(火) 09:58:37.06
>>181 (-1)^s * 2^e * (1 + m/2^N)
指数部eが一つ増えると仮数部mが一つ増えた時の実数としての増え方が二倍違ってくる
要は指数部があるから一様にはなっていない
>>182 の通り
>>182 指数部が一様なら変わらないんじゃないの?
有効桁数が一様かどうかに関わってくるとは思えないけど
考え方としては 1~10を1024等分して、10~100も1024等分して、100~1000も1024等分して・・・
対数グラフの目盛りをイメージしてもいい
>>183 だから、それがdoubleでの一様になるんじゃないの?
doubleで表現可能な値(集合)の中で一様分布なら
>>172 で良く
double下限〜double上限の範囲内の実数(double表現不可含む)の中で
一様分布なら
>>182-183 の言う通り
>>172 では駄目
ってことだな
doubleが表現できる範囲での一様分布なんて無理だろ
0から1なら?
>>192 固定小数点数として乱数を求めればOK。
>>191 doubleが表現できる範囲=doubleの全ビットパターン なら可能だろ
>>194 それは一様じゃねー、って言ったばっかだろ
>>195 ビットパターンに対する一様と実数に対する一様を混同すんな
>>198 最初ってどれだよ
「doubleが表現できる範囲」なんていう曖昧なレスのことか?
なんでこんなに話が通じないんだろう……><
お前が馬鹿だから
doubleが表現できる範囲が等間隔ではない 欲しい乱数の分布が 等間隔でない上の集合で一様であってほしいのか 0〜DBL_MAX の連続した実数区画で (double が表現できない箇所を含む)一様であってほしいのか
>>171 次第だな、後者の可能性が高いとは思うけど
区別して話さないとワケワカメ
>>200 99%が1.79E+306以上になるわけだし
浮動小数点って数字でかいほうが密度薄いんだっけ?
頼むから、じっくり考えるか諦めるかしてくれ。
指数固定で仮数だけ乱数にするくらいじゃないと意味ないぜ
char **ptrr; char ***ptrrr; ptrrrr = &ptrr; した場合、 *ptrrrはptrrのアドレスですよね。
typedef char** charH とかすれば charH ptrr; charH* ptrrr; ptrrr = &ptrr; *ptrrr:ptrrの値
>>209 ptrrrがptrrのアドレス
*ptrrrはptrrへの参照であり
*ptrrrとptrrはほぼ同じものとして使える
212 :
200 :2012/07/25(水) 10:17:43.86
213 :
203 :2012/07/25(水) 20:01:56.53
俺が後者で想定してたのは 密度に応じた頻度をしめす乱数 例: 理想上での 1〜99 の一様乱数Aを 非等間隔の数列B { 1,2,3,4,5,6,7,8,9, 10,20,30,40,50,60,70,80,90 } に写すことを考える (A:10〜19 を B:10 へ) { 10,20,30,40,50,60,70,80,90 } のほうが { 1,2,3,4,5,6,7,8,9 } より出現頻度多くならないといけないのでは? これが double の数値世界でも、おきないといけないんじゃない? ということです
214 :
デフォルトの名無しさん :2012/07/25(水) 20:44:40.28
平衡二分木(できればAVL木)が必然になるような簡単なアルゴリズムの問題ってありますか? 初期入力値がよくない(1,2,3,4,...)とかしか思いつかないのですが、それがわかってれば AVL木とかを実装しなくても普通の木でinsertの際にばらけさせるとかすると回避出来るし、 あとは人工的な問題なら思いつくのですが、自然なやつを思いつけません。 どうかお願いします。
>>214 挿入だけだったらそうかもしれないが、削除があったらまず無理
それに挿入の時に掛かるコストが平衡木を作るのと同じくらい掛かるようだったら
無意味
216 :
216 :2012/07/25(水) 21:33:30.39
#include <vector> int map_one[10][10] = { //中身は0,1,2のどれかが10×10 } int map_two[10][10] = { //中身は0,1,2のどれかが10×10 } int map_three[10][10] = { //中身は0,1,2のどれかが10×10 } std::vector<int> StageList; int StageId = 0 //0,1,2のどれか StageList.push_back(map_one[10][10]); StageList.push_back(map_two[10][10]); StageList.push_back(map_three[10][10]);
217 :
216 :2012/07/25(水) 21:34:14.69
for(int j = 0; j<10; j++){ for(int i = 0; i<10; i++){ switch(stageList[StageId][j][i]){ //ここでエラー case 0: //床 //ここに描画関数 break; case 1: //壁 //ここに描画関数 break; case 2: //セット床 //ここに描画関数 break; } } } vector内にある3つの二次元配列をStageIdの値でアクセスして処理を行いたいのですが 書き方がよくわかりません。どのように書けばよいのでしょうか? windowsXP SP3 VC++2008 おねがいします。
>>217 std::vector<int> StageList;
int StageId = 0 //0,1,2のどれか
StageList.push_back(map_one[10][10]);
これコンパイル通った?
ああ通るのか でもmap_one[9][9]までだろ 変なところをアクセスしてるぞ
>>216 ,217
そのソースどおりだと 's'tageList なんて変数はないよ、ってエラーのはずだが
そこはスルーなら
std::vector<int (*)[10]> StageList;
StageList.push_back(map_one);
>>220 それだと配列そのものがpushされるのではなく、配列へのポインタがpushされるわけだよね
もちろん3次元配列のようにして書けるけど、もし配列の中身ごとpushしようとしたら
配列をクラスで包み、コピーコンストラクタを書かなければならない
そしてクラスにしてしまうと配列演算子がまともに働かなくなってしまうので、プロキシクラス
を使って仮想的にメンバの多次元配列にアクセスさせる事になる
なんかスマートじゃないよね
C++11のarrayならうまく行くのかな?ヘッダファイルを見てみたら既にプロキシクラスが書かれて
いるし、arrayはコンテナとしての要件を満たしているのでコピーコンストラクタも備えられている
これならpush出来る
多分相手がクラスだとムーブコンストラクタは働かないだろう
03だと初期化がめんどくさいがvector< vector< vector<int> > >使っとけ
>>214 追加,削除,範囲検索(x〜yの期間,zzの文字で始まる,等)を何度も行う場合
索引とか?
C++11だと配列(std::arrayだけど)毎コピー出来るね おそらく一時オブジェクトだと勝手にムーブコンストラクタを使ってくれるだろう const int ROW = 10, COLUMN = 20; template <std::size_t ROW, std::size_t COLUMN> using A = std::array<std::array<int, COLUMN>, ROW>; int main() { A<ROW, COLUMN> a1; std::vector<A<ROW, COLUMN>> v; a1[1][19] = 123; v.push_back(a1); std::cout << a1[1][19] << std::endl; std::cout << v[0].at(1).at(19) << std::endl; // ROWとCOLUMNの順番が正しいか確認 a1[1][19] = 456; std::cout << a1[1][19] << std::endl; std::cout << v[0][1][19] << std::endl; }
戻り値を引数でもらうとき、 出力は頭のほうにする?ケツのほうにする? bool getUnko( int *output, int input ); bool getUnko( int input, int *output ); おれは頭の方がいいと思う。なんとなく。
read(int fd, void *buf, size_t count); stat(const char *path, struct stat *buf); ケツ
void func(ProjStat & stat, ProjValue const & value); あ、頭だ。
memcpy(output, input, size); のように先頭におく func(output, input1, input2, .... ) input1, input2, .... を使って output を作るよ (C言語で)ハンドル+操作関数の場合は ハンドルは頭に置きたいけど
よし、じゃあ 頭の方にoutputがあるニコチャン大王方式にするわ
230 :
216 :2012/07/26(木) 18:52:21.45
回答ありがとうございます。 とりあえずvector自体まだよくわかってないみたいなので 参考にしながら色々試します。 ありがとうございました。
case文のインデントを半タブに出来るindentはありますか? gnu indentやastyleでは出来ませんでした
>半タブ イミフ
233 :
142 :2012/07/27(金) 10:22:14.77
以前、QueueUserAPCかSetTimerかFiberを 他のスレッドから切り替えさせられないか質問した者です。 SuspendThreadとSetThreadContextでeipを書き換えて、 別の行に飛ばすことによって、SleepExやSwitchToFiberを 実行することに成功しました。 @SetThreadContextでeipを書き換えても、その行に飛ばないことがある。 「SuspendThreadはカーネルモードを止められない」 「Get/SetThreadContextはカーネルモードのレジスタを扱えない」ことが 原因のようで、カーネルモードであるかどうかを判定する方法を 知りたいです。 A実行したい関数やファイバ情報などをecxなどに入れても ResumeThread直後に違う値に書き換わっていることがある。
それもう、板のローカルルールに抵触するだろ。
>>232 半タブってのは、半分のタブという意味です。
そんな言葉一体どこで覚えてきたんだい? エディタの機能とかじゃないのか?
じゃあ半インデントでいいよ
ポッキーの半分みたいなこと言うなよ
switch(a){ case 1: printf("hello\n"); break; } if(a==1){ printf("hello\n"); } こういうやつ
スペース二回おせやハゲ
なんちゅーコードだ
caseは右?左?
ローカルのINIファイルから取得したデータを、自作のクラスのメンバ変数に入れたいのですが、 良い方法が思いつかなくて困っています。 教えてください。 ↓の用になっているINIファイルのデータを使用する [test] //セクション名 x = 100 y = 200 no = 1 INIから取得したデータを↓のクラスに設定する class TEST{ public: int x; int y; int y; TEST(); //INIから情報を取得してメンバに設定する };
GetPrivateProfileInt
>>243 boost::property_tree
ごめんなさい。 ぜんぜん違うことを書いていました(汗)。 INIの中身は243のような形ではなく、↓のようになります。 [test] val = [111,222,1][333,444,2][555,666,3] val部分の[ ]の中身を取り出しクラスに設定する。 中身の意味は[x,y,no]となり、243で記述したクラスのメンバと対応しています。 なぜ[]が複数あるかというと クラスの配列を作って使用するためです。 左からクラス1、クラス2、クラス3に設定するデータとなります。 このデータを切り出してクラスに設定する方法を教えてください。 お願いします。
それぐらい自前でパースしろ strtokとか知らんのか
ステートマシンでやるんだよそういうのは
性器表現
>>247 GetPrivateProfileStringでChar*変数にデータを取得して、
strtocで切り分けようとしましたが、
ポインタの内容が書き換わってしまうためうまくいきませんでした。
なので、うまい事結果が出てくれる方法を探しています。
strtokくらい自前で使いやすいの用意しとけよ
ポインタの内容が書き換わるからうまくいかないの意味が分からない
[] で切り出し @strtok →別のバッファに複写 別のバッファを , で切り出し @strtok →各要素へ
今時の学生ってこんな事も出来ないの?
前後に固定の文字列を付けてC++なコードに変換 →コンパイラを子プロセスで呼び出してDLLを作らせる →LoadLibrary →値取り出す →FreeLibrary →ファイル削除
テキストデータの処理ぐらい頑張ってやれよ…… iniってことは使用者に弄らせることが前提なのかい? 弄らせる気ならどうぞお好きなようにだけど、 そうでなきゃ例えば[]の数とかも 冒頭に書いておいておけばずっと楽じゃん……
だから解析用のステートマシン作ってストリームぶち込めばいいじゃん
WindowsAPIが使える環境なら、素直に使っちゃうのが一番楽なのかな
>>259 Windows環境ならそれでいーんじゃねーの?
(ただしそれ以外の手段の方が楽だって可能性もある)
ブーストでええやん
大昔にWin APIで書かれたソースがあって、書き直したほうがいいんだろうなあと思いつつ、完全に放置されている…
休憩時間で書き直せや ったく、気の利かん社畜やな〜
265 :
sage :2012/07/30(月) 09:52:57.28
vectorの中に重複した要素があるときに、そのなかで1個だけ消すやり方を教えてください。 vector<int> v; v.push_back(1); v.push_back(1); v.push_back(1); こんな感じで1が3個入ってるときに、1個だけ削除したい。 int rem = 1; remove(v.begin(), find(v.begin(), v.end(), remove) + 1, rem); でいけるかと思ったけど、1個も消えません。 STLややこしすぎ。。。
266 :
sage :2012/07/30(月) 09:54:33.43
すいません書き間違い remove(v.begin(), find(v.begin(), v.end(), rem) + 1, rem);
267 :
sage :2012/07/30(月) 09:59:31.39
v.erase(find(v.begin(), v.end(), rem)); で削除できました。何でこんな風になってんだろ
>>265 v.erase(v.begin());
とりあえず、remove したら erase しろよ
>>267 std::removeが配列にも適用可能なように。
findじゃなくてuniqueにしろよ
> 何でこんな風になってんだろ アルゴリズムにできるのはイテレータの操作だけでコンテナの操作はできないから
後から配列ごと変更出来るように、ポインタ配列のポインタを使用したプログラムを作ってます。 class A{ .... } A* cls[10]; A** pcls; この時のclsは10要素持っていますが、プログラム中でそれは増えていく予定で、 現在の要素数を数えるために sizeof を使おうと思っています。 要素数 = sizeof(cls[0]) / sizeof(cls); これはうまくいくのですが、pcls を使用すると、そもそもそのA**のサイズが帰ってきてしまい、要素数がわかりません。 pclsを使用して、要素数を知ることはできませんか? 要素数にならない = sizeof(pcls[0]) / sizeof(pcls);
>>273 std::vectorかboost::ptr_vectorに入れろよ
ポインタに入れたら数が増減しても自分で管理しないと
分かるわけない
>>273 配列のサイズはプログラマが管理する
別の整数変数にサイズをメモしておこう
そして勉強中ならともかく普通はvecterを使うよ
LinuxのC++でunistd.hを使いたいんだけど <cstdlib> みたいな指定ってどうやんの?
負の数の試射五入ってどうやってやるの?
>>276 C++標準ではないインクルードファイルはそのまま使えばよろし。
>>277 四捨五入にも二種類あるので、どのタイプの四捨五入を行いたいかはっきりさせるのが第一歩。
それが負の数に対しても拡張できるか、拡張するとしたらどうするべきかをはっきりさせるのがその次。
279 :
デフォルトの名無しさん :2012/08/02(木) 16:13:42.58
普通の四捨五入と銀行屋の四捨五入。 後者はJIS丸めとも言う。
>>277 Wikipediaでも見ながら実装考えるべきじゃないかな
ceil,floorそのままじゃダメな場合とか普通にあるし
ちなみに
>>280 の「銀行屋の四捨五入」とは実質五捨五入のこと。詳しくはググれ
>>278 ありがとう。
C++はなにが標準かよくわかんないよな。一覧とかないし。
あるだろ一覧ぐらい
cstdlib はそのまま cstdlib というファイル名のヘッダファイル(拡張子はない) 特別な指定をしているわけではない
>>283 ならば 今すぐ愚民ども全てに叡智を授けてみせろ!
>>285 ほしけりゃさがして来い。そこにCPPの全てを置いてきた(ドンッ)
四捨五入って少なくとも3種類あるだろ 1, 正の無限方向に倒す 2. 負の無限方向に倒す 3. 0を境に正の無限、負の無限方向に倒す 幾何系だと3を使うことが割と多い
>>287 絶対値をとって丸めた後、元の負号を復活 ですかな <3番目
>>287 2はねーよ。1.5が1になるのは四捨五入じゃねーわ。
>>287 3だけ普通の四捨五入な気がする
1.5→2、2.1→2、-1.5→-2、-2.1→-2
つまりfabsして0.5足してからint型にキャストして符号戻せばいいんじゃ……
flooar()とceil()って関数もわざわざ用意されてるしな
>>281 偶数丸め自体は知ってたが、五捨五入って言い方もあるのね。勉強になった。
切り上げで0.01が1になるなんて聞いたことない +0.9して切り捨てたら0だろ とかいうやつが後を絶たないのはなんとかなりませんか
少なくとも俺は見たことないぞ、そんなやつ
295 :
デフォルトの名無しさん :2012/08/03(金) 17:14:09.15
struct bird { struct egg { int number; egg(int num) : number(num) {}; }; egg* lay(int num); }; egg* bird::lay(int num) { egg* o = new egg(num); return o; } int main() { bird b; return 0; } これをコンパイルすると以下のエラーがでます。構造体の中で定義するとコンパイル通るのですが、 外に出すとだめです。どうすれば外で定義できますか? test.cpp:8: error: expected constructor, destructor, or type conversion before '*' token
bird::egg* bird::lay(int num) { とか。試してないけど。
297 :
デフォルトの名無しさん :2012/08/03(金) 17:28:19.32
すいません、それでコンパイルできたんですが、実は元のコードはテンプレートになってて、 テンプレートだと上手くいきません。(後出しとか言わないで、、、) template <class T> struct bird { struct egg { T number; egg(T num) : number(num) {}; }; egg* lay(T num); }; template <class T> bird<T>::egg* bird<T>::lay(T num) { egg* o = new egg(num); return o; } int main() { bird<int> b; return 0; }
typename を足せばいいんじゃね template <class T> typename bird<T>::egg* bird<T>::lay(T num) { }
299 :
デフォルトの名無しさん :2012/08/03(金) 17:47:13.88
すげえ、、、なんでか分からないけどコンパイル通りました。 ありがとうございました。
300 :
デフォルトの名無しさん :2012/08/03(金) 17:56:29.13
分かりました。 bird::egg(::が中に入っているやつ)が、型名なのか変数なのかコンパイラは分からないからですね。
sqlite3のC++用のおしゃれなインターフェースってある?
自分自身の実行ファイルのパスを表示したいんだけど Linuxじゃ無理かな
わかった、whichをpopenすればいいのか
実行ファイル自体が既に無くなってたりすることさえあるんだぜい。
>>304 どうしてそんないじわるを!
どうしたらいいのか・・・
いつから自分が実行ファイルだと錯覚していた?
>>307 ./a.out 見ていったい何わかると言うのか
思い出のほかに何が残るというのか
同一のクラス中で同名の変数と関数を宣言したらコンパイルエラーが出て、どうやら衝突してるみたいなんですが、 これって仕様なんですか? また、変数、関数を別名にする以外の対処法があったら教えて下さい。 例: class test { int hoge; public: int hoge(); };
仕様です
>>309 そんなもんCですら重複したらエラー吐くってのに……
#include <stdio.h>
int hoge=3;
int hoge(void) {
return 42;
}
int main() {
printf("%d",hoge());
return 0;
}
int hoge; void hoge(){} int main(){ int i = hoge; void (*p)() = hoge; return 0; }
>>311 まじですか・・・
C言語結構やってたのに全然知らなかった。 恥ずかしい・・
けどなんか納得いかない。 変数名と関数名が被っちゃいけないなんて。
int hoge(void); /*関数*/ と int (*hoge)(void); /*変数*/ があったとして、 hoge()はどっちを使えというのだい?
関数ポインタの使用例 #include <stdio.h> void hoge1() { puts("hogehoge"); } void hoge2() { puts("hoge×2"); } int main(){ void (*p)() = hoge1; p(); p = hoge2; p(); return 0; }
すいません関数ポインタは分かるんですけど
>>314 の意味がいまいちわかりません。
関数ポインタわかってねーじゃねーか!
関数を定数として処理してるんだよ、C言語では。 型定義で関数も変数もみんな同列で扱える仕様だからな。 まあ、そこまで使いこなす必要は、あまり無いかもしれんけど。
#include <stdio.h> void hoge1() { puts("hoge"); } void hoge2() { puts("hogehoge"); } int main(array<System::String ^> ^args) { void (*p[])() = {hoge1,hoge2}; p[0](); p[1](); return 0; }
>>320 間違えた。
×>int main(array<System::String ^> ^args){
○>int main(){
というか、今、.netの勉強中だったからなぁ・・・・
int hoge1,hoge2(void),(*hoge3)(void) = hoge2;
C++理解してないのにC++/CLIに手出すなよ セスナ乗ったことすら無いのに戦闘機乗ろうとしてるようなもんだぞ
例えがおかしいな セスナとモーターボートほど無関係だろ 共通点はエンジンで動くという点だけ この例えもおかしいけど
そうか?C++/CLIはC++の上位互換だろ 一部のキーワードがかぶらない限りはC++のコードをそのまま使える
#include <stdio.h> #include <string.h> #include <conio.h> using namespace System; void hoge1() { puts("hoge"); } void hoge2() { puts("hogehoge"); } int main() { void (*p1[])() = {hoge1,hoge2},(*p2[2])(); int p3[2]; memcpy(p3,p1,sizeof(p3)); printf("%d,%d\n",p3[0],p3[1]); memcpy(p2,p3,sizeof(p3)); p2[0](); p2[1](); return 0; }
>>313 変数と関数の名前空間が同一なのは、C ならばある程度説明がつくかも。
>>312 http://codepad.org/WUGSXc8Z 変数hoge も関数 hoge() も extern。したがってオブジェクトとしての属性のひとつにアドレスを持つ。
同じアドレスで違うものは確保できないからエラーになる。
じゃあ片方を static にすれば大丈夫か?というと、大丈夫ではなくてやっぱりエラーなんだけれども。
こういうのは名前空間が違うからOKらしい。
>>326 p1に入ってる関数ポインタを、p2に入れて変数としてアドレスを表示し、
さらにp2の内容をp3の関数ポインタに入れ直して関数ポインタとして実行。
これが何故正常に動くのかは素人には分からんだろうな。
>>329 int型とポインタが同じメモリーサイズだという常識から説明しないと分からんだろ。
16ビットの頃のsizeof(int)は2だし、64ビットでコンパイルするとsizeof(int)は8になる。
332 :
309 :2012/08/05(日) 13:43:33.14
#include <stdio.h> int hoge() {} int hoge; int main(void) { return 0; } これでエラーが起きるのは、 同一のメモリ領域にhoge()の実態のアドレスを指すhogeが暗黙的に定数(書き換えできない変数?)として存在しているから。 という理解でいいでしょうか?
全然違います。
違いますか・・・ ちょっと考えてみたけどわからないので解説お願いします。
>>331 64ビットWindowsはsizeof(int)==4です
>>332 フォーマルな理由としては「静的なオブジェクト(代表的には static 変数および extern 変数)と関数は同じ名前空間に属する」と表現するしかなかったのでは。
インフォーマルな理由付けはいろいろあると思いますけど、とりあえず頭ごなしに関数と静的オブジェクト(代表的には static 変数および extern 変数) とは同じ名前にできないものだ、とするしかないと思います。
慣用みたいなものかもしれない。
今まで挙がっていたのはインフォーマルな表現ですが、フォーマルな言質しか認めない、ポリティカルコレクトネスでがんじがらめにするのがお好きな方も多いんです。
私見ではそのような思考の先に創造はないと考えていますが、まあそれはそれ、ひとはひと。
337 :
デフォルトの名無しさん :2012/08/05(日) 15:17:34.21
だれかAVL木とスプレー木のC++の実装のサンプルの場所を教えて下さい。 でもboost::intrusiveは駄目です。解読できません。
>>335 Windowsだけ変えても駄目だよ。ちゃんとリンカーまで変更しないと64ビットでは動作しない。
プロパティ→構成プロパティ→詳細設定→対象コンピュータ→MachineIA64 (/MACHINE:IA64)
ちなみに64ビットOSで32ビットのソフトは動くが、64ビットのソフトは32ビットOSでは動かない。 処理速度は、 32ビット環境+32ビットのソフト<64ビット環境+32ビットのソフト<64ビット環境+64ビットのソフト になる。
>>337 ブーストにインタラじゃないやつあるじゃん
>>338 IA64もx64(AMD64/Intel64)もsizeof(int)==4だけど
>>336 うーん、深く考えるなってこと?
>>340 エラー内容はわかってて、変数名と関数名の衝突なんだけど、
なぜコンパイラが変数と関数を区別できないか考えてるところ。
>>338 ちなみにVC++2010の場合ね。あと、Expressだと64ビット用のライブラリが
足りないから動かなくなる可能性もあるけど。
345 :
デフォルトの名無しさん :2012/08/05(日) 16:11:16.61
>>341 boost全体をAVLでgrepしてみましたが、intrusive以下しか引っかかりません。
で、sizeof(int) == 4 となる環境はどうやって作るのですか?
348 :
346 :2012/08/05(日) 16:32:13.73
俺は無知な知ったかぶりの331(=344)を煽ろうとしたのだが 致命的なミスをしてしまったようだ。
昔、int型はポインタサイズに合わせて大きさが変わると聞いたんだけどな。 今のint型のサイズってどうなってるの??
そうだな、LP64とかLLP64、あるいはIP64などの言葉をぐぐってみな
うちの環境で64ビット化しようとしたら、clr:safeにはsizeofはサポートしていません、と出た
C++/CLIがでたぞー
354 :
デフォルトの名無しさん :2012/08/05(日) 20:05:49.24
とりあえず、boost::intrusiveのavl_setでも読んでみます。
AVL-TREEは挿入・削除時の回転と二重回転さえ理解できれば分かると思う あとは2-3-4木と赤黒木などがあるが似たようなもんだ
>>343 区別が付いてるからエラーになってんだろww
同一空間の変数、関数は一意の名前を付けるというルールにしたがっているわけで
ルールがなんでそうなってるかというと、たんに名前で区別付けたいからとしか言いようがない。
仕様としてはアドレス空間に割り付けられたものに一意の名前を付けるアセンブラの仕様から
受け継がれた内容。
新しい言語作れば変数と関数で同じ名前にもできるだろうけど、そうする手間が割に合わないから
そのままなのさ。
名前空間ってものを作ってそれぞれに同じ名前のものハイチできるようにはしたしね。
>>343 int piyo=(int)hoge;とかされたときに区別がつかないからじゃ?
int *hoge; void hoge(){} int main(){ void *p = hoge; return 0; }
C++でオーバーロードされた関数のポインタをとるときそういうことをするんだし区別は付けられるだろう 結局のところそういうものとしかいいようがない
そんなとこに文句つけるなら、まず 外部リンケージで保証されているシンボル名が8文字しかないとか その辺から文句つけろっての。 シンボル名ってのがアドレスでしかないという制限から来てるんだから。 C++では関数名をマングルすることで重複を可能にしたけど グローバル変数はそのままだし。
そういえば、昔、ライブラリの内部で使ってる名前と自分で使う外部シンボル名がかぶると まともに動かないって話を聞いた気がしたけど 今はそういう問題は解決してるのかね。 int open=-1; int CreateFileA=-1; int CreateFileW=-1; int main() { FILE *fp = fopen(...); ... } みたいな。
保障されてるのは6文字でしかも大文字小文字を区別なしっていう仕様は なんとも時代遅れだよな
>>362 それCの話で、C++はそんなこと無い…よね?
>>362 ANSIだと31文字までで大文字小文字の区別ありだけど
どこの規格?
31以上を保証しなければいけないのは、内部リンケージの識別子。
>>365 どういう事?
static int open → open
int open → _open
6文字じゃ無くても30字以下なら31文字超える事なんて無いでしょ
31以下の間違いだろ
>>366 お前が何を言ってるのか、日本語が全然理解できない。
規格では外部リンケージと内部リンケージの
それぞれに要求する最低条件は明確に区別されている。
>>367 ANSI/ISO規格が、処理系に対して、
内部リンケージの識別子を区別する最少長を31以上にすることを要求している。
実際に何文字までが区別されるかは処理系依存。
たしかにC99って全然普及してないよな
黒歴史だからな
_Bool だっけ?
そういえばさ、最近だと int main=0xc3; って走らないんだな。 ひさびさに試したらセグった。
>>368 ああ、外部リンケージだと6文字って話か
アセンブリコードに落とした時の文字数の事言ってるのかと思った
0xC9 だと思ったんだけど。
あ、C9はZ80か。
こんだけ情報でれば、納得いかないとかいってたヤツも納得できたんじゃね
>>373 が動かない(試してないけど)のは、NXbitの関係かしら。
mainはデータ領域に確保されていて、そこに制御を移そうとするけど
実行可能属性がついてないとか。
一瞬、C++対応コード(__mainみたいなやつ)の影響かとも思ったけど、違うよね。
NXbitってなに? おいしいの?
381 :
sage :2012/08/06(月) 06:02:25.33
ようやくAVL木が実装できたっぽい。いくらテストしてもエラーは出なくなった。 でも本当にクソソースで、意味のよくわからないif文(これが無いと時々落ちる)とか、 凶悪な場合わけとか。。。明日boost::intrusiveと性能を比べてみます。 引き続きいい実装ありましたら、よろしくお願いします。
>>380 マジレスすると、amd_86 (x86_64)から実装されたCPUの機能。
windowsだと、データ実行防止機能(DEP)に使われてる。
>>383 つーかそれx86の欠陥だと長い間言われていたよな
XPSP3からDEP有効に出来るようになったんだっけ
バッファオーバーラン攻撃とか簡単に食らってしまう
防いでる事例も腐るほどある万能じゃないだけ あるに越したことはない
class Hoge { Hoge(); Hoge(Hoge const &); /* ...ry */ public: static Hoge * Create(); /* ↓どっちがいい? static void Delete(Hoge *); static void Delete(Hoge const *); */ }; 上のように自動変数を封じたい場合にCreate/Delete関数を作る事があるけど、 この場合にDelete関数に渡すポインタはconstにするべきかしないべきかどちらだろうか オブジェクトを破壊しているから非constにするべきだ、という主張と Hoge const *で生成物を受け取った場合にconst_castなしで破棄できないのは見苦しいからconstにするべきだ、という主張が在って迷ってる
constな成果物を破棄するのは変なので型は非constでいいと思う ところで非staticは選択肢にないの? hoge = Hoge::Create(); // ほげほげ hoge->Delete();
constを付ける 理由:普通のdeleteはconst付きでいける void Delete(Hoge*&); まあこうしてNULLをセットするようにしておくと双方の違和感が紛れる気がしないでもない
そもそも、なんのためにそんな気持ちの悪いことをしたいんだ?
391 :
デフォルトの名無しさん :2012/08/08(水) 14:54:39.63
hogeとか使ってる奴はマジキチ
unkoは?
汚いですね
>>386 自動変数を作らせたくないなら
デストラクターをprivateに置いて、自滅用のDestroy関数用意しときゃいいだろうよ。
ここ数ヶ月unkoを見かける頻度が増えたんだけど 同一人物か?
2chだと、foo系hoge系の次くらいには昔から見かけない?
最近になってunkoを意識し始めたからだろ こういうのって専門用語でなんていうんだっけかな
うんこ症候群
日本は韓国以上にスカトロ先進国だからな、仕方ない
400 :
デフォルトの名無しさん :2012/08/08(水) 23:17:34.65
hogeはどう考えてもおかしいよ きちがい
キチガイかどうかは別にして普通は使わないけどね。
clangでvisual c++の__declspec(property())みたいなのある?
404 :
デフォルトの名無しさん :2012/08/10(金) 14:37:52.01
親クラスのメンバを初期化するとき、 class Oya { protected: int age; }; class Kodomo : public Oya { Kodomo() : Oya::age(50) {} }; こう書くとエラーになるのは何でですか?
class Kodomo : public Oya { using Oya::age; Kodomo() : age(50) {} }; §12.6.2.2 Names in a mem-initializer-id are looked up in the scope of the constructor’s class and, if not found in that scope, are looked up in the scope containing the constructor’s definition. [Note: if the constructor’s class contains a member with the same name as a direct or virtual base class of the class, a mem-initializer-id naming the member or base class and composed of a single identifier refers to the class member. A meminitializer-id for the hidden base class may be specified using a qualified name. ] Unless the meminitializer-id names a nonstatic data member of the constructor’s class or a direct or virtual base of that class, the mem-initializer is ill-formed. A mem-initializer-list can initialize a base class using any name that denotes that base class type. 結局Oya::ageとKodomo::ageの区別が曖昧だからじゃね
気になったのでgcc4.7.1で厳密に調べてみた
..\Derived1.cpp:18:14: error: class 'Kodomo' does not have any field named 'age'
つまり基底クラスのメンバは基底クラスのコンストラクタで初期化しないとコンストラクタが
終了するまで値が確定しないようだ(派生クラスは基底クラスのコンストラクタから順に実行される)
http://www32.ocn.ne.jp/~ons/text/CPP0xFAQ.html.ja ここの「継承コンストラクタ」を参照して欲しい
こうするしかないか
class Oya {
protected:
int age;
public:
Oya(int i) : age(i) {}
};
class Kodomo : public Oya {
public:
using Oya::age;
Kodomo() : Oya(50) {}
void print() const {
std::cout << age << std::endl;
}
};
int main()
{
Kodomo k;
k.print();
}
gccは継承コンストラクタを実装していないよ
多分VC11でも実装しない予想
面倒でも今まで通り
>>406 のように書くべき
単に値を入れたいだけなら初期化じゃなくて代入すればいいんじゃないの? class Kodomo : public Oya { Kodomo(){age=50;} };
Oyaにデフォルトコンストラクタしかないんだし継承コンストラクタとか関係ない
>>408 まあそうだけどな
RAIIに反するし、参照などはそれでは初期化出来ないけど
>>409 いやgccでこのコードが通らないから
やってみろよ
class Oya {
protected:
int age;
public:
Oya(int i = 0) : age(i) {}
};
class Kodomo : public Oya {
public:
using Oya::Oya; // 継承コンストラクタはgccでは実装されていない
void print() const {
std::cout << age << std::endl;
}
};
int main()
{
Kodomo k;
k.print();
}
そりゃエラー吐くだろうけど
>>404 がやろうとしてる
子のデフォルトコンストラクタで親のメンバを別の値に初期化することとは全く関係ないじゃん
Kodomo k(50) って書きたいとかそういう話じゃないだろ?
無理なのは
>>404 以外承知してると思う・・・たぶん
直接の疑問に(規格の文面でなく意味の面で)答えておくと
>>404 > こう書くとエラーになるのは何でですか?
同じオブジェクトを二回初期化することになるからです。
> Kodomo() : Oya::age(50) {}
のOya::age(50)が実行される前にOyaの暗黙のデフォルトコンストラクタが実行されて
その時点でOyaの全てのメンバは初期化されています(ageは不定値ですけど)
virtual継承使えばできるよ
それが可能だと2回コンストラクタが動く意味分からんことになるだろ
初期化したいなら
>>406 代入したいなら
>>408 しかねぇよ
struct A{
A(){}
A(int n){}
};
struct Base{
A value;
};
struct Derived:Base{
using Base::value;
Derived():value(10){}
};
418 :
デフォルトの名無しさん :2012/08/12(日) 06:44:51.22
純粋仮想デストラクタを使うのってどういう場面ですか? 何もしてないデストラクタ virtual ~myClass() {} みたいなのがあるのですが、 これを純粋仮想にするとコンパイルが通りません。 いったいどういう場面で使うのでしょうか?
>>418 純粋仮想デストラクタを使う場面はありません
インターフェイスのインスタンスを作らせないようにするには
コンストラクタをprotectedにします
struct IHoge { virtual ~IHoge() { } // <- このかっこがなんかウザい virtual void DoSomething() = 0; }; こういうときに純粋仮想デストラクタを書くと見た目が気持ち良くなります
(){} ()=0;
>>420 なんで?そもそもインターフェースってなんの事を言ってる?
純粋仮想クラスの事言ってるなら、コンストラクターのprotectedなんて必要ないだろうし
テンプレートとのインスタンス化とも関係無さそうだし判らん。
>>421 派生が迷惑だろ
class IHoge:public Deletable みたいな感じに
仮想デストラクターもったクラスを継承した方がいい
>>423 純粋仮想デストラクタの使い道を考えたら分かるよ
426 :
デフォルトの名無しさん :2012/08/12(日) 17:59:11.62
>>425 this->~Example();
?
ラムダみたいにして匿名のクラスをなんとかして作れないんですか struct Hoge { Hoge(function<void(void)> h, function<void(void)> w): Hello(h), World(w) {} function<void(void)> Hello; function<void(void)> World; }; template <class T> void Test(T obj) { obj.Hello(); obj.World(); } int main(void) { SmartPtr<X> obj(new X); Test(Hoge( [obj]() { obj->hello(); }, [obj]() { obj->world(); })); return 0; } このコードからHogeクラスを削りたいんだけど
純粋仮想デストラクタ
>>432 古いコードのインターフェースだけ変えたいときとか在るじゃん
でもアダプタいちいちかくのメンドくさいじゃん
そんなとき匿名クラスとか書けたら便利じゃん
C++ならそういうのも無理やり書けないかなと思って聞いてみた
gccでsignature使えたときは 簡単に似たいような事できたんだけどねぇ。
435 :
デフォルトの名無しさん :2012/08/12(日) 20:34:54.98
SomthingとかExampleとか日本人のボキャブラリーには無いからね。
>>435 頭がおかしいから恥ずかしくないんだよ。
438 :
デフォルトの名無しさん :2012/08/12(日) 20:47:18.76
ああ、それはね hogeだったてよwwwwwwwwwwwwwww 馬鹿じゃねwwwwwwwwwwwwwwwwwwww
hogeが悪いとは思わんけど少なくとも正常じゃないわな プログラミングがわからないのも当たり前
Hogeは日本プログラミング業界では長く親しまれてきた伝統文化だが? 異を唱える者は極左思想の危険人物確定。おそらく在日だろうな
なんとなくwikipedia見てみたが、 > In Japanese, the words hoge and page are commonly used, > with other common words and variants being piyo, fuga, hogera, and hogehoge.[4] > Note that -ra is a pluralizing ending in Japanese, and reduplication is also used for pluralizing. > The origin of hoge as a metasyntactic variable is not known, > but it is believed to date to the early 1980s.[4] pageとか見たこと無いんだが… それにhogeraのraが複数とかなんなんなんだ
hoge最強! hogeを否定する奴は即死刑にする法律を作るべき!
私が何より気に食わないのは、
>>437 が、たといID非表示板じゃなくとも、同じ発言に身を投じていただろうということが、はっきりとわかってしまうことよ。
匿名な掲示板におんぶにだっこでこんな馬鹿なことをやっているのだったら、どうぞお好きなようにという感じなのだけれど、あなた達ときたら当たり前みたいに、piyoのxyzzyにhogeなfoo barになってしまって――もう、さっぱりね
445 :
デフォルトの名無しさん :2012/08/12(日) 21:59:53.74
hogeこそが至高
Hogeは超一流のプログラマーがブログとかでも普通に使ってるでしょ だからHoge使うのは常識なんだよ Hoge使ってない香具師が精神異常
Hogeの起源は韓国!
449 :
デフォルトの名無しさん :2012/08/12(日) 22:29:22.36
ダサくてキモいhogeなんてチョンにくれてやるよw
こうして日本にはhageが残った。光あれ!
hageとか書いたら気を悪くするやつがいるだろ。
452 :
デフォルトの名無しさん :2012/08/12(日) 22:51:32.50
hogeとは我々の内部に広がる宇宙の代名詞。 全ての生命はhogeとともに生まれ、hogeとともに生き、hogeとともににその天命を終える。
hogeとか馬鹿確定だろ 話の内容を見なくともhoge使ってる時点で馬鹿って分かる 早期に馬鹿を判別するのに便利だわな
454 :
デフォルトの名無しさん :2012/08/12(日) 23:23:45.56
こんなとこに韓国とか出す奴うぜえな Hogeはイメージがわかないし、古い感じがする。 俺の感覚だと30代後半以上の年寄りだな。
変数名はともかく関数名やクラス名にあの手の名前をつけて質問してくるのは勘弁してくれ 結局何をしたいのか聞き直さななきゃならんのがめんどくせぇ
456 :
デフォルトの名無しさん :2012/08/12(日) 23:32:46.17
>>455 hoge使って質問するような頭のおかしい奴らがそんなところまで考えられるわけないじゃんw
457 :
デフォルトの名無しさん :2012/08/12(日) 23:33:54.13
コードの読み方を知らないカスが識別子に頼るwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww 表面ばっかなぞってコピペ繰り返してきた付けが回ってきたなあwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
458 :
デフォルトの名無しさん :2012/08/12(日) 23:37:20.74
コードの読み方知ってたらHoge使うのかwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww キメェwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww だったら知らないほうがマシだわwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
荒らしが湧いてるな。 hogeとかpiyoとかfooとかbarとかどうでもいいから
>>458 ばか丸出しやなあああああwwwwww
知ってたら使おうが使わないだろうが関係ないだろ
できるやつはHoge?ふーんどうでもいいわ読めるしってなる
チンカス低能朝鮮人はHogeなんて読めないニダ!意味わからんチョッパーリ!!!!とふぁびょり出す
そしてお前がそのどちらかは明白だなwwwwwもうわかっただろ?もう国に帰っとけや
どうでもいいけど、hogeは『これには何の意味もありません』って意味だからな。
コードにhogeとか混ぜる時点でセンスなさすぎだろ そんなセンスのない奴がウンコみたいなコード垂れ流すんだろうな それでオナニーするだけならまだしもネット上にぶちまけるからな
463 :
デフォルトの名無しさん :2012/08/12(日) 23:52:16.72
>>461 じゃあUndefinedValueでも使っとけ
>UndefinedValue M$のAPI名思い出した。あっちは明瞭さ優先するために妙に長ったらしくしてるもんな…… ま、そんなM$が公式で批判してるハンガリー記法にしても結局は分かりやすさを出すためだし、 そう考えるとhogeとかはその対極に位置する命名と言える つまり「とりあえずhogeでいいだろhage」vs「hogeとか訳分からんわ氏ね」ってことだよね
>>461 意味のないものを使ってデザパタ云々質問すんなや
人間って心底どうでもいいことでも醜く争えるんだなあ
>>464 文字数短いほうがいいの?
じゃぁhogeより短いfooでも使ってればいいだろ知能障がい。
469 :
デフォルトの名無しさん :2012/08/13(月) 04:05:32.74
知能障がい
>>454 お前も世間から淘汰されなければ、30代後半を迎えて年寄りになるさ。
淘汰されなければ…な。
みんな、無事に歳をとれるように祈ってるわ
放射能汚染でみんな数年内に死んでるよ
放射能汚染で死ぬってのは難しそうだな。
474 :
デフォルトの名無しさん :2012/08/13(月) 13:21:27.90
まぁ風邪で死ぬ奴もいるわけだし
475 :
デフォルトの名無しさん :2012/08/13(月) 13:59:17.59
>hoge バカじゃねwww
std::fstreamのgetline()に char*型のhogeって変数入れたらエラー出るんだけどなんでですか? わざわざstring型のhageを入れて、hage.length+1でnewしてstrcpyして・・・ってめんどうなんですけど 文字数も予め指定しないと行けないし不便で・・・ ファイルから1行づつchar*に入れてくれるクラスとか無いでしょうか? ぴったりにしたいのでchar配列を予め宣言というのはいやです
回答が欲しいならソースコードとエラー内容を書くべき
最後の無限ループはウィンドウが閉じないようにしてる Run-Time Check Failure #3 - The variable 'hoge' is being used without being initialized. #include <iostream> #include <fstream> using namespace std; void main(){ ifstream List("GunList.txt"); char* hoge; while(List.getline(hoge,100)) { for(int i=0;i<5;i++) std::cout << hoge; std::cout << "\n"; } while(1); }
>>480 すまん
for文とstd::はいらない
whileの中身はcoutだけ
>>478 ,480
そのエラーの意味がわからないならポインタ使うのは無理だな。
std::string hoge にして std::getline(List, hoge) にしとけ。
あと main() の戻り値は int な。
hoge初期化してねージャン char hoge[1024];とでもしとけ
484 :
デフォルトの名無しさん :2012/08/14(火) 05:57:32.76
またhoge基地害が湧いてるのか
サッカー選手「竹島」主張、韓国協会が謝罪文書
読売新聞 8月13日(月)22時45分配信
ロンドン五輪サッカー男子の3位決定戦直後に韓国選手が竹島の韓国領有を主張する政治的メッセージを掲げた問題で、
日本サッカー協会の大仁(だいに)邦弥会長は13日、謝罪と再発防止を徹底させる旨を記した韓国サッカー
協会長名の文書を受け取ったことを明らかにした。
文書は同日付で電子メールとファクスで送られており、大仁会長によると「申し訳なかった。二度とこういうこと
が起こらないように徹底する」という内容だったという。
国際オリンピック委員会(IOC)のロゲ会長は12日、当該選手の銅メダルを預かりとしたうえで、国際サッカー
連盟(FIFA)規律委員会の決定を待って処分を決める意向を示している。大仁会長も「五輪の場で起こったの
は残念だが、当面はIOCとFIFAに任せたい」と静観する構えであることを強調した。
.
http://headlines.yahoo.co.jp/hl?a=20120813-00001408-yom-spo
>>483 char* hoge="";
でもいいの?
文字数分やらないとダメなのかな
>>486 getline()で読み込むための場所が必要。
hogeがポインタなら、適切に確保された場所をポイントしないといけない。
hogeが配列でいいなら、>483だな。
まぁ、>482でいいよ。
>>480 どうでもいいけど無限ループでウィンドウを閉じさせないって随分お大尽だな。
CPUぶん回すことになるからエコじゃないぞ。
単に進行を止めたいだけならgetline()でも充分だろ。
492 :
デフォルトの名無しさん :2012/08/14(火) 13:57:08.61
493 :
デフォルトの名無しさん :2012/08/14(火) 15:18:09.60
hogeとか使ってる奴がまだいるのか。 そんなんだからいつまでもプログラムが上達せずにこんなところで質問してるんだろうな。
そのこんなところに来ている自称上級者 (w
>>491 言い訳してないで、回答してくれた皆さんに感謝の一言でも書きなさい。
忘れてました、 ありがとうございました!
>>496 は偽物
>>495 言い訳してるわけじゃないんだけど・・・
自分から感謝しろとかこの人病気?
ありがとうございました
これで満足
>495が自分から感謝を要求しているように見えたら、それはもう被害妄想。
釣られんなww
脳弱だから釣られたことにしないと精神がもたないんですねわかります。
>>496 は善意の偽者が書いた感謝レスで
>>500 は釣られたことにしようとしたレスってことか
一体どういうことなんだ・・・
503 :
デフォルトの名無しさん :2012/08/14(火) 16:35:49.91
何にせよhoge使うとアンチhoge厨が湧いてそこから荒れるからかなわん
>>493 hogeは使わないとして、何使ったらいい?
parとか
X x; Y y; Z z; これでいいやん 座標が絡む話のときは使えんけど
>>507 サンプルコードで大文字と小文字と一見して区別のつかないものを
つかうなよ
大小ぐらい見分けつくだろ そんなことも見えなくなる老眼爺はさっさと引退しろ
get1st getlst
>>511 はあ?こちとら裸眼で1.5の体育会系ですがなにか?
貧弱な坊やと老人は日本から韓国に移住しろよwww
どーでもいい。
JavaでもCでも初めての〜とかわかりやすい〜っての読んだあとに何をすればいいかわからない なにをすればいいんだ よく自分の作りたいのつくれって言われたりするけど結局手がつかない技術的に
GUIを勉強すればそこから先はだいぶはかどる 作りたいもの作りながら足りないものをその都度べんきょうするかんじ
517 :
デフォルトの名無しさん :2012/08/14(火) 19:38:01.04
だいたい
>>516 で合ってる
だけど分からないときに2chで質問するんじゃないぞ
またそれに見あった本を買え
適切な本を自分で選択するのも勉強というか訓練の一環だぞ
WIN32APIでGUIやったら挫折した
>>518 気持ちは解るよ
C#に乗り換えると幸せになれる
>>519 今はQtやってる
そのあとC#勉強する予定
QtってNokiaから身売りされたんじゃ 大丈夫なのか
Qtってマルチプラットフォームでいいじゃん、そのあとC#勉強する理由って何?
>>522 Qtは仕事でやってるに過ぎないんじゃね?
C#は趣味でやるつもりだろう
>>522 windows環境だとC#のほうがしやすそうじゃん
まぁ理由としてはC#にも興味があるってだけ
C#のがライブラリ充実してるしMonoもあるから環境もそんな気にしなくていい むしろQtを使う理由なんてあるの?って感じ
>>525 Qtを使う理由
・せっかくC/C++勉強したんだからC/C++でGUIアプリ作りたい
・Qtの参考書をすでに購入した(勉強しないともったいない
最初にC#を勉強すべきだったか・・・
>>517 >適切な本を自分で選択する
このコツは実に知りたいもの。今ならgoogleで追い詰める能力かもしれない。
C/C++でマルチプラットフォームを強制されてる場合はQtがいいと思っているんだが macでC#って使えるっけ?
mono
>>526 万事に通じて言えることなんだけどさ、
捨てない理由が「もったいない」だけなら、捨てるべきだよ
本は売ればいいしね。
>>529 私もMDIで詰みました
>>531 実行速度的な意味で勉強する価値はあるかなって思ってるけど
・・・どうなんだろう。
>>527 コツは自分で掴むしかないだろう
学生時代の参考書と同じで他の人に合った参考書でも自分には合わなかったりするから
自分の脳に合った書籍は自分で探すしかない
検索で出てきた情報の99%は誰も保証してくれてないから参考程度にかならない
よくわからんけどM$がFormsよりもMetroを推し始めたのでQtが嫌になっちゃったんじゃねーの
コアな部分だけC++でGUIはC#などで作るのがベストだよね
自動変数とshared_ptr<T>以外使うことってほとんどないんだけどunique_ptr<T>って現実的にどんなパターンで使うの?
メンバ変数に使ったりvectorに入れたり
>>538 メンバに持つなら自動変数でいいし
vectorに所有権持たせるならptr_vectorのが簡単じゃないですか?
>>539 動的多態使いたいときとか
インスタンスではなくポインタで持ちたいときとかないの?
ptr_vector使ったことないから簡単さは知らない
moveとかカスタムデリータとか便利機能ついてるじゃん
ユニポのカスタムデリータは動的じゃないからいちいち型書かなきゃいかんからめんどくさいよな なんで静的にしたんだろう
動的だとサイズが増えるじゃない
自分の中で需要があるなら そのくらい自分で作れよ
>>544 作ったけど
これぐらい標準で用意しろよって思った
実際削除子の型固定なんてろくな使い道ないし
typedefして使えばいい
そういうことじゃないだろ
標準ライブラリの機能不足がなんだかんだと騒ぐヤツぁ おじゃばでも使ってろて話しだ
fgetsは abcdefghij¥nklmnopq という文字列が有った場合に、 17文字読み込むように指定すると、 abcdefghij¥nまで読み込みますか? それとも abcdefghij¥nklmno まで読み込みますか?
・ぐぐる ・試す ・2chで聞く
>>549 \n が改行コードだとして、
>abcdefghij\n
は11バイトですので、ここまで読み込んで末尾に\0をつけ、以上12バイトを指定領域に残します。
>>542 例えば同種の100個のリソースハンドルがあったとして
それのデリータ関数は1つなのに、関数ポインタなりを100個持つのは無駄じゃね?
>>551 前から思ってたけど日本語おかしいよ
残します ってなんだよ
>>553 そういうケースはそうかもしれないけど
じゃあこういうケースはどうするの?
vector<MyUniquePtr<IFoo>> v;
v.push_back(MyUniquePtr<FooX>(new FooX)); // 標準new、delete
v.push_back(MyUniquePtr<FooY>(FooY::Create(), FooY::Delete)); // 隠ぺいされた生成、破棄
FooZPool fac = FooZPool::GetInstance(); // プールされたFooZ
v.push_back(MyUniquePtr<FooZ>(fac.get(), [fac] (FooZ * p) { fac.release(p); }); // 借りたものは借りた場所へ
こういうのはデリーターの型固定じゃだるくね?
>>555 そういう場合は unique_ptr に動的な削除子の型を指定すればいいんでしょ。
だるいって、具体的に何のことを言ってるの?
>>555 俺の場合FooY::Deleteみたいなのは作らないから
FooYは外部ライブラリだとして、↓みたいに多分ラップすると思う
struct FooYWrap : IFoo{
FooY* p;
FooYWrap(FooY* a):p(a){}
~FooYWrap(){FooY::Delete(p);}
...
};
>>557 function を適当にラップすれば済みそう。
>>555 そういうときはintrusive_ptr使うな
>>557 shared_ptr をラップして削除子だけのために使うという手もあるな。
>>558 悪くないが沢山あると面倒だしvirtualコール二倍はな
shared_ptrで妥協するか迷うレベル
>>559 function<void(foo*)> f(delete_foo);
unique_ptr<foo, function<void(foo*)> p(new_foo(), move(f));
これが正解か?一歩間違えると例外安全なくなるから注意が必要だが……
>>560 virtual releaseしろってことか?
まあ悪くないな
>>561 コスパいいからunique_ptrなのにshared_ptr使ってたらいみないやん
コスパいいからunique_ptrなのに動的削除子使ってたらいみないやん という選択肢はないのか
動的削除子がないとデストラクタが仮想でない標準ライブラリのような物は継承出来ないな
あ、継承してもいいけど基底クラスのポインタに派生クラスのオブジェクトへの ポインタを代入したらあーれー
ユニポやシェアポに突っ込めばおk
要するにユニポを最大限生かすのは難しいということだね やはり生ポインタ最高だぜ!次点でシェアポだな
今の話題の例にナマポ使ったら余計悪化するやんけ
struct IFoo { virtual void release() = 0; virtual void method() = 0; }; struct FooImpl : IFoo { void method() { /*...*/ } }; struct FooX : FooImpl { static FooX * create() { return new FooX(); } void release() { delete this; } }; struct Release { void operator () (IFoo * p) { if(p) p->release(); } }; typedef unique_ptr<IFoo, Release> FooPtr; FooPtr create_foo() { return FooPtr(FooX::create()); } Fooのコードいじる権限があるならこれがベストやな 既存のコードに手を加えられないなら諦めてラップだ アロケーションの方法が増えるたびにFooImplを派生してreleaseを作り直せばいい
このコードをVC++でコンパイルするとデストラクタと3回表示されるのですがg++だと2回表示されます。 これってg++の方は一時オブジェクトが作られていないということでしょうか? #include <iostream> using namespace std; class hoge { public: ~hoge() { cout << "デストラクタ" << endl; } }; hoge func() { hoge ob; return ob; } int main() { hoge ob; ob = func(); return 0; }
RVO対象になったのかな
>>572 ggってみたらそれっぽいですね。ありがとうございます
>>570 「残す」という言葉の意味を考えれば、どう考えてもおかしいだろ。
その場合は寧ろ、「移す」とか「移動する」とか、さもなきゃ単に「書き込みます」とか。
日本語がおかしいのは俺も思ってた 在日なん?
>>574 >「移す」とか「移動する」とか
私見では、きわめて曖昧かつ不正確な用法であり、普段から厳密性を考慮しない思考習慣が垣間見られますね。
移動する、というからには、移動する前にあったところのものは消える、とでもいうのですか?
どちらかというと「コピー」でしょう。
>さもなきゃ単に「書き込みます」とか。
許容範囲内ではあります。
>>575 >在日なん?
仮に在日だったとしても
>>574 よりは日本語の勉強に邁進していると思います。というか、
>>574 より脳細胞を使っています。
思考習慣の乏しい日本人でいるくらいなら、頭を使う習慣のある在日外国人で結構。
578 :
デフォルトの名無しさん :2012/08/17(金) 07:25:17.93
/ ̄ ̄ ̄ `\ /:\___从__ヽ i::/ '''''' ''''''' i |:/ /゚ヽ 、/゚ヽ| このスレ、癒されるなあ。。^^ (6 ,ノ(、_,)、 | ヽ ト==イ ノ \_'Uニ´_,/ / / / / / / :/ ヽ: :/ ヽ: 皆さん、グッジョブです! :( *‘ω‘*)*‘ω‘*): ./ \, / , . 、 'i ./ r´ 人. ヽi i 人_,、__ノ ヽ、_,,_ノ.| | / ゚ ゚ .|.| | /( .з .iノ
>以上12バイトを指定領域に残します。 >以上12バイトを指定領域に移します。 >以上12バイトを指定領域にコピーします。 >以上12バイトを指定領域に書き込みます。 俺は「格納します」あたりを推してみよう
>.577
理由をつけずに放言しっぱなしなぞ猿なみの知能
>>577 は
>>576 ほど脳細胞を使っていないことは明白
>>580 感想を書き込むのに脳細胞を使う必要があるのかね
厳密性を考慮して思考した結果が「残す」とか。 そもそも、日本語を勉強しなければいけない段階でお郷が知れるのだが。 私ゃ自分の言語感覚のほうを信じるね。
いやあ殺伐としてますね 殺伐と言っても馬鹿とか短気なのしかいない殺伐はなんにも面白くないね
write >= copy > leave >> move
leave?
590 :
デフォルトの名無しさん :2012/08/17(金) 12:03:59.62
リーブ21
Qが在日チョンと聞いてきました Qがすぐファビョるおかしな理由がよく分かりますね
Qってなーに
韓国最大手の釜山貯蓄銀行が破産。自己資本比率は驚異の-50.29%
http://engawa.2ch.net/test/read.cgi/poverty/1345217353/ 釜山(プサン)地方裁判所は16日、債務超過に陥った釜山貯蓄銀行に対し、破産を宣告しました。
釜山貯蓄銀行は去年2月17日に営業停止処分を受けたのに続き、去年4月29日には、BIS=国際決済銀行による
自己資本比率がマイナス50.29%と、健全性を示す基準の1%を大幅に下回っていたため、
不健全金融機関に指定されました。
当時、釜山貯蓄銀行の資産総額は1兆3000億ウォン、借金は3兆5000億ウォンで、
資本金の増額や第三者による買収など経営改善の可能性も低いことから、
管財人が清算に向けて破産を申請していました。
5000万ウォン以下の預金資産や優良資産などはすでにブリッジバンクのイェソル貯蓄銀行に引き継がれており、
破産宣告により、釜山貯蓄銀行に5000万ウォンを超える預金を預けている
預金者と後順位の債権者は、破産手続きによる配当を受けることになりますが、
残った資産を処分しても、配当として受け取る資金はほとんどないものとみられます。
ただ、5000万ウォン未満の預金者は、今後もイェソル貯蓄銀行の管理のもとで、金融取り引きを続けることができます。
これに先立ち、今月14日には第一(チェイル)、第一2、プライム相互貯蓄銀行が
ソウル中央地方裁判所に破産申請を行っており、
トマト貯蓄銀行とパランセ貯蓄銀行もすでに先月、裁判所に破産を申請しています。
http://world.kbs.co.kr/japanese/news/news_Dm_detail.htm?No=44906
最大手て すれちー
char *argv[] と char **argv をどう解釈すると同じ意味になるんですか?
>>596 「char *a と char a[] は同じ意味。だから char *argv[] と char **argv は同じ意味」
ぐらいの解釈で思っていたんだが、違うのか?
hoge[]とかfuga[9]とか書くと hoge[0]だのfuga[4]だのが実際のデータを指し示す事になってるんだよ これはわかるよな じゃあそのとき hogeとかfugaとかだけ書くと、これは実はhoge[0]とかfuga[0]って先頭データのアドレスになってるんだよな つまりhoge = &(hoge[0])な その例だとtypedef char* charpとか置き換えると charp argv[]とcharp *argvになってどっちもargvはcharpのポインタになってるってわけだ
おれはや
微妙に間違っているけどまぁいいか。
601 :
598 :2012/08/18(土) 13:47:25.72
なんか間違ってましたかね?
>>597 コンパイラーによってはconstが付くな
>>587 まあそうなんですけど、ときに殺伐の中から新しいアイディアが出てくるので、そしてこれは捨てたものでもないので、無理にでも殺伐にしたほうが楽しくていいじゃないですか?
604 :
デフォルトの名無しさん :2012/08/18(土) 15:30:28.49
>>598 >hoge
こんなこと書いてておかしいと思わない?
思わないとしたら本物のキチガイだよお前
今すぐ回線きれクズ
なんでそんなにhogeに辛く当たるんだ? hogeに一体どんな恨み辛みがあるのか知らんが、 hogeが全体何をしたって言うんだ。 hogeが可哀想じゃないか。
hageを連想させるから世界中の禿に恨みを買ってるんだよ 俺も長い事この業界にいるがhogeを叩くやつは俺が見た限りもれなく禿やろうだった
最近までずっとhoge hage fugaだと思ってた hoge piyo fugaだったのね
これからはpiyo推しで安定なんじゃないかな なんか言葉の響きが可愛いし
んじゃ、今度からkamuroを使おう。 kamuro -> shinzou -> oiran -> dayuu と使えるぞ。
hoge hage hige だな
特にC++のハゲとヒゲは大事だからな。
>>598 その理解だとsizeofに直接配列を指定したときの説明が付かないよ。
hogeじゃなくローマ字でいいから意味の解る名前をつけろ 質問にしてもいちいち目的はなんだと訊かにゃならんからめんどくせぇ
>>613 >意味の解る名前
何のためのメタ構文変数なんだよ……
615 :
デフォルトの名無しさん :2012/08/18(土) 22:16:47.93
じゃあmetaにしとけや脳弱
>>614 メタの世界はIQ水準が一定以上ないとわからないからね仕方ないよ
#include<iostream> using namespace std; class afoo { }; void bfoo(afoo) { cout << "cfoo" << endl; } int main() { bfoo(afoo()); }
もっとまともなメタ構文変数がないものか‥‥ fizz/bazz/gizz?
>>614 説明ならともかく質問すんのに無意味な名前をつけるな
hoge使ってる奴は素人なうえに頭悪いよなw なんでhoge使ってる奴らって馬鹿しかいないんだろうw
hageの人は頭が悪いんじゃなくて頭髪が無いだけだよねw
ハゲは強いトラウマがあるからHOGEにもつい反応してしまう フサフサな人はHOGEに寛容というのがおれの島での常識
どーでもいい。
トラウマじゃなくてコンプレックスな
>>621 お前はProfessionalなのかよw
>>618 unko/chinko/manko
が一般的じゃないかな
昔 外人の技術者が hoge 変数を見て 『hoge って何ですか?』 と真顔でしつこく聞いてきて困惑した。 説明難しいよね。 It's a ・・・ ummm
>>629 まあhoge、piyo、fugaは日本由来だしねえ
fooとかbarだったら伝わりやすいかも
fooはRFCがあるけどhogeはJISだったりするの?
>>629 foobarみたいなもので特に意味は無い
でいいじゃん
foobarと答えればわかってくれる
おおかた foo,barすら知らないやつだろ
636 :
デフォルトの名無しさん :2012/08/20(月) 16:29:14.26
じゃあ最初からfoobar使えって話だな
ハゲはいいかげんにしろ
そうだそうだハゲはキモいんだよ。 生理的に受け付けない。 ハゲは人を嫌な気分にさせるだけだから公共の場に出てくるなよ。
某ハゲ「じゃあC++使うな!!!」
カーニハンもリッチーも薄かったような
あいつらに毛が生えたのがC++だよ +は毛なんだよ
+は禿の進行を表している foobarも禿の名残
643 :
デフォルトの名無しさん :2012/08/20(月) 18:45:41.53
日本のハゲって印象悪いよな SBやってる帰化チョンのせいじゃね?
ハゲ←継承したくないのに継承してしまうもの
>>643 あいつはちゃんと帰化してるから、特に文句は無い
>>645 ソフトバンク データセンター 韓国
で検索してみるといいよ。
うわ、ソフバンなんか使う企業あんの?
649 :
デフォルトの名無しさん :2012/08/20(月) 20:52:47.64
ちんこ と まんこ、 あなたならどっちがほしいですか?
COMって、あの変なルールに従うと何か得するんですか?
『全員』が従えば、幸せになる。
COMは動的言語(VB,VBA,JavaScript,...)が得をします
virtual関数ってリスコフの置換原則に違反するよね?
655じゃないけどwikiみたら
http://ja.wikipedia.org/wiki/リスコフの置換原則 S が T の派生型であれば、プログラム内でT 型のオブジェクトが使われている箇所は
全て S 型のオブジェクトで置換可能であり、それによってプログラムの動作は全く変化しない
って書かれてるんだけどこれマジで?
「正常に動作する」とかなら分かるけど「動作は全く変化しない」なら
ポリモーフィズム全否定になると思うんだが
というかTが純仮想だったらどうすんのかと
あ、T型の変数でなくT型オブジェクトか 純仮想云々は撤回する
>>657 >なお、これが派生型の唯一の定義ではない
と書いてあるじゃん
仮想関数が派生型と基本型で動作が違う事はいくらだってある
無理にC++に当てはめようとする事自体おかしい
C++でのwindowsプログラミングについて質問があります。 コマンドプロンプトで動くコンソールプログラムで 実行すると標準入力待ちになり、入力が送られると演算して標準出力に結果を返し、再び標準入力待ちになるプログラムがあるとします。 (例えば整数を受け付けて素因数分解して返すようなものです) このプログラムを別のwindowsプログラミングのプロジェクトで利用したい場合どのようにすればいいのでしょうか? 関数としてShellExcecuteやSystemといったものがあることはわかったのですが、 理解不足からか目的にあった使い方ができるようには思えませんでした。 要点をまとめますと、コンソールプログラムの標準入出力を扱うことがc++のwindowsプログラミングでは可能なのかということです。 よろしくお願いします。
つ[popen(), pclose()]
>>659 それはつまり
リスコフの置換原則についてはポリモーフィズム全否定であってるってこと?
そうです
>>660 Windows前提で細かい制御がしたいならCreateProcessで
STARTUPINFOのhStdInput, hStdOutput, hStdErrorを指定
>>661 ありがとうございます。
FILE *fp=popen("実行ファイル > 出力ファイル","w")
fputs("入力",fp)
while(出力待ち)
fputs(…)
…
といった感じでしょうか。いろいろ試してみたいと思います。
PHPには両方向のパイプがあるみたいですね。
>>664 まだ詳しくは見れていませんが
こういうのがあればいいなと思っていた情報のようです。
根本から管理できてもいいんじゃないかとは考えていました。
ありがとうございました。
c++のストリームについて質問です。こちらVC++2008を使っています。 strstreamを継承して、フラッシュされるとバッファ中の文字列をOutputDebugStringに渡し、バッファをクリアするクラスを考えております。 フラッシュの際に呼び出される関数の名前を教えて下さい。 また、フラッシュの際に呼び出される関数を上記の内容でオーバーライドするだけでよいのでしょうか。
flush
flushは仮想関数ではないんですね。嫌な予感がします。 そもそも基底クラスとしてデザインされていなさそうなstrstreamとそのバッファを継承するのも嫌な予感がします。 両方やめておきます。お答えしていただきながら申し訳ありません。
using namespace std; class Sample { string name; string groupe; public: Sample(string const & n, string const & g): name(n), groupe(g) { } Sample(string const & n, string && g): name(n), groupe(move(g)) { } Sample(string && n, string const & g): name(move(n)), groupe(g) { } Sample(string && n, string && g): name(move(n)), groupe(move(g)) { } }; 上のように引数がたくさんあるとconst & と && の両方を書くのがめんどくさいんですが どうにかして一発で書く方法はありませんか?
ググればサンプルいっぱい落ちてるのに strstreamなんて非推奨クラスに囚われたのが敗因
>>672 そうかもしれません。
プログラミングメモ日記というブログに丁度いいサンプルがあったので、いただきました。
リスコフの置換原則は準拠は無理だが 可能な限り守るとかなり保守性高くなるね 再利用を考えたコンポーネントはすべて準拠するべきだなこれ
勝手にしてろよ
例外って糞じゃないですか? せっかくクラスをカプセル化して再利用性を高めたのに 例外とかいう糞システムのせいでカプセル化した中身を変更したときに クライアントコードの整合性が失われる可能性があるというのは由々しき事態だと思うのですが 例外信者のみなさんはこの問題についてどう考えているのでしょうか?
RAIIが分からないならC言語を使いなさい
馬鹿には理解出来ない
RAII信者の愚かさは異常 ファイルストリームデストラクタで閉じろバーカ
はい閉じます^^
例外も含めてクラスのインターフェイス。インターフェイスを変更するならカプセル化の意味がなくなるのは当然
しかし例外を投げるかどうかは実装に依存する インターフェースの実装を切り分けが例外が存在することによって不可能になる 終わってるなこの欠陥システム
馬鹿にC++は無理
いや適度に馬鹿じゃないと細かいこと気にしすぎてだめになる
ダメになるというか 力尽きる
688 :
デフォルトの名無しさん :2012/08/23(木) 19:24:52.92
_____. ┏┳┳┓ / \ ..┏┳┳┓ ┏┫┃┃┃ / /・\ /・\ \ .┃┃┃┣┓ ┃┃┃┃┣┓|  ̄ ̄  ̄ ̄ |┏┫┃┃┃┃ ┃ ┃┃| (_人_) |┃┃ ┃ ┃ 珍カス ..┣| \ | |┫. STOP!┃ ┗━━━━┛\_ ... \_| _ /...┗━━━━┛ ┏┻┓┃ .. ┏━┛ ┣┻┓ .... ┗━━━┫ ┗━┓ .. ┗━━━┛
689 :
デフォルトの名無しさん :2012/08/23(木) 23:47:18.11
クソスレ
>>677 実装に依存するコードで受けてるクライアントが悪いか、クライアントを
そうせざるを得ない状況に追い込んだライブラリ側が悪い。これは戻り値を
含めてどのエラー通知方法でも発生しうる問題で、例外のせいじゃない。
たとえば >684 のように例外を投げるかどうかが実装に依存するという
ライブラリが提供されていたとして、例外をキャッチする以外に目的の
エラーを識別・捕捉する手段が提供されていないのであれば、ライブラリが
悪い。
この場合、内部で戻り値を使う実装に切り替わる可能性があったとしても
ライブラリのインターフェースで例外を投げるように統一してやる、あるいは
内部で例外をキャッチして戻り値に統一してやる、などをライブラリが責任を
もってやるべき。
>>691 そのコードが「TextListにList.txtの文章を一行づつコピー」以外のどういう動作をすると思うの?
>>691 std::getlineとifstream::getlineは違うからな
勘違いすんなよ
C++ってCPAN, RubyGemsみたいなのは無いの? boostは標準化委員会が作ってるtr1候補みたいなものだし
boost以外でそれらしいものはないよ
サンクス やっぱ無いか・・・ ググれば物は色々あるから困るわけではないけど
>>671 亀レスだがこれ一個だけで良い。
Sample(string n, string g): name(move(n)), groupe(move(g)) {}
デバッガで見ればわかるがコピーの回数は増えない。
701 :
デフォルトの名無しさん :2012/08/27(月) 13:29:04.22
スクリプト系の言語のようにEOFをつかって文字列を変数として代入をすることはできますか? C++でも以下のような代入方法を使いたいのですが。 $body = <<<EOF <代入文字列> EOF;
そういうのは無い 1行で書くと長くなるのを分割したいのなら↓こういうのはどう? const char* str = "123456" "234569" "aslghgflafdh"; // str は 123456234569aslghgflafdh となる
>>696 そんなものがあったら
boost.eggの悲劇はおきなかった
boost.egg boost.oven boost.range
hello worldの次は何するのが良いと思います? 参考になりそうなサイト読んでもチンプンカンプン
>>709 テキストエディタ、画像編集アプリ、ゲームなどを試しに作ってみるとか
>>711 調べてチャレンジしてみます
ありがとう
C++11で洋ナシ ライブラリの補完が優先するような分野じゃなかったて事っしょ
>>696 みたいなの欲しいな
誰か有志で作らないの?
githubあたりで
githubでこういうルールを守る集団いたら面白いのだけど boost naming ルールぐらいは守る name space は先取りされたら諦める とにかく他と重ならないようにする
boostに対向して goost (github boost) というname space を使う人は少なくともこのルールを守ろう まずは goost::egg だ
goost::bastaaz
google::eggにした方が人気でるよ
goost::egg goost::oven は予約で hamigakiも一部改変して使いまわししたい
俺一人でもgoostやるぜ
めちゃくちゃ初歩的なことで恐縮なんですが質問です。 「3つの変数のうち2つの変数が1である場合」という条件文を作りたいのですが、 そういった事が可能な命令についてわかるサイト等ありますか?
if(2 == (a==1) + (b==1) + (c==1)){}
if (a==1?(b==1||c==1):(b==1&&c==1))
変数が増えるなら、if で1つずつ判定してしまうのも手よ。 条件式が真だった回数を数えておく。
そだね
質問です。(長文ごめんなさい) Sleep(100); ってすれば100msスレッドが中断されけど、 これってOSレベル(と言ったらいいのかな?深いところ) ではどういう実装になってるのでしょうか? 学校でマイコン実験(Z80)があり、CPUの周波数に合わせて、 無駄な命令(PUSH POPを繰り返す等)をループさせれば、 Sleep(x); みたいになるよと分かったのですが、市販のCPUはHzが違います。 Hzバラバラなのになんで一定時間ってできるの? わかったとしても、GHzレベルですし、ループに必要なスタックとか足りるの? そもそもPCって0と1しか扱えないのになんで時間わかるの? などとわけがわからなくなってきました。 どなたか私に教えてください…
>無駄な命令をループ スピンループと言う >深いところ 「タイマー割り込み スケジューラ sleep」でググってみたらいいよ
Windows みたいなラウンドロビンなら例えばーー スレッドがスリープ状態が判別する手段を用意して、 スリープ状態のスレッドには CPU 時間を割り当てない、とか。
今時の実装だとHPETとか使ってるんだったか
Cygwin使ってたら error: cannot pass objects of non-trivially-copyable type ‘struct std::string’ through ‘...’ って出たんだけれどこれなんですか? エラー部分は printf("%s\n",s); sはstring型です。
printf("%s\n", s.c_str());
素直にcout使えばいいのに
>>734 stringじゃなくてcharの配列で受け取る扱いだからポインタで渡せってことでおk?
>>734 解決方法はそれでいいけど、エラーメッセージが言ってるのは
可変長引数 ... に std::string を渡せないってこと。
受け側の扱いは関係ない。
規格の 5.2.2/7 によると "... is conditionally-supported with implementation-defined semantics." らしい。
linuxでcoutとprintf混ぜるとバグる
>>740 どんなバグ?
バッファが別々だからflushしないと混ざるのは知っているけどそれはバグとは言えないし……
自分の思った動作をしない ≡ バグ って思ってるんだろ。
作るアプリの仕様に反するならバグだろ
printfはC++の関数でもあるわけだが。
?
>>746 私も
#inlcude <iostream>
で
std::cout だけですよ。
C互換というで入れないわけにはいかんのでしょうね。
new と malloc() の併用も動くんでしょうけど、ごっちゃはきもいっすよねぇw
750 :
749 :2012/09/01(土) 22:07:50.46
ごめん。 呼び出すのはメンバ変数じゃなくてメンバ関数ね
俺ならそんなことせずに関数を呼び出させるな
>>749 共用体とC形式キャスト使っといて可搬性って寝言か?
規格レベルの可搬性なら完全に無い
エラーを絶対に出さないでユーザーに簡単な意思確認をする方法ありますか? ファイル関係のエラー処理中にユーザーの意思確認をしたいんだけどその意思確認でエラーがでたら困ります
メッセージボックスでも出せば
技術者であるなら、「絶対」は気をつけて使った方がいい。
組み込みとかで、全て自分で作ってるのであれば (ソフト的な) エラーをださない
ことは可能かもしれないけど、OS使ってたら
>>754 の言うメッセージボックスを
だすだけでも、内部でメモリーとかハンドルリソース等が不足する事態に「絶対に」
ならないとは言えない。
いったいどこまでの絶対が必要なの?
一秒に一回程度の頻度で試して宇宙の寿命が来るまでに一回の失敗が有るかないかぐらいなら十分です
普通に考えて自アプリ内でのことじゃね OSなどの下位レイヤーでの動作なんてユーザモードで動作する一アプリが保証することなど出来ないわけで
仕様の上で引数間違えなければ例外投げなくてエラーコードを返すこともないならOK
APIの内部実装の不具合やメモリなどの物理異常によるエラーが無いことを 保証することは出来ません
じゃあエラー処理中にエラーがでたらどうするの? その新しいエラーを処理するときにまたエラーがでたら… そのまたまた新しいエラーの処理でまたエラーが…
abort readmeにでも連絡先や掲示板のアドレスを書いておく
>>760 マジレスしておくと...
(1) ファイル関連で例えばユーザーが指定したファイルがないとかの想定されるエラー
(2) プログラム上ありえない状態になった時などのエラー
を分けて考えるべき。
大抵のアプリなら、(2) の状態になったことを検出したら
>>761 みたいな処理でいい。
で、(1) のエラー処理中は基本的に他のエラーが発生しないように作って、それでも
エラーが発生したら (2) とするようにするのが普通。
念のために書いておくけど、上の (1) (2) の区分けは、一例でアプリによって変化する、
要件からそういうことを決めるのも、設計の一部。
VC2010 Expressで vector<int>::iterator it; っていう文章がコンパイルでit :定義されていない識別子ですって出るんですが どうすればいいのでしょうか
>>764 includeやusingは書いてあるんですけど
std::vectorって書いたらvectorはstdのメンバーではありませんって出ました。
>>765 テスト用に使っていたWin32コンソールプロジェクトだとコンパイルできませんでしたが
新しく空のプロジェクトファイルを生成したらコンパイルできました。
何が違うんでしょう…
>>752 レスありがとうございます。
C形式キャストはもともとreinterpret_castで書いてたんですが、アップするにあたり
短い方がいいかなと思ってC形式にしてました。それがダメだったのはちょっと意外でしたが…
共用体がアウトというのはどういった理由からなのでしょうか?
>>766 >>765 が空のプロジェクトでコンパイルできるなら
テスト用のプロジェクト内の設定かプロジェクトのファイル内の記述のどこかがおかしいんだろ
問題が再現する最小のコードを貼れ
>>767 >(unsigned int)this
>>752 じゃないけど、とりあえず殆どの64bit環境でアウトじゃね
impの部分はキャストできないとかいわれての苦肉の策なんだろうがそんなことして可搬性あるわけないとか Unionで非PODが解禁されるのはC++11からだけど対応状況はどうなんだろうとか 環境決め打ちのコードにしか見えない
>>770-773 ありがとうございます。
フムフム 確かにポインタサイズを考慮するの忘れてました…
>771
元のコードのunionてpod型しか入ってないと思うんですが、そうでもないんでしょうか?
>773
ほとんどこれで正解でしょうか?
テンプレート奥が深いですね。
竹 島 は 日 本 固 有 の 領 土 で す 。 ┌─┐ │●│ ├─┘ | /!\ _ __/-- ::!\ ./\_/"r---、 / !、__/ ヽ ヽ \ /ヽ / /ヽ ヾi___ ,/ i_.: ヽ \ ! \ ....../;;;;;i .\.!. !:::: " ヽヽ / /:: :::: /:::: :::::i.:::::::'''''\|_/ /i __ヽ ::::::...... / / /::::::::i./ :: .\.:::::::::''' 丶 ̄ヽ───""".::::......... / :::i _::::::::::::::::/ \ ::::::::::::::::: ̄ヽ__ /丶--、___−--! ̄"" ザザァ ───── … ''':::::::::::::::::::::::::::'''''''''''''''................... ...::::::::::::::::::'''''
C++の教本買ってみた。これ1冊終えただけじゃまだまだ完璧とは言えませんよね?
>>776 単に書籍を読んで理解した気になってるなら、おめでたい人だね。
普通に足りないって言えばいいのに何故皮肉しか言えないのか
Cは自らハックするものを助く
と言うかどんな言語でも仕様読み終えただけじゃ完璧じゃないに決まってるだろ……
C言語は入門書読んでデータ構造とアルゴリズム再発明で十分だった CPPは入門書読んで加えて良い習慣を身につけてテンプレート覚えて標準イテレータなどの要求を調べてオブジェクト指向学んで他にもいろいろやって それで最終的にはどうしても必要なかったり指定されなければCPPではなくC#やJAVAなど他の言語で書くようになった
オブジェクト指向でポインタが必要ならC++だし 必要なければJavaで十分 C#は知らん
>>778 技術者的に絶対とか完璧って言葉に反応しがちな人も多いからね
ちなみに俺もです
それはともかく
>>776 書籍「C++の設計と進化」とかもオススメ
仕様の背景も書かれてる
>>776 勉強なら仕様書オススメ
合わせて主要コンパイラがどう実装してるか調べれるとかなり力になる
タイムアウト付きWaitMessageがないものかと探していたら MsgWaitForMultipleObjects(1, 0, 0, timeout, -1) 上記で期待通りの動きをしているようですが、これで問題がないのか不安です。 pHandlesに0を指定した場合の挙動を解説しているところはありませんか? nCountに0を指定すると、ノータイムで0が返ってきました。
>>432 了解です。ネットとかでもいろいろしらべてみよーかな
俺
神「なんだお前だったのか」
神A「暇をもてあました」 神B「神々の」 神A・B「遊び」
正しいものが勝つ世界が成立したら貧困は起こらないし
「正義の第一条件は正しいことじゃない。強いことだ。だから正義は必ず勝つんだ」
797 :
デフォルトの名無しさん :2012/09/07(金) 19:36:59.06
孫正義
>>795 「原理原則」や「机上の空論」を正論と思って賞賛してよいのは中学二年生まで
799 :
デフォルトの名無しさん :2012/09/08(土) 10:40:30.86
コンソールプログラムからDirectXを使う方法ってある? DirectXをWindowsプログラミングで呼び出すとMicrosoft のお約束事に付き合わされてうんざりする。 Open Dynamic EngineではコンソールプログラムからOpenGL 呼び出しているけど、ああいうことできないのかなと思って。
はい
801 :
デフォルトの名無しさん :2012/09/08(土) 11:50:19.65
はい、じゃないが
普通に呼び出せばいいじゃない
そのなんとかエンジンで面倒な部分やってくれてるだけだろうに 必要ならその部分を自分でやればいい話
クラス自身のプロパティaにクラス自身のメソッド内で this.a や me.a って書き方は存在しないのですか? メソッド内での定義変数なのかグローバル変数なのか、 はたまたクラスプロパティなのか判断できない><
this->a
そういう書き方はありませんよ
807 :
デフォルトの名無しさん :2012/09/08(土) 18:23:48.91
Visual Studio 2010 Ultimate です。 新規win32フォームアプリケーションの作成後に 標準出力を使おうとしました。 error C2039: 'cout' : 'std' のメンバーではありません。 error C2065: 'cout' : 定義されていない識別子です。 となります。
win32コンソールアプリケーションを作成しろ
>>808 int _tmain(int argc, _TCHAR* argv[])
{
std::cout << 100 << std::endl;
std::cout << "test" << std::endl;
return 0;
}
だめだって!!
>>808 できた。ありがとう!
#include <iostream>
811 :
デフォルトの名無しさん :2012/09/08(土) 18:45:05.92
>>806 やってもいいけど、やる必要なんてあるん?
>>804 がそもそも普通のグローバル変数を使うのが悪い。
せめて名前空間を使ってほしい。
とは言っても、過去に作られたプログラムをメンテナンス
しなければならない立場かもしれんが。
でも、それならこんな質問するわけないし、あれ?
>this.a や me.a って書き方は存在しないのですか?
単にアロー演算子知らなかっただけか。
>>811 馬鹿ですいません。phpプログラマーなんですが、最近はvb6.0が多くてアロー演算子忘れてましたwww
813 :
デフォルトの名無しさん :2012/09/08(土) 18:51:06.44
>>803 そんなん嫌や。
まあ、directXとコンソールでググれば一応でてくるがな。
MessageBox::Show の第一引数に std::string message; message = "メッセージ" message.data() を入れても駄目なの???
ビルドすらできないコードをブログに載せるなザコ
>ビルドすらできないコードをブログに載せるなザコ そのコードを閲覧しに行く大馬鹿野郎が居ると聞いて。
>>816 System::String でかいけつ
ThreadStart^ threadDelegate = gcnew ThreadStart( インスタンス, &クラス::メソッド ); Thread^ _thread = gcnew Thread( threadDelegate ); スレッド終了できへんでー
できた。。 ref class kitigai { public: void kurukuru (void) { while(1) { MessageBox::Show("ループ中"); if (this->_sending == false) { break; } } MessageBox::Show("ループ終わり"); delete this->_thread; } public: void start(void) { if ( ! this->_thread) { this->_sending = true; this->_thread = gcnew Thread( gcnew ThreadStart(this, &kitigai::kurukuru) ); this->_thread->Start(); } } public: void end(void) { this->_sending = false; } };
>>821 endで↓するべき
this->_sending = false;
this->_thread->Join();
delete this->_thread;
>>823 それC++/CLIのGCリソースの参照を保持する演算子
C#なら不要
class B_Class{ int x; }; class A_Class{ B_Class B; }; int main() { A_Class A; } としたとき、main関数内において、 A_ClassのインスタンスAが持つ、B_ClassのインスタンスBのint型のメンバ変数xに アクセスするにはどうすればいいんでしょうか?
すみません、各メンバ変数はprivateです。
827 :
デフォルトの名無しさん :2012/09/08(土) 22:26:41.05
アクセサを用意すればいい。
>>825 friendにしてもいいし
危険だけど分かりきっているのならそれもあり
アクセサを用意するとどこからでもアクセス出来るようになってしまう
>>827 ,828
ありがとうございます、アクセサで値の操作が出来ました。
C++の基本が分かるサイトはありますでしょうか? 開発環境はXPとVisualStudio2010です。 学生の頃はあまりプログラムやってなかったですし、 入社して半年はExcel VBAしかやってません。 先日C++での開発の方に移動すると聞いて勉強を始めたのですが、 変数の型が多すぎて何もわかりません>< お願いします。お助けください。
831 :
デフォルトの名無しさん :2012/09/09(日) 19:11:52.70
832 :
デフォルトの名無しさん :2012/09/09(日) 19:47:17.49
シングルトンについて質問です。 ネットを色々見て過去4つほど実装したところで初めてリンクエラーが出ました。 実装方法は一緒のはずなので原因の検討が付かない(探しても分からない...)ので質問させてもらいます。 class CSingleton { public: static CSingleton* GetInstance() { static CSingleton inst; return &inst; }; int func(){ return 1; }; private: CSingleton(); ~CSingleton(); CSingleton( const CSingleton& ); CSingleton& operator=( const CSingleton& ); }; int main() { CSingleton::GetInstance()->func(); return 0; } // end of file 上記はいつもの実装方法ですがエラーが...。 今までは問題なかったんですけど、何が原因なのでしょうか? 解決方法があれば教えていただけませんか。
なぜエラー内容を書かない
>>830 独習C++
effective c++
more effective c++
modern c++ design
n3337
>>832 質問とは関係ないけどシングルトンの設計間違ってるよ
836 :
デフォルトの名無しさん :2012/09/09(日) 19:54:35.51
>>833 すみません行数オーバーで投稿できなかったので削りました...。
1>Main.obj : error LNK2001: 外部シンボル ""private: __thiscall CSingleton::CSingleton(void)" (??0CSingleton@@AAE@XZ)" は未解決です。
1>Main.obj : error LNK2001: 外部シンボル ""private: __thiscall CSingleton::~CSingleton(void)" (??1CSingleton@@AAE@XZ)" は未解決です。
↑がエラーになります。
>>836 コンストラクタとデストラクタ書けばいいよ
838 :
デフォルトの名無しさん :2012/09/09(日) 20:02:43.84
>>837 あ、確かに書いてませんでした...。
ありがとうございます!そしてお騒がせしました...。
visual studio 2010 です。 OutputDebugStringで出力に表示されません。 出力元の表示(S): で デバッグ/ビルド/ビルドの順番 で デバッグ に表示されるのではないですか? もう意味ワカrませぬ
840 :
839 :2012/09/10(月) 21:24:51.31
ageさせていただきます。もうかれこれ2時間ぐらい頑張ってます。
>>841 自分が困っているのはwin32フォームアプリケーションです。
試しに新規作成で試してみました。
コンソールアプリケーション は ○
win32フォームアプリケーション は X ← 識別子が見つかりません
助けてください。
843 :
デフォルトの名無しさん :2012/09/10(月) 21:39:54.72
>>841 ////////, ''" ヽミ川川
|//////, '" ',川川 えっ!何この偉そうな勘違い童貞・・・
川/////, '",,,,,,,,,,,,,,,, r''"',川||
川f 川f´ ,ィ::ラ',川
川ヘ | 弋て::>  ̄ ',リ
川 ヘ.__ ヽ /7! ごめん…
川川 ヘ _,. '-‐''"´y' //
川川リヘ , '´ __,,,/ / / ちょと…まじで気持ち悪い!
川川川|/ '"´ , '´ /||
川川川| /川 (都内在住 22歳 OL)
844 :
デフォルトの名無しさん :2012/09/10(月) 21:58:00.04
>>840 2時間だろうが1年だろうが関係ないだろ
こういう頑張ってますアピールしたがるクズって実際使えない
お前に出力表示してもらわなくても誰一人困らないから失せろ
>>842 お前が困っても俺は困らない。
お前が存在しなくても誰も困らない。
僕頑張ってます! って言えばタダで情報もらえると思ってるゴミ野郎だろ。
ちょっとこんがらがってきたので質問させていただく。 参照カウンタ式のスマートポインタのコンテナをメンバ変数に置いて、それのアドレスを外部に渡して使う時に、渡したものがもう渡した先で使わなくなってもスマートポインタ自体は削除されないの?
848 :
デフォルトの名無しさん :2012/09/10(月) 22:19:23.31
改行すらまともに使えない低脳が答えてもらえると思うなよ。
>>847 なにいってるかわからないからインデントして書いて
>>847 改行の有無はどうでもいいがなに言ってるのかわからない
とりあえず、コンテナの要素を削除すればその要素の中身も当然削除される
>>842 エラーメッセージはそのまま書いて
>>847 スマポ自体の参照かポインタを外部に渡したのなら使い方が間違ってる
int soc; listen(soc_waiting, 1); soc = accept(soc_waiting, NULL, NULL); hoge(soc){ } みたいにsocをサブルーチンの引数にするときは hoge(FILE *i)ですか? hoge(int *p)ですか?
foo bar
やつが来るぞ
ざわ・・・ざわ・・・
>>852 int socを渡すんだからhage(int soc)だろう
ほげえええええ
hogeってなんだか逞しいイメージ。素敵!
class hogehoge{ hogehoge() ~hogehoge() public: hogehogehogehoge() hogehogehogehoge(int hogehogehoge) } で、コードが醜くてこまってます どうしたら良いですか?
>>861 エレガントなコードだ
このままで何の問題も無いよ
整数の足し算や掛け算で 型の最大値を超えて捨てられた部分を手軽に得る方法は有りますか?
不動小数点数で十分なんじゃね?
>>866 整数の倍の長さの浮動小数点数では乗算後に精度が落ちる場合がある。
gmp速いよな 以前自前で作ってみたがへぼくて高速除算が実装できない
ああいうのてC/C++だけでかかれてんのかな
クラス Hogeのインスタンスを Hoge hoge[10]; のように配列で宣言するとします。 hoge[0].GetMyno();のようにして自身の番号を知ることはできるでしょうか? (この例では0が答え) 1つ考えた方法はstatic mCntのような静的メンバー変数を持って、 コンストラクタでこの変数をインクリメントする方法です。なにか問題点ありますでしょうか? class Hoge { int mNo; static int Cnt; Hoge() { mNo = Cnt; Cn int GetMyno() { return mNo;} }
ない
コードが途中でした。 class Hoge { int mNo; static int Cnt; Hoge() { mNo = Cnt; Cnt++; } int GetMyno() { return mNo;} } です。気にしているのはインスタンス化される順番が 配列の要素番号順になっているかどうかです。これが崩れるとカウントアップの論理が崩れます。
template<size_t U> struct create_hoge{char buf[sizeof(hoge)*U];hoge operator[](size_t);}; を用意すればいいと思うよ。
インスタンスの配列はそのままではデフォルトコンストラクタしか呼び出せないので
>>874 のように領域を確保してからplacement newをした方が確実だな
これなら任意のコンストラクタを呼び出せる
デストラクタを自分で呼び出さないといけないか
>>870 先頭要素のポインタを渡して差分をとるのは?
int Hoge::GetMyno(Hoge *first) const { return this - first; }
Hoge hoge[10];
hoge[0].GetMyno(hoge);
自分をdeleteするのって、いいんだっけか
よくある
deleteしたあとメンバ変数にさわらなければいいです
void SetMyno(int n) { mNo = n;} つくって最初に for (int i=0; i<10; ++i) hoge.SetMyno(i); でよくね
void init(vector<hoge> & hvec) { for(vector<hoge>::size_type i = 0, n = hvec.size(); i != n; ++i) { hvec[i].SetMyno(i); } } これでいいんだよ C++奴隷って無駄に技巧こらそうとするからむかつくわ
>>877 連続に確保されてるとは限らないからNG
同意 ついでに無駄に参照つかうのもやめてほしい
>>883 配列なら &a[i] = a + i は保障されてるはずだが?
>>872 > です。気にしているのはインスタンス化される順番が
> 配列の要素番号順になっているかどうかです。これが崩れるとカウントアップの論理が崩れます。
クラスの配列の各要素がコンストラクタで初期化されるときは添え字順に初期化される
>>888 > 12 Special member functions
> 12.6 Initialization
> 3 When an array of class objects is initialized (either explicitly or implicitly), the constructor shall be called
> for each element of the array, following the subscript order; see 8.3.4.
>>866 不動小数点って、浮動小数点の対極だよな。
意味的には固定小数点の事だよな。
すごくうごく 浮動小数点数>微動小数点数>不動小数点数 うごかない
以前VisualStuido 2008を使ってて、最近2010Expressを使い始めたのですが 簡単なことさえできず、しょんぼりしています。 Windowsフォームアプリケーションで、 TextBoxのValidateで、整数で0〜100とか指定したいのです。 以前は、コントロールからメンバ変数を作成してついでにValidationも設定できて マクロが自動的に埋め込まれていたと思うのですが、そこで質問。 @Validateのやりかたはどうしたらよいですか? (フォーカス外れたときに自前でちくちく調べるしかない?) Aコントロールの値とメンバ変数間でコピーをしていたUpdateDataは廃止になった感じですか?
そもそも C++ 2010 Express ってフォームアプリなんて作れたっけ? (Win32API 使いまくるのは別にして。)
C++/CLIはC++と.NETの橋渡しとして使うものであって それでアプリを作ろうと思わない方がいいよ 基本はC#で作って、速度が必要な所は#pragma unmanagedしたC++/CLIで作るか C++で作ってC++/CLIで繋ぐというのが普通
#pragma managed(push, off)だた
ふうううううむううそうですか。ありがとうございます。 「Windowsのフォームを作るなら、基本はC#」ということですね。 従来の延長で作ることは諦めます。
よく見たらMFC使いたいって感じか? Expressはリソースエディタがないから凄く面倒くさいぞ
まあ、リソースエディタがあっても十分に面倒くさいけどな
MFC使いたい感じでしたが、 VS2008でC++からVS2010でC++の壁はどうせ高そうなので これを機にC#をやってみようと思います。 簡単なアプリならちょっと調べればできました。
って言うか、express系にはMFC付いてなくね?
visual stdio2010でwinsock2を使ったネットワークプログラミングを勉強中なのですが UDPを使ってsendtoで送信するとき,送る文字の型ってconst char *ですよね unsigned char *型で送るにはどうすればいいですか?
送るのはバイト列です
なので送り側受け側共に自作なら好きなようにキャストしてください
>>901 もうね。やめた方がいいよ。プログラマー諦めろ。
atomic操作とミューテックスなどを使った排他処理の違いってなんなんですか?
win32 なら criticalsection とときどき event だけでなんとかなっている
デッドロックやリソーススタベーションを発生させて楽しんでてください
910 :
デフォルトの名無しさん :2012/09/16(日) 22:51:53.99
DirectXでオブジェクトを任意軸(オブジェクトのY軸)回転させたいと思って いろいろ試しましたが、どうしても原点を軸に回転してしまいます。 D3DXQUATERNION q; D3DXVECTOR3 v(0.0f, 1.0f,0.0f); D3DXMATRIX mat; q.x = q.y = q.z = 0; q.w = 1.0f; v.x = m_mat._21; v.y = m_mat._22; v.z = m_mat._23; D3DXQuaternionRotationAxis(&q, &v, y); D3DXMatrixRotationQuaternion(&mat, &q); D3DXMatrixMultiply(&m_mat,&m_mat,&mat); 現状こんな感じですが、足りてないものってありますか?
>>909 criticalsection を注意深く配置する(いちどに二つのリソースを握らない)ことで、デッドロックは排除できるのでは?
スタベーションはスリープしているリソースの生起順に依存するからなあ‥‥OSにおまかせしか方法はないのでは?
マルチタスクの基礎から勉強しなおしてこい素人
>>912 minix 本には、現実、ダチョウアルゴリズムをminixでも他の多くのosでも採用している、とありました。
異なる二つを同時に握らないようにして、あるいは握るのならば一気に全部握ってしまい握れなかったらあきらめるし握れたら分けてあげようなんて考えない、そしてあとは運にお任せしかないのでは?
眠った順に起きてくれることを保証してもらえればありがたいんだけれども。
>>910 >現状こんな感じですが、足りてないものってありますか?
頭。
疑問を投げかける振りをして相手から知識を引き出そうとする 姑息だな 情報はタダじゃねーんだよ
>>917 そこは老獪と言った方がいいよ
Qはロートルだから
QZは学生だろ
MS-DOSを知ってる年代が学生だと?
あとPC-9801という発言も
「小さい頃に家にあった」レベルなら、ぎりぎりくらいか。
MEたん辺りまでは中身がdosだから、PCに強い奴ならトラブったときとかでdosを使わざるをえない状況に陥るぜ? PC98も高校になぜか残ってたし、研究室で未だ現役って可能性もある。
興味無い。よって、どーでもいい。
ギリギリどころか立派なロートルやん
>>907 どうもです
アトミック操作は並列操作に対して安全にできる一連の処理のことで
ミューテックスはその実装手段の一つ
よく使われるもの(コンペアスワップなど)に関してはOSがミューテックスよりパフォーマンスのよいアトミック操作を提供することもある
みたいな感じですかね
>>928 Win32に関しては4種類あるよ
・クリティカルセクション
・ミューテックス
・セマフォ
・イベント
イベントはlock-freeだけどwait-freeではない
メッセージポンプを使って一つずつ送り出してやる必要がある
wait-freeはOSが対応してないと無理だしな
Win64にも無いようだ
マルチコア環境でマルチスレッドを使えば似たような事が出来るが
それですらWaitForMultipleObjects()を使うだろ?
>>928 >OSがミューテックスよりパフォーマンスのよいアトミック操作を提供することもある
OSじゃなくてCPUな
あと付録でインターロック関数群があったね、もう何に使うのか想像できないや InterlockedIncrement(), InterlockedDecrement(), InterlockedExchange() 最後のは動きとして有名だったようだが、今は CAS?TAS?
>あと付録でインターロック関数群があったね、もう何に使うのか想像できないや 本も買わずに言ってるわけか さすが金なし中年ニート 今までQが披露したプログラムテクニックも大部分が必死でぐぐって見つけたものだったしな ネット上に落ちてる情報なんてそんなもんだ
>>932 △プログラムテクニック
○プログラミングテクニック
いつも思うんだけれども、あんたの用語の使い方は問題があるね。用語と用法には正確を期してください。
ググッて見つかるのであればそれはそれで結構なことですよ。
インターロック関数群はね、既存のセマフォやミューテックス、モニタ等に手を加えたものを自分で作るときに使うものです。
「何に使うのか想像できない」と書いたのは、そこまで記述できる能力はないから。
インターロック関数群を使ってセマフォやミューテックスを再記述する趣旨の書籍にはまだ出会っていません。
というか、
http://toro.2ch.net/test/read.cgi/tech/1345810057/954 によると、あんた、プログラミングの知識もないのに雇われてステマしてるんですって。
確かに実際にプログラムの内容に言及して煽られたことは数えるほどしかないし‥‥‥
単位給いくらぐらいなの?私にもできるかな?
>>934 しかたがないです。木を一本一本みていけば森もわかるようになる、と根拠もなく信じている人ですから。
で、どの点に森がみえていない、とお感じになったのかよろしければ。
>で、どの点に森がみえていない、とお感じになったのかよろしければ。 またこの手か 人に聞いてばかりいないでちっとは自分で考えろアホ プログラムを必死にぐぐって調べている頭じゃ無理だろうけどな だから「頭悪い」と言われるんだ いい加減気づけ
>>937 人から指摘されたもの→100%反論する
これがQの手口だから
どうせプログラムにしたってあちこちぐぐってはそこのブログにコメ欄があったら
文句言って回ってんじゃねーの
こいつの性格からして十分あり得る
しかし「自分で洞察した事には文句が付けられない」
Qには決して具体的な指摘はしてはならない
自分で気づくまで放置
なんか番号が飛び飛びかと思ったら
またQの仕業か。
アンチQZがうざいよね雇われてるのか?
コテを外したQが発狂中 こいつ暇になると構ってもらいに行くしかないんだな マジ哀れ・・・
いくらなんでもレスする間隔短すぎんだろ 関係ない雑談なんかどうでもいいわ
手の込んだ自演でしょう。はやくIDつくといいですね。
コテ外して自分で煽ってる癖に・・・
後れ馳せながら、VS express の desktop 入れたんだが、今回からライセンス用件変わったのか? 前はオープンソース目的ならOKだった気がするんだが、今回から評価限定になった? ライセンス登録に勤務先情報必須とか、まいるなあ。
947 :
946 :2012/09/18(火) 00:14:31.87
あっ、2012ね。
メモリオーダー?の話だと思うんですが あるスレッドに書き換えられた変数がほかのスレッドから見たときに書き換えられたことが反映される前にアクセスされることがある というのがよくわからないのですが物理的にメモリが書き換えられたらどのスレッドが見ようが同じだと思うんですがこれはいったいどういうことなんでしょうか?
レジスタに乗ってたりCPUキャッシュに乗ってたりすると書き換えがまだ反映されてない場合がある アセンブラをちょっとかじってみればいい
>>948 キャッシュかとも思ったが、プログラマから黒子のキャッシュの存在が見えてしまっては本末転倒。なんだろう?
スレッドの実行順序をまったく仮定せず、共通でみるメモリは排他制御用のセマフォなりミューテックスなり私好みのクリティカルセクションなりでガードするのが背折という気がします。
これならばまったく安全なはずです。
>>948 メモリコヒーレンスでぐぐってみ
いろいろおもしろい事がわかるぞ
アセンブラとキャッシュの相関は無いと思うんだ
プログラマからキャッシュの存在はみえないよね
cacheが見えないなんてのはバカ向けの話だよ 透過的と考えていい場合もあるし、どっちでもいい場合もあるけど、 ケアした方がいい場合やケアするとよりよくなる場合もある。 kernelコードでは普通に意識するし、アプリケーションコードでも性能を高めるため cacheに乗りやすいデータ構造になるよう意識する人は意識している
>>954 >cacheに乗りやすいデータ構造になるよう意識する人は意識している
そういう質問してる?
cache に載りやすいとかそういう問題じゃなく、キャッシュと主記憶に差があることがプログラマから見えるかどうかの話なんですが?
>>956 実行してみて、処理時間に極端な差が出て気付くこともしばしば。
char* str = malloc(sizeof(char) * 1024); この場合、strのサイズを取得するにはどうすればよいですか sizeof(str)とかsizeof(*str)では実際の変数サイズは取得できなかったのですが。。
>>958 strのサイズはsizeof(str)で得ることができる通り、sizeof(char *)と同じです。
malloc()で確保した容量を知りたいと言うことでしたら、一般的な方法はありません。
自分で管理しましょう。
>>958 sizeof(str) ≡ sizeof(char *)
sizeof(* str) ≡ sizeof(str[0]) ≡ sizeof(char)
うーん、そうですか.. では、strを初期化したい場合はどうすればよいですか memset(str, 0, 1024);としてもstrのサイズが1024である保証はないですよね
・確保数を知ってる所で初期化もやる ・構造体で数とポインタをペアにして管理
一応↓のようなものが用意されてる処理系もある(もちろん非標準)
http://msdn.microsoft.com/ja-jp/library/z2s077bc (v=vs.80).aspx
ただし、malloc()は厳密に引数で指定したサイズよりも大きい値を内部的に
確保することが多く、どっちみちあまり信用しない方がいい
malloc()を呼び出した人(関数)しか確保したサイズが分からないので
別の場所(関数)でその領域を使用したい場合は、領域のサイズを引数等を通じて
教えるように作るのが普通
それと単にゼロ初期化したいだけなら最初からcalloc()使えばいい
>>961 >strを初期化したい
char * str = NULL;
>>961 自分で確保したんだから‥‥、って冷たいですよね。
でもしかたがない。自力で管理しておくしかないでしょうね。
#define sizeof_str(a) *((size_t*)a-1) char*str=malloc(sizeof(size_t)+sizeof(char)*1024)+sizeof(size_t); … free((size_t*)a-1);
ん?
BSTR型みたいなもんてこと?
ほげええええ
ソレやり出したら 言語と関係無い階層で幾らでも情報詰め込めるようになるからなー
C++を勉強し始めようと思っています。 せっかくなのでC++11というのを勉強しようと思うのですが 良い入門書をご存知ありませんか
ISO/IEC 14882:2011っていうのがおすすめ
C++11の処理系が十分でないから、C++03から入ることを薦める
>>971 入門なんてググっていればいい
ある程度基礎が分かったら中級者以上を対象とした本を手に取ればいい
いくつか候補として挙げると
Exceptional C++
新訂版 More Effective C++
Modern C++ Design
C++の設計と進化
>>974 おい、C++11の話だぞ
とりあえず日本語の入門書はまだない
というか、C++03勉強してからの方がいいぞ
976 :
974 :2012/09/19(水) 19:21:56.24
>>975 すまんC++03を先にやれって一文を書き忘れた
977 :
971 :2012/09/19(水) 19:55:58.78
ありがとうございます
取り合えずプログラミング言語C++第三版ってので勉強します
ある程度進んだら
>>974 の本を読んでみます
>>972 CHF 238,00ってひょっとして202.3万円ですか?
流石に買えません……
2万ぐらいだろ
補助単位までフランで数えるなよ
>>979 すっげー重いな
まあ本物持ってるからいらないけど
欧州は小数点をコンマで書くのだよ
あ
小数点はカンマが世界標準
985 :
971 :2012/09/20(木) 13:18:12.20
>>979 ありがとうございます。
新しい言語を学ぶ時は一次資料である仕様書も揃えた方が良いかと思っています
しかしすごい分量ですね
>>978-984 なるほど、カンマは小数点だったんですね
勉強になりましたありがとうございます
>>984 中国、インド、アメリカ、パキスタン、ナイジェリア、日本、メキシコだけで世界人口の半分越えてるので
人口で考えればピリオドの方が主流
ISOは小数点にカンマだけ使うけどCGPMではどっちでもいいことになってる ドットだけ使う世界標準みたいなのは知らない
え
>>986 その理屈だと世界で一番ポピュラーな文字は漢字で、
一番ポピュラーな言語は中国語になってしまう。
>>987 ISO/IEC 14882での小数点はドットだけっすよw
うめ
青梅
オーメン2/ダミアン
うめ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。