【初心者歓迎】C/C++室 Ver.78【環境依存OK】
環境依存とか嫌なんだけど(´・ω・`)
c++で3dゲーム作るとしたらどんな風なdll?がおすすめですか
DirectXとかOpenGLとかマジオススメ
>>4 上位レイヤーなら
Ogre, Unreal Engine, Irrlichtとか
>>4 で、もし言語にこだわらずゲームが作りたいだけならUnityおすすめ
>>5-8 directxはよく見ますがそれ以外は聞いたことがないのばかりです
色々面白そうなのでかまってみます
C++複雑過ぎてコンパイルするのが怖い classのメンバ関数のconst参照、演算子の多重定義、テンプレート Cってすごくシンプルでいい言語だったな・・・
>>10 やりたい事を実行するのに必須のもんだったら別に怖いって事は無いだろうけどな。
選択権が無いのなら、お気の毒。
いや、クラスが複雑になってきてコンパイルエラー治すのに今3、4時間かかったからさ もちろん選択権ありありで、好きでそんなC++やってるよ
5MBほどメモリ領域を必要とするメンバ変数を持つクラスがあるんだが インスタンスをグローバル領域で生成すればスタックには格納されないよね? 謎のスタックオーバーフローで悩まされている・・・
ヒープじゃダメなんですか
gcc4, printf() で long long unsigned int を表示するときには、%の後になにをつければいいの?何をつけても警告がでるんだけど。
16 :
llu :2012/03/21(水) 00:38:16.24
>何をつけても警告がでるんだけど。 大袈裟だな。 アスキーキャラクタ 1〜10文字のすべての組み合わせ試したのか?
lluでもなんでも好きなの使え ちゃんと俺にもモリタポ払うんだろうな?
グローバル変数の初期化順番について質問があります。 test1.cpp --------------------------- std::string a("test1"); test2.cpp --------------------------- std::string b(a); 両方の変数がグローバル変数だったとして、この場合bの文字列が"test1"になるかは不明ですよね で、次の場合でも文字列bが確実に"test1"になってはくれないのでしょうか? test1.cpp --------------------------- const std::string &testinit(){ static std::string a("test1"); return a; } test2.cpp --------------------------- b(testinit()); よろしくお願いします。
おk
>>19 なりますか。
でもなんか変な感じがします。
最初のやつもbが"test1"になることを保証してもいい気がするんですが
>>17 5000モリタポお送りしたいのですがトリップがわからなくてごめんなさい。お知らせいただいてもいいのですが、
>>17 のトリップであることを証明してくださいね。:-)
>>10 たまにC#使うとコンパイルの速さにビビる。
ヘルスバーグなら速いだろうな
つーか、%lluなんてマニュアルページに書いてあることを質問している段階で馬鹿確定。 その馬鹿の性格なんてどうでもいい。
そんな馬鹿のためにモリタポの可能性を潰されそうになってるのがムカつくわ
ダブルチンコ? なんと奇遇な?
>>27 なんか勘違いしてるな。哲学の無い矛盾はただのアホだぞ
屑がダブルチンコwwww
31 :
デフォルトの名無しさん :2012/03/22(木) 07:13:18.34
初心的な質問ですが テキストエディタなどは 文字の量などでメモリのサイズが可変的だとおもうのですが こういうのはあらかじめある程度の領域を確保して 必要になるとまたある程度の領域を追加で確保するという形をとっているのでしょうか? またその中で消したりなどをした際には配列を手前へとずらしているのでしょうか?
>>31 プログラミング作法を読むといいよ。
まぁ、行単位か頁単位でリンクトリストするとかstd::deque辺りを使っていると思う。
間違えた、「ソフトウェア作法」だった。
ギャップバッファ最強
スタック、ヒープ領域につい素人的な質問ですが 以下のようにAのインスタンスを動的に作成した場合は、Aのメンバ変数のBインスタンスもヒープ領域に確保されるということでよいですか? class A{ B b; }; class B{ int nHoge; }; A a = new A;
うn
37 :
デフォルトの名無しさん :2012/03/24(土) 08:05:41.49
いま始めたばかりの初心者なのですが、 サイト見ながら素数判定のプログラムを書いたので 実行したいのですが、どこから実行するかどなたか教えてください
コンパイラや開発環境と呼べるようなものを持っているなら、
まずはそれの名前を書け
持っていないなら、それらをインストールしろ。
常用にはすすめられないが↓みたいなものある
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
wxWidgets2.9とmingwを使用しています。 コンパイルの仕方についての質問ですが、、このスレでよいでしょうか?
RTFM
STLで2つのコンテナの合成アルゴリズムありませんか? 例えばvector A, Bの全要素に対してplus関数オブジェクトを適用すればA[i] += B[i]してくれるようなもの。
transformでいけそうです
VC++2008はいつC++11に対応するんですか?
2010ですら中途半端なのに
transformじゃできなかったです!!どうすればいいでしょうか
ほんとだ。ありがと。 よく見たらbinary_function継承したクラスにコンパイルエラーが出てて 実行されてたのは修正前の古いexeでした。
nelem(要素数),vec(*int)をメンバに持ち、コンストラクタでnew int[nelem]によって int型の配列を実現するクラスIntArrayがあり C++で自己初期化(IntArray x = x)を抑制するコピーコンストラクタを作ろうとしました 自己初期化の問題は、左辺のIntArray xの宣言子よりxは生成されるので 右辺のxはコンパイルエラーにならないが、この右辺xは未初期化(デフォルトコンストラクタにもかからない)なので 結果としてxのメンバが不定値で設定されてしまうことにあるということです IntArray x=x;はダメだが、 IntArray t;// default constructor x=t; //IntArray::operator=が定義済み。 にするとうまくいく。そこで、下のようにコピーコンストラクタを定義しました IntArray::IntArray(const IntArray& x){ if(&x != this){ /*自己初期化ではない*/ nelem = x.nelem; vec = new int[nelem]; for(int i=0;i<nelem;i++) vec[i] = x.vec[i]; } else{ std::cout << "※自己初期化が行われています。\n"; IntArray t; *this = t; } } するとコンパイルエラーは出ないものの実行すると *** glibc detected *** ./a.out: free(): invalid pointer: 0xb763bff4 *** となり、どこかでメモリの開放がうまくできていないのかプログラムが強制終了してしまいます。 前後左右でチェックして明らかに*this = t;に問題があります。 ~IntArray() { delete[] vec; }がデストラクタです。 コードの中にどこか問題のある記述ありますでしょうか?
49 :
48 :2012/03/25(日) 19:34:53.85
長文をかいといてすいません。
下のようにやるとうまくいきました(単純に考えうることなのに頭が回ってませんでした)
IntArray::IntArray(const IntArray& x){
if(&x != this){
・・・・
}
else{
std::cout << "自己初期化が行われています。\n";
IntArray t;
nelem = t.nelem;
vec = new int[nelem];
for(int i=0;i<nelem;i++)
vec[i] = t.vec[i];
}
}
原因が下のoperator=の自己代入抑制のコード中のdeleteで、既存の配列を開放するため
>>48 のコピーコンストラクタ中のthis->vecが不定値の状態でdeleteを行っているからでした。
IntArray t; Int Array x = t が許されたのは、コピーコンストラクタが呼び出されているからなのですね。
if(this != &x){
if(nelem != x.nelem){
delete[] vec;
nelem=x.nelem;
vec = new int[nelem];
}
for(int i=0;i<nelem;i++)
vec[i] = x.vec[i];
}
お騒がせして勝手に自己解決してすいませんでした
>>48 そのクラス、コピー代入演算子やデストラクタも定義されてるんだよね?
コピー代入演算子の実装は初期化済みのオブジェクトを期待してるだろうから、
ら未初期化のオブジェクトに対して代入しちゃマズイでしょう。
51 :
48 :2012/03/25(日) 19:38:35.35
>>50 まさにそういうことなんですよね・・・
コピーコンストラクタとコピー代入演算子の違いが初めてはっきり分かった気がします。
うわ、解決してた。 にしても自己初期化に何かしらの動作を与えても呼び出しもとのバグであることに 変わりはないだろうから、心配するとしても assert() ぐらいでいいと思うぜ。
>呼び出しもとのバグであることに変わりはないだろうから、心配するとしても assert() ぐらいでいいと思う 眼から鱗ですね。確かにその通りです
独習C言語を読み終わり、乗っていたすべての例題を解けるようにはなりました。 そろそろGUIなプログラムを作ってみたいのですが、次は何を理解すればよいのでしょうか?
>>54 プラットフォームや見た目、使い勝手などから、
目的に合いそうなGUIツールキットを探す
>>54 作りたいものに応じた開発言語・ライブラリ選択基準
ふと自作クラスを作っているとき疑問に思ったのだが C++の既存のWin32ライブラリ、例えばMFCとかATL/WTLは BOOL型とbool型が混在しているが、メソッドの戻り値の型を例に取ると どういう場合はBOOL型にし、またはbool型にすべきなのだろう?
>>58 自分で作るならbool、APIの戻り値をそのまま戻すなら(必要に応じて)BOOL。
ちなみに、Win32APIのBOOLは二値じゃない。
>>59 MFCなどはAPIとの整合性を重視してBOOLを使うのだろうか?
C++のライブラリであるなら言語仕様にあるboolを使うべきと思うのだが、
boolを使うデメリットがあるのでしょうか?
シリアル化の場面ぐらいしか思い浮かばないが…
Win32API 使う人の中じゃ有名だろうが、 GetMessageという関数があって、こいつはBOOL型を返すくせに、 -1、0、それ以外の値の3種類がある そういう特別な例外だけ気にしておけば bool で構わないと思う
BOOLを返す関数の戻り値はBOOLで受ければいいお それからエラー処理でも何でもすればいいんだお
Windowsデータ型のBOOLはBYTEの別名でBYTEはunsigned charの別名なんだっけか?
>>61 実用上ではboolでキャストしても問題ないとかじゃなくて、
むしろリファレンスにboolで受けるなよ!絶対だぞ!って書かれてるのか(´・ω・`)
>>64 うは、BOOLとBOOLEANで型が違うw
以下のフォーマットになるようにバイナリデータ を作成したいのですが、どうするのが手っ取り早いでしょうか? [フォーマット] ┌───────┬─────┬─────┬─────┬─────┐ |2進数桁数(N桁)│ 値A │ 値B │ 値C │ 値D │ └───────┴─────┴─────┴─────┴─────┘ └ 5 bit ┘└ N bit ┘└ N bit ┘└ N bit ┘└ N bit ┘ フォーマットの先頭にある5ビットで2進数表現の桁数が格納されており、 その後に続く値(符号付)が、桁数に従い2進数で格納されております。 例えば、 桁数:6桁 値A :0 値B :20 値C :0 値D :20 の場合、 00110 000000 010100 000000 010100 になります。 これを先頭から8ビットずつとって(8ビットにならに場合0パディング)、 バイナリに変換して、 0x30 0x0A 0x00 0xA0 というような感じにしたい。 どういうロジックにするのが簡単なのでしょうか?
任意のビット幅のポインタをクラスで作成して使えばよいんじゃね。 operatorとか使うのがよく判らないなら、Read/Write用のメンバ関数を用意してもいいし。 bit幅が64bitを超える場合はちょっと面倒になりそうではあるが。
>>69 ビット長が5ビットで表現されているんだから64bitを超えるわけないだろ。JK
>>67 で、Nが0だったらどうなんの? Nが8を超えたときも2-4バイトにパディングしていいの?
あ、違うのか。失敬。
>>67 パディングは最後だけってことね。
>>69 総ビット長が64bitを越えるってことか? だとしても、なんで面倒になるんだ?
>>67-72 返事遅くなり申し訳ございませn。
レスありがとうございました。
>>68 ビットフィールドを調べました。
確かに便利だと思いましたが、ビット長が可変なので
使えないのかと思いました。
>>72 サンプルありがとうございます。
こんなに少ないロジックでできるんですね。
ただ、理解があまり出来ておりません
・数個ある条件式の意味
・変数maskが何故こうしてやればいいのか。
※ヘタレですません。
自分は必死こいて、ビットシフトやら、ビットマスクなどを
駆使してベタベタにコード書いてやっとできたんですけど、
72さんのサンプルを参考につくり治したいと思います。
他のスレッドを実行しているCPU番号を取得するAPIはありませんか? GetCurrentProcessorNumberで自分のスレッドのCPU番号は調べられますが 他のスレッドのCPU番号はどうすればよいですか? 対象のスレッドは自分のコードではありません。 できればXPでも実現できる方法が知りたいです。
その記事には行き着いたのですが、 他のスレッドからそれを実行しても意味がないと思うのです。
そんなもん取得して何がしたいのか
78 :
デフォルトの名無しさん :2012/03/28(水) 14:10:32.52
79 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/03/29(木) 13:02:41.54
他の関数に ジャンプ できますか?
>>79 制限付でsetjmp()/longjmp
2種類の全く異なるクラスがそれぞれのポインタを利用してtree状に循環参照する時に ヘッダファイルの定義はいったいどう記述すればいいのですかね 一度だけコンパイラに参照されると片方でしか定義されないことになってしまってエラーになる ヘッダだけでvoid*型にしてcppファイルで形指定して参照するくらいしか思い浮かばないけどダサすぎる
クラス名だけ書いておけばいいって話ではなく?
83 :
81 :2012/03/31(土) 00:50:38.47
すまん、出来ればhファイルだけで完結させたくて 関数のスクリプトも全部hファイルに記述しようとしてるんだけど 名前を入れるだけではnewの部分で形が認識できないとエラーになる
inline CLASS::func(){} を知らないて話し?
んーなんかなにがやりたいかよくわからんね エラーの出る最小コードとか作れない?
86 :
片山博文MZボット ◆0lBZNi.Q7evd :2012/03/31(土) 14:18:41.39
RubyスクリプトをC言語に翻訳することできますか?
>>81 >>83 ポインタのみ必要なら、class HOGEHOGE; って書いておけば?
class HOGE1; class HOGE2; class HOGE1 { ... HOGE2* getHoge2(); ... }; class HOGE2 { ... HOGE1* getHoge1(); ... }; inline HOGE2* HOGE1::getHoge2() { return new HOGE2; }
個人的にはツリーのノードにあたる部分のインターフェイスを定義してから 両方のクラスはそのインターフェイスを継承して作るのがいいんじゃないかと思うがどうか
VC++10のdebugビルドにおいてSTLのiteratorが有効か無効かどうかチェックが入るみたいなのですが、 これが障害となりboost::rangeにおけるemptyメンバやsizeメンバが使用できません。 原因は各種オペレーターオーバーロード時の動作に際して上述したチェックが入り、dereferenceできない内容ならばassertしてしまうからです。 これにより初期状態(例えば内部表現がnullptrのiterator)かどうかの判定ができません。 releaseビルドではチェックが入らないため問題なく扱えるのですが、どうしたら良いのでしょうか?
91 :
81 :2012/04/01(日) 02:47:59.43
>>87 new するってことはデフォルトコンストラクタが必要
>>89 継承しても問題の根本が解決するわけじゃない
a.h
#pragma once
class a
{
public:
a(){}
make_b(){new b();}
}
b.h
#pragma once
class b
{
public:
b(){}
make_a(){new a();}
}
と言った具合にcやcppを使わずJavaのようにhファイルのみでクラスを実装しようとした時に
双方向で参照可能にするようなコンパイラの定義方法が存在しないので困ってる
cppに定義かけ c++じゃそれが普通だ
>>91 a.h,b.hをまとめてab.hに書く
普通はcppに書くけどね
>>93 テンプレートでなら見たことがあるな、そういう書き方。
普段からC/C++に触ってるわけじゃないので、今でもやるのかどうかは知らないけど。
いくら初心者でもそのコードはひどい… あとC++とJavaは単に文法が似ているだけで中身全く別の言語なんで "Javaのように"できることはほとんどないと思ったほうがいい むしろ危険
質問させてください。 環境:Windows7 32bit , Visual Studio 2005 fopen("r+")で取得したファイルポインタに書き込む際、 "w"で開いたかのように書き込む(内容をすべて上書きする)方法はありますか?
_chsize()または_chsize_s()
>>91 なんでそんな上から目線なの?
もうbをaの内部クラスにしちまえよ
vc10で銀行丸めの関数を作りたいのですが 単純に実装すると、負かどうかや、小数部がちょうど0.5のとき など分岐だらけになってしまいます。 分岐のない高速なアルゴリズムを教えていただけませんか?
分岐なしじゃ無理
その程度なら十分に高速そうだしなー
>>100 適当に楽に作れ。
あとでそこがボトルネッが判明してから手を出す。
>>100 cmov使ってみたら?
用途は違うけど分岐なくそうと思って昔SSEで書いたことがあるんだけど
そのときはSSEレジスタへのロード&ストアが遅すぎて敗北した
ぜひ試してみて結果を教えてほしい
>>hファイルのみでクラスを実装しようとした時に この前提がありえないからその悩み自体ゴミだ
メンバメソッドの規模をワンライナーに限定して使役関数はクラス外部に置けば有り得ない話じゃないな 内部構造と実装コードの癒着が少なくなる方向付けも出来るし
テンプレートならむしろヘッダファイルに書くのが普通
それって古いVCのテンプレート周りのバグ対策じゃね?
んなこたない 勉強すれ
いまだにヘッダにロジック書くバカがいるのかよ
テンプレートはしょうがねーべ。 あんまりロジック部分を別の翻訳単位に分離すると コンパイル時間が爆発的に大きくなるから。 どっかのブログで理論値と実測結果の両方を示して 「テンプレートは全部一つの翻訳単位に埋め込むと超速^^」 みたいなおもしろい結論(ただし上司に殺される)を出してなかったっけか
テンプレートはコンパイラから実装が見えないと実体化できないので、通常はヘッダに実装を書く 文法上はこの制限を回避するexportキーワードってのもあるが 現実はほとんどのコンパイラが実装してなかったし、C++11では削除された boostなんて全部ヘッダにロジック書いてる
C、C++、Windows API でファイル入出力など同じような関数がありますが 使い分ける基準などあるのでしょうか?
自分が使いやすいの使えばいい
Visual C++とかGCCを使っている限りは Windows API使わないとUnicode入出力できんぞ。 (正確には、「できるがめんどい」・3・)
>>114 自分に必要な機能を持ってるものを選ぶ
機能的にどれでも要件を満たしているなら、使い勝手、パフォーマンス、移植性等を
考慮して自分にとってメリットの大きいものを選ぶ
ただしWindowsの入出力ではUnicodeファイル名やラージファイル等をサポートしたい
場合、移植性はどのみち犠牲になってくるが
ファイル入出力に関して言えば、例えばAPIでファイルを開いた後
_open_osfhandle() -> _fdopen()
でファイルポインタを得てstdioを使う、といった複合技も可能だよ
118 :
114 :2012/04/06(金) 00:12:50.72
>>115-117 返答ありがとうございます、まだ単純なファイル操作しかわかりませんが
それぞれ区別が付くように調べてみます
gccの-Sオプションで吐かれるファイルにCのソースコードを埋め込むオプションはありますか? VC++でいう/FAsのようなものがほしいのですが
>>119 gcc -Wa,-adlh -g -c
ツリービューにイメージリストをセットすると、使用後イメージリストを削除する必要があるようです リストビューにイメージリストをセットすると、リストビューが勝手に削除してくれるようです 拡張コンボボックスのイメージリストは削除されるのでしょうか? また、仮にリソースリークしてもアプリケーションが終了すれば問題ないのでしょうか?教えてください
>>120 ありがとうございます
やりたかったことはまさにこれで、FreeBSD上ではうまく動きました
が、Windows上のh8300-elf-gccではエラーがでてうまく逝きませんでした(´・ω・`)
もうちょっと調べてみます
どす窓のプログラムを書きたいのですが、 普段は別の処理をしていて、キーボードから入力があったときのみにそれに対して反応させるにはどうすればよいのでしょう?
別の処理の内容次第
125 :
123 :2012/04/13(金) 22:55:26.44
>>124 入門書を読み終えたので、STGでも作ってみようかと思ったのですが、どうしても入力待ちで停止してしまいます。
なにか良い方法はないでしょうか?
標準関数だけで 何も押されてないということもわかる入力監視ってできるのかな? (getchar() は 入力があるまで止まるよね) 非標準関数なら環境によって色々あるだろうけど
止まってることがそういうこと
kbhit()は?
検索していたらkbhitというものがあるようですね こいつを試してみます
>>128 書き込む前に更新するの忘れてました
kbhitで試してみます
ありがとうございました
CUIなのか。 curses使え
autoconfで configure/make するようなソフトウェアを、Visual C++の cl.exe でビルドすることって出来る?
>>132 ものによるけど、VCでビルドすることを考えているものは、大体ビルド手段を
提供しているから、それがないものは簡単にはいかないと思った方がいい
やって出来なくないものもあったけど、ソースの書き換えが必要だったり、
ビルドされる流れを理解する必要があったり、関連ライブラリの移植が必要だったりと、
かなり労力がかかったよ
どうしてテンプレートというものが出来たのでしょうか? せっかく型に厳密だったのに台無しじゃないですか?
>>132 MinGWで簡単にビルドできて(依存性が少ない)、かつC99で書かれていないなら
比較的容易にMSVC対応できる可能性は高い
MinGWでもビルドが面倒くさかったりMinGWでもビルドできなかったりC99で
書かれているものは基本的に茨の道だが、これも難易度はケースバイケース
Unixのシステムコールが使われているようなものでも、ある程度簡単に移植可能な
ものもあるが、fork()あたりが使われているとそうはいかない
ああそうそう、C99もだがgcc拡張(gcc形式でのインラインアセンブラも含む) なんかもダメよ まあ細かい話だけど
>>134 複数の型に対応できるだけであって、厳密なのは大して変わらなくね?
テンプレートこそ型に厳密だよな
qsort() をみよ。void * は事実上なんでもあり。
しかも何気ないCスタイルキャストでreinterpret_castとconst_cast を一気にやるとか凶悪な使い方が横行する。
#define const_cast Dont_use_constcast とかやりたくなるな…
C++は無理が多いな
するべきでないことが やりづらくなっているのはいいことだ
最近C++始めたんだがどうやって覚えていけばいいのかわからない
>>145 まずはCを始めます。
次に、C++の入門書を読みます。
\(^o^)/
>>146 C++の得意分野というか、C++を習うとどんなことができるのだろうか。
馬鹿なことを聞くなと言われそうだが、プログラミングの腕を磨きたいと
思って。誰か教えてください。以前、C言語とFortran, Perl を
やったことがあります。
コンテナはなかなか感動する
>>147 とりあえず、windowsでGUIをもつソフト作ろうと思うとC++の知識が不可欠らしい。
自分はオブジェクト指向が意味不明で積んだw
自コード内で多態とオーバーロードとstatic変数とADLさえ巧く避ければイイ言語だよ。
>>150 windowsのGUIは、api使ってC言語でできる
というか、基本のapiはただの関数なので、C++である必要はない
リソースの破棄が簡単になったことだな。
いまC/C++でGUIソフト作るとき何使うのが一般的なんだろう。 win32api勉強してみたが本格的なもの作れる気がしないわ。
おすすめ fox SDL C# GTK HSP C++でないものをあるが、メインはC++DLLで作って呼び出せばいい・。
>>156 ありがとう
FOXとSDLは初めて聞いたなぁ
Qtでいいじゃん
>>155 環境や目的によって変わってくるので
一通り使って消去法で選ぶのがいいと思うよ
マルチスレッド対応なGUIツールキット欲しいわぁ
マルチスレッド対応GUIツールキットってどういう意味? マルチスレッド機能とGUIが一緒についてくるってだけ?
161 :
デフォルトの名無しさん :2012/04/22(日) 16:22:53.86
GUI本体はイベントドリブンだな。
C++でメモリの再確保ってどうやればいいんでしょうか?
使いまわせばいい
>>162 コンテナに要素を追加するとか realloc() を呼び出すとか
>>164 ありがとうございます。
C++ではmallocはあまり使わないと書いてあったのですが
再確保の場合コンテナを使うのが一般的なのでしょうか?
>>165 そもそも「再確保」を目的にすることが無い。
どうせコンテナの要素を動的に増やしたいんだろ。
標準ライブラリを使って素直なコードを書けばいい。
167 :
名無しさん :2012/04/23(月) 15:05:45.62
検索エンジン→心の病→西東京バス事件
>>160 擬似コード書くと
subthread() {
App().MainLoop(Form())
}
これがまともに動くもの。
Windowsで別のプロセスに属する2つのウインドウの上下関係を設定することはできますか? > SetParent 関数を使うと、ポップアップウィンドウ、オーバーラップウィンドウ、子ウィンドウの親ウィンドウを設定できます。新しい親ウィンドウと子ウィンドウは、同一アプリケーションに属していなければなりません。 ということらしいのですが・・・ なければイベントを捕まえて上下関係を設定しなおすことも考えているのですがちらつきそうで
宿題で出されたこの問題が分からないのですが、誰か教えてくれませんか。 1〜9までの連続する数字の間に和・差・積の演算子(+, -, *)を適当に入れて、 式の値がちょうど 100 となる例を挙げよ(10とおりだけ書け)。 たとえば、 1 + 2 * 3 * 4 * 5 + 6 * 7 - 8 * 9 = 91 というような計算をする。ただし、この例では式の値が91となるので答えではない。
プログラム関係ないじゃん
Win32質問箱に投稿したのと同じ質問ですが、 あちらは機能していないようなのでこちらで改めてお尋ねします。。 VS2010でWTLベースのアプリを作成しているのですが、ウィンドウ上でマウスポインタを 移動しているとき、Ctrlキーが押されている間だけポインタを変更したいのです。 しかし、クライアント領域内でポインタを動かすだけではWM_SETCURSOR メッセージが 送られず、ポインタを変更できません。 任意のタイミングでポインタを変更する方法はないでしょうか。
SetCursorってまんまのがあるじゃない
iphoneよくわからん nebulousってアプリでコーディングしてそのままmobileterminalでコンパイルしてんるだけど/nで改行してくれない さすが文鎮
/n
四時間位四苦八苦してたけどコンパイラとツールチェーンcydiaから再インスコしたら自己解決したわ
180 :
デフォルトの名無しさん :2012/04/28(土) 16:54:19.12
メンバ変数の初期値は0ですか?
そんなこと無いので初期化しましょう
仮引数の変数名を書くのと書かないのではパフォーマンスが変わったりしますか?
変わるわけねーだろ
えw
そりゃぁ、書くと書かないとで意味が変わらないコードだったら書かないのと同じだから差は出ないよ。 と言いつつ、>182, >183, >184が三人とも私と違う解釈をしていて話が噛み合っていないだけなんだろうけどね。
C++でもメンバ変数の初期値は不定なの?
不定です
太ぇ野郎だ
不定っていうけど+にはならないよね。なんでか
>>189 それ 0xcd とかデバッグ時メモリ未初期化のデフォルト値が入ってるんじゃね
たまに フフフノフフフ になるよ
ならねーよ
そうでしたっけ?ウフフ
漠然とした質問になってしまうが パーサを作ろうと思っているのだが、何か決まった作り方とかありますか? デザインパターン的な
使えるライブラリを選んで使え
>>197 ありがとう
今までホント自己流でやってきたから情報ありがたい
パーサライブラリとかもあるんかな?ぐぐってみる
構文解析器をゆっくり読むとひみつどうぐ風に聞こえる
VC拡張か普通の規格かわかりませんがoverrideを強制する方法はありませんか? class A{ virtual void func(void) = 0; }; class B : public A{ virtual void func(void) override; }; のようにoverrideがなければコンパイルエラーにしたいのですが 誰かがvoid A::func(int)のように変更した時にBの変更し忘れを検出したいというのが目的です
/we 3668 かな Windows使ってないけど。
初期化も時間に含めるのか分からん
篩で高速化すんなら、アトキンの篩ぐらい使えよw
アトキン調べてコード見た感じ私の方が速そうですよ メモリの都合で最大9番目までの素数の乗算の数の エラトステネスの篩を初期化して倍数掛け
逐次篩というやつだった
207 :
デフォルトの名無しさん :2012/05/02(水) 23:13:35.71
素数判定なんて相当研究されてるだろ。 例えばフリーで使える速いやつにかったら研究者になれるレベルだろ。
209 :
デフォルトの名無しさん :2012/05/02(水) 23:27:31.70
>>201 質問者は確実にC3668などを発生させられるために
overrideの使用を強制したいと言っているように思われる。
俺もあれば使いたいんだけど、見当たらないんだよね……。
class Aがあるヘッダを読み取り専用にする
213 :
デフォルトの名無しさん :2012/05/04(金) 02:19:06.34
1,2,3,4,5,6,7,8,9,10,11,12,13,...という数列があって、それを 1,2,3,4,1,2,3,4,1,2,3,4,1,...(1,2,3,4の繰り返し)に対応させたいんですが、 IF文とか3項演算子とかを使わずにできますか? %を使うと1,2,3,0,1,2,3,0になって上手くいきません。
((n-1)%4)+1
215 :
デフォルトの名無しさん :2012/05/04(金) 02:55:08.02
ありがとうございました。
二次篩法を実装したけど 大きな数じゃないと処理が重くて出番がない
>>216 大きな素数(メルセンヌ数など)の原始根を求めたいんだが、なんかいい方法はないか?
素数自体は 2^1000 程度、原始根は 2 とか 3 とかじゃなくて、300〜500 前後のものがほしいのだが。
218 :
デフォルトの名無しさん :2012/05/04(金) 18:27:33.29
二次篩法とためし割りでいいんじゃない
220 :
デフォルトの名無しさん :2012/05/04(金) 18:39:56.79
221 :
デフォルトの名無しさん :2012/05/05(土) 07:00:10.49
ある整数が素数だと分かってなになるんだ?
わかる仮定が大事 あと暗号で素数を利用してるケースが多々あるとか
223 :
デフォルトの名無しさん :2012/05/05(土) 07:31:43.91
そういう意味じゃなくて・・・ その手の話は、コンピュータサイエンスやってる科学者だろ アプリケーションを作成するようなレベルで素数なんて使うか?
実用的な使い方ではないけど、DHの理論が成立することを確認するとか?
>>224 ピンポン!原始根って虱潰ししかないのでしょうかね。 2^30 くらいで青息吐息
素数を使ったモジュラアルゴリズムは山ほどあるだろ。 有限体F_pにおいてFFT乗算を用いるのに使ったり、 環Rがベースとなる多項式R[x]のgcdを高速に求めたり(このプロセスは先に述べた高速算術に必要になる)。 特に後者は、古典的アルゴリズムを使った時の中間結果の有理数の分子及び分母が膨大な数になるのを防ぐために、 一度n in R[x]/<p>で計算を行った後にnをR[x]の元に復元する方法がある。
227 :
デフォルトの名無しさん :2012/05/05(土) 13:19:52.59
228 :
デフォルトの名無しさん :2012/05/05(土) 13:23:43.62
一個原始根を見つければ、あとは低計算量ですべて出せるはず(証明はしらんが簡単だろう)で 小さいやつから平方剰余の相互則を使って判定しろということ。 素数判定のように高度な知識はいらんだろ。初等整数論だろ。
それほど面倒でも無いでしょ xxxxxxx0 xxxxx101 xxxx1001 xxx10001 10000001 下桁に0が並ぶ数字は全部除外できるんだから
230 :
デフォルトの名無しさん :2012/05/05(土) 15:30:26.07
>>227 のやり方で、たとえばp = 123456789の原始根をやってみようとしたが、
(素数かは知らないが)もしpが素数だとしてp-1の素因数分解が必要となり実質的には素数判定より手間掛かるな。
231 :
デフォルトの名無しさん :2012/05/05(土) 15:44:17.44
232 :
デフォルトの名無しさん :2012/05/05(土) 15:51:46.64
233 :
デフォルトの名無しさん :2012/05/05(土) 16:04:39.12
素因数分解にかかるコストより、p-1乗まで計算した方が良いんじゃないかと思ったが。 空のループでも2^31くらいやったら相当時間かかるだろうから、やっぱ素因数分解からだな。
234 :
デフォルトの名無しさん :2012/05/05(土) 16:06:29.11
◆QZaw55cn4c は、上のライブラリを組み合わせて、原始根出力プログラムを完成してくれ。
235 :
デフォルトの名無しさん :2012/05/05(土) 16:12:08.31
ρ Method (ρ法)
基本的にはモンテカルロ法であり、算出される因数はN,pの大きさには無関係であるが、
経験的には10桁以下程度の大きさの因数pを算出することが多いため、素因数分解の初期フェーズとして使われることが多い。
P−1 method(P−1法)
数学的にはフェルマーの小定理を根拠としており、最も理解しやすいアルゴリズムである。
算出される因数pに対し、p−1が小さい素因数の積で構成されているものを対象とするため、
20桁以下ぐらいの素因数pの算出が可能であり、値によってはもっと大きな素因数も算出されることがある。
ρ法の次のフェーズとして、20桁程度までの素因数をたたき出す時に使用することが多い。
Elliptic Curve Method (楕円曲線法)
数学的には、楕円曲線 y2=x3+ax+b 上の有理点が、mod N で考えた場合のある演算に対してアーベル群を作るため、
Nよりも小さい位数で0(mod N)となる場合があり、その時の位数mとNのgcd をとることにより、Nの素因数を算出する方法である。
複数多項式2次ふるい法で分解できない桁数の数に対して用いる。30桁以下程度の素因数を算出する。
Multiple Polynomial Quardratic Sieve(複数多項式2次ふるい法)
数学的には、フェルマーの方法の拡張版であり、
x2−y2≡0(mod N) の解を多数構成し、求める。
ある桁数以下の数を確実に分解するため、小さい数についての素因数を求める場合、
または、p−1法、楕円曲線法で小さい因数は出しきったと思われる数について、完全分解を求めたい時に適用する。
Number Field Sieve(数体ふるい法)
2005年頃から、プログラムが公開されるようになった。
一般の数に関して、100桁を越えると、複数多項式2次ふるい法で分解するよりも、一般数体ふるい法でやった方が速い。
また、分解対象の数が、係数の小さい6次以下の多項式で表現できる場合、
特殊数体ふるい法が絶大な威力を発揮し、Pentium 4 マシンで、 160桁ぐらいまでの分解が可能である。
http://www.asahi-net.or.jp/~kc2h-msm/mathland/matha1/matha101.htm
236 :
デフォルトの名無しさん :2012/05/05(土) 19:21:28.28
Cの質問です SFMTで作った64bitのunsigned longの乱数があります これを1bitずつ上位ビットor下位ビットから array[0] = 1; array[1] = 0; ・ ・ ・ というように64個の配列(intでもboolでも何でもOK)に入れたいんですが、どう書けばいいでしょうか 最終的に、ループで回して0と1の行列は長い(数千万の)配列にしたいので 速いコードだとありがたいです
unsigned long r64;//random for(int i = 0 ; i < 64 ; i++) { array[i] = (r64>>i)&0x01; }
>>236 そんな効率の悪そうなことをするためのコードが速くて本当に何か意味があるのかね?
今求めているのは、 素数かどうか不明のものを素因数分解すること ではなく 既知の巨大素数の原始根を求めること なのですが? うーん。全然わからん。
既知の分なら求めず表にするれ
241 :
デフォルトの名無しさん :2012/05/05(土) 20:43:25.15
242 :
デフォルトの名無しさん :2012/05/05(土) 20:59:34.72
243 :
デフォルトの名無しさん :2012/05/05(土) 21:05:39.49
>>236 >>237 のを使うぐらいしかないんじゃない?
それかいちいち計算せずに、関数を用意しておくとか?
int get_bit(ulong r64)
{
return (r64>>i)&0x01;
}
おそらく
>>236 のしようとしていることは非効率的で、
オリコウでない方法だと思うよ。
245 :
デフォルトの名無しさん :2012/05/05(土) 21:21:22.96
246 :
デフォルトの名無しさん :2012/05/05(土) 21:39:15.70
素因数分解が出来ていれば全ての原始根も求められる。一つ見つかっていた場合。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1235764892 mod19の乗法群は位数18の巡回群になります。
18=2×3×3
なので 2, 3 と互いに素な原始元の冪乗は全て原始元になります。
原始元は{2,3,10,13,14,15}ですが、
このなかのどれか一つを選択してgとした場合
g,g^5,g^7,g^11,g^13,g^17
は全て原始元になります。
>>244 別な方法で実装しました
要するに長い行列に対してm-sequenceでディザリングをしたかったのですが
後で処理をするためにディザリングの配列は残しておかねばなりません
なにかいい方法がありますか?
ありますよ。ちょっと待って下さいね。
n番目の素数の概算値Paは Pa=2.32nlogn+2n で大体出せた
あ、調べたら Pa=nlogn+nloglogn って書いてた
調べた方が精度悪いや
荒らしかよtwitterか数学板にでも行けよ
254 :
デフォルトの名無しさん :2012/05/06(日) 11:00:33.25
>>239 すべての原始根をもとめるのに素因数分解なしで高速に求められるのがあるのか?
n番目の奇素数を正確に出す式あるだろバカか
あったら暗号が使えなくなるか あっても指数時間の計算でしょ
精度改良しましたが Pa=2((0.45loglog(logn+0.25)+1.12)nlogn+n) は多項式時間の概算計算す
質問の意図や前提をくみ取れない糞質問 が多い。それで回答者が逆質問をしたり 悪口を言ったりする。それを前もって思 い描く力が絶望的に欠如してるに違いない。 スーパーハッカーだけが意図を理解できる。 レアなそういう神が颯爽と登場する予感。
質問です 4年ほど前にやっていたことがあって、再度VisualStudio2008C++EEを落としてみたんですが、色々変わったんでしょうか? 講座サイトを見ながらやっているんですが、新規作成→追加で「C++ファイル」ではなく「C++クラス」と出てきてしまいます 試しに作ってみると、.cppに初めから何か書かれているんですが…
260 :
デフォルトの名無しさん :2012/05/06(日) 14:26:27.52
変わりなし。 嫌ならコマンドラインでコンパイルしたら良い。
空のプロジェクトをチェックして ソースファイルフォルダ右クリックで追加すればいい
ありがとうございます、助かりました! .cppはその下に記述すれば良さそうですね。
n番目の素数の概算がでるから その前後調べて当たったら暗号無効化なの?
264 :
デフォルトの名無しさん :2012/05/06(日) 15:00:05.08
素数の個数と、素因数分解は別だろ。 暗号解読では素因数が判明しないとダメだろ。
じゃあ、複二次式で四次篩作ればどうなん?
素因数分解の結果をキャッシュしてるから、素因数分解なんか一瞬だ
267 :
デフォルトの名無しさん :2012/05/06(日) 15:21:11.34
268 :
デフォルトの名無しさん :2012/05/06(日) 15:25:46.00
無理。
2003 年の年末時点では素数と素数を掛けた数が 174 桁の数が、 100 台の業務用コンピュータで協調計算させて 3 ヶ月で素因数分解できることが実証されています。
一方、現在の RSA暗号 では一般的には素数と素数を掛け合わせた後が 310 桁にもなる数を用いています。
これでは、現在の数学で巨大な素因数分解を行うには、神をも味方につけた超人的な運を手に入れるしかないでしょう。
確率的には、残念ながら競馬やパチンコ、宝くじとは比べ物になりません。
http://www.maitou.gr.jp/rsa/rsa14.php
>>247 聞いてきましたわ。
579 名前:デフォルトの名無しさん [sage]: 2012/05/06(日) 01:28:04.90
画像処理の質問ではないな。
unionって知ってる?
unsigned longをbit配列と同意義で読み替えてやればいい。組み込み系でよく使う手法だがや
580 名前:デフォルトの名無しさん [sage]: 2012/05/06(日) 04:42:09.66
>>578 ビットフィールドでググれ
581 名前:デフォルトの名無しさん [sage]: 2012/05/06(日) 04:44:12.99
ただ速くしたいなら素直にビット演算としてSIMDで書いたほうが速いだろ
x^4-a^4=(x^2+a^2)(x^2-a^2) 使って四次篩作れば 310桁は4桁計算だけど? 二次篩でも17桁
271 :
デフォルトの名無しさん :2012/05/06(日) 16:31:58.50
しらねえが。 1024ビット=310桁の素因数分解が一定時間で安定して出来るアルゴリズムを開発したら 研究所や大学からお呼びがかかるだろう。
272 :
デフォルトの名無しさん :2012/05/06(日) 16:41:15.73
NTTら、768ビット合成数を一般数体篩法にて完全分解に成功 2010/01/08
NTTは1月7日、スイス連邦工科大学ローザンヌ校(EPFL)、独ボン大学、フランス国立情報学自動制御研究所(INRIA)、オランダ国立情報工学・数学研究所(CWI)との共同研究により、
素因数分解問題において、従来の世界記録である663ビット(10進200桁)を上回る、
768ビット(10進 232桁)の合成数に対して、一般数体篩法による素因数分解を達成したことを発表した。
NTTらは今回、700ビットを超す素因数分解を達成したが、これは将来的にRSA暗号で使われている1024ビットの素因数分解も
達成される可能性があることを示唆することとなり、より高い強度かつ効率的な暗号技術を利用する必要性が高まることを意味する。
研究内容は、巨大な合成数に対して現段階で最も高速な解法として知られている一般数体篩法を用いて実施された。
篩処理は、全体の計算量の大半を占めるが、比較的容易に分散計算可能であることから多数の参加組織により並列に計算を行った。
処理は主にNTT研究所、EPFL、ボン大、INRIA、CWIにある多種多様のPCやクラスタを用い、
全体でおよそOpteron 2.2GHz換算で1,500年かけたのと同程度の計算量を要した。
また、理論的に最も計算料を要するステップの1つである線形代数は、分散計算が困難であり、今回は少数のクラスタを利用し、
それぞれのクラスタの速度や空き時間が異なっていても効率的に計算できる手法を開発・利用。
NTT研究所およびEPFLのクラスタ、またINRIAはフランスにあるALADDIN-G5Kを効率的に用い、
filteringで生成された疎行列からなる連立方程式を解いた。
Opteron 2.2GHz換算でおよそ155年の計算量を要した結果、分解に利用可能な解が得られたとする。
その結果、最終ステップとなる平方根(代数的数の平方根の計算及び最小公約数の計算)では、
EPFLに設置された計算機を用いることで、数時間で以下の解を得たという。
なお、同結果を受けてNTTでは、NTT研究所にて暗号技術全般の安全性を継続的に評価していくとするほか、
次世代暗号として楕円曲線上の演算規則を利用した新しい公開鍵暗号方式「楕円曲線暗号」の普及にも努めていくとしている。
http://news.mynavi.jp/news/2010/01/08/055/index.html
273 :
デフォルトの名無しさん :2012/05/06(日) 16:49:32.43
275 :
デフォルトの名無しさん :2012/05/06(日) 17:09:31.65
一般・特殊数体ふるい法が現在最速ってあるし実際の記録更新もそれだが。
素因数分解 - Wikipedia
2005年5月、200桁の合成数 RSA-200が素因数分解される(一般数体ふるい法、Bahr, Boehm, Franke, Kleinjung)
2006年8月、10381 + 1 から67桁の素数が分解される(楕円曲線法、B. Dodson)
2006年9月、7352 + 1 の約数として現れる128桁の合成数が素因数分解される(一般数体ふるい法、情報通信研究機構、富士通、富士通研究所)
2007年5月、21039 ^ 1の約数として現れる307桁の合成数が素因数分解される(特殊数体ふるい法、NTT、ドイツのボン大学、スイス連邦工科大学との共同研究)
2010年1月、232桁(768ビット)(NTT、スイス連邦工科大学ローザンヌ校(EPFL)、独ボン大学、フランス国立情報学自動制御研究所(INRIA)、オランダ国立情報工学・数学研究所(CWI)。一般数体ふるい法。300台PCの並列計算処理。約3年)
改訂多重基底多項式篩法(MBPS2、Multiple Base Polynomial Sieve 2nd)
2006年8月に考案したMBPSの改良版。
本方式で世界記録に挑戦する。原理プログラムを作成し、現在は試作プログラムの作成中
試作プログラムが完成すれば、ほぼ計算量の予測が可能であるが、本方式で数年以内に1024ビットの
RSA暗号の解読は可能になると思われる。
MBPS(多重基底多項式篩法)に対して、多項式f(x)を法とし、素イデアル基底で分解できるイデアルの積
で作られるイデアルも素イデアル基底で分解できる、特長を利用した方法。
http://www.cs.t-kougei.ac.jp/nsim/RSA.htm GNFS176
2005年4月22日、我々のチーム(下記)は 11^281+1 の約数である 176桁の合成数を「一般数体ふるい法(GNFS)」で分解した。
http://www.rkmath.rikkyo.ac.jp/~kida/gnfs176.html
一人だけでも生き残ろうと…未来貯蓄銀会長密航試み逮捕
営業停止審査を受けている未来貯蓄銀行のキム・チャンギョン会長が4日、中国へ密航しようとしていたところを、
仁川(インチョン)港で海上警察に逮捕されたとSBSが単独報道した。
報道によれば、海上警察は逮捕したキム会長の身柄を不良貯蓄銀行捜査を担当する、
貯蓄銀行不正合同捜査チームへ送る予定だと伝えられた。報道によればキム会長は、
5日午前8時に予定されていた貯蓄銀行経営評価委員会に出席して、
営業停止前に最後の意見を陳述するようにとの金融当局の通知を受けた後、
中国へ密かに渡航しようとしていたことが分かった。
一人だけでも生き残ろうと…未来貯蓄銀会長密航試み逮捕
韓国語 [05/05]
http://news.donga.com/Society/3/03/20120505/46025772/1
2^n次篩で世界記録楽勝す 実験するのにはデータ型のビットを増やしたクラス作んなきゃ ならないけどめんどい
278 :
デフォルトの名無しさん :2012/05/06(日) 17:24:37.82
なんか色々インストールしなきゃならないからやだな Long long intなら確認済みだから良いや
280 :
デフォルトの名無しさん :2012/05/06(日) 17:49:32.41
調子にのって8乗してた訂正
二次篩 x^2-a^2=(x+a)(x-a) 複二次式で四次篩 x^4-a^4=(x^2+a^2)(x^2-a^2) 同様に八次篩、十六次篩。。。
以上桁は無意味
私は世界の鍵を持っているbyスイーツ w
>>269 なるほど、そんなのあったなぁ
ビットフィールドでやってますた
あ、十六次篩、二百五十六次篩か
コード的にsqrtのネストなので
指数は二倍ずつか
>>283 ある日突然道端のオヤジが公然わいせつオナニーを始めたところを想像してほしい
嫌だろ?
勘違いを訂正 ちゃんと判定出来るよ
2^n次篩だから桁は無意味だから 他の暗号方式を考えないとね
>>254 リンク先をいろいろ紹介していただいてはいるのですが、難しくて私には一生理解できないだろうと思います。
そこで申し訳ないのですが、巨大素数の原始根を求めるために素因数分解が必要となる道筋を、もしよろしければ教えていただけないでしょうか?
簡単に試行してはみたのですが、2^31 で丸一日かかる有様です。あと手を打つとすればマルチスレッド化でしょうが、手元のは屁ノムx6 だしなあ。
http://ideone.com/In1SB (java でごめんなさい)
なお全部の原始根を求める必要はなくて 300〜500位のものが数個手に入ればいいかと思います。
だからC/C++じゃないならよそでやってくれと
素因数分解ならn次篩使えば出来るよ ソース見てわからなかったらゴメン
二次篩をネストしただけだから
2ch初心者も歓迎するスレです
297 :
デフォルトの名無しさん :2012/05/06(日) 23:50:19.40
>>292 たとえばp-1= 7*11*13として3が原始根を確かめるには。(pは素数でないから例として良くないが)
ラグランジュの定理から、p-1の全ての約数x(p-1を除く)に対して、3^x ≠ 1 (mod p)であることをいえばよい。
具体的には、3^(7*11) ≠ 1 (mod p)、3^(11*13) ≠ 1 (mod p)、3^(7*13) ≠ 1 (mod p)でいい。
ラグランジュの定理 (群論) - Wikipedia
G を有限群とし、H を G の部分群とする。このとき、H の位数は、G の位数を割り切る。
298 :
デフォルトの名無しさん :2012/05/06(日) 23:55:25.56
>>292 簡単に言えば、Z/pZの元 aのn乗が1となるのは、nはp-1の約数に限る。(ラグランジュの定理)
p-1以外では1とならなかったら原始根。
>>297 なるほど、定義どおりにいけば、n が p について原始根であるかどうかをみるのに、現状では
n^1, n^2, n^3, ... n^(p-2) について 1 (mod p) をみなければならない
ところが、教えていただいた方法では
p - 1 の約数についてのみ、と個数を絞り込むことができる
のですね。仮にメルセンヌ素数 2^1279 - 1を目標にすると、
2^1279 - 1 = 2(2^640 + 1)(2^320 + 1)(2^160 + 1) .... (2^5 + 1)(2^5 - 1)
まで因数分解できるので、個々の因数を素因数分解していくと、チェックしなければならない場合の数が激減しますね。少なくとも 2^1279 とおり、ということはないはず。
あとは何が原始根の候補となりうるのかが判別すればいいのですが、これは、
>>292 でも使用しているのですが、計算量が増えるにしても 2 から順次チェックするのが絞り込みやすいのかもしれません。
しんどいですけれども。
>>299 ×n^1, n^2, n^3, ... n^(p-2) について 1 (mod p) をみなければならない
○n^1, n^2, n^3, ... n^(p-2) について 1 (mod p) とならないことををみなければならない
301 :
デフォルトの名無しさん :2012/05/07(月) 02:01:22.14
>>285 話がまだ続いているから、こっちに移動してもうちょっと詳しく質問してよ。
画像処理 その13
http://toro.2ch.net/test/read.cgi/tech/1301896601/ 582 名前:デフォルトの名無しさん [sage]: 2012/05/07(月) 01:09:44.70
>>579 処理系依存だがや
583 名前:デフォルトの名無しさん [sage]: 2012/05/07(月) 02:54:26.37
処理依存の回答を求めているからだろ。だからもっと依存の強いSIMDのようにハードリソースに合わせたソフトのつくりはアリだと思う
unsignd longは固定64bitと書いてあるように読みとれないか?処理系が変わると大元設計から変えるんだろうね。
えっと、、だがや
n次篩使えば桁は無意味なのに
いい加減篩廚は別スレ立ててやれや
四次篩 x^4-y^4=(x^2+y^2)(x+y)(x-y) と分解したときにnの因数が()3つに分配されることを期待して gcd(n,x+y) からnの約数を見つける 同様に八次篩、十六次篩...ができる
冷静になって考えたら二次篩でも四次篩でも演算回数同じだった
二次篩で既にnによらない演算時間だった
>>292 二次篩でいいよ
n=3937
√3937≒63
63^2-n=32=2^5
64^2-n=159=3*53
65^2-n=288=2^5*3^2
(63*65)^2≡(2^5*3)^2(mod n)
gcd(n,63*65±2^5*3)=31
これを実装したよ
309 :
デフォルトの名無しさん :2012/05/07(月) 11:50:11.99
310 :
デフォルトの名無しさん :2012/05/07(月) 12:11:03.30
いい加減にしろ
二次篩だったから俺の考えてたより遅いよ
>>302 そのスレのは私自身が書き込んだレスじゃないんですが・・・
だれか貼っつけた人が収拾してください
学が無くてもそれなりに語れるネタに狂喜乱舞て状況だな
スレタイ100回読め
【韓国BBS】台湾人は日本が好きで韓国を嫌う、その理由は?
韓国のコミュニティサイト「ガセンイドットコム」の掲示板に「台湾人たちが、日本が好きで韓国嫌いな理由は?」とのスレッドが立てられたところ、さまざまな意見が寄せられた。
スレ主は、台湾人は韓国と日本の好き嫌いがはっきり分かれていて、韓国は嫌いだが日本がとても好きだとの記事を紹介した。
スレッドには、その理由について「日本と台湾が島国同士だからではないか」との意見が数多く見られた。
・「台湾や日本は両国とも島国で、韓国を困らせるのが趣味。しかし台湾がいくら困らせてようとしても、韓国はあまりにも強くて賢くて倒れない」
・「島国どうしなので、傾向が似ているから惹かれあうのでは。どちらも内部の問題を外部のせいだとか方便を使う」
・「島国は島国どうし仲良くするのが好き」
・「私たちはできるなら台湾や日本の物を使わないことにしましょう。むしろヨーロッパやアメリカの製品を使用しましょう」
http://news.searchina.ne.jp/disp.cgi?y=2012&d=0508&f=national_0508_070.shtml ◆台湾が韓国嫌いな本当の理由はこれ
韓国は「我々は薄情な裏切り者の日本とは違うから台湾との国交は永遠に断絶しない」と言っておきながら
台湾に公用車として5万台の不人気韓国車を売りつけ、代金を受け取ると同時に、台湾と国交を断絶し中国との国交を結んだ。
しかも韓国の新聞やTVはこれを「韓国の大勝利」「慌てふためく台湾」と馬鹿にして煽り、
ソウルや釜山にあった中華街を様々な規制や嫌がらせで潰し台湾系華僑を追い出した。
その後も韓国は何十年も台湾を攻撃し続けた。
・韓国は、アジアスポーツ大会の主催国争いにおいて、「台湾が権利を譲らなければ大会から台湾を追放する」と恫喝した。
・韓国は、「台湾は国家ではないので参加させない」と国際会議などで台湾を閉め出すなどの行為をしてきた。
・韓国は、台湾が国連やIMFなど国際機関へ加盟することに反対した。
・韓国は、1997年にデフォルトしIMF管理下に入ると台湾に対して「両国間の国家改善のため」といって100億ドルの資金援助を要求した。
>>316 C/C++以外のことも勉強になるな。
でも、スレチだろ。
318 :
デフォルトの名無しさん :2012/05/10(木) 06:57:15.84
アルゴリズムを実装してるのですが、二分木のrightとかleftが大量に出てきて、 しかも同じ内容の箇所をright用とかleft用に書き直しなので、マクロとかで上手くかけないかと思ってます。 func1() { tree->left = tree->right; tree->left->left = tree->right->right; } func2() { tree->right = tree->left; tree->right->right = tree->left->left; } たとえば上記のような2つの処理を書かないと駄目なとき、 funcX(A,B) { tree->A = tree->B; tree->A->B = tree->B->B; } と書いて funcX(right,left); funcX(left,right); とかやりたいのですが、やり方はないでしょうか。元のtreeのメンバを配列にするのは できないです。
treeにl()とr()を実装
treeの構造も書かずに聞くかよ。 例えばこんな手はあるぞ。 struct tree { type * data; struct tree * left; struct tree * right; }; ↓ struct tree { type * data; struct tree * sides[2]; }; enum {Left, Right}; これなら、 funcX(int a1, int a2) { tree->sides[a1] = tree->sides[a2]; } みたいに書いて funcX(Right, Left); みたいに書けるぞ。
質問の意図や前提をくみ取れない糞質問 が多い。それで回答者が逆質問をしたり 悪口を言ったりする。それを前もって思 い描く力が絶望的に欠如してるに違いない。 スーパーハッカーだけが意図を理解できる。 レアなそういう神が颯爽と登場する予感。
なんだろうね、少し前にもあった、この奇妙な改行感は。 行の短さも考慮すると、 コードが大量に出てくるこの板を、携帯で読んでるのかね。 バカじゃないの。
少なくともtreeの構造は必要だな
>質 問の意図や前提をくみ取れない糞質問 >が 多い。それで回答者が逆質問をしたり >悪 口を言ったりする。それを前もって思 >い 描く力が絶望的に欠如してるに違いない。 >ス ーパーハッカーだけが意図を理解できる。 >レ アなそういう神が颯爽と登場する予感。
こんなのとか template <bool Swap> struct LR { Tree* operator()(Tree* parent) { return Swap ? parent->right : parent->left; } }; template <bool Swap> void funcX() { LR<Swap> Left; LR<!Swap> Right; Left(tree) = Right(tree); Left(Left(tree)) = Right(Right(tree)); } メンバ変数ポインタを使ってみたりとか template <bool Swap> void funcX() Tree* Tree::*left = Swap ? &Tree::right : &Tree::left; Tree* Tree::*right = Swap ? &Tree::left : &Tree::right; tree->*left = tree->*right; tree->*left->*left = tree->*right->*right; }
上のoperator()は&が抜けてた。正しくはこうね Tree*& operator()(Tree* parent) { 下は書き間違いが起こりやすそう、最適化が効きにくそうで微妙かも。
328 :
デフォルトの名無しさん :2012/05/10(木) 11:17:15.73
Treeの構造はこんな感じです。(本当はもっと名前が複雑で長い) class Tree {Tree* right; Tree* left;} bool使ったTemplateは複雑な条件に対応できにくそうで、配列はメンバを書き換えないと駄目なのでむりです。 そこでdo {}while(0)のマクロを使って #define macro1(right, left) do { \ t-> ##right = s-> ##left; \ } while (0) とかで書きました。
331 :
デフォルトの名無しさん :2012/05/11(金) 01:59:16.78
テンプレートでかけるとは。 すごい
332 :
デフォルトの名無しさん :2012/05/11(金) 02:26:59.71
「テンプレートでかけるとは。 」 と思うほうが、すごい
うん
334 :
デフォルトの名無しさん :2012/05/11(金) 06:27:13.96
テンプレートでポインタとか使えるとか知りませんでした。
テンプレートがどこに出かけるの?
スムーズに動く2Dアクションを作ろうと思うんですが、マップってある程度(8ドットくらい?)ブロック単位で配列を置くだけでいいんでしょうか? その場合、マップが広いとやたら長くなりそうなんですが…
337 :
デフォルトの名無しさん :2012/05/11(金) 15:12:33.62
C++はなんでも作れるって先輩から聞いていたんですが 入社4年でなんとか、使えるようにはなったんですが 未だに彼女が作れません。 本当に作れるんですかね?
ニ値元の彼女なら作られるっしょ
339 :
デフォルトの名無しさん :2012/05/11(金) 16:29:20.43
>>337 class Kanjo{};
みたいなクラスを作って、
Kanjo misaki;
vector<kanojo> v(make_kanojo()); for_each(v.begin(), v.end(), do_something());
bool Kanojo::Check(class Otoko);
bool Onna::Fuck(class Otoko);
VC++ですが引数つきマクロに,を含む型を正しく渡したいのですが
いい方法はありますか?
http://codepad.org/S13HXRbC macro "MAKE_VAR" passed 3 arguments, but takes just 2
をtypedef以外でなんとかしたい、ということです
よろしくお願いします
無い typedefしろ
>>345 即レスありがとうございます
おとなしくtypedefすることにします
347 :
デフォルトの名無しさん :2012/05/12(土) 07:50:52.50
質問です。 あるキーワードが与えられると、それに対応する関数を実行するというプログラムがあります。 以下のような、関数ポインタとキーワードがセットになった配列で管理されています。 struct { void (*pFunc)(); char keyword[256]; } funcTable = { { &FuncApple, "APPLE", }, { &FuncOrange, "ORANGE", }, { &FuncLemon, "LEMON", }, }; さて、これを可能な限りクラスに置き換えたいと思います。 Fruitクラスを親として、Apple、Orange、Lemonといった子クラスを用意したのですが、 これを配列に収めるにはどうしたら良いでしょうか。 もちろん、ifで1つ1つ分岐させて、それぞれについて new を記述すれば今の自分にも出来るのですが 子クラスの種類が増えると面倒くさそうな気がします。
>>347 >>347 struct funcTable を C でどのように使いたいのかサンプルをひとつみせてほしい。
C++ のクラスだからといって劇的に改善されるわけではない。
>>348 現状こんな感じ。
Match()は、キーワードマッチをする関数だと思ってほしい。
//funcTableをなめる
for(int i=0; i<sizeof(funcTable)/sizeof(funcTable[0]); ++i)
{
//キーワードマッチしたら、該当の関数を実行
if ( Match ( inputKeyword, funcTable[i].keyword ) )
{
funcTable[i].pFunc( ); //←関数ポインタ
break;
}
}
この関数ポインタの部分を、なんとか出来ないかなって。
ナニがしたいのか意味不明なのでそこらへん推敲して出直してください。
>>350 普通にif文で書くなら、
Fruit *f;
if (条件1) f = new Apple();
else if (条件2) f = new Orange();
else if (条件3) f = new Lemon();
:
:
f->Hoge();
という感じになると思うんだけど、
数が増えるといちいちifで書いてられないので、何かスマートな方法が無いかなと。
その似非オブジェクト指向臭いコードよりも>349の方が自然じゃないか。
>>352 そういうものかなー?
1人で考えてると何が自然なのか分からなくなってくるね(´・ω・`)
ただまあ、1つの条件式(キーワード)つき、複数の関数ポインタをセットしなきゃならないような場合、
例えば初期化処理と、ルーチン本体と、終了化処理などがある場合だと、全部書かなきゃならないのは不便かも?
それだったら、関数ポインタを構造体に纏めるだろ。 で、初期化が必要だったりしたらクラスにしてメンバー関数にするとか。 そういうアプローチはオブジェクト指向とは違うけれど、自由度は高いんじゃね。
キーワードとフルーツの対応表を作るだけだよな?
347が要求を満たすなら文字リテラルとの比較でそもそも文字列のまま比較する意味が無い マジ推敲しなおせや
考えてるうちに、関数ポインタ+FactoryMethodパターンあたりの組み合わせで行けそうな気がしてきた。
>>354 実際に関数ポインタを書かなきゃならないのは変わらないけど、
それを構造体にまとめることで、外側(対応表)に出る情報を抽象的&減らそうってアプローチね?
>>355 うん。それをどうしたら実現できるかなって。
>>356 詳しく。
>>347 意味分からんです
>>349 >> この関数ポインタの部分を、なんとか出来ないかなって。
typedefするぐらいです
>>351 349の内容と違いますよね
線形探索が嫌なら適当なコンテナにでも詰め込めばいいです
>>357 >>347 を移植するのに、Factory使う人はいないですし
数ポインタの部分を、なんとかしたかったのでは?
>>347 std::map<std::string, std::function> でおしまいな話じゃないの?
(std::function が使えないなら boost::function で。)
>>347 >さて、これを可能な限りクラスに置き換えたいと思います。
IDが無いからどれが質問主のレスなのか追いづらいんだが
もともとの要点は関数を書いているところをクラスに置き換えたいって話だよね?
クラスインスタンスを返す関数にすれば同じ意味になるんじゃない
struct { Fruit* (*pFunc)(); char keyword[256]; } funcTable =
{
{ &Apple::StaticCreateInstance, "APPLE", },
{ &Orange::StaticCreateInstance, "ORANGE", },
{ &Lemon::StaticCreateInstance, "LEMON", },
};
実際はmap使うなり文字列を定数化するなり効率化した方がいいと思うけどね
初歩的な質問ですいません。Visual C++ 2010 ExpressでFindFirstFileを利用しようと
下記ページを参考にして、cpp内にvoid Dofind()という関数を作ったのですが、
WIN32_FIND_DATA fd;
HANDLE hFind;
などがC2065定義されていない識別子です。とエラーが発生してしまいます。
下記ページ記載の関数以外に何かを定義しておく必要があるのでしょうか?
http://nienie.com/~masapico/api_FindFirstFile.html
364 :
デフォルトの名無しさん :2012/05/13(日) 11:19:42.51
windows.h
助かりました。Windows APIを利用するためには、 windows.hをインクルードしてあげる必要があるんですね。 ありがとうございました
これってちゃんと宣言されてないんでしょうか? main.cpp void Reset(); reset.cpp void Reset(){ int a[5] = {0,0,0,0,0}; a[0] = SRand (12); } こうやってるんですが、定義されていない識別子です。と出てしまいます ヘッダはちゃんと記入してあります
>>366 .cpp に宣言だけ書くのはおかしいしヘッダがちゃんとしてても #include してなけりゃ意味が無い。
エラーも Reset について出てるのか SRand について出てるのか・・・
変に省略してあるようで状況がよくわからん。
内容はなるべく省略せずに、エラーメッセージはそのままコピペしろ。
>>367 すみません、エラーは
a[0] = SRand (12);
のところで「'a' : 定義されていない識別子です。」と出ました
main.cpp
#include "reset.h"
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), SetMainWindowText("ランダム"), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK );
void Reset();}
reset.h
void Reset();
reset.cpp
void Reset(){
int a[5] = {0,0,0,0,0};
a[0] = SRand (12);
}
ちゃんと書くとこんな感じです
//reset.cpp #include "reset.h"//これ忘れてる? void Reset(){ int a[5] = {0,0,0,0,0}; a[0] = SRand (12); }
>>368 a は直前で宣言されてるし、その内容が正確だとすると main.cpp でも WINAPI やら
DxLib やらでエラー出るだろうし、まだ状況が伝わってこない。
int a[5]とa[0]の綴りがことなってるとしか
要は、エラーが出るコードをそのまま貼れ、と。
mainの最後のvoidって
・mainの引数 ・mainの最後のvoid ・なんでカンマで文をつなげる エラーの出るソースコピペしてない?
コード関係ないとこでエラー出てるんだろ 初心者にはよくあること
そして自己解決してお礼も言わずに去っていったと
>>374 つまらんツッコミですまんが、その3つ自体は文法上は問題ないじゃん
(windows.hをincludeしてないからコンパイルエラーになるけど)
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ ChangeWindowMode(TRUE), SetMainWindowText("ランダム"), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK ); void Reset();} ↑ void Reset();ってなんだよ 関数実行するなら Reset();単体だろ
30時間かかってようやく答えめいたモンが出たか
>>279 は優秀だな
84点くらいはやろうか
それに引き換えそれ以前のアホは0点んだ0点
味噌汁でツラ洗って出直してこい
>>378 なんてエラーになるの?ただの関数宣言で通るんじゃないの?
二重定義
>>382 ただの宣言を定義だといってエラーにするコンパイラがあるのか?
コンパイラの名前とバージョンを晒せ。
385 :
368 :2012/05/15(火) 00:38:37.67
初心者すぎたのでいろいろ試してたんですが、仰る通りmainのvoidが原因でした ありがとうございました()
ねーよ
> ありがとうございました() オイオイ こんなのに笑われてんぞw アホ共ww
なんか最近キチガイがいるな
同感だ > ありがとうございました() なんて使ってる368が一番の基地外ゴミカスだ マジ本人だったら最悪だろこいつ もう二度と来なくていいんじゃね?
開発者の意図を汲み取れないコンパイラの欠陥であり、 言語仕様そのものの欠陥でもある
そうだな脳波をコンパイルできるようにすべきだな
むしろ脳みそをコネコネと
あばばばばば
iphoneは送信の横に()があるからミスだろ 俺もたまにやる
BB2C?はマイノリティか
俺が3億円寄付したからその倍か
複数の純粋仮想関数を持つ抽象クラスから派生し、独自の変数やメソッドを持たない子クラスを大量に宣言する場合、 子クラスの宣言をマクロにしちゃうのってアリ? #define CHILD(T) class T :public ParentClass { 〜 } って感じで。もしくは他に楽に書ける方法ある?
エクセルでポトペタかな (自称)プロは忌避するだろうけど
そんな用語が。 ありがとう、ちょっと調べてみる。
>>398 マクロだと改行がメンドイから可変部をマクロ定義した上で #include するファイルを作ったほうが
いいかもしれない。
おめーの理解力が足りないだけ
401が何を言いたいのかわかんない
書いてある通りでしょ。 理解できないのは、想像力が足りないから。
書いてある通りのメンドイコード例を示してみてよ
行末
401がメンドイと書いているのは「マクロの改行」ね
ためしに書いて見れよw include駆使した効率的なコードとやらを
本当にバカだな。
> マクロだと改行がメンドイから可変部をマクロ定義した上で メンドイといいつつ結局マクロなんですね > #include するファイルを作ったほうが > いいかもしれない。 直接書いても別ファイルに書いても書く内容に変わりはないですよね
// ChildTemplate.h class CHILD : :public ParentClass { // \ で繋ぐ必要も無いし // 行末コメントも使い放題 // ... // コンパイルエラーへの対処もしやすい }; // Childs.h #define CHILD ChildA #define ... include "ChildTemplate.h #define CHILD ChildB #define ... #include "ChildTemplate.h #define CHILD ChildC #define ... #include "ChildTemplate.h #define CHILD ChildD #define ... #include "ChildTemplate.h
各行に\が必要ってのが、修正等でどれだけ面倒か 想像もできないのか? 空行すら入れられないし、行末にコード追加も出来ないし デバッグで#if 0も不可なんだぞ。 別ファイルにすれば、「普通のコード」を書くだけだろ 個別に変えるシンボル名を#defineしてから#includeするだけ。 「普通のコード」だから、必要ならば#ifdef系の条件コンパイルも出来る。 当然だけど、#includeは複数回可能だし。
>>411 「関数形式マクロ」と「単純置換のマクロ」があることはご存知?
んなメンドイ事するくらいなら template <int U>class CHILD:public ParentClass{〜}; typedef CHILD<0> A; typedef CHILD<1> B; これで十分じゃん?
マクロが嫌でマクロ書く
あるある探検隊
プログラマーは、楽をするための努力はおしまないものです(キリッ
ちょっと変な質問をさせてください Borland C++で5年ほど前にコンパイルできていたものを、先日久しぶりにビルドを試したらエラーが出て失敗してしまいました エラー内容はE2134・E2139・W8070などが出ましたが、ソースを見る限り不審な点を見つけられませんでした なにぶん昔の話なので覚えていないのですが、多少のエラーなら無視して強引にビルドしてしまうような方法を使ったような… 強制ビルドするような方法があったらご教授ください よろしくお願いします
エラーコードだけで分かるかよ
423 :
デフォルトの名無しさん :2012/05/23(水) 02:54:39.32
強制ビルドなんて無理。 エラーを修正してビルドせよ。 強制したいならエラー部分を手動で削除。
質問の意図や前提をくみ取れない糞質問 が多い。それで回答者が逆質問をしたり 悪口を言ったりする。それを前もって思 い描く力が絶望的に欠如してるに違いない。 スーパーハッカーだけが意図を理解できる。 レアなそういう神が颯爽と登場する予感。
また変なのが湧いてる
>>423 そうですか、ありがとうございました
…だとすると、このexeどうやって生成したんだろう…謎だ…
生成日を確認してみなー 修正履歴も探ってみなー
ウィンドウレイヤーを作っているのだけど
そうか
>>421 5年前にビルドした時とOSとかの環境は変わってない?
変わってないなら5年前もエラーが出たはずだろ
でも寝かせておくとエラーが消えることがあるってのも、事実だよね…
本番環境になるとなぜか出現する奴とかなーw あほかっ!
脳内デフラグで自己完結しても それを反映させなきゃ変化はないよねー
>>434 なんかのエロゲーを遊んだあとじゃないと動かないアプリ
とかあったよ
深夜だとかっこいいアルゴリズムを思いつくというのはあった
翌朝になるとなぜそう書いたか思い出せない
自分が経験したのは、オブジェクトファイルだか何だったかが 何故か更新されなかったというのがあったな。 翌日ビルドしたら通った。
ファイルを開いたまま握るタイプの糞エディタでビルドログを開いたままビルドして、 ビルドできないと反日悩む馬鹿なら知っている。
>>439 普段の書き込み内容がわかる誤変換だなw
__LINE__や__FILE__で与えられる文字列を、関数(またはマクロ関数)に投げたいのですが、 呼び出し側で毎回指定する以外の方法で、実装することは可能でしょうか。 もしくは同等の機能でも構いません。 例えば別のどこかでLog()という関数が定義されてるとして、 main.cpp内でLog()を呼んだとき、このLog()側から「main.cpp」や行番号という情報を扱えるか、ということです。 もちろんLog(__FILE,__LINE__,〜) とやれば済むのですが、あちこちで使う場合ちょっと面倒かなと。
>>442 こうやるとか
#define Log(foo) _Log(__FILE__, __LINE__, foo)
void _Log(char *file, int line, char *foo){ /* ... */ }
>>443-444 出来た! ありがとう!
組み込みマクロが展開されるタイミングを勘違いしてたよ。
試しもせずに先入観で否定するのは良くないね。反省。
そして今の環境だと可変長引数のマクロ関数には対応してないようだ(´・ω・`)
必要なときにだけsprintfするか。
(`・ω・´)
(´・ω・`)
スプリントゥフ
組み込みマクロが展開するのってマルチバイト文字列だからUnicodeだと困ったことに
10時間ぐらいかけてもコアダンプされるが原因が分からず聞こうと思ったらやっと見つかった・・・ 人に説明するために、この原因はないです。この原因はないです。って一つ一つ整理してたら ループ内で一要素分だけ動的に確保したメモリをオーバーランしてたことに気づく 結果おかげさまで解決しました、ありがとうございました
よかったですね
おめでとう!
メインクラスで宣言した変数を他のクラスで使いたいんですが、グローバル変数を使えばいいんでしょうか? int a:だけだと宣言されていないと出てしまい、使い方がイマイチ分からないです
>>453 public でもつけとけ。
こんな質問する程度のお前がが作るソフトに継承、カプセル化、ポリモーフィズムも
関係ないだろうからw
#define private public
レディ
あ、さっき乙姫とあってたから時間がおかしいみたいだ。すまん
>>459 本格的なものを作りたいんですよ
C#みたいな、お遊びは時間の無駄じゃないですか
462 :
453 :2012/06/01(金) 17:14:17.02
調べてもたいして重要じゃないのか出てこなかったんで助かりました 煽りはお決まりなんでしょうか?ともかくありがとうございます
463 :
デフォルトの名無しさん :2012/06/01(金) 17:29:32.00
Windows8に代わるOSを作りたいのです
目標を高く持つのは結構だが まずはベクターあたりに載るのを目指したらどうだね
469 :
デフォルトの名無しさん :2012/06/01(金) 18:47:56.02
ベクターは自己申告だろ。ウイルス入りは弾かれるかもしれん。
それでも何もしないサンプルアプリそのままとかはダメじゃないか?
つーか、C#で喰ってますが何か。
別に
ここはC++スレです
質問です
Windows/VC++10の環境で、libファイルにリソースを埋め込んで使いたいのですが、
LoadResource等の返り値がNULLで、読み込みに失敗していているようです
http://ideone.com/40dyA こんなコード感じのコードなのですが、原因がわかる方居ませんか?
exeとdllだけ
>>475 あ、そうなんですか……
ありがとうございます
CやC++のリファレンスをダウンロードできるサイトとかありませんでしょうか? 例えばPHPのマニュアルのようなものです 自分、暫く海外へ行くもので、ネットに接続出来ないかもしれないのでオフラインで確認したいと思いまして
478 :
デフォルトの名無しさん :2012/06/02(土) 21:33:03.79
質問です。 C言語で大抵のコンパイラでは、グローバル変数は0で初期化されます。 これは ANSI C の規格で定められているのですか?
はい。
組み込みだとそうでもなかったりする。
デバッグしやすいように0以外で初期化してくれたり
一回しか作られないものはちゃんと値初期化。 何度も作られるものはめんどいので放置。 こういう覚え方で。
>>487 まあそういえなくもないが‥‥やはりプログラムのロードやメモリ配置をここで言及するのはいかんのだろうか?
スタック上のものはプログラム開始時に存在しないので初期化はない。
それ以外のものはプログラム開始時に存在し初期化する。
しかしmalloc() で確保した領域はプログラム開始時にあるものではないので初期化しない。
calloc
mallocでおじゃる
いきなりで悪いけど、exturnって一人で管理する分にはガンガン使っていいんだよね? 複数人だと宣言が被ったりするから気をつけないといけないだろうけど、苦cってサイトに控えろって書いてあったから気になった
1人でもうっかり被ったりすることはないとはいいきれない でもまあほとんどないだろうから使いたければ自由に
>>492 関数にexturn → 付ける必要無し
変数にexturn → グローバル変数をガンガン使うな
exturn exturn exturn
GUIプログラム初心者なんですが質問させてください 定期的にメッセージボックスを出すだけのプログラムをかいてみたんですが これだけだとタスクマネージャーからプロセス終了しないと終了できないので Shell_NotifyIcon というのを使えばいいといわれたんですが hWndとm_hIconに設定する値がわかりません… 根本的に使い方がまちがってるんでしょうか… #include <windows.h> int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { NOTIFYICONDATA notif; notif.cbSize = sizeof(NOTIFYICONDATA); notif.hWnd = m_hWnd; // エラー notif.uID = 0; notif.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; notif.uCallbackMessage = WM_TRAYICONMESSAGE; notif.hIcon = m_hIcon; // エラー lstrcpy(notif.szTip, TEXT("TEST")); Shell_NotifyIcon(NIM_ADD, ¬if); while(1) { MessageBox(NULL, TEXT("test"), TEXT("test"), MB_OK | MB_TOPMOST | MB_SETFOREGROUND); Sleep(60 * 1000); } }
メッセージボックスをOK キャンセルにして、キャンセルなら終了
レスありがとうございます それだとメッセージボックスがでてるときにしか終了できないですよね… いつでも終了できるようにしたいんですけど…
Shell_NotifyIconが何をするものか理解してるの? 単に追加すればいいってもんじゃないよ タスクトレイに表示したいアイコンは? タスクトレイで操作したメッセージは誰が処理するの? ググればサンプルが出てくるから頑張れ
やっぱり根本的に理解してなかったんですね… 数行追加するだけでタスクバーに表示されるのかなと思ってたんですが イベント関連のことが説明やサンプル読んでもぜんぜん分からないので そのへんから理解していかないとダメみたいですね… 答えていただいた方ありがとうございました
Sleepで待つのも異様だからもっと勉強しなさい
Sleepは目的が1分ごとなのか1分間隔なのかにもよるし この程度のトイプログラムならタイマーイベント使って微妙なタイミングで下手にエンバグするよりシンプルでいいんじゃね
いつでも終了できるようにしたい (タスクマネージャからプロセスを殺すのは不可) メッセージボックスが でていない時には タスクトレイ経由 SYSMENU 〜 終了へ でている時には メッセージボックスのキャンセルで こういう条件だとタイマーやスレッドを使いたくなるな
そもそもSleepしてる間、何の応答もできないし
メッセージボックスが出てる間もカウントするかどうかも ちょっと退席してる間にメッセージボックスだらけになるんじゃないか?
まあどっちにしろイベント処理を理解してないと難しい 逆にイベント処理を理解すればタイマーも使えるだろ
そもそも、そのメッセージボックスは何の為に出すんだ? つーか、先ずは基礎からと考えて、ウィンドウを一つ出しておく方法で実装してみることをお勧めしたい。
普通にi使えばいいのに iが1000になったら表示とかで
GUIプログラム初心者の質問いつまで引っ張ってんだよww 入門サンプル見て勉強しろで終わりだろw
なんで初心者ってGUIから入るんだろうね 正直GUIなんてどうでもいいよな
そりゃGUIアプリを作りたいからだろう
ただ、最初からGUIアプリを作りたいならC/C++を選ぶのは茨の道だよなw
そうか? VC++ならマウス操作だけで、カッコいいVisualStudioライクのGUIが即できるぞ
>>496 はたぶん C/C++相談室から誘導されてきたんだろうけど
あっちのソースみる限りアルゴリズム自体はそれなりにかけるんじゃないかな
UNIX系で勉強していきなり Windows APIは C++ といってもまったく別言語だよな
大学なんかで習ってるなら Java あたりで GUI 覚えてからの方が普通だしな
>>496 ですけどあの後もいろいろレスいただいたみたいでありがとうございます
>>501-506 タイマーは使ったことないですけど仕組みは何となくわかります
ループ1回分の処理を別関数に分けて
何秒後にその関数を呼び出すように登録するようなライブラリがあるんですよね…
とりあえずもっとクリティカルなところでつまずいてたので…
そこが解決したらタイマーも使ってみることにします
>>507 別にそれでもいいんですけど現状覚えたのがメッセージボックスだけで…
C++相談室の方でさきに質問したら Shell_NotifyIcon を進められたんです
メッセージボックスを2つ出せれば解決しそうなんですけど
入力待ちをブロックせずに2つ出すことってできるんでしょうか…
>>511 人に頼まれたプログラムなのでGUIの方がいいかなと…
あとVCは完全にはじめてですがGUI自体は Java なら軽く AWT 習いました
理解してるわけではないんですがテンプレの処理とどのメソッドにとんでくるか覚えてるだけですけど
いろいろサイトみてみたんですけど…
Visual C++ は動かすための最小セットが長すぎてすぐに理解できないんですよね><
どこまでがテンプレでどこまでが追加されたコードなのかっていうのが…
GUIのイベント処理理解するための入門サイトみたいなのがあれば知りたいんですけど…
なんでやねん。Javaほど簡単じゃないけど、やってることの基本は簡単だべ。 関数はたった2つ、main関数とコールバック関数(関数名は自由)。 main関数の仕事はたった2つ。 自分自身が何者であるかをOSに登録して無限ループに入るだけ。 これはもう定型文なのでほとんどコピペ。 コールバック関数はOSから呼び出されるたびに、 引数のひとつであるWindow Message(単なる整数)の値に応じて処理を分岐するだけ。 これはイベントドリブン型のプログラムではたいてい同じロジックだから 言語ひとつ知ってれば全部応用できる。 MFCは複雑だけどね。メッセージループがワークフレームの中に隠れてたりするし。
まあ単純にコード行数の問題じゃね 確かに VC++ で挿入されるテンプレみたら初心者はやる気なくす 俺も最初はそうだった あと Java は興味あるイベントリスナーだけを登録しておけば イベント内容に応じて分かりやすい関数名にとばしてくれるからな イベントディスパッチを自分でやるって違いだけなんだけど switch 文に見慣れない変数がずらずら並んでると難しく見えるのも分からないでもない
本当はwinapiスレ行けと言いたいがどうなんだろうな
環境依存か
質問よろしいでしょうか? 知り合いとプログラムをつくっているのですが 知り合いが new した int配列を mapの中にいれて、eraseでメモリの開放できているといいます。 私がメモリのリークチェックで確認したところ 未開放の情報が出力されるのですがeraseで本当に削除されるのでしょうか? それともlist::pop_frontみたくmapの中の要素リストから排除するのみなのでしょうか?
自分でdeleteしてね
ですよね ありがとうございます。
std::map<x, std::vector<y> >これアリなんだっけ
もちろん
>>521 何の証拠もなしにできているとほざく知り合いは死ぬべき
だよな そういうやつがよくわからないバグを生み出す原因だったりするよな
リークしてることを証明すればいい
Thread32First/Nextで列挙したスレッドが 特定のDLLで開始されているか調べるには どうしたらいいですか? 開始アドレスをNtQueryInformationThreadで 調べるというのは見つけたのですが、 それが特定のDLLのものか、どう調べれば良いですか?
CreateToolhelp32Snapshot(TH32CS_SNAPMODULE)でプロセス内のDLLを列挙して DLLからエクスポート関数を列挙して プロセス内のDLLアドレス+関数の相対アドレス == 開始アドレス もしくは GetProcAddress(dll,fname) == 開始アドレス で比較したら 分かる・・・かもしれない やったことないけど
532 :
片山博文MZボット ◆0lBZNi.Q7evd :2012/06/05(火) 13:19:34.63
>>531 それじゃエクスポートしていない関数じゃできないじゃん。
質問が分からないがスレッドがどのプロセスに属するかどうか?
>>532 DLLベースアドレス <= 開始アドレス < DLLベースアドレス+DLLサイズで
分かるんじゃね?
>>533 Process Explorerでプロセス内のスレッド一覧見ると
Start Addressに
gdiplus.dll!GdipGetVisibleClipBoundsI+0xad4
firefox.exe+0x1bf9
とか表示されるから、そういう情報を取りたいんだと思う
質問の意図や前提をくみ取れない糞質問 が多い。それで回答者が逆質問をしたり 悪口を言ったりする。それを前もって思 い描く力が絶望的に欠如してるに違いない。 スーパーハッカーだけが意図を理解できる。 レアなそういう神が颯爽と登場する予感。
そのコピペは1スレに1回までにしてください
ありがとうございます。
>>531 >>532 とりあえず、エクスポート関数に限定して、これを試します。
>>534 DLLベースアドレスの取得方法を教えていただけませんか?
ベースアドレスが衝突してデフォルトでない場合も
取得できるのでしょうか? この方法も試してみたいです。
>>533 >>535 さんのおっしゃるとおりです。
dll!func+0xXXXというのは、エクスポートされている関数のアドレスから
0xXXX後にある、エクスポートされてない関数という意味なのですか?
>>536 わかりにくくてすいません。
そもそもなにしたいのん?
>>538 ベースアドレスはロードされたDLLの先頭メモリアドレスなので
1プロセス内で衝突することは無い
MODULEENTRY32.modBaseAddr がベースアドレス
MODULEENTRY32.modBaseSize がサイズ
modBaseAddr <= p < modBaseAddr+modBaseSize がDLLのメモリ領域
のんのんのん♪
そんなマニアックなことして何をしたいんだか ウイルスでも作るのか
わかんねーなら黙ってろよ
やりたいことによっては別案があるかもしれねぇから聞いているかも知れねぇだろ アスペは黙ってろ
などと、アスペが喚いておりますが、気にしないでくださいね★
んだこら
最終的に何をやりたいのか明らかにしてないだろ
自作のコンテナのイテレータで、stl::listのbegin()ようにポリモーフィズムの呼び出しをさせたくて iteratorとconst_iteratorのふたつを用意したところ、エラーになります。 なにがいけないのでしょうか? 環境はVS2010です。begjn()が片方だけならコンパイルは通ります。 class MyContainer { public: template<typename T> struct iterator_ { iterator_(T* p) : ptr(p) {} T* ptr; }; template<typename T> struct const_iterator_ { const_iterator_(const T* p) : ptr(p) {} const T* ptr; }; typedef iterator_<MyContainer> iterator; typedef const_iterator_<MyContainer> const_iterator; iterator begin() { return iterator(this); } const_iterator begin() const { return const_iterator(this); } }; MyContainer x; MyContainer::const_iterator ix = x.begin(); エラー出力 error C2440: '初期化中' : 'MyContainer::iterator' から 'MyContainer::const_iterator_<T>' に変換できません。 with [ T=MyContainer ] コンストラクターはソース型を持てません、またはコンストラクターのオーバーロードの解決があいまいです。
うん。だって、xは非constだから、x.begin()は iterator begin() { return iterator(this); } を呼び出してる。 僕の見た限り、iterator を const_iterator に自動変換するコードはなさそうなのでそれでエラーになってる。 struct const_iterator_ { const_iterator_(const T* p) : ptr(p) {} template< typename T > const_iterator_( iterator_< T > const &it ) : ptr( it.ptr ) {} const T* ptr; }; これでいいんじゃないかな?
550 :
548 :2012/06/06(水) 06:19:50.51
>>549 なるほど。そういうことなんですね。ありがとうございました!
codepadはいつ見てもcookpadに見える
基本的な質問で申し訳ありませんが 自分は参照渡しとポインタ渡しは書き方が違うだけでコードは同様と思っていますが 意味が違うと言っている人(ポインタを理解していない?)がいたので質問します 以下のコードに書き方以外の違いはあるのでしょうか? void hoge::func1(int &p1) { p1++; } void hoge::func2(int *p1) { *p1++; }
間違えました コードは同様→機能は同様 です
基本的には一緒 NULLやポインタ演算を使う場合はポインタを使う 本人じゃないと分からんけど そういった点でセマンティクスが違うと言ってるのかもしれない
>>552 全く違う。ポインタを理解していないのはあんただ。
前者は内容を更新し、後者はポインタを更新する。
ポインタを理解してないのか、演算子の優先順位を理解してないのか どっちなんだろうな。
>>555 どっちも結果を捨てているから一緒じゃねぇか。
って突っ込もうと思ったが、ポインタ版は在らぬところを指してしまうからやっぱり拙いかな?
558 :
530 :2012/06/06(水) 12:21:48.86
ありがとうございます。
>>539 >>542 とりあえずは、ws2_32.dllの非同期通信スレッドが
他のスレッドに邪魔されないように、優先度を上げようと思っています。
>>540 これで行けそうです。ありがとうございます。
>>552 *p1++; は *(p1++); になるから (*p1)++; って書かないと参照の方と同じ処理にならないよ
> どっちも結果を捨てている お前大丈夫か?
>>558 言語のインストーラがやたらと重いし時間が掛かるのでいつもmsiexexcexeをタスクマネージャで
一個下の優先度に変えているぜ
マルチコアだと関係ないと思われるかも知れないがそれでもタスクの切り替えの時に何か引っ掛かる
c++のbool型って1バイト使ってますよね? bool型の変数を本当に1bitで使うことって出来ますかね? 具体的に言うとboolの配列を出来るだけ多く使いたいので、メモリ節約することで単純に宣言した場合の8倍の量使えるように出来ないかな思ったんですが・・・
bitsetを使おう
564 :
530 :2012/06/06(水) 16:19:46.29
>>561 マルチコアでも、全部のコアが100%に近い場合は、
優先度が顕著に影響しますね。
言語を頻繁にインストールしているのですか?
>>564 そんな事はないけどあるコアを100%使う時に気づいた
100%使うような処理は優先度を一つ落とすべきだと思った
>>562 Proxy Classを使うと実現可能だと思うけど遅いと思うぞ
566 :
562 :2012/06/06(水) 17:30:22.35
>>563 ,565
bitsetで出来たのでこれでやってみます
ありがとうございました
コンストラクタ・デストラクタ呼び出しについて、 new deleteではなくmalloc、コンストラクタ、デストラクタ、freeとやってしまって問題ありますか? 呼び出し忘れの可能性が増えること以外で
568 :
552 :2012/06/06(水) 21:11:06.78
演算子の優先順を考慮していませんでした (*p)++;ですね 慌ててて書き込むとダメですね 要は func1を p1 = 0; func2を *p1 = 0; として結果は同じことを確認したかったのです
>>567 問題ない
デフォルトのoperator newは大抵mallocを使ってる
そうですか、とりあえず安心 では続けて質問・・・ class Hoge { public: int hensu; Hoge(){hensu = 0;} } // Hoge* hogeP = (Hoge*)malloc(sizeof(Hoge)); hogeP->Hoge();//エラー hogeP->Hoge::Hoge();//OKっぽい、hensu = 0になっている 上記エラーとOKの差の意味ってなんでしょう?
本来は両方エラーだがコンパイラの独自拡張が下の例だけ対応しているだけのこと
なるほど・・・気にしたら負けな世界ですかね、あんまり深追いしないでおきます
> new(p) A(); 初めて見る書き方です。replacement newですかね?勉強してみます
>>569 おいおい変な事を教えるなよ
規格票に従え
だいたい継承関係にあるクラスの派生クラスをdeleteせずにfreeしたらちゃんと 基底クラスのデストラクタ呼び出してくれるのか?よく考えろ
大概のライブラリでbitsetってスレッドセーフじゃないんだよね…vector<int>より結局遅くなるケースがおまんちん(´・ω・`)
POD型以外はmallocじゃ正しいサイズになる保証もないしな。
引数付きコンストラクタも呼び出せないしな
>>576 >freeしたらちゃんと
というか継承以前にfreeとデストラクタは関係無い
質問させてください 引数で可変サイズの2次元配列を受け渡すにはどうしたらいいんでしょうか? int det(int[][] a, int n) { みたいに2次元配列とサイズをうけとってサイズに応じて計算したいんですけど…
>>580 だれもplacement newの話はしてないんだが・・・
頭おかしい?
>>582 C#のジャグ配列みたいな奴って事?
それじゃポインタのポインタのポインタもしくはポインタのポインタのリファレンスを渡して
行もしくは列方向が伸び縮みするようならreallocもしくはC++ならvectorを使った方がいいね
俺自身はvecctorが常に今の行数と行ごとの列数が簡単に把握出来て好きなんだが
ちなみにポインタのポインタではいけないのは、呼び出し元に行方向にreallocした 場合の結果を返せないから
>>583 どの部分に対するレスかも書けないお前の頭がおかしい
int det(int *, int); det((int *)a, (sizeof(a) / sizeof(int));
>>587 何でも人のせいにすんなカス
自分の文章を読む能力の不足を棚に上げて偉そうに
お返事ありがとうございます
>>584 ,586
C言語の話でしたすいません
>>585 とりあえず配列は READ ONLY で動いてくれれば…
>>588 ためしにしたのプログラムでコンパイルしてみたんですけど a[1][1] でエラーになります
メソッド内で要素にアクセスするにはどうすればいいんでしょうか…
int det(int *a, int n) {
return a[1][1];
}
int main() {
int a[2][2] = {{1, 2}, {3, 4}};
printf("%d\n", det(a));
return 0;
}
>>594 おーーー この方法で動ききました ほんとにありがとうございます! 助かりました!
int det(int *a, int n) {
return *(a+1 * n + 1);
}
int main() {
int a[2][2] = {{1, 2}, {3, 4}};
printf("%d\n", det((int *)a));
return 0;
}
>>592 int det(int **&a, int n) {
return a[1][1];
}
って書き方試してみたんですけど
printf("%d\n", det((int **)a, 2));
だとコンパイルとおらなくて
int **b = a;
printf("%d\n", det(b, 2));
で無理やり型あわせてわたしてみたらコンパイルできたんですけど動かなかったです
>>596 そうなんですけど
Cでも int**& って書き方自体できたので
メソッド中で a[1][1] って書き方でアクセスできれば楽かなって試してみたんですけどダメでした
Cで2次元配列扱うのって結構大変なんですね…
>Cでも int**& って書き方自体できたので やめてください
>>597 コンパイラが a[1][1] を *(a+1 * n + 1) のような計算に変換してくれているので
nの部分をコンパイラが認識出来ないとどうしようもない
mainの中で書けるのは int a[2][2] という定義が見えているため
↓のように認識させれば a[1][1] のように書けるけど1次元分以外は固定になってしまう
http://ideone.com/vgeLc
>>599 なるほどです
#define ならできるのはわかるんですけど
配列サイズをちっちゃくしながら再帰的にこのメソッドをよびたいので
変数で可変じゃないと困るんですよね…
ちょっとソースが醜くなるけど
一応やりたいことは
>>594 でできそうなのでこれでかいてみます
本当にみなさんありがとうございました
C++ class Hoge{ private: int hogehoge; }; このclassをvectorに4つ格納したいのですがどう記述すればいいのでしょうか 型の宣言がわかりません。 vector<Hoge> array(4) これじゃだめなんですか?
#include <vector> class Hoge{ private: int hogehoge; }; std::vector<Hoge> array(4);
.NETで開発する場合C++/CLIは必須ですか?
いいえ
久しぶりにクラスのポインタの配列をnewしようとしたら記述方法が解らず過去のソース漁っちまったぜ 何でこんな記述方法なんだ
バカ避け
>>610 自明ではないなあ、確かに調べたくなる。
int *p, *q;
なのに
int* [10];。
そこそこ有名な古文書ですね
>>611 配列のnewは
type* p = new type[n];
なのでクラスのポインタ(type = cls*)なら
cls** p = new cls*[n];
まとめて変数を定義する構文は欠陥品みたいなもんだから使わない方がいい
理解云々より「型 変数,変数;」にならない場合があるシンタックスがキモイ
ポインタ配列は使わずにptr_vector使ってるわ
>欠陥品みたいなもん 聞いたことないわ 脳内か?
禿がそんなようなこと言ってた気がする
int *p, *q; int* p, q; どっちが意図通りか分かりにくい
>>616 C++言語設計者曰く
Bjarne Stroustrup's C++ Style and Technique FAQ
http://www2.research.att.com/~bs/bs_faq2.html#whitespace >A ``typical C programmer'' writes ``int *p;''
>A ``typical C++ programmer'' writes ``int* p;''
>...
>Stick to one pointer per declaration and always initialize variables and the source of confusion disappears.
[C++設計と進化]でもCの宣言シンタクスをdisってるよね。 構文を変えようとしたけどCユーザーの反発とか色々あって放置に決めたっていう。
>>618 どっちがどうなのかさっぱりだ
基本Cな俺は上で記述したくなるけど
int*をtypedefしたらさらにややこしい
いやそこは#define だろ
なんでもありの #define は避けれるのであれば避けたほうがいい。
コテはアスペとわかっちゃいても ヤッパむかつくな
ナッパむかつくわ
ラッパズボン
ガッペむかつく
charの配列に2バイト文字列が入ってるものをifとかで場合分けしたいんですが、どーしたらいいんでしょう? 別の事情でstring型は使うことができないんです 初歩的な質問ですいませんがよろしくお願いします
正確ではないと思うが、全角文字の1バイト目を探すというのはどうだろう。 0x80〜 とかその辺だった記憶
>>631 回答有り難うございます
文字列で場合分けしたいので一文字じゃダメなんです……
でも参考になりました ありがとうございます
別で聞いた所strcmp?とかいうもので解決するそうです
もう少し頑張ってみます
いや、charの配列を頭から一文字ずつチェックして その2バイト文字列の文字コードでマルチバイト文字の1バイト目であることを示す値が出てくるかどうかで判断するって話だろ
なんでそうなるw
3バイト文字列
>>630 扱うコードは
SJIS?
UNICODE?
UTF8以外は認めない
UTF32でおk
Bjarne Stroustrup ってなんて読むの? バカジャネ ストラップ でいいの?
Wikiみろ。しかし、一般にはハゲである。
びよよん ストローストラップ
初歩的な質問ですがよろしいでしょうか? C++における関数や関数の呼び出しにおける変数の扱いについてです。 関数や関数内にて宣言している静的な変数は、関数を呼び出すたびに実行に必要なメモリ領域を確保しているのでしょうか? 関数、変数ともにstatic、inlineなどがついていない関数を前提とします。
>>642 >関数や関数内にて宣言している静的な変数
>関数、変数ともにstatic、inlineなどがついていない
矛盾しとるがや。
>>643 すみません
つまりこういうことです。
int func()
{
int var;
}
ここでのfuncやvarは実行されるたび確保されるのでしょうか?
仕組みを知りたいなら"スタック 自動変数"でぐぐればわかるよ
>>645 ありがとうございます。
早速調べさせていただきます。
うるせぇ、許可なんか要らないから勝手に調べろよ。
ハイハイワロスワロスwwww
許可を求めてない件
まぁアスペなんだろ かかわらないほうが吉
そもそも確保しなきゃ使えんだろ
最初に確保して使いまわしているとかそんなのも考えていたんじゃないか? そうなると再起関数の部分とかで矛盾が発生するとか考えればわかるけど
静的な変数≠static と思っているあたりもっと根本的なところが
Qが最近あちこちのスレでコテ消して暴れているような気がする
655 :
デフォルトの名無しさん :2012/06/10(日) 21:02:46.39
>>653 悪い質問者じゃないんだけどさ・・・
関数内での変数ってstatic明示的に書かない限りAuto変数だと思っていた
kwsk教えてエロい人
657 :
デフォルトの名無しさん :2012/06/10(日) 21:12:59.86
そういえば、確かに静的変数なのにstaticがついていないのは矛盾している・・・。 ごめんなさい、なにか勘違いしていました。
>>654 気のせいだろ?このスレにしてもQにしてはレベルが低い、というかQならとうに知ってるはず。
いやQの正体はこんなもんじゃないのかな
むしまるQ
DQN
C++のコンパイラ、IDEは何を使えばいいでしょうか(各コンパイラは主として何が違うのでしょうか) 今のところ、Borland C++ Compiler、BCC Developerを使おうと思っています
IDEが決まってから環境(OSとか)を合わせるの?
OSはWindowsXPとWin Vistaです 他にも(使用環境について)何か必要でしょうか?
Visual C++ 2010 Express でいいんじゃね
フリーのやつ全部試せ 無駄にはならん
LSI C 3.30試食版
Borland C++ Compilerはクソ古い上に公式が消滅してるし Linuxメインでない限りmingw,cygwin使うのはアホだし VC++除けば Digital Mars C/C++ Compilerくらいか?
用途というか、目的によって違うと思う。 簡単なWindowsアプリをお手軽に作ってみたいというならVC++で良いと思う。 C言語を純粋に勉強したいというなら、gcc(Mingw,cygwin)+eclipse(CDT)の方が良いと思う。 VC++のなんとなく嫌な所はC言語としては、Microsoftの方言があると思える所。 GCCの嫌な所は、Windowsアプリを作るのが面倒くさい(という印象)がある所。 「Windowsのアプリを作り易い」ということは、「WindowsのAPIを簡単に使える」という話だから、 C言語の本体とは直接関係ないけどね。
C++だって言ってるだろ
じゃあ、C言語をC++言語に、そして、gccをg++に、読み替えてください。
VC++のCに方言(っていうか、独自拡張?)なんてあったっけ? C++は規格合致してない方言まみれだけど Cは89のままで止まってて、かなり素直だと思うんだけど^^; むしろ99の機能を一部取り入れてるgccの方が独自拡張多くない?
追加仕様はGCCが未対応はVCが多いイメージ
__declspec(selectany) 便利だよね
>>677 ふーん、古いページだけれどもその当時の時点でいろいろあったんだ。
>配列変数をコピーする。
は標準じゃなかったっけ。
お前構造体と勘違いしてんじゃね
配列なんてここ数年使ったときねーな
std::arrayが使えるようになってまた使い出した
独自のものには__が付いてるから許容範囲
685 :
663 :2012/06/13(水) 14:20:05.80
レスしてくれた方々ありがとうございます。返信遅れてすみません まずはVisual C++ 2010 Express使ってみて 不満があるようならg++など順番に変えていこうと思います (cygwinのインストールはしているのですが、使い方があまり分かっていないので勉強する必要が・・・)
std::ostreamってWindows CEでも使える?
試したら?
C++で、外部の.exeファイルを実行するにはどうすればいいですか? 使っているソフトはVS2010です
ExecuteExternExeFile
#include <iostream> #include <string> using namespace std; int main() { string str; while(1) { cin >> str; if(str=="end") break; cout << str.size; } return 0; } これエラーが出るんですがstrの要素数を出力する場合どう書けばいいんですか? VC++2008です。
韓国の国内総生産(GDP)を考慮した個人負債規模が財政危機に陥っているスペイン並みに深刻な水準となった。
個人負債の増加速度は経済協力開発機構(OECD)加盟国で3位と平均を大きく上回った。
大韓商工会議所が14日に発表した「個人負債現況と政策課題」報告書によると、
2010年の韓国のGDPに対する個人負債の比率は81%でOECD平均の73%より高かった。
これは財政危機を陥っているスペインの85%に迫る水準だ。ギリシャの61%より20ポイント高い数値だ。
個人負債増加幅も急速に拡大していうる。2006年以後鈍化した個人負債増加率は2010年に前年比2.4ポイント上昇の9.8%を記録した。
【今日の感想】この記事を読んで・・・
面白い (40件)
悲しい (2件)
すっきり (1件)
腹立つ (0件)
役に立つ (6件)
http://japanese.joins.com/article/707/153707.html?servcode=300§code=300
面白い 役に立つ
.うん 日本人も他人の事言えないね。 【今日の感想】この記事を読んで・・・ 面白い (349件) 悲しい (19件) すっきり (44件) 腹立つ (4件) 役に立つ (36件)..
朝鮮人の嫌がらせにも マニフェストをなにも守れない民主党の嫌がらせにも 耐え忍ぶ民族
697 :
デフォルトの名無しさん :2012/06/17(日) 06:24:34.95
class tree { public: tree* right; template <tree* tree::*right> void func1(tree* t) { tree *p = t->*right; } }; こんなクラスを作ってコンパイルすると以下のようなエラーになります。 test.cpp: In member function ‘void tree::func1(tree*)’: test.cpp:7: error: ‘((tree*)this)->tree::right’ cannot be used as a member pointer, since it is of type‘tree*’ func1をfriend関数にするとコンパイルが通るのですが、メンバー関数にすると通りません。 どこがまちがってるでしょうか?
func1の中のrightがテンプレート引数でなくtreeのメンバのrightとみなされてる
699 :
デフォルトの名無しさん :2012/06/17(日) 19:06:53.96
なるほど、テンプレート引数名とメンバ名がかぶってたと。 テンプレート引数を変更したらコンパイル通りました。 ありがとうございました。
C++にはrubyのsuperみたいな予約語はないのでしょうか?
基底クラスのメンバ呼びたいとかなら 規定クラス名::func() で呼べるよ
__super
>>700 ないのでは。C++では派生クラスのコンストラクタから基底クラスのコンストラクタへの綱渡りは基本できなかったと思う。
ああ、いいかたがわるかった。綱渡りのための宣言はあったね。ただ super はない。
たじる継承の時、superではどっち呼びたいのかわからんからなー。 あ、もともとメンバ名の衝突がある時点でだめか。
たじる継承するにはどうしたらいいですか?
まず服をたじます
タジン鍋つかうあれか
たじってしまいました。 どうしますか?
味噌と醤油どちらをメインにするか決めずに他汁継承すると大変な鍋になります
更にそこに塩の配列を確保します。
塩基配列か!
するとあら不思議!!
多汁した汁が鍋から漏れ出し(リーク)します。
ぶたじる継承・完
BADENDじゃねぇか!!!
ぶたじる継承・第二章 親父の豚汁店を継ぐことを固く決意した主人公。 奇跡とも言われた味を守り抜くことはできるのか。
魔王がカレールーを持って現れた!! どうする豚汁!?
>>719 別に問題ないでしょう。わざわざ0クリアをした領域の上に、なにか別の内容をあらためて代入する、という無駄な動きにめをつぶるのであれば。
うお、即レスども。
その特定の状況のみを考えて
>>490 を書いたってことね。どもです。
class Base { }; class Suba : public Base { }; class Subb : public Base { }; Suba g_scene このあとg_sceneの型をSubbに変更するといったことはできるのでしょうか? できるなら書き方の例もお願いします
ごり押しならな・・・・ Subb b = (*reinterpret_cast<Subb*>(reinterpret_cast<void*>(&g_scene))); ただこんなことするプログラマーとはあまり関わり合いたくないレベル
せめてvoid*を介した変換にはstatic_cast使ってくれ
そんなのどっちでもいいだろ('A`) 普段もこれからもこんなの書かねぇんだから そもそもLPVOIDは特殊だがポインタのキャストなんだからreinterpret_castでも問題ないんじゃねぇの?
それ以前にこんなウンコードだれが使うんだよwwww
そもそもreinterpret_cast使うんだったらvoid*使う必要ない
キャストの使い分けよくわかってないやつ多いからなあ
というかC++のキャスト周りで使っているやつみねぇえw Cキャスト使っている奴ばっかだわw
それってお前が居る環境が糞ってだけじゃねーか
すんません(´・ω・`)
>>722 >Suba g_scene;
こう書かずに
Base *scene;
こう宣言すれば?Baseが必要なメンバーを網羅した抽象化クラスなら問題ない。
Base *scene;
Suba a;
Subb b;
scene = &a;
scene = &b;
基本的にはこんな感じで差し替えてやればいい。もし、Suba、Subb固有の操作が
したいなら、そこだけsceneを使わずaとbを直接参照して操作する。
間違ってもダウンキャストしちゃだめよ。
class ABC{}; std::vector<ABC*> xyz; void erase(void) { while(xyz.empty()){ delete *(xyz.begin()); xyz.erase(xyz.begin()); } } vectorの要素を解放するコードは、これ以上短くなりますか? または、もっと簡潔に記述出来ますでしょうか?
>>733 > while(xyz.empty()){
じゃなく、
> while(!xyz.empty()){
でした、済みません。
std::for_each(xyz.begin(), xyz.end(), [](ABC* p) { delete p; }); xyz.clear();
C++11だったら std::vector<std::unique_ptr<ABC>> だろJK
どうしてboost::ptr_vectorを使わないのか
依存をstd::に留めたい人も割りと居る
どの場面でもboostが許されている訳ではない。
処で、>735はC++11? だとしたら>733はC++05(だっけ?)の範囲では妥当解?
全部消すなら一々eraseするより 後でclearのほうが効率が良いと思う一応
コードの短かさだけで言えばそうかもしれんが 先頭から一つずつeraseとか無いわ 普通にforでdeleteしてclearか、せめて最後の要素からでないと
それ以前 無条件にdelete出来るポインタをvectorに格納する意味が判らん
>742-746 なるほどね。勉強になったよ。THX!
>>748 もしデストラクタでの処分方法を考えていたのなら、eraseなりclearなりは要らないと思う
for_eachやfor(...;++it)ならな
ああ、そうそう、そこが抜けてたごめん。
クラス→(継承)→サブクラス→(継承)サブサブクラス とした場合サブサブクラスやサブクラスやクラスの引数なしのコンストラクタって全部動きますか?
当たり前だ
デストラクタにvirtualついてなくて乙ることはあるが コンストラクタですっとばしは考えらん
らんらんるー♪
基底クラスにキャストしたサブクラスの仮想関数を呼び出すと 基底クラスのメソッドとサブクラスのメソッドのどちらが呼び出されますか? サブクラスのメソッドが呼び出されるとした場合、 サブクラスのフィールドを仮想関数で弄ることはできますか? アップキャストして基底クラスの状態でまとめたもの(配列)を、 ループで一気に仮想関数を呼ぶことで多種類のサブクラスそれぞれに異なる処理をさせたいです。
何の為の仮想関数なのかわかってないな
仮想関数なんだからどっちが呼ばれるなんて一目瞭然
>>757 > 仮想関数を呼ぶことで多種類のサブクラスそれぞれに異なる処理をさせたい
それこそが多態性
仮想関数と言いながら、メソッドとも呼ぶ・・・ メッセージ機能ないんだから関数で通せよ
メゾットなんていわねーよ メンバ関数だろ
>>761 おお、サブクラスのメソッドが呼ばれるってことですね
ありがとうございます!
メゾットって誰?
リゾット
Metzod : (独) メゾッド 特に強くを意味する言葉。 日本ではメッゾフォルテなどが有名。
Matzとではどっちが強いですか?
Matzは全角英数字で殴り続けると死ぬ
その綴りなら読みは メツォット だろ?
いやメトゾッドだ
zeit ツァイト
tはノイズだ 正しくはMezod
それならやっぱりメツォット
↑おまえの負けー
↑↑↓↓←→←→BA
ティリティリティ〜♪
ドイツ語でメゾッドと読ませたいならmesodだ
メソッドもサブクラスもフィールドもC++の標準用語じゃないでしょでしょ 多分C#辺りから渡ってきた人。
英語でどう呼ぶか、だな
Member Functionは、流用元となったSimulaのMember Procedureに準じた言葉。 Methodは、SimulaのMember Procedureに対し、MessageとMethodが分離されていて 別物であることを強調したSmalltalkとObjective-Cの用語。 近頃の言語は、そういう背景を踏まえずにMember Procedureと変わらんものを Method, Methodと連呼する。ちゃんとMessageを実装している言語に失礼だよね。
勉強になります
言語の背景でプログラム書くわけじゃない
プロセジャーとか言い出す講師にあたったときはひどかった
「プロセージャですよね?」と聞き返すべき
788 :
デフォルトの名無しさん :2012/06/21(木) 08:19:27.01
AVL木と、何にもしてないただの木をC++で実装して、大量のランダムデータをinsertしてremoveする、というのの速度を比較したんですが、 データが500万件を越えたあたりでAVLの方が速く終わるようになりました。 insertくらいは普通の木が常に速いと思ったのに。これって正しいですか?
>>786 プログラムをプラム、プロシージャをプロセ、アセンブラをアセムって呼ぶ
ICEベンダーの技術者よりはましだと思う。
State/Strategyパターンや関数ポインタテーブルを使い、動的に呼び出し先を変えるとする。 どうしてもその呼び出し先ごとに異なる変数を与えたい場合、 適当な変数を用意して代入し、呼び出し先で解釈してもらうという手法はアリ? 例えば変数hogeを用意しておいて、Foo(int hoge) と Bar(int hoge) とでは、hogeの意味(使用目的)が異なるとか。
>>791 関数ポインタテーブルでごにょごにょ、ならばやったことありますが、十分にありだと思います。
テーブルに載せてる関数のなかで一番たくさん引数をもつものにプロトタイプをあわせていました、泥臭いけど。
宿題スレでやってcodepad にもあげたけれどもみつけられかったごめんなさい。
>>791 ナシ
呼び出し先によって意味が変わるんじゃ呼び出し側で意味を持たせた引数を指定できない
int f1(int i, int j)
{
static int v[5] = { 1, 2, 4, 8, 16 };
return v[i] + v[j];
}
int f2(int i, int j)
{
return i / j;
}
int main()
{
int (*pf)(int, int) = 0;
// pf(1, 0); // f2が呼ばれるならアウト
// pf(9, 3); // f1が呼ばれるならアウト
}
状態遷移がわかっていて、引数変える分には、ハマることはないような
795 :
791 :2012/06/22(金) 02:58:37.43
>>792-794 ありがとう。意見は割れるかあ。
便利だけど、危険性が伴うからホントどうしようかなと悩んでた。
そりゃ0除算や配列の外側へのアクセスなんかは、数値の範囲チェックをすれば良いだろうけど、
それでも心理的要因などが原因ではまる可能性はあるからなあ。
ぶっちゃけ使ってて気持ち悪いというのが大きいがw
関数ポインタじゃなくてクラスを利用しているなら、キャストを使うことも出来るだろうけど、
それをテーブル等に収めようとすると結局同じ問題が発生するんだよね。
うーん、mapで持たせたほうがスマートかなあ?
書いてみて試行錯誤するしか わかってるなら、矛盾した箇所とか出てくるだろうから、そこをどうするかでしょ
>>791 オブジェクトで実装するのであれば無し。
そもそも、ステートオブジェクトに外から関数の引数で値を渡すんじゃなく、
関数が呼ばれたタイミングでステートオブジェクトに情報を取得させればいい。
情報の取得元は、ステート開始以前にコンストラクターとかであらかじめ指定してやる。
StateA state1( &source1 );
StateB state2( &source1 );
StateC state3( &source2 );
state1.ChangeNextState( &state2 );
state2.ChangeNextState( &state3 );
state3.ChangeNextState( &state1 );
next_state = &state1;
while( next_state ) next_state = next_state->Execute();
>>557 お前本気かよ。ぜんぜんちがうだろうがw
親クラスのオーバーロードされた代入演算子を使うとコンパイルエラーが出ます +=や[]のような演算子は使えるのに代入演算子は使えないのは何故なんでしょうか? ご存知の人、なにとぞアドバイスください class A{ public: int x; A(void){ this->x = 0; } A& operator=(int x){ this->x = x; return *this; } A& operator+=(int x){ this->x += x; return *this; } }; class B : public A{ }; int main(){ B b; b += 5; //成功 b = 6; //コンパイルエラー return 0; }
13.5.3 Assignment An assignment operator shall be implemented by a non-static member function with exactly one parameter. Because a copy assignment operator operator= is implicitly declared for a class if not declared by the user (12.8), a base class assignment operator is always hidden by the copy assignment operator of the derived class.
>>800 class B : public A {
public:
using A::operator=;
};
800じゃないけど、そっかそれusingでいいのか
804 :
800 :2012/06/23(土) 18:28:08.18
>>801 子クラスのポインタを親クラスのポインタにキャストしてから使うか(ポインタじゃないとうまくいかなかった)、
子クラスでも演算子オーバーロードするしかないかなと思ったんですが(親クラスが自作クラスじゃないと挙動を再現するのは難しい)
>>802 の方法でスマートに動いたんでこうしてみます
感謝します
>>801 どこの引用ですか?
ソースを教えてください。
規格書ぐらい持っとけよ
>>806 もってねーからきいてんじゃん
ばかかおめー
規格票
持ってないから引用元を聞くとかわけがわからんな
馬鹿は相手にすんな
813 :
uy :2012/06/24(日) 12:26:55.44
K-POPはプログラミング言語で言えばRubyだ 俺は韓国が三度の飯より好きだ ブームは本物だと確信してる
Rubyは日本製だよ つまり韓国の文化も日本製ってことか?
< `∀´><Rubyは韓国起源を主張するニダ
rubyが日本製だといつから勘違いしていた?
ナン・・・だと・・・!?
Rubyはモルモン教起源
少し前にも質問させて貰ったのですが、また質問させて頂きます。 スーパークラス型の配列に サブクラスAやサブクラスBを代入したいのですが サブクラスのメンバ変数もコピーされるのでしょうか? 仮想関数でサブクラスのメンバ変数の値を操作したいです。
されない
SetTimer(0, 0, 0, TimerProc)のTimerProcに 固有の引数を渡したいのですが グローバル変数を介すしかないのでしょうか?
はい
>>822 ・WNDCLASSEX.cbWndExtra = sizeof(void*)、RegisterClassEx
・非表示のウィンドウ作成
・SetWindowLongPtr(hWnd, 0, 固有のデータのポインタ)
・SetTimer(hWnd, 0, n, TimerProc)
・TimerProc内でGetWindowLongPtr
ってした方が良いと思う
引数に相当する値を取得する関数を作れば解決
皆さんはC++でどんなアプリケーションを作成しているのですか? とりあえず、文法的なことはある程度は覚えましたが、Windowsアプリを作成しようとすると 手も足も出ません。
827 :
800 :2012/06/25(月) 16:47:29.29
いきなりGUIなんて外枠から入ろうとするからじゃないの?
ライブラリを入れてwindow(窓)を出すところから始めよう
829 :
826 :2012/06/25(月) 16:59:23.84
通り一辺倒のことはwebを探せば出来ますが、全く応用がきかない・・・Orz 例えば、 VSのエディタみたいに、テキスト編集Viewで +- で畳んだりとか キーワードで色を変えるとか listコントロールとtreeコントロールが合体したようなコントロールの作成とか listコントロールにプログレスバーを表示して、各行に割り付けられたThreadの進行を表示するとか
830 :
822 :2012/06/25(月) 17:08:18.82
スキル的に不可能ってこと?
832 :
800 :2012/06/25(月) 18:19:40.34
>>829 今はやり方知らないってだけで、それらも全部Webで探せば出てくる
ただ、Win32APIの機能というか仕様みたいなのを知った上でないと検索しづらいのも確か
APIの仕組み知らずにいきなり「ウィンドウ作ったあとはメッセージループを実装しよう」なんて普通思いつかないでしょ
書籍ならAdvanced Windowsとか、Webなら猫プロとかもう少し読んでみるといい
>>829 でできないこととして挙げてることは、UIに関係するものはオーナードローとかサブクラスとかその辺でほとんど片付く
マルチスレッドのWin32環境固有以外の基本的な扱いかたとか、
「畳む・戻す」を実装するためのアルゴリズムなんかはWin32環境とは関係ない
833 :
826 :2012/06/25(月) 18:39:50.19
>>832 Webはどこもかしこも、同じことばっかじゃないですか?
自分が分かる範囲でしか書いてないし。
ちょっと凝ったコントロールを作成しているのはほぼ間違いなく海外のエンジニアだし。
日本は精精、コントロールの基本的な使い方程度
小さいことからコツコツ積み重ねなさい あと英語も進んで読みなさい
アプリを作りたいのかコントロールを作りたいのか…
アプリを作る過程でその部品としてコントロールを作る場合もあるが ろくにアプリも作れないのにコントロール コントロール言ってるのは
基本的なコントロールの使い方ができるけど ちょっと凝ったコントロールを作れないというあなたを理解できない それともいかしたカスタムコントロール自作すんのめんどいからコードをサクッとコピーしたいってこと? 無駄なUIかますのは商用ソフトだから無理だと思われ
大きな問題を小さく分割して一つ一つ解決するセンスがないと無理 質問者にはなさそう
小さいなことをコツコツと、精々底辺を這いつくばって生きてくださいw
凝ったコントロール作りたいなら普通に自分で描画したらいいよ 基本コントロールは凝ったことせず手早く作るためのものだし
コントロールにコントロールされてどうするんだよ!
もうちょと走り込んで下半身を安定させたほうがいいな
844 :
デフォルトの名無しさん :2012/06/25(月) 20:35:20.86
class A { int val; public: A(int v):val(v) {} bool operator<(A &r) {return this->val < r.val}; }; というクラスがあって、 A *a1 = new A(1); A *a2 = new A(2); というインスタンスを作ったときに、 if (a1 < a2) と比較すると、ポインタ値の大小の比較になっちゃうんですか? もし定義した演算子を使おうとすると if (*a1 < *a2) とか書かないと駄目なんでしょうか? よろしくお願いします。
あたりまえ
あたりまえだろ
あたりまえだのクラッカー
だからJava感覚で気安くnew使うのはやめろよー。
参照は暗黙的にポインタ渡しててきもい
C++でSleep(1000);とかとやると 1秒間何もできなくなってしまいます Sleepしても他の処理ができるようにするにはどうしたらいいですか
Sleep(1000);消せよw
>>850 何がしたいの
止めてる間に他の仕事させるならマルチスレッド
SetDlgItemText(hwndDlg,text,ireruyatu); Sleep(1000); SetDlgItemText(hwndDlg,text,ireruyatu2); Sleep(1000); ... ってやると ダイアログがフリーズして何もできなくなってしまうんです... マルチスレッドですね・・・ぐぐってみます
1秒後にテキストを設定したいだけならタイマーつかえ
窓はマルチスレッドで画面にカキコできんの?
デバコン渡せばできるだろ ただ最後に描画するのは メッセージループもってるスレッドだったはずだが
描画したい位置に新しく子ウィンドウを作ってそこに描くのもあり
マルチスレッドで?
デバコンw
出刃紺
>>862 当時はレイよりも原田夕子ちゃんにべたぼれでした。
864 :
uy :2012/06/26(火) 08:13:30.69
俺は女子のウンコにしか興味がない ウンコ野郎だからな
865 :
822 :2012/06/26(火) 09:53:28.98
>>831 ウィンドウレススレッドが多く、それぞれのスレッドにウィンドウを
持たせるのは、コストが大きいので不可能です。
>>855 別スレッドから直接API呼ばなくても
必要な処理が終わったらメッセージ飛ばして
メッセージループしてるスレッドにデータを渡す
>>865 動的に増やせなくていいならグローバル変数
そうでないならウィンドウを使うしかない
あとSetTimer使っててウィンドウはコストが大きいとか意味不明
コスト気にするほど大量にあるなら普通に自分でスケジューラスレッドを用意すべき
もうコールバック使わずにメッセージでやれよって思う
869 :
855 :2012/06/26(火) 11:22:45.55
linuxとかもそういう作法っすよ
871 :
uy :2012/06/26(火) 12:24:13.18
LinuxがWindowsをパクったんだから当然
燃料だと思ったら紅茶だったレス
873 :
855 :2012/06/26(火) 12:47:14.76
XWinもそうだね
uyはネタスレから出てくるなよ・・・
875 :
uy :2012/06/26(火) 12:52:48.84
ここは俺のスレだ 指図は受けない
876 :
vw :2012/06/26(火) 14:24:17.29
俺は糖質だから脳内に指図がくる
ポインタがわかりません。 Cの最大の難所らしいんですが・・・ void ** const (**(**entryMap[ENTRIES])(void**))(void ** const (**)()); ってなんですか?
すっげー
>>880 すごい
っていうか、このレベルがポインタを理解しているというレベルなのか?
つかわんだろ・・・・
鬼としかいいようがない‥‥‥
コンパイルして逆アセンブルしてみたらC++の仮想関数ではしょっちゅう 出てきそうなコードだった
実生活でこんな複雑なものを使うアルゴリズムはない
あるだろ
それこそtypedefの出番。
実生活での具体例を示せ 示せないならゴミカス
1.指定子の分離 >void ** const (**(**entryMap[ENTRIES])(void**))(void ** const (**)()) void 2.ポインタ→関数→配列の順に結合度の低いものからはずしていく >** const (**(**entryMap[ENTRIES])(void**))(void ** const (**)()) voidへのポインタのコンストポインタ 3.D(パラメータリスト)の形の時は関数 >(**(**entryMap[ENTRIES])(void**)) (void ** const (**)()) 「voidへのポインタのコンストポインタ」を戻り値とし「void ** const (**)()」を引数とする関数 4.(D)の場合、単純に()を外す >** (**entryMap[ENTRIES])(void**) 「voidへのポインタのコンストポインタ」を戻り値とし「void ** const (**)()」を引数とする関数へのポインタのポインタ 5.D(パラメータリスト)の形の時は関数 >(**entryMap[ENTRIES]) (void**) 「「voidへのポインタのコンストポインタ」を戻り値とし「void ** const (**)()」を引数とする関数へのポインタのポインタ」を戻り値とし「void**」を引数とする関数 6.(D)の場合、単純に()を外す >** entryMap[ENTRIES] 「「voidへのポインタのコンストポインタ」を戻り値とし「void ** const (**)()」を引数とする関数へのポインタのポインタ」を戻り値とし「void**」を引数とする関数へのポインタのポインタ 7.D[コンパイル時定数]の形の時は配列 >entryMap [ENTRIES] 「「voidへのポインタのコンストポインタ」を戻り値とし「void ** const (**)()」を引数とする関数へのポインタのポインタ」を戻り値とし「void**」を引数とする関数へのポインタのポインタの配列(要素数ENTRIES) 8.最後に残ったものがID。 変数名entryMap 9.関数内のパラメータリストについても同様に構文解析 んー。あってる気がしない。
ファイルを複製することなく同一DLLをLoadLibraryとかで複数のDLLインスタンスとして ロードする方法って無いですかね・・・ DEPに逆らうことなく動的にアドレスの異なる関数ポインタを増やしたい
メモリ内に直接機械語を書き込む
機械語書き込んだ領域に実行可能フラグつけるのってどうやればいいのでしょうか? いや、ぐぐってはいるんですが中々・・・
真っ当な手段でそれが可能ならDEPの意味がないだろう
見つけました winはVirtualAllocにPAGE_EXECUTE、linuxはmemalign->mprotectにPROT_EXECで出来そうです JITコンパイラがDEP無効にせずに動いてるんだからそりゃ方法はありますよね DLL複製とか変なことせず最初からこっちを調べるべきでした
結局ポインタを本当に理解している人は少なそうですねw
ポインタというより構文や結合優先度の方だな 加えてtypedefで分割統治しないのは愚策 分かるに越したことは無いが
typedefは名前空間汚すから減らすに越したことはない。 int Function( void (* callback )( void * ) ); int ( *Function() )( const char[] ); これぐらいだったら直書きの方がいい。
引数にスーパークラスのポインタとして取得したアドレスをサブクラスとして使用するにはどうしたらいいでしょうか? void func(Super* super){Sub* sub = super;} も Sub* sub=dynamic_cast<Sub*>(super) もダメでした。
>>901 あなたがあまりにも低いところにいらっしゃるのでは?hw
>>902 Sub* sub=static_cast<Sub*>(super);
>>900 名前空間を汚すから、変数の数は少ないに越したことはない。出来るだけ使いまわせ。
と言っているに等しい。
@ClassA hoge; AClassA *hoge = new classA(); インスタンス生成で上の二つの使い方の違いがよくわかりません。 常に@でもOKですか?
int i; int *i = new int(); この違いはわかってますか?
>>909 前者が静的で後者が動的?
メモリへの配置され方が違うだけで使い方は一緒?
スコープを超えたいときだけ2を使う
912 :
908 :2012/06/29(金) 04:04:57.39
>>907 1bit脳かよ。LONGLONGとか定義してるあほな環境はともかく、
UNIXやLinux系で構造体以外のtypedefが少ない理由を考えろよ。
あと、typedefをローカルスコープやファイルスコープで使いたいなら
好きなだけつかいやいい。
つかいやいい
917 :
uy :2012/06/29(金) 07:48:03.51
つかいやいいって何だよゴミカス
C++と違ってnamespaceやclassで分割統治出来ないCは typedefの数にも気を使わないといけないのか
>>908 1の方じゃないと実現できないこと、2の方じゃないと実現できないことってのがある。
ぶっちゃけそれにブチ当たらない限り、最初は1だけでも良いと思う。
>>908 概ね、>919。
但し、(2)は破棄するタイミングに要注意。できる限りスマートポインタを使いましょう。
2は明示的に破棄する必要がある?
破棄しないとメモリリークです スマポ使えばおk
>>915 構造体以外のtypedefなんて
めちゃくちゃいっぱいあるよ
>>915 ちょっと新しいことを覚えてアピールしようと思ったみたいだけど
あまりにもバカを晒しすぎ。
整数のコンテナを基底?nをつかって { x, y, z, ... } <=> x + y * n + z * n^2 + ... って一意な整数と変換する処理を切り出そうとしてるんだけど この操作って何か名前ついてる? 気の利いた名前が浮かばない
>>926 リトルエンディアン基数変換・・・とか?
>>928 あー,1バイトずつだとそんな感じだなあ
基数は7とか13でやることになるんだけど,とりあえず基数変換って方向使わせてもらおう
さんくす
基数変換だとまた違うものを指す
基数変換だと101(2)と5(10)の相互変換のみたいなやつになっちゃうのかな ところでPythonのreduceみたいな関数は標準にあるかな numericのaccumulateは見つけてて, これの加算アルゴリズムを関数オブジェクトで渡せるようなのがあるとスッキリ書けるのだけど
とおもったらまさにそのものがaccumulateのオーバーロードにあった
>>931 後半は忘れて下さいな
>>924 Posix系で移植目的以外でtypedefしてる型って例えばなんだよ。
POSIX
Cは
>>877 のようにベタに書いて頑張れ
C++はtemplateとtypedefでおk
そんなとこだな
複雑じゃなければベタで書けって話だ
最初から複雑な場合にはtypedef使えって話なのに何言ってんだ
最初から関数引数に取るだけとか、戻り値で返すだけとか 単純ならベタで書けって話だろ
LPCTSTR型は何の型かわかりやすい
・マクロじゃないのに大文字 ・移植する気もないのにtypedef アンチパターンの典型例だよな cstrって名前でビット数変わるたびに 定義が変わったならまだ許せたが
ハンガリー記法も出始めは重宝されてたけど 今は、どうなんかね
m_lpszHogeFuga とかやってたな
システムハンガリアンは論外だがアプリケーションハンガリアンなら使われるな mmLength; cmLength; ptLength; pxLength; 等々・・・ 単位系は間違えると致命的なことになりかねんからな
947 :
uy :2012/06/29(金) 22:44:29.69
何それ? 専門用語使うなゴミカス
型を指すハンガリアンは ポインタを示す p ぐらいしか使わない おおざっぱ用途を指すようなハンガリアンは そこそこ使ってる (大きさを示す サイズを示す とか
提唱者が考えたのはアプリケーションハンガリアンだけど システムハンガリアンの考えと誤解されて違うものが広められたんだよな
>>948 pを付けてポインタを明示して何が嬉しいのか謎
途中から前提変えてそれを「最初から」とか手に負えんな
953 :
uy :2012/06/29(金) 22:49:51.65
ハンガリガリガリハンガリガリ
>>951 もはや習慣となっていて、自分でも理由がわからんw
やっぱりおもらしやら不正参照への不安からなのかねぇ
変数名だけを見て、型を推定できた方が便利
>>946 後ろ2つ ポイント単位 画素(ピクセル)単位?
>>956 略称は解りづらいか。pointX,pixelXと書いたら、
これもこれで紛らわしいんだよね。
>>955 変数が型に依存してるのは、OOの観点ではマズイ。
型が同じでも意味が異なるものを混同しないように、というのが 本来のハンガリアン(=アプリケーションハンガリアン) でもプリミティブのまま代入を禁止する、 強いtypedefがあれば変数名でなく型名でコンパイラチェック出来るんだよな。 D言語ではあったけど機能削除されたから、色々問題はあるようだけど
enumじゃ不足なの?
変数名に意味がある名前を付けるか、付けないかってレベルと同じ話じゃね。 pに意味があると思ってる場合には意味があるんだよ。 m_11234 m_pointX m_pPixelSize
なんでmだけキャメルじゃなくてバー繋ぎなんだ? どっち途気持ち悪いからどうでもいいけど。
メンバー変数のm
>>961 intはともかくdoubleとかが・・・
FooBar_Baz()みたいな名前は、たまに使ってるなー。
EUCとか大文字の単語を含むとキャメルは読みにくくなる
データマンバに m_ って付けるのはマイクロソフトハンガリアンの特徴。 今ではマイクロソフト自身が「あれはキモかった上に有害なんでやめるね;_;」って言い出す始末。
素人がかっこいいと思って、ワケワカで真似してたからね、m_
いや、m_ は有用だろ メンバかどうかパッと見で分からないせいで もの凄く解析に苦労したプログラムとかあるし
え、何言ってるの?
読む人の事も考えろってことだ 書いた人はどれが何か分かるんだろうけど・・・
引数とデータメンバが同じ名前なことがまれによくある
引数やローカル変数で隠蔽してもコンパイラエラーにならないしね
this->member;って書けって話だろ そもそも、引数とローカル変数をすぐ確認できないような 長ったらしい関数書くなよ
うっかりthis->忘れてもコンパイルできるから無意味だな
あと長ったらしい関数書いたのは俺じゃねえし
そもそも短かろうが一瞬で判別が付く方がメリットが大きい
バグを減らす為に副作用を常に意識してプログラムしてると
メンバかどうかというのは非常に重要な情報になる
m_ は無意味()とか誰かが言った事を鵜呑みにするのはよろしくない
>>973 m_ があると自然に別になるというメリットもあるね
まあ、同じになりそうなら引数の方をちょい変えればいいし
コンストラクタでは初期化子使える場合は関係ないけど
>>976 見ることが目的であって、記述ミスが目的じゃないだろ
そもそも、thisなしで困るような関数書くな。
結局this忘れでも、メンバーにm_つけ忘れでも大差ねぇよ
大差ないのでm_にします
大差ないのでmMemberにします。
一人で書くときはm_とか付けないけど チーム開発では付けて欲しいと思ったことも。
982 :
uy :2012/06/30(土) 18:18:29.73
マイクロソフト製品に不具合が多いのは誰でも知ってる 故にマイクロソフトのプログラマの質は低い マイクロソフトが言うことを鵜呑みにするなど愚の骨頂
uyが言うことを鵜呑みにすることに比べたら?
長いのでm_は付けません。 面倒だし。
宗教じみてきたな
むしろm_を消せ
value_これだな
補完が効く環境使ってるとむしろmが付いてるほうがウザい this->って書いたら次の一字で絞りこませろよ
m_って打てば補完されるだろ
m_で補完するとかどこのIDEだよ
次スレ頼みます
俺が使ってるVC++では m_(Ctrl+Space) で補完してくれるから this->って書くより楽
じゃあ引数にh_をつけよう(提案)
引数はローカル変数なので結構です(迫真)
スコープ別補完機能最強ってことで
むしろローカル変数だけにプリフィクスつけりゃいいんじゃね
自分はサッターやGoogleに倣って、末尾に_を付けることにしている。 int localData_; のような感じ。
ローカル変数‥‥ なんだかよくわからなくなってしまったゲシュタルト崩壊中
>>978 見る事が目的なのに、それに信頼性が無かったら全く意味が無いだろ
>>988 this->とか6文字も打ってそんな事言うとか・・・
>>997 後ろに _ でも別に区別が付くという意味ではいいけど、
補完機能を使う時に引数 hoge とメンバ変数 hoge_ があった場合に
ミスって hoge を選択しそうで怖いと言う面もあるな
接尾辞よりは接頭辞の方が間違いを防ぐ意味でも良いと思う
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。