5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

【初心者歓迎】C/C++室 Ver.78【環境依存OK】

1 :デフォルトの名無しさん:2012/03/16(金) 19:44:28.87
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.77【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1323692486/

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

2 :デフォルトの名無しさん:2012/03/16(金) 20:36:37.68
>>1乙なんだからね

3 :デフォルトの名無しさん:2012/03/17(土) 16:58:26.65
環境依存とか嫌なんだけど(´・ω・`)

4 :デフォルトの名無しさん:2012/03/17(土) 18:17:19.15
c++で3dゲーム作るとしたらどんな風なdll?がおすすめですか

5 :デフォルトの名無しさん:2012/03/17(土) 18:20:35.69
DirectXとかOpenGLとかマジオススメ

6 :デフォルトの名無しさん:2012/03/17(土) 19:13:40.72
>>5
それ以外に道がない

7 :デフォルトの名無しさん:2012/03/17(土) 19:37:23.13
>>4
上位レイヤーなら
Ogre, Unreal Engine, Irrlichtとか

8 :デフォルトの名無しさん:2012/03/17(土) 19:38:04.45
>>4
で、もし言語にこだわらずゲームが作りたいだけならUnityおすすめ

9 :デフォルトの名無しさん:2012/03/17(土) 23:30:50.56
>>5-8
directxはよく見ますがそれ以外は聞いたことがないのばかりです
色々面白そうなのでかまってみます

10 :デフォルトの名無しさん:2012/03/19(月) 00:23:10.50
C++複雑過ぎてコンパイルするのが怖い
classのメンバ関数のconst参照、演算子の多重定義、テンプレート
Cってすごくシンプルでいい言語だったな・・・

11 :デフォルトの名無しさん:2012/03/19(月) 00:56:40.78
>>10
やりたい事を実行するのに必須のもんだったら別に怖いって事は無いだろうけどな。
選択権が無いのなら、お気の毒。

12 :デフォルトの名無しさん:2012/03/19(月) 01:02:12.25
いや、クラスが複雑になってきてコンパイルエラー治すのに今3、4時間かかったからさ
もちろん選択権ありありで、好きでそんなC++やってるよ

13 :デフォルトの名無しさん:2012/03/19(月) 14:47:06.48
5MBほどメモリ領域を必要とするメンバ変数を持つクラスがあるんだが
インスタンスをグローバル領域で生成すればスタックには格納されないよね?
謎のスタックオーバーフローで悩まされている・・・

14 :デフォルトの名無しさん:2012/03/19(月) 14:52:55.24
ヒープじゃダメなんですか

15 : ◆QZaw55cn4c :2012/03/21(水) 00:12:46.40
gcc4, printf() で long long unsigned int を表示するときには、%の後になにをつければいいの?何をつけても警告がでるんだけど。

16 :llu:2012/03/21(水) 00:38:16.24
>何をつけても警告がでるんだけど。
大袈裟だな。
アスキーキャラクタ 1〜10文字のすべての組み合わせ試したのか?

17 :デフォルトの名無しさん:2012/03/21(水) 00:38:24.29
lluでもなんでも好きなの使え
ちゃんと俺にもモリタポ払うんだろうな?

18 :デフォルトの名無しさん:2012/03/21(水) 01:00:32.29

グローバル変数の初期化順番について質問があります。

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());

よろしくお願いします。


19 :デフォルトの名無しさん:2012/03/21(水) 01:01:42.85
おk

20 :デフォルトの名無しさん:2012/03/21(水) 01:13:32.11
>>19
なりますか。
でもなんか変な感じがします。
最初のやつもbが"test1"になることを保証してもいい気がするんですが

21 : ◆QZaw55cn4c :2012/03/21(水) 01:34:55.92
>>17
5000モリタポお送りしたいのですがトリップがわからなくてごめんなさい。お知らせいただいてもいいのですが、>>17のトリップであることを証明してくださいね。:-)

22 :デフォルトの名無しさん:2012/03/21(水) 06:40:59.83
>>10
たまにC#使うとコンパイルの速さにビビる。

23 :デフォルトの名無しさん:2012/03/21(水) 07:45:04.57
ヘルスバーグなら速いだろうな

24 :デフォルトの名無しさん:2012/03/21(水) 08:58:40.76
>>21
お前最低な性格だな

25 :デフォルトの名無しさん:2012/03/21(水) 09:41:07.25
つーか、%lluなんてマニュアルページに書いてあることを質問している段階で馬鹿確定。
その馬鹿の性格なんてどうでもいい。

26 :デフォルトの名無しさん:2012/03/21(水) 10:30:50.38
そんな馬鹿のためにモリタポの可能性を潰されそうになってるのがムカつくわ

27 : ◆QZaw55cn4c :2012/03/21(水) 19:03:51.29
>>24
その言葉、当方には最大の賛辞と解釈します。なにせ、http://en.wikipedia.org/wiki/Doublethink こそ最高のありかたと考え日々実践していますので。

28 :デフォルトの名無しさん:2012/03/21(水) 19:58:23.60
ダブルチンコ? なんと奇遇な?

29 :デフォルトの名無しさん:2012/03/21(水) 21:15:55.03
>>27
なんか勘違いしてるな。哲学の無い矛盾はただのアホだぞ

30 :デフォルトの名無しさん:2012/03/21(水) 23:44:01.92
屑がダブルチンコwwww


31 :デフォルトの名無しさん:2012/03/22(木) 07:13:18.34
初心的な質問ですが
テキストエディタなどは
文字の量などでメモリのサイズが可変的だとおもうのですが
こういうのはあらかじめある程度の領域を確保して
必要になるとまたある程度の領域を追加で確保するという形をとっているのでしょうか?

またその中で消したりなどをした際には配列を手前へとずらしているのでしょうか?



32 :デフォルトの名無しさん:2012/03/22(木) 09:11:38.31
>>31
プログラミング作法を読むといいよ。
まぁ、行単位か頁単位でリンクトリストするとかstd::deque辺りを使っていると思う。

33 :デフォルトの名無しさん:2012/03/22(木) 09:12:25.47
間違えた、「ソフトウェア作法」だった。

34 :デフォルトの名無しさん:2012/03/22(木) 10:14:56.34
ギャップバッファ最強

35 :デフォルトの名無しさん:2012/03/23(金) 10:47:17.89
スタック、ヒープ領域につい素人的な質問ですが
以下のようにAのインスタンスを動的に作成した場合は、Aのメンバ変数のBインスタンスもヒープ領域に確保されるということでよいですか?


class A{
  B b;
};

class B{
  int nHoge;
};


A a = new A;



36 :デフォルトの名無しさん:2012/03/23(金) 11:04:45.20
うn

37 :デフォルトの名無しさん:2012/03/24(土) 08:05:41.49
いま始めたばかりの初心者なのですが、

サイト見ながら素数判定のプログラムを書いたので
実行したいのですが、どこから実行するかどなたか教えてください

38 :デフォルトの名無しさん:2012/03/24(土) 10:35:53.39
コンパイラや開発環境と呼べるようなものを持っているなら、
まずはそれの名前を書け

持っていないなら、それらをインストールしろ。

常用にはすすめられないが↓みたいなものある
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)


39 :デフォルトの名無しさん:2012/03/24(土) 12:18:04.67
wxWidgets2.9とmingwを使用しています。
コンパイルの仕方についての質問ですが、、このスレでよいでしょうか?

40 :デフォルトの名無しさん:2012/03/24(土) 12:47:15.46
RTFM

41 :デフォルトの名無しさん:2012/03/25(日) 00:50:40.96
STLで2つのコンテナの合成アルゴリズムありませんか?
例えばvector A, Bの全要素に対してplus関数オブジェクトを適用すればA[i] += B[i]してくれるようなもの。


42 :デフォルトの名無しさん:2012/03/25(日) 00:54:11.55
transformでいけそうです

43 :デフォルトの名無しさん:2012/03/25(日) 00:59:51.63
VC++2008はいつC++11に対応するんですか?

44 :デフォルトの名無しさん:2012/03/25(日) 01:01:25.78
2010ですら中途半端なのに

45 :デフォルトの名無しさん:2012/03/25(日) 01:15:00.78
transformじゃできなかったです!!どうすればいいでしょうか

46 :デフォルトの名無しさん:2012/03/25(日) 01:35:14.86
>>45
できるだろ
ttp://codepad.org/xpZIG0uX

47 :デフォルトの名無しさん:2012/03/25(日) 01:42:34.17
ほんとだ。ありがと。
よく見たらbinary_function継承したクラスにコンパイルエラーが出てて
実行されてたのは修正前の古いexeでした。

48 :デフォルトの名無しさん:2012/03/25(日) 19:22:51.09
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];
}

お騒がせして勝手に自己解決してすいませんでした

50 :デフォルトの名無しさん:2012/03/25(日) 19:35:24.20
>>48
そのクラス、コピー代入演算子やデストラクタも定義されてるんだよね?
コピー代入演算子の実装は初期化済みのオブジェクトを期待してるだろうから、
ら未初期化のオブジェクトに対して代入しちゃマズイでしょう。

51 :48:2012/03/25(日) 19:38:35.35
>>50
まさにそういうことなんですよね・・・
コピーコンストラクタとコピー代入演算子の違いが初めてはっきり分かった気がします。

52 :デフォルトの名無しさん:2012/03/25(日) 19:38:54.60
うわ、解決してた。

にしても自己初期化に何かしらの動作を与えても呼び出しもとのバグであることに
変わりはないだろうから、心配するとしても assert() ぐらいでいいと思うぜ。

53 :デフォルトの名無しさん:2012/03/25(日) 19:43:15.84
>呼び出しもとのバグであることに変わりはないだろうから、心配するとしても assert() ぐらいでいいと思う
眼から鱗ですね。確かにその通りです

54 :デフォルトの名無しさん:2012/03/25(日) 23:37:39.03
独習C言語を読み終わり、乗っていたすべての例題を解けるようにはなりました。
そろそろGUIなプログラムを作ってみたいのですが、次は何を理解すればよいのでしょうか?

55 :デフォルトの名無しさん:2012/03/25(日) 23:48:43.74
>>54
独習C++

56 :デフォルトの名無しさん:2012/03/26(月) 00:04:15.47
>>54
プラットフォームや見た目、使い勝手などから、
目的に合いそうなGUIツールキットを探す

57 :デフォルトの名無しさん:2012/03/26(月) 03:50:29.17
>>54 作りたいものに応じた開発言語・ライブラリ選択基準

58 :デフォルトの名無しさん:2012/03/26(月) 04:37:34.80
ふと自作クラスを作っているとき疑問に思ったのだが
C++の既存のWin32ライブラリ、例えばMFCとかATL/WTLは
BOOL型とbool型が混在しているが、メソッドの戻り値の型を例に取ると
どういう場合はBOOL型にし、またはbool型にすべきなのだろう?

59 :デフォルトの名無しさん:2012/03/26(月) 04:55:41.62
>>58
自分で作るならbool、APIの戻り値をそのまま戻すなら(必要に応じて)BOOL。
ちなみに、Win32APIのBOOLは二値じゃない。

60 :デフォルトの名無しさん:2012/03/26(月) 05:49:34.50
>>59
MFCなどはAPIとの整合性を重視してBOOLを使うのだろうか?
C++のライブラリであるなら言語仕様にあるboolを使うべきと思うのだが、
boolを使うデメリットがあるのでしょうか?
シリアル化の場面ぐらいしか思い浮かばないが…

61 :デフォルトの名無しさん:2012/03/26(月) 07:21:25.04
Win32API 使う人の中じゃ有名だろうが、
GetMessageという関数があって、こいつはBOOL型を返すくせに、
-1、0、それ以外の値の3種類がある

そういう特別な例外だけ気にしておけば bool で構わないと思う

62 :デフォルトの名無しさん:2012/03/26(月) 10:13:39.23
BOOLを返す関数の戻り値はBOOLで受ければいいお
それからエラー処理でも何でもすればいいんだお

63 :デフォルトの名無しさん:2012/03/26(月) 11:00:52.23
Windowsデータ型のBOOLはBYTEの別名でBYTEはunsigned charの別名なんだっけか?

64 :デフォルトの名無しさん:2012/03/26(月) 11:58:50.71
http://msdn.microsoft.com/en-us/library/aa383751
BOOLはint

65 :デフォルトの名無しさん:2012/03/26(月) 12:01:48.56
>>61
実用上ではboolでキャストしても問題ないとかじゃなくて、
むしろリファレンスにboolで受けるなよ!絶対だぞ!って書かれてるのか(´・ω・`)

66 :デフォルトの名無しさん:2012/03/26(月) 13:22:12.48
>>64
うは、BOOLとBOOLEANで型が違うw

67 :デフォルトの名無しさん:2012/03/27(火) 01:19:38.40
以下のフォーマットになるようにバイナリデータ
を作成したいのですが、どうするのが手っ取り早いでしょうか?

[フォーマット]
┌───────┬─────┬─────┬─────┬─────┐
|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

というような感じにしたい。

どういうロジックにするのが簡単なのでしょうか?

68 :デフォルトの名無しさん:2012/03/27(火) 02:14:14.28
>>67
ビットフィールドでググれ

69 :デフォルトの名無しさん:2012/03/27(火) 02:35:43.19
任意のビット幅のポインタをクラスで作成して使えばよいんじゃね。

operatorとか使うのがよく判らないなら、Read/Write用のメンバ関数を用意してもいいし。

bit幅が64bitを超える場合はちょっと面倒になりそうではあるが。

70 :デフォルトの名無しさん:2012/03/27(火) 08:18:18.66
>>69
ビット長が5ビットで表現されているんだから64bitを超えるわけないだろ。JK

>>67
で、Nが0だったらどうなんの? Nが8を超えたときも2-4バイトにパディングしていいの?

71 :デフォルトの名無しさん:2012/03/27(火) 08:20:03.12
あ、違うのか。失敬。

>>67
パディングは最後だけってことね。

>>69
総ビット長が64bitを越えるってことか? だとしても、なんで面倒になるんだ?

72 :デフォルトの名無しさん:2012/03/27(火) 14:06:49.35
>>67
横からだけど適当に作ってみた
http://codepad.org/HyDOJc5n


73 :デフォルトの名無しさん:2012/03/27(火) 23:45:00.45
>>67-72
返事遅くなり申し訳ございませn。
レスありがとうございました。

>>68
ビットフィールドを調べました。
確かに便利だと思いましたが、ビット長が可変なので
使えないのかと思いました。

>>72
サンプルありがとうございます。
こんなに少ないロジックでできるんですね。
ただ、理解があまり出来ておりません
・数個ある条件式の意味
・変数maskが何故こうしてやればいいのか。
※ヘタレですません。

自分は必死こいて、ビットシフトやら、ビットマスクなどを
駆使してベタベタにコード書いてやっとできたんですけど、
72さんのサンプルを参考につくり治したいと思います。


74 :デフォルトの名無しさん:2012/03/28(水) 09:02:31.82
他のスレッドを実行しているCPU番号を取得するAPIはありませんか?
GetCurrentProcessorNumberで自分のスレッドのCPU番号は調べられますが
他のスレッドのCPU番号はどうすればよいですか?

対象のスレッドは自分のコードではありません。

できればXPでも実現できる方法が知りたいです。

75 :デフォルトの名無しさん:2012/03/28(水) 09:04:33.89
ttp://d.hatena.ne.jp/topiyama/20090623/p1
アセンブラ使えばできるらしい

76 :デフォルトの名無しさん:2012/03/28(水) 12:37:20.36
その記事には行き着いたのですが、
他のスレッドからそれを実行しても意味がないと思うのです。

77 :デフォルトの名無しさん:2012/03/28(水) 14:05:41.14
そんなもん取得して何がしたいのか

78 :デフォルトの名無しさん:2012/03/28(水) 14:10:32.52
>>67 をbitset使って書いたらキショくなったでござる
http://ideone.com/LtgS7

79 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/29(木) 13:02:41.54
他の関数に ジャンプ できますか?

80 : ◆QZaw55cn4c :2012/03/30(金) 05:09:54.89
>>79
制限付でsetjmp()/longjmp

81 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 00:26:51.70
2種類の全く異なるクラスがそれぞれのポインタを利用してtree状に循環参照する時に
ヘッダファイルの定義はいったいどう記述すればいいのですかね
一度だけコンパイラに参照されると片方でしか定義されないことになってしまってエラーになる
ヘッダだけでvoid*型にしてcppファイルで形指定して参照するくらいしか思い浮かばないけどダサすぎる

82 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 00:29:47.58
クラス名だけ書いておけばいいって話ではなく?

83 :81:2012/03/31(土) 00:50:38.47
すまん、出来ればhファイルだけで完結させたくて
関数のスクリプトも全部hファイルに記述しようとしてるんだけど
名前を入れるだけではnewの部分で形が認識できないとエラーになる

84 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 00:52:47.84
inline CLASS::func(){} を知らないて話し?

85 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 01:04:26.86
んーなんかなにがやりたいかよくわからんね
エラーの出る最小コードとか作れない?

86 :片山博文MZボット ◆0lBZNi.Q7evd :2012/03/31(土) 14:18:41.39
RubyスクリプトをC言語に翻訳することできますか?

87 :片山博文MZボット ◆0lBZNi.Q7evd :2012/03/31(土) 14:19:49.58
>>81 >>83 ポインタのみ必要なら、class HOGEHOGE; って書いておけば?

88 :片山博文MZボット ◆0lBZNi.Q7evd :2012/03/31(土) 14:24:24.01
class HOGE1;
class HOGE2;

class HOGE1 { ... HOGE2* getHoge2(); ... };
class HOGE2 { ... HOGE1* getHoge1(); ... };
inline HOGE2* HOGE1::getHoge2() { return new HOGE2; }

89 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 16:06:16.23
個人的にはツリーのノードにあたる部分のインターフェイスを定義してから
両方のクラスはそのインターフェイスを継承して作るのがいいんじゃないかと思うがどうか

90 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 23:48:24.66
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ファイルのみでクラスを実装しようとした時に
双方向で参照可能にするようなコンパイラの定義方法が存在しないので困ってる

92 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 03:11:13.67
cppに定義かけ
c++じゃそれが普通だ

93 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 03:13:11.61
>>91
a.h,b.hをまとめてab.hに書く
普通はcppに書くけどね

94 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 08:48:02.88
>>93
テンプレートでなら見たことがあるな、そういう書き方。
普段からC/C++に触ってるわけじゃないので、今でもやるのかどうかは知らないけど。

95 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 11:17:11.93
いくら初心者でもそのコードはひどい…
あとC++とJavaは単に文法が似ているだけで中身全く別の言語なんで
"Javaのように"できることはほとんどないと思ったほうがいい
むしろ危険

96 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 17:59:11.24
質問させてください。

環境:Windows7 32bit , Visual Studio 2005

fopen("r+")で取得したファイルポインタに書き込む際、
"w"で開いたかのように書き込む(内容をすべて上書きする)方法はありますか?

97 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 18:27:13.37
_chsize()または_chsize_s()

98 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 19:16:45.57
>>97
ありがとうございます!

99 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 02:02:15.72
>>91
なんでそんな上から目線なの?

もうbをaの内部クラスにしちまえよ

100 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 10:28:15.11
vc10で銀行丸めの関数を作りたいのですが
単純に実装すると、負かどうかや、小数部がちょうど0.5のとき
など分岐だらけになってしまいます。
分岐のない高速なアルゴリズムを教えていただけませんか?

101 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 10:48:00.45
分岐なしじゃ無理

102 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 11:09:16.62
その程度なら十分に高速そうだしなー

103 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 11:38:21.93
>>100
適当に楽に作れ。
あとでそこがボトルネッが判明してから手を出す。

104 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 13:38:52.92
>>100
cmov使ってみたら?

用途は違うけど分岐なくそうと思って昔SSEで書いたことがあるんだけど
そのときはSSEレジスタへのロード&ストアが遅すぎて敗北した

ぜひ試してみて結果を教えてほしい

105 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 22:57:35.42
>>hファイルのみでクラスを実装しようとした時に
この前提がありえないからその悩み自体ゴミだ

106 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 23:18:05.81
メンバメソッドの規模をワンライナーに限定して使役関数はクラス外部に置けば有り得ない話じゃないな
内部構造と実装コードの癒着が少なくなる方向付けも出来るし

107 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 23:30:14.72
テンプレートならむしろヘッダファイルに書くのが普通

108 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 01:07:24.50
それって古いVCのテンプレート周りのバグ対策じゃね?

109 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 07:22:15.00
んなこたない
勉強すれ

110 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 10:07:30.06
いまだにヘッダにロジック書くバカがいるのかよ

111 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 12:38:32.98
テンプレートはしょうがねーべ。
あんまりロジック部分を別の翻訳単位に分離すると
コンパイル時間が爆発的に大きくなるから。

どっかのブログで理論値と実測結果の両方を示して
「テンプレートは全部一つの翻訳単位に埋め込むと超速^^」
みたいなおもしろい結論(ただし上司に殺される)を出してなかったっけか

112 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 15:35:16.49
>>100
boostにあるんじゃね?

113 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 21:22:45.05
テンプレートはコンパイラから実装が見えないと実体化できないので、通常はヘッダに実装を書く
文法上はこの制限を回避するexportキーワードってのもあるが
現実はほとんどのコンパイラが実装してなかったし、C++11では削除された

boostなんて全部ヘッダにロジック書いてる

114 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 22:39:46.72
C、C++、Windows API でファイル入出力など同じような関数がありますが
使い分ける基準などあるのでしょうか?

115 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 22:40:51.20
自分が使いやすいの使えばいい

116 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 23:20:31.03
Visual C++とかGCCを使っている限りは
Windows API使わないとUnicode入出力できんぞ。
(正確には、「できるがめんどい」・3・)

117 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 23:48:25.94
>>114
自分に必要な機能を持ってるものを選ぶ
機能的にどれでも要件を満たしているなら、使い勝手、パフォーマンス、移植性等を
考慮して自分にとってメリットの大きいものを選ぶ
ただしWindowsの入出力ではUnicodeファイル名やラージファイル等をサポートしたい
場合、移植性はどのみち犠牲になってくるが

ファイル入出力に関して言えば、例えばAPIでファイルを開いた後
_open_osfhandle() -> _fdopen()
でファイルポインタを得てstdioを使う、といった複合技も可能だよ

118 :114:2012/04/06(金) 00:12:50.72
>>115-117
返答ありがとうございます、まだ単純なファイル操作しかわかりませんが
それぞれ区別が付くように調べてみます

119 :デフォルトの名無しさん:2012/04/12(木) 10:23:09.39
gccの-Sオプションで吐かれるファイルにCのソースコードを埋め込むオプションはありますか?

VC++でいう/FAsのようなものがほしいのですが

120 :デフォルトの名無しさん:2012/04/12(木) 10:52:43.45
>>119 gcc -Wa,-adlh -g -c

121 :デフォルトの名無しさん:2012/04/12(木) 21:26:46.42
ツリービューにイメージリストをセットすると、使用後イメージリストを削除する必要があるようです
リストビューにイメージリストをセットすると、リストビューが勝手に削除してくれるようです
拡張コンボボックスのイメージリストは削除されるのでしょうか?
また、仮にリソースリークしてもアプリケーションが終了すれば問題ないのでしょうか?教えてください

122 :デフォルトの名無しさん:2012/04/13(金) 01:53:33.31
>>120
ありがとうございます
やりたかったことはまさにこれで、FreeBSD上ではうまく動きました

が、Windows上のh8300-elf-gccではエラーがでてうまく逝きませんでした(´・ω・`)
もうちょっと調べてみます

123 :デフォルトの名無しさん:2012/04/13(金) 22:36:29.92
どす窓のプログラムを書きたいのですが、
普段は別の処理をしていて、キーボードから入力があったときのみにそれに対して反応させるにはどうすればよいのでしょう?


124 :デフォルトの名無しさん:2012/04/13(金) 22:51:23.67
別の処理の内容次第

125 :123:2012/04/13(金) 22:55:26.44
>>124
入門書を読み終えたので、STGでも作ってみようかと思ったのですが、どうしても入力待ちで停止してしまいます。
なにか良い方法はないでしょうか?

126 :デフォルトの名無しさん:2012/04/13(金) 22:57:57.11
標準関数だけで 何も押されてないということもわかる入力監視ってできるのかな?
(getchar() は 入力があるまで止まるよね)

非標準関数なら環境によって色々あるだろうけど

127 :デフォルトの名無しさん:2012/04/13(金) 22:59:49.04
止まってることがそういうこと

128 :デフォルトの名無しさん:2012/04/13(金) 23:04:42.46
kbhit()は?

129 :デフォルトの名無しさん:2012/04/13(金) 23:06:15.27
検索していたらkbhitというものがあるようですね
こいつを試してみます

130 :デフォルトの名無しさん:2012/04/13(金) 23:07:02.09
>>128
書き込む前に更新するの忘れてました
kbhitで試してみます
ありがとうございました

131 :デフォルトの名無しさん:2012/04/13(金) 23:11:46.73
CUIなのか。
curses使え


132 :デフォルトの名無しさん:2012/04/15(日) 01:22:10.10
autoconfで configure/make するようなソフトウェアを、Visual C++の cl.exe でビルドすることって出来る?

133 :デフォルトの名無しさん:2012/04/15(日) 11:41:23.86
>>132
ものによるけど、VCでビルドすることを考えているものは、大体ビルド手段を
提供しているから、それがないものは簡単にはいかないと思った方がいい

やって出来なくないものもあったけど、ソースの書き換えが必要だったり、
ビルドされる流れを理解する必要があったり、関連ライブラリの移植が必要だったりと、
かなり労力がかかったよ

134 :デフォルトの名無しさん:2012/04/17(火) 18:32:12.77
どうしてテンプレートというものが出来たのでしょうか?
せっかく型に厳密だったのに台無しじゃないですか?

135 :デフォルトの名無しさん:2012/04/17(火) 18:53:32.49
>>132
MinGWで簡単にビルドできて(依存性が少ない)、かつC99で書かれていないなら
比較的容易にMSVC対応できる可能性は高い

MinGWでもビルドが面倒くさかったりMinGWでもビルドできなかったりC99で
書かれているものは基本的に茨の道だが、これも難易度はケースバイケース
Unixのシステムコールが使われているようなものでも、ある程度簡単に移植可能な
ものもあるが、fork()あたりが使われているとそうはいかない

136 :デフォルトの名無しさん:2012/04/17(火) 18:55:17.02
ああそうそう、C99もだがgcc拡張(gcc形式でのインラインアセンブラも含む)
なんかもダメよ
まあ細かい話だけど

137 :デフォルトの名無しさん:2012/04/17(火) 21:11:26.93
>>134
複数の型に対応できるだけであって、厳密なのは大して変わらなくね?

138 :デフォルトの名無しさん:2012/04/17(火) 21:16:56.68
テンプレートこそ型に厳密だよな

139 :デフォルトの名無しさん:2012/04/17(火) 22:01:52.37
>>134 は一体何を言っているんだ

140 : ◆QZaw55cn4c :2012/04/17(火) 22:03:09.58
qsort() をみよ。void * は事実上なんでもあり。


141 :デフォルトの名無しさん:2012/04/18(水) 03:27:26.98
しかも何気ないCスタイルキャストでreinterpret_castとconst_cast を一気にやるとか凶悪な使い方が横行する。

142 :デフォルトの名無しさん:2012/04/18(水) 07:56:28.43
#define const_cast Dont_use_constcast

とかやりたくなるな…

143 :デフォルトの名無しさん:2012/04/18(水) 12:10:36.84
C++は無理が多いな

144 :デフォルトの名無しさん:2012/04/18(水) 12:15:06.88
するべきでないことが
やりづらくなっているのはいいことだ

145 :デフォルトの名無しさん:2012/04/18(水) 22:05:07.60
最近C++始めたんだがどうやって覚えていけばいいのかわからない

146 :デフォルトの名無しさん:2012/04/18(水) 23:38:42.82
>>145
まずはCを始めます。
次に、C++の入門書を読みます。
\(^o^)/

147 :デフォルトの名無しさん:2012/04/19(木) 21:49:25.06
>>146
C++の得意分野というか、C++を習うとどんなことができるのだろうか。
馬鹿なことを聞くなと言われそうだが、プログラミングの腕を磨きたいと
思って。誰か教えてください。以前、C言語とFortran, Perl を
やったことがあります。

148 :デフォルトの名無しさん:2012/04/19(木) 22:06:11.64
コンテナはなかなか感動する

149 :デフォルトの名無しさん:2012/04/19(木) 22:52:05.88
>>147
不可能をなくすことができる

150 :デフォルトの名無しさん:2012/04/20(金) 01:19:38.32
>>147
とりあえず、windowsでGUIをもつソフト作ろうと思うとC++の知識が不可欠らしい。
自分はオブジェクト指向が意味不明で積んだw

151 :デフォルトの名無しさん:2012/04/20(金) 01:32:31.40
自コード内で多態とオーバーロードとstatic変数とADLさえ巧く避ければイイ言語だよ。

152 :デフォルトの名無しさん:2012/04/20(金) 08:47:42.14
>>149
>>150
>>151
レスありがとうございました。
まさかレスが返ってくるとは思わなかったのでうれしかったです。

153 :デフォルトの名無しさん:2012/04/20(金) 21:51:11.70
>>150
windowsのGUIは、api使ってC言語でできる
というか、基本のapiはただの関数なので、C++である必要はない


154 :デフォルトの名無しさん:2012/04/21(土) 02:57:43.35
リソースの破棄が簡単になったことだな。

155 :デフォルトの名無しさん:2012/04/21(土) 19:34:54.96
いまC/C++でGUIソフト作るとき何使うのが一般的なんだろう。
win32api勉強してみたが本格的なもの作れる気がしないわ。

156 :デフォルトの名無しさん:2012/04/21(土) 19:57:54.08
おすすめ
fox
SDL
C#
GTK
HSP

C++でないものをあるが、メインはC++DLLで作って呼び出せばいい・。

157 :デフォルトの名無しさん:2012/04/21(土) 20:14:00.67
>>156
ありがとう
FOXとSDLは初めて聞いたなぁ

158 :デフォルトの名無しさん:2012/04/21(土) 22:58:28.93
Qtでいいじゃん

159 :デフォルトの名無しさん:2012/04/22(日) 00:40:09.41
>>155
環境や目的によって変わってくるので
一通り使って消去法で選ぶのがいいと思うよ

マルチスレッド対応なGUIツールキット欲しいわぁ

160 :デフォルトの名無しさん:2012/04/22(日) 01:58:03.13
マルチスレッド対応GUIツールキットってどういう意味?
マルチスレッド機能とGUIが一緒についてくるってだけ?

161 :デフォルトの名無しさん:2012/04/22(日) 16:22:53.86
GUI本体はイベントドリブンだな。


162 :デフォルトの名無しさん:2012/04/22(日) 16:30:56.36
C++でメモリの再確保ってどうやればいいんでしょうか?

163 :デフォルトの名無しさん:2012/04/22(日) 17:01:33.35
使いまわせばいい

164 :デフォルトの名無しさん:2012/04/22(日) 17:11:29.74
>>162
コンテナに要素を追加するとか realloc() を呼び出すとか

165 :デフォルトの名無しさん:2012/04/22(日) 17:31:08.80
>>164
ありがとうございます。
C++ではmallocはあまり使わないと書いてあったのですが
再確保の場合コンテナを使うのが一般的なのでしょうか?

166 :デフォルトの名無しさん:2012/04/22(日) 17:35:42.22
>>165
そもそも「再確保」を目的にすることが無い。
どうせコンテナの要素を動的に増やしたいんだろ。
標準ライブラリを使って素直なコードを書けばいい。

167 :名無しさん:2012/04/23(月) 15:05:45.62
検索エンジン→心の病→西東京バス事件

168 :デフォルトの名無しさん:2012/04/23(月) 23:27:17.12
>>160
擬似コード書くと
subthread() {
App().MainLoop(Form())
}
これがまともに動くもの。

169 :デフォルトの名無しさん:2012/04/24(火) 01:28:50.39
Windowsで別のプロセスに属する2つのウインドウの上下関係を設定することはできますか?

> SetParent 関数を使うと、ポップアップウィンドウ、オーバーラップウィンドウ、子ウィンドウの親ウィンドウを設定できます。新しい親ウィンドウと子ウィンドウは、同一アプリケーションに属していなければなりません。

ということらしいのですが・・・

なければイベントを捕まえて上下関係を設定しなおすことも考えているのですがちらつきそうで

170 :デフォルトの名無しさん:2012/04/24(火) 01:43:22.31
>>169
スレ違い

171 :デフォルトの名無しさん:2012/04/24(火) 06:38:02.17
宿題で出されたこの問題が分からないのですが、誰か教えてくれませんか。

1〜9までの連続する数字の間に和・差・積の演算子(+, -, *)を適当に入れて、
式の値がちょうど 100 となる例を挙げよ(10とおりだけ書け)。

たとえば、
 1 + 2 * 3 * 4 * 5 + 6 * 7 - 8 * 9 = 91
というような計算をする。ただし、この例では式の値が91となるので答えではない。

172 :デフォルトの名無しさん:2012/04/24(火) 06:39:48.93
プログラム関係ないじゃん

173 :デフォルトの名無しさん:2012/04/24(火) 10:38:37.42
>>171
C/C++の宿題片付けます 156代目
http://toro.2ch.net/test/read.cgi/tech/1328276597/

291 :デフォルトの名無しさん:2012/02/16(木) 07:29:17.20
[1] 授業単元:知識と推論
[2] 問題文 探索によってパズルを解くプログラムを作成せよ(小町算)
[3] 環境
 [3.1] OS: Windows7
 [3.2] コンパイラ名とバージョン: VisualStudio2010
 [3.3] 言語: C言語
[4] 期限: 2/16

よろしくおねがいします><

292 :デフォルトの名無しさん:2012/02/16(木) 08:52:44.46
>>291
小町算には変形ルールのやつもあるけど、
「1□2□3□4□5□6□7□8□9 = 100 という数式の□の中に、+,−,×,÷,空白 のいずれかを一つずつ入れる」でいいのかな?
ttp://ja.wikipedia.org/wiki/%E5%B0%8F%E7%94%BA%E7%AE%97

293 :デフォルトの名無しさん:2012/02/16(木) 12:34:14.04
>>291
空白なし、*優先、/で小数部切り捨てなら↓
http://ideone.com/IjTzV

174 :デフォルトの名無しさん:2012/04/24(火) 13:51:56.91
>>170
これは失礼

175 :デフォルトの名無しさん:2012/04/24(火) 23:00:53.38
Win32質問箱に投稿したのと同じ質問ですが、
あちらは機能していないようなのでこちらで改めてお尋ねします。。

VS2010でWTLベースのアプリを作成しているのですが、ウィンドウ上でマウスポインタを
移動しているとき、Ctrlキーが押されている間だけポインタを変更したいのです。
しかし、クライアント領域内でポインタを動かすだけではWM_SETCURSOR メッセージが
送られず、ポインタを変更できません。
任意のタイミングでポインタを変更する方法はないでしょうか。

176 :デフォルトの名無しさん:2012/04/24(火) 23:03:58.28
SetCursorってまんまのがあるじゃない

177 :デフォルトの名無しさん:2012/04/27(金) 07:42:07.68
iphoneよくわからん
nebulousってアプリでコーディングしてそのままmobileterminalでコンパイルしてんるだけど/nで改行してくれない
さすが文鎮

178 :デフォルトの名無しさん:2012/04/27(金) 07:49:48.78
/n

179 :デフォルトの名無しさん:2012/04/27(金) 07:59:41.41
四時間位四苦八苦してたけどコンパイラとツールチェーンcydiaから再インスコしたら自己解決したわ

180 :デフォルトの名無しさん:2012/04/28(土) 16:54:19.12
メンバ変数の初期値は0ですか?

181 :デフォルトの名無しさん:2012/04/28(土) 17:03:16.45
そんなこと無いので初期化しましょう

182 :デフォルトの名無しさん:2012/04/28(土) 22:24:14.40
仮引数の変数名を書くのと書かないのではパフォーマンスが変わったりしますか?

183 :デフォルトの名無しさん:2012/04/28(土) 22:44:40.57
変わるわけねーだろ

184 :デフォルトの名無しさん:2012/04/29(日) 08:50:02.98
えw

185 :デフォルトの名無しさん:2012/04/29(日) 10:11:23.50
そりゃぁ、書くと書かないとで意味が変わらないコードだったら書かないのと同じだから差は出ないよ。

と言いつつ、>182, >183, >184が三人とも私と違う解釈をしていて話が噛み合っていないだけなんだろうけどね。

186 :デフォルトの名無しさん:2012/04/29(日) 12:20:18.11
C++でもメンバ変数の初期値は不定なの?

187 :デフォルトの名無しさん:2012/04/29(日) 12:28:18.78
不定です

188 :デフォルトの名無しさん:2012/04/29(日) 13:27:32.41
太ぇ野郎だ

189 :デフォルトの名無しさん:2012/04/29(日) 14:19:30.94
不定っていうけど+にはならないよね。なんでか

190 :デフォルトの名無しさん:2012/04/29(日) 14:26:13.94
>>189
それ 0xcd とかデバッグ時メモリ未初期化のデフォルト値が入ってるんじゃね

191 :デフォルトの名無しさん:2012/04/29(日) 15:27:09.55
>>189
フフフフフフフ

192 :デフォルトの名無しさん:2012/04/30(月) 01:06:03.83
たまに フフフノフフフ になるよ

193 :デフォルトの名無しさん:2012/04/30(月) 12:24:04.25
ならねーよ

194 :デフォルトの名無しさん:2012/04/30(月) 12:25:36.33
そうでしたっけ?ウフフ

195 :デフォルトの名無しさん:2012/04/30(月) 16:12:04.73
漠然とした質問になってしまうが
パーサを作ろうと思っているのだが、何か決まった作り方とかありますか?
デザインパターン的な

196 :デフォルトの名無しさん:2012/04/30(月) 16:26:53.12
使えるライブラリを選んで使え

197 :デフォルトの名無しさん:2012/04/30(月) 16:27:32.29
>>195

構文解析器
http://ja.wikipedia.org/wiki/%E6%A7%8B%E6%96%87%E8%A7%A3%E6%9E%90%E5%99%A8

198 :デフォルトの名無しさん:2012/04/30(月) 16:43:40.52
>>197
ありがとう
今までホント自己流でやってきたから情報ありがたい
パーサライブラリとかもあるんかな?ぐぐってみる

199 :デフォルトの名無しさん:2012/05/01(火) 12:28:53.02
構文解析器をゆっくり読むとひみつどうぐ風に聞こえる

200 :デフォルトの名無しさん:2012/05/02(水) 01:44:51.75
VC拡張か普通の規格かわかりませんがoverrideを強制する方法はありませんか?

class A{
virtual void func(void) = 0;
};
class B : public A{
virtual void func(void) override;
};

のようにoverrideがなければコンパイルエラーにしたいのですが
誰かがvoid A::func(int)のように変更した時にBの変更し忘れを検出したいというのが目的です

201 :デフォルトの名無しさん:2012/05/02(水) 03:14:58.13
/we 3668
かな
Windows使ってないけど。

202 :NAS6 ◆n3AmnVhjwc :2012/05/02(水) 16:13:47.90
素数判定プログラム
エラトステネスの櫛とためし割りのハイブリッド
ttp://www5b.biglobe.ne.jp/~NAS6/secret/index.htm
664579番目の素数検索
通常ルーチンprime4()int型3867ms
私のint型1654ms long long int型5897ms

203 :NAS6 ◆n3AmnVhjwc :2012/05/02(水) 16:17:06.10
初期化も時間に含めるのか分からん

204 :デフォルトの名無しさん:2012/05/02(水) 22:33:34.50
篩で高速化すんなら、アトキンの篩ぐらい使えよw

205 :NAS6 ◆n3AmnVhjwc :2012/05/02(水) 22:55:55.73
アトキン調べてコード見た感じ私の方が速そうですよ
メモリの都合で最大9番目までの素数の乗算の数の
エラトステネスの篩を初期化して倍数掛け

206 :NAS6 ◆n3AmnVhjwc :2012/05/02(水) 23:11:28.56
逐次篩というやつだった

207 :デフォルトの名無しさん:2012/05/02(水) 23:13:35.71
素数判定なんて相当研究されてるだろ。
例えばフリーで使える速いやつにかったら研究者になれるレベルだろ。


208 :デフォルトの名無しさん:2012/05/02(水) 23:16:55.32
>>205
9番目までなら

209 :デフォルトの名無しさん:2012/05/02(水) 23:27:31.70

AKS素数判定法は、与えられた自然数が素数であるかどうかを決定的多項式時間で判定できる、世界初のアルゴリズムである。
http://ja.wikipedia.org/wiki/AKS%E7%B4%A0%E6%95%B0%E5%88%A4%E5%AE%9A%E6%B3%95

ミラー-ラビン素数判定法は、与えられた数が素数かどうかを判定する素数判定アルゴリズムの一種。
フェルマーの素数判定法や Solovay-Strassen 素数判定法と同じく、乱択アルゴリズムの一種である。
http://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%A9%E3%83%BC-%E3%83%A9%E3%83%93%E3%83%B3%E7%B4%A0%E6%95%B0%E5%88%A4%E5%AE%9A%E6%B3%95

一般数体ふるい法 - Google 検索
http://www.google.com/search?q=%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E3%81%B5%E3%82%8B%E3%81%84%E6%B3%95

Adleman-Pomerance-Rumely - Google 検索
http://www.google.com/search?q=Adleman-Pomerance-Rumely&lr=lang_ja

暗号理論の研究動向
暗号技術調査室では、最先端の暗号基礎技術研究の動向を調査してきた。 暗号は、もはや軍事目的のみでなく、日常生活に欠かすことの出来ない基礎技術として、 一般消費者が意識するしないに関わらず頻繁に用いられている。
http://www.ipa.go.jp/security/fy10/contents/crypto/report/Cryptographic-Research.htm

一般数体篩法実装実験(6) : 格子篩
小さな因子を含まない数百ビット以上の合成数に対する素因数分解アルゴリズムとして,数体篩法が現在最も高速と考えられている.
http://ci.nii.ac.jp/naid/110003296537

NTTら、768ビット合成数を一般数体篩法にて完全分解に成功  [2010/01/08]
http://news.mynavi.jp/news/2010/01/08/055/index.html


素数判定に使用しているプログラムを紹介します。
http://www.geocities.jp/ayuchan_k_jp/prime/prime_program.html

210 :デフォルトの名無しさん:2012/05/03(木) 01:39:29.76
33,333,333個の素数判定
http://www.spoj.pl/problems/PRIC/

211 :デフォルトの名無しさん:2012/05/03(木) 19:53:47.06
>>201
質問者は確実にC3668などを発生させられるために
overrideの使用を強制したいと言っているように思われる。

俺もあれば使いたいんだけど、見当たらないんだよね……。

212 :デフォルトの名無しさん:2012/05/03(木) 20:11:40.53
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になって上手くいきません。


214 :デフォルトの名無しさん:2012/05/04(金) 02:21:52.91
((n-1)%4)+1

215 :デフォルトの名無しさん:2012/05/04(金) 02:55:08.02
ありがとうございました。

216 :NAS6 ◆n3AmnVhjwc :2012/05/04(金) 18:00:53.36
二次篩法を実装したけど
大きな数じゃないと処理が重くて出番がない

217 : ◆QZaw55cn4c :2012/05/04(金) 18:04:29.39
>>216
大きな素数(メルセンヌ数など)の原始根を求めたいんだが、なんかいい方法はないか?
素数自体は 2^1000 程度、原始根は 2 とか 3 とかじゃなくて、300〜500 前後のものがほしいのだが。

218 :デフォルトの名無しさん:2012/05/04(金) 18:27:33.29
原始根と指数

http://aozoragakuen.sakura.ne.jp/suuron/node37.html

219 :NAS6 ◆n3AmnVhjwc :2012/05/04(金) 18:39:10.94
二次篩法とためし割りでいいんじゃない

220 :デフォルトの名無しさん:2012/05/04(金) 18:39:56.79
原始根

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1235764892
http://mailsrv.nara-edu.ac.jp/~asait/c_program/sample/primitive.htm
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1316937973
http://www004.upp.so-net.ne.jp/s_honma/algebra/algebra21.htm
http://homepage2.nifty.com/socialist-consort/agora_faith/PrimitiveRoot09.html


221 :デフォルトの名無しさん:2012/05/05(土) 07:00:10.49
ある整数が素数だと分かってなになるんだ?


222 :デフォルトの名無しさん:2012/05/05(土) 07:04:55.38
わかる仮定が大事
あと暗号で素数を利用してるケースが多々あるとか

223 :デフォルトの名無しさん:2012/05/05(土) 07:31:43.91
そういう意味じゃなくて・・・

その手の話は、コンピュータサイエンスやってる科学者だろ

アプリケーションを作成するようなレベルで素数なんて使うか?

224 :デフォルトの名無しさん:2012/05/05(土) 09:15:25.97
実用的な使い方ではないけど、DHの理論が成立することを確認するとか?

225 : ◆QZaw55cn4c :2012/05/05(土) 10:31:37.03
>>224
ピンポン!原始根って虱潰ししかないのでしょうかね。 2^30 くらいで青息吐息

226 :デフォルトの名無しさん:2012/05/05(土) 13:00:54.54
素数を使ったモジュラアルゴリズムは山ほどあるだろ。
有限体F_pにおいてFFT乗算を用いるのに使ったり、
環Rがベースとなる多項式R[x]のgcdを高速に求めたり(このプロセスは先に述べた高速算術に必要になる)。
特に後者は、古典的アルゴリズムを使った時の中間結果の有理数の分子及び分母が膨大な数になるのを防ぐために、
一度n in R[x]/<p>で計算を行った後にnをR[x]の元に復元する方法がある。

227 :デフォルトの名無しさん:2012/05/05(土) 13:19:52.59
mod19の原始根をすべて求めよという問題があるのですがひとつひとつ表を埋めていく... - Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1235764892



228 :デフォルトの名無しさん:2012/05/05(土) 13:23:43.62
一個原始根を見つければ、あとは低計算量ですべて出せるはず(証明はしらんが簡単だろう)で
小さいやつから平方剰余の相互則を使って判定しろということ。
素数判定のように高度な知識はいらんだろ。初等整数論だろ。

229 :デフォルトの名無しさん:2012/05/05(土) 13:30:48.88
それほど面倒でも無いでしょ
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
一般数体篩法のオープンソース GGNFS
素因数分解には試し割り法, モンテカルロ法, 楕円曲線法, 二次篩法など多数のアルゴリズムが存在するが,その中でも一般数体篩法は100 桁以上の数を分解するには現在知られる最速のアルゴリズムである.
2005年には 200桁の数(rsa200)が一般数体篩法で分解された.本研究では,オープンソースの一般数体篩法ソフトウェアGGNFSについて,性能測定を行なう.
http://cryptology.cocolog-nifty.com/blog/2008/01/ggnfs_b47a.html

ここでは、素因数分解のための各種アルゴリズムについて解説する。対象は、以下のとおり。
Brute force method
ρ method(Pollard, Brent)
p-1 method
p+1 method
連分数法
複数多項式二次ふるい法
楕円曲線法
http://www.asahi-net.or.jp/~kc2h-msm/mathland/math12/index.htm

まず、素因数分解のためのプログラムを入手する必要がある。
Windows PC 上で動作する主なものとしては、
factor (Windows (DOSプロンプト))
ppmpqs (Windows (DOSプロンプト), Linux)
UBASIC (Windows (DOSプロンプト))
SNFS (Windows (DOSプロンプト)) 等がある。
http://www.asahi-net.or.jp/~kc2h-msm/mathland/matha1/howto.htm


分解するにあたっての方針(戦略)について
まず、速いマシンを長時間利用できる場合、90桁以下の数をppmpqsで分解することを薦める。これは、時間さえかければ、確実に分解できるというメリットがある。
マシンがそれ程速くない場合、途中で中断しなければならない場合、90桁以上の数を対象とする場合は、GMP-ECMを使うことを薦める。
http://www.asahi-net.or.jp/~kc2h-msm/mathland/matha1/howto.htm




232 :デフォルトの名無しさん:2012/05/05(土) 15:51:46.64

GGNFSはNFS法(the Number Field Sieve method; 数体ふるい法)を用いる素因数分解プログラムです。
SNFS法(the Special Number Field Sieve method; 特殊数体ふるい法)と
GNFS法(the General Number Field Sieve method; 一般数体ふるい法)の両方に対応しています。
http://homepage2.nifty.com/m_kamada/math/ggnfs_ja.htm

GMP-ECMはECM(Elliptic Curve Method; 楕円曲線法)を用いる標準的な素因数分解プログラムです(オプションでP-1法やP+1法も選択できます)。
小さな素因数を手早く抽出することができるので、SIQS法やNFS法の前処理として、
あるいはSIQS法やNFS法を適用するには大きすぎる合成数を分解したいときに利用されています。
http://homepage2.nifty.com/m_kamada/math/ecm_ja.htm

Msieve は MPQS 法 (the self-initializing Multiple Polynomial Quadratic Sieve; 自己初期化複数多項式二次ふるい法) と
GNFS 法 (the General Number Field Sieve; 一般数体ふるい法) を用いる素因数分解プログラムです。
前処理として P-1 法、P+1 法、ECM (Elliptic Curve Method; 楕円曲線法) なども実装しており、さまざまな数に柔軟に対応します。
http://homepage2.nifty.com/m_kamada/math/msieve_ja.htm

GGNFS - A Number Field Sieve implementation
http://www.math.ttu.edu/~cmonico/software/ggnfs/index.html

一般数体ふるい法 ソース - Google 検索
http://www.google.com/search?q=%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E3%81%B5%E3%82%8B%E3%81%84%E6%B3%95+%E3%82%BD%E3%83%BC%E3%82%B9


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の行列は長い(数千万の)配列にしたいので
速いコードだとありがたいです

237 :デフォルトの名無しさん:2012/05/05(土) 19:58:50.80
unsigned long r64;//random
for(int i = 0 ; i < 64 ; i++)
{
array[i] = (r64>>i)&0x01;
}

238 :デフォルトの名無しさん:2012/05/05(土) 20:07:44.12
>>236
そんな効率の悪そうなことをするためのコードが速くて本当に何か意味があるのかね?

239 : ◆QZaw55cn4c :2012/05/05(土) 20:21:03.06
今求めているのは、

素数かどうか不明のものを素因数分解すること

ではなく

既知の巨大素数の原始根を求めること

なのですが?
うーん。全然わからん。

240 :デフォルトの名無しさん:2012/05/05(土) 20:37:55.62
既知の分なら求めず表にするれ

241 :デフォルトの名無しさん:2012/05/05(土) 20:43:25.15
>>239
これ。

mod19の原始根をすべて求めよという問題があるのですがひとつひとつ表を埋めていく... - Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1235764892

242 :デフォルトの名無しさん:2012/05/05(土) 20:59:34.72
mod p での一般的な原始元を見つける方法
1.平方剰余の性質を使って平方非剰余の根aをみつけます。2.aが原始元でない場合は平方剰余の根bをaに掛けa×bを計算します。
mod p ではp-1と互いに素となる原始根のべき乗となるものを探すわけです。

mod 63823の原始元の求め方
第2補充法則 (2/p)=(-1)^((p^2)-1)/8) より(-1)^((63823^2)-1)/8)=1 で2は平方剰余

(q/p)(p/q)=(-1)^( ((q-1)/2)×((p-1)/2) )を利用して、(3/63823)(63823/3)=(3/63823)(1/3)=-1 なので、3は平方非剰余
p-1=63823-1=2×3×11×967
3^(2×11×967)=16721 で3次剰余ではない。3^(2×3×967)=28107 で11次剰余ではない。3^(2×3×11)=40828 で967次剰余ではない。
したがって3は原始根
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1235764892

平方剰余の相互法則 - Wikipedia
a と p とが互いに素であるとき、合同式
http://upload.wikimedia.org/wikipedia/ja/math/9/3/1/9311f58ff72132d811ba22cdee7c8d9e.png
が解を持てば、 a は p を法として平方剰余であるといい、そうでないとき平方非剰余であるという。
(p, a) を a と p の最大公約数とするとき、次の記号
http://upload.wikimedia.org/wikipedia/ja/math/1/4/d/14d936e40558c1f206d4394943f794b6.png
を、アドリアン=マリ・ルジャンドルにちなんでルジャンドル記号と呼ぶ。
[編集] 相互法則平方剰余の相互法則は整数 a が奇素数 p を法として平方剰余であるか否かを見いだす法則である。
p, q を相異なる奇素数とするときに、
http://upload.wikimedia.org/wikipedia/ja/math/b/c/b/bcb6ec45662135c3c218a771577e9ef7.png
が成り立つ。
また、このほかに以下の第1補充法則、第2補充法則が知られている。
第1補充法則:
http://upload.wikimedia.org/wikipedia/ja/math/d/f/3/df3f591f53cfc80bdea6e5d7e74db393.png
第2補充法則:
http://upload.wikimedia.org/wikipedia/ja/math/f/0/3/f03b9412c25ac66daef4571029a536a6.png
またpとa、bが素であれば、
http://upload.wikimedia.org/wikipedia/ja/math/7/9/0/790121bd3962a9abf69e1a69448e134d.png

243 :デフォルトの名無しさん:2012/05/05(土) 21:05:39.49
原始根を見つけるのに平方剰余の相互法則を使うのは定番らしい。証明説明。

http://nakano.math.gakushuin.ac.jp/~shin/html-files/Algebra_Introduction/2011/11.pdf

http://aozoragakuen.sakura.ne.jp/suuron/node41.html

http://www.geocities.jp/ikuro_kotaro/koramu/1548_p1.htm

http://pisan-dub.jp/doc/2011/20110114001/5_6.html

http://www004.upp.so-net.ne.jp/s_honma/algebra/algebra21.htm

244 :デフォルトの名無しさん:2012/05/05(土) 21:11:13.23
>>236
>>237のを使うぐらいしかないんじゃない?
それかいちいち計算せずに、関数を用意しておくとか?
int get_bit(ulong r64)
{
return (r64>>i)&0x01;
}
おそらく>>236のしようとしていることは非効率的で、
オリコウでない方法だと思うよ。

245 :デフォルトの名無しさん:2012/05/05(土) 21:21:22.96
平方非剰余の数が原始根候補になり、素因数分解を使い原始根を確定させる。


奇素数 p を法とする原始根 g は p を法として平方非剰余である.
http://nakano.math.gakushuin.ac.jp/~shin/html-files/Algebra_Introduction/2011/11.pdf


法997では、位数は996の約数になるので、aが、997の原始根であることを確かめるには、996=2・2・3・83 に注意して、a^498≠1、a^332≠1、a^12≠1 かどうかを調べれば十分。
http://www004.upp.so-net.ne.jp/s_honma/algebra/algebra21.htm

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
は全て原始元になります。


247 :デフォルトの名無しさん:2012/05/05(土) 22:08:34.97
>>244
別な方法で実装しました
要するに長い行列に対してm-sequenceでディザリングをしたかったのですが
後で処理をするためにディザリングの配列は残しておかねばなりません

なにかいい方法がありますか?

248 :デフォルトの名無しさん:2012/05/05(土) 23:29:30.87
ありますよ。ちょっと待って下さいね。

249 :NAS6 ◆n3AmnVhjwc :2012/05/05(土) 23:43:14.24
n番目の素数の概算値Paは
Pa=2.32nlogn+2n
で大体出せた

250 :NAS6 ◆n3AmnVhjwc :2012/05/05(土) 23:54:41.30
あ、調べたら
Pa=nlogn+nloglogn
って書いてた


251 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 00:02:10.05
調べた方が精度悪いや

252 :デフォルトの名無しさん:2012/05/06(日) 00:03:17.22
荒らしかよtwitterか数学板にでも行けよ

253 :デフォルトの名無しさん:2012/05/06(日) 10:44:31.59
>>252
さすがです

254 :デフォルトの名無しさん:2012/05/06(日) 11:00:33.25
>>239
すべての原始根をもとめるのに素因数分解なしで高速に求められるのがあるのか?


255 :デフォルトの名無しさん:2012/05/06(日) 11:53:07.35
n番目の奇素数を正確に出す式あるだろバカか

256 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 13:04:47.55
あったら暗号が使えなくなるか
あっても指数時間の計算でしょ

257 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 13:19:19.66
精度改良しましたが
Pa=2((0.45loglog(logn+0.25)+1.12)nlogn+n)
は多項式時間の概算計算す

258 :デフォルトの名無しさん:2012/05/06(日) 13:56:39.90
質問の意図や前提をくみ取れない糞質問
が多い。それで回答者が逆質問をしたり
悪口を言ったりする。それを前もって思
い描く力が絶望的に欠如してるに違いない。
スーパーハッカーだけが意図を理解できる。
レアなそういう神が颯爽と登場する予感。

259 :デフォルトの名無しさん:2012/05/06(日) 14:24:03.05
質問です
4年ほど前にやっていたことがあって、再度VisualStudio2008C++EEを落としてみたんですが、色々変わったんでしょうか?
講座サイトを見ながらやっているんですが、新規作成→追加で「C++ファイル」ではなく「C++クラス」と出てきてしまいます
試しに作ってみると、.cppに初めから何か書かれているんですが…

260 :デフォルトの名無しさん:2012/05/06(日) 14:26:27.52
変わりなし。
嫌ならコマンドラインでコンパイルしたら良い。

261 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 14:26:55.62
空のプロジェクトをチェックして
ソースファイルフォルダ右クリックで追加すればいい

262 :デフォルトの名無しさん:2012/05/06(日) 14:30:54.14
ありがとうございます、助かりました!
.cppはその下に記述すれば良さそうですね。

263 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 14:51:55.93
n番目の素数の概算がでるから
その前後調べて当たったら暗号無効化なの?

264 :デフォルトの名無しさん:2012/05/06(日) 15:00:05.08
素数の個数と、素因数分解は別だろ。
暗号解読では素因数が判明しないとダメだろ。


265 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 15:12:59.72
じゃあ、複二次式で四次篩作ればどうなん?

266 :デフォルトの名無しさん:2012/05/06(日) 15:14:54.57
素因数分解の結果をキャッシュしてるから、素因数分解なんか一瞬だ

267 :デフォルトの名無しさん:2012/05/06(日) 15:21:11.34
サルにもわかるRSA暗号: 解読法と素数
http://www.maitou.gr.jp/rsa/rsa14.php



268 :デフォルトの名無しさん:2012/05/06(日) 15:25:46.00
無理。

2003 年の年末時点では素数と素数を掛けた数が 174 桁の数が、 100 台の業務用コンピュータで協調計算させて 3 ヶ月で素因数分解できることが実証されています。
一方、現在の RSA暗号 では一般的には素数と素数を掛け合わせた後が 310 桁にもなる数を用いています。
これでは、現在の数学で巨大な素因数分解を行うには、神をも味方につけた超人的な運を手に入れるしかないでしょう。
確率的には、残念ながら競馬やパチンコ、宝くじとは比べ物になりません。
http://www.maitou.gr.jp/rsa/rsa14.php

269 :デフォルトの名無しさん:2012/05/06(日) 15:55:01.73
>>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で書いたほうが速いだろ

270 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 16:28:18.94
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
暗号アルゴリズムの危殆化
http://www.nic.ad.jp/ja/newsletter/No44/images/0800_8.gif
http://www.nic.ad.jp/ja/newsletter/No44/0800.html

NTTなど、公開鍵暗号の素因数分解問題で768ビット整数の分解に成功
分解に要した計算資源は1700コア・年としている。デュアルコアのCPUを搭載したコンピュータなら、850台程度あれば約1年で分解できる計算になる。
実際にはNTT情報流通プラットフォーム研究所など5研究機関は2007年から分解を始め、PCクラスターなど300台程度のコンピュータを用いて、約3年かかったという。
http://itpro.nikkeibp.co.jp/article/NEWS/20100108/343056/


NTT、232ケタ整数の素因数分解に成功−世界記録を更新 現在使用の309ケタはあと10年は大丈夫!
http://highsociety.at.webry.info/201001/article_33.html

274 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 16:57:07.10
ttp://www5b.biglobe.ne.jp/~NAS6/secret/index.htm

四次篩実装

2^n次篩も簡単に作れます

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


276 :デフォルトの名無しさん:2012/05/06(日) 17:15:12.33
一人だけでも生き残ろうと…未来貯蓄銀会長密航試み逮捕

営業停止審査を受けている未来貯蓄銀行のキム・チャンギョン会長が4日、中国へ密航しようとしていたところを、
仁川(インチョン)港で海上警察に逮捕されたとSBSが単独報道した。

報道によれば、海上警察は逮捕したキム会長の身柄を不良貯蓄銀行捜査を担当する、
貯蓄銀行不正合同捜査チームへ送る予定だと伝えられた。報道によればキム会長は、
5日午前8時に予定されていた貯蓄銀行経営評価委員会に出席して、
営業停止前に最後の意見を陳述するようにとの金融当局の通知を受けた後、
中国へ密かに渡航しようとしていたことが分かった。

一人だけでも生き残ろうと…未来貯蓄銀会長密航試み逮捕 
韓国語 [05/05]
http://news.donga.com/Society/3/03/20120505/46025772/1

277 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 17:16:14.77
2^n次篩で世界記録楽勝す
実験するのにはデータ型のビットを増やしたクラス作んなきゃ
ならないけどめんどい

278 :デフォルトの名無しさん:2012/05/06(日) 17:24:37.82
たとえば数分で可能な数で比較して、このソフトより速いんだったら少し信用する。



GGNFSはNFS法(the Number Field Sieve method; 数体ふるい法)を用いる素因数分解プログラムです。
SNFS法(特殊数体ふるい法)とGNFS法( 一般数体ふるい法)の両方に対応しています。作者はChris Monicoさんです。
http://homepage2.nifty.com/m_kamada/math/ggnfs_ja.htm

279 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 17:35:01.58
なんか色々インストールしなきゃならないからやだな

Long long intなら確認済みだから良いや

280 :デフォルトの名無しさん:2012/05/06(日) 17:49:32.41
Windows Factoring Software Binaries (64bit & 32bit)
http://gilchrist.ca/jeff/factoring/index.html
http://gilchrist.ca/jeff/factoring/benchmark.html
http://gilchrist.ca/jeff/factoring/pseudoprimes.html

GGNFS suite プロジェクト日本語トップページ - SourceForge.JP
http://sourceforge.jp/projects/sfnet_ggnfs/


281 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 17:50:28.40
調子にのって8乗してた訂正

282 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 19:08:31.98
二次篩
x^2-a^2=(x+a)(x-a)
複二次式で四次篩
x^4-a^4=(x^2+a^2)(x^2-a^2)
同様に八次篩、十六次篩。。。

283 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 19:10:45.55
以上桁は無意味

284 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 19:24:01.64
私は世界の鍵を持っているbyスイーツ w

285 :デフォルトの名無しさん:2012/05/06(日) 19:26:14.07
>>269
なるほど、そんなのあったなぁ
ビットフィールドでやってますた

286 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 19:30:49.59
あ、十六次篩、二百五十六次篩か

287 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 19:32:52.70
コード的にsqrtのネストなので

288 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 19:36:05.13
指数は二倍ずつか

289 :デフォルトの名無しさん:2012/05/06(日) 19:37:48.46
>>283
ある日突然道端のオヤジが公然わいせつオナニーを始めたところを想像してほしい
嫌だろ?


290 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 19:41:29.02
勘違いを訂正

ちゃんと判定出来るよ

291 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 19:44:27.00
2^n次篩だから桁は無意味だから
他の暗号方式を考えないとね

292 : ◆QZaw55cn4c :2012/05/06(日) 21:47:31.01
>>254
リンク先をいろいろ紹介していただいてはいるのですが、難しくて私には一生理解できないだろうと思います。
そこで申し訳ないのですが、巨大素数の原始根を求めるために素因数分解が必要となる道筋を、もしよろしければ教えていただけないでしょうか?

簡単に試行してはみたのですが、2^31 で丸一日かかる有様です。あと手を打つとすればマルチスレッド化でしょうが、手元のは屁ノムx6 だしなあ。
http://ideone.com/In1SB (java でごめんなさい)

なお全部の原始根を求める必要はなくて 300〜500位のものが数個手に入ればいいかと思います。

293 :デフォルトの名無しさん:2012/05/06(日) 22:03:24.00
だからC/C++じゃないならよそでやってくれと

294 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 22:06:14.59
素因数分解ならn次篩使えば出来るよ

ソース見てわからなかったらゴメン

295 :NAS6 ◆n3AmnVhjwc :2012/05/06(日) 22:11:25.74
二次篩をネストしただけだから

296 :デフォルトの名無しさん:2012/05/06(日) 22:25:01.22
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とならなかったら原始根。

299 : ◆QZaw55cn4c :2012/05/07(月) 01:25:25.23
>>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 から順次チェックするのが絞り込みやすいのかもしれません。
しんどいですけれども。

300 : ◆QZaw55cn4c :2012/05/07(月) 01:26:49.83
>>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
あと、原始根をすべて列挙するのに、素因数分解が使える。
あと原始根の簡易判定としてこれ。

奇素数 p を法とする原始根 g は p を法として平方非剰余である.
http://nakano.math.gakushuin.ac.jp/~shin/html-files/Algebra_Introduction/2011/11.pdf

302 :デフォルトの名無しさん:2012/05/07(月) 04:50:17.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と書いてあるように読みとれないか?処理系が変わると大元設計から変えるんだろうね。

えっと、、だがや

303 :NAS6 ◆n3AmnVhjwc :2012/05/07(月) 05:41:05.67
n次篩使えば桁は無意味なのに

304 :デフォルトの名無しさん:2012/05/07(月) 06:08:21.84
いい加減篩廚は別スレ立ててやれや

305 :NAS6 ◆n3AmnVhjwc :2012/05/07(月) 06:17:52.76
四次篩
x^4-y^4=(x^2+y^2)(x+y)(x-y)
と分解したときにnの因数が()3つに分配されることを期待して
gcd(n,x+y)
からnの約数を見つける
同様に八次篩、十六次篩...ができる

306 :NAS6 ◆n3AmnVhjwc :2012/05/07(月) 11:00:55.86
冷静になって考えたら二次篩でも四次篩でも演算回数同じだった

307 :NAS6 ◆n3AmnVhjwc :2012/05/07(月) 11:36:43.44
二次篩で既に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


308 :NAS6 ◆n3AmnVhjwc :2012/05/07(月) 11:47:16.92
これを実装したよ

309 :デフォルトの名無しさん:2012/05/07(月) 11:50:11.99
速いソフトのバリナリあるから比較して味噌

Windows Factoring Software Binaries (64bit & 32bit)
http://gilchrist.ca/jeff/factoring/index.html
http://gilchrist.ca/jeff/factoring/benchmark.html
http://gilchrist.ca/jeff/factoring/pseudoprimes.html

310 :デフォルトの名無しさん:2012/05/07(月) 12:11:03.30
このソフトで12秒かかった素因数分解。
これより速くないと世界一は無理だな。


yafu-1.31
http://sourceforge.net/projects/yafu/files/1.31/yafu-1.31.zip/download

factor(222222222222222222222222222222222222222222222222222222222222222222222)


311 :デフォルトの名無しさん:2012/05/07(月) 12:18:46.29
いい加減にしろ

312 :NAS6 ◆n3AmnVhjwc :2012/05/07(月) 12:22:01.86
二次篩だったから俺の考えてたより遅いよ

313 :デフォルトの名無しさん:2012/05/07(月) 15:28:37.39
>>302
そのスレのは私自身が書き込んだレスじゃないんですが・・・
だれか貼っつけた人が収拾してください

314 :デフォルトの名無しさん:2012/05/07(月) 19:19:13.94
学が無くてもそれなりに語れるネタに狂喜乱舞て状況だな

315 :デフォルトの名無しさん:2012/05/07(月) 23:02:24.54
スレタイ100回読め

316 :デフォルトの名無しさん:2012/05/08(火) 19:43:04.58
【韓国BBS】台湾人は日本が好きで韓国を嫌う、その理由は?

韓国のコミュニティサイト「ガセンイドットコム」の掲示板に「台湾人たちが、日本が好きで韓国嫌いな理由は?」とのスレッドが立てられたところ、さまざまな意見が寄せられた。

スレ主は、台湾人は韓国と日本の好き嫌いがはっきり分かれていて、韓国は嫌いだが日本がとても好きだとの記事を紹介した。
スレッドには、その理由について「日本と台湾が島国同士だからではないか」との意見が数多く見られた。

・「台湾や日本は両国とも島国で、韓国を困らせるのが趣味。しかし台湾がいくら困らせてようとしても、韓国はあまりにも強くて賢くて倒れない」
・「島国どうしなので、傾向が似ているから惹かれあうのでは。どちらも内部の問題を外部のせいだとか方便を使う」
・「島国は島国どうし仲良くするのが好き」
・「私たちはできるなら台湾や日本の物を使わないことにしましょう。むしろヨーロッパやアメリカの製品を使用しましょう」
http://news.searchina.ne.jp/disp.cgi?y=2012&d=0508&f=national_0508_070.shtml

◆台湾が韓国嫌いな本当の理由はこれ

韓国は「我々は薄情な裏切り者の日本とは違うから台湾との国交は永遠に断絶しない」と言っておきながら
台湾に公用車として5万台の不人気韓国車を売りつけ、代金を受け取ると同時に、台湾と国交を断絶し中国との国交を結んだ。

しかも韓国の新聞やTVはこれを「韓国の大勝利」「慌てふためく台湾」と馬鹿にして煽り、
ソウルや釜山にあった中華街を様々な規制や嫌がらせで潰し台湾系華僑を追い出した。

その後も韓国は何十年も台湾を攻撃し続けた。
・韓国は、アジアスポーツ大会の主催国争いにおいて、「台湾が権利を譲らなければ大会から台湾を追放する」と恫喝した。
・韓国は、「台湾は国家ではないので参加させない」と国際会議などで台湾を閉め出すなどの行為をしてきた。
・韓国は、台湾が国連やIMFなど国際機関へ加盟することに反対した。
・韓国は、1997年にデフォルトしIMF管理下に入ると台湾に対して「両国間の国家改善のため」といって100億ドルの資金援助を要求した。


317 :デフォルトの名無しさん:2012/05/09(水) 06:42:43.87
>>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のメンバを配列にするのは
できないです。

319 :デフォルトの名無しさん:2012/05/10(木) 07:57:24.58
treeにl()とr()を実装

320 :デフォルトの名無しさん:2012/05/10(木) 07:58:13.70
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);
みたいに書けるぞ。

321 :デフォルトの名無しさん:2012/05/10(木) 08:16:07.85
質問の意図や前提をくみ取れない糞質問
が多い。それで回答者が逆質問をしたり
悪口を言ったりする。それを前もって思
い描く力が絶望的に欠如してるに違いない。
スーパーハッカーだけが意図を理解できる。
レアなそういう神が颯爽と登場する予感。

322 :デフォルトの名無しさん:2012/05/10(木) 08:29:50.72
なんだろうね、少し前にもあった、この奇妙な改行感は。
行の短さも考慮すると、
コードが大量に出てくるこの板を、携帯で読んでるのかね。
バカじゃないの。

323 :デフォルトの名無しさん:2012/05/10(木) 08:33:41.35
>>322 どこを縦読み?

324 :デフォルトの名無しさん:2012/05/10(木) 08:34:47.70
少なくともtreeの構造は必要だな

325 :デフォルトの名無しさん:2012/05/10(木) 08:52:53.61
>質 問の意図や前提をくみ取れない糞質問
>が 多い。それで回答者が逆質問をしたり
>悪 口を言ったりする。それを前もって思
>い 描く力が絶望的に欠如してるに違いない。
>ス ーパーハッカーだけが意図を理解できる。
>レ アなそういう神が颯爽と登場する予感。

326 :デフォルトの名無しさん:2012/05/10(木) 08:54:21.11
こんなのとか
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;
}

327 :デフォルトの名無しさん:2012/05/10(木) 09:05:47.43
上の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)
とかで書きました。


329 :デフォルトの名無しさん:2012/05/10(木) 11:47:52.24
>>328 その ## 連結は不要で不正。

330 :デフォルトの名無しさん:2012/05/10(木) 11:56:48.21
>>318
http://codepad.org/pMp2PuSI

331 :デフォルトの名無しさん:2012/05/11(金) 01:59:16.78
テンプレートでかけるとは。
すごい


332 :デフォルトの名無しさん:2012/05/11(金) 02:26:59.71
「テンプレートでかけるとは。 」

と思うほうが、すごい


333 :デフォルトの名無しさん:2012/05/11(金) 06:15:16.11
うん

334 :デフォルトの名無しさん:2012/05/11(金) 06:27:13.96
テンプレートでポインタとか使えるとか知りませんでした。


335 :デフォルトの名無しさん:2012/05/11(金) 06:58:09.41
テンプレートがどこに出かけるの?

336 :デフォルトの名無しさん:2012/05/11(金) 07:42:00.96
スムーズに動く2Dアクションを作ろうと思うんですが、マップってある程度(8ドットくらい?)ブロック単位で配列を置くだけでいいんでしょうか?
その場合、マップが広いとやたら長くなりそうなんですが…

337 :デフォルトの名無しさん:2012/05/11(金) 15:12:33.62
C++はなんでも作れるって先輩から聞いていたんですが
入社4年でなんとか、使えるようにはなったんですが
未だに彼女が作れません。

本当に作れるんですかね?

338 :デフォルトの名無しさん:2012/05/11(金) 16:26:08.78
ニ値元の彼女なら作られるっしょ

339 :デフォルトの名無しさん:2012/05/11(金) 16:29:20.43
>>338
つ OpenGL

340 :デフォルトの名無しさん:2012/05/11(金) 17:13:35.43
>>337
class Kanjo{};
みたいなクラスを作って、

Kanjo misaki;


341 :デフォルトの名無しさん:2012/05/11(金) 18:45:36.36
vector<kanojo> v(make_kanojo());

for_each(v.begin(), v.end(), do_something());


342 :デフォルトの名無しさん:2012/05/11(金) 21:04:06.88
bool Kanojo::Check(class Otoko);

343 :デフォルトの名無しさん:2012/05/11(金) 21:25:17.15
bool Onna::Fuck(class Otoko);


344 :デフォルトの名無しさん:2012/05/11(金) 23:31:57.68
VC++ですが引数つきマクロに,を含む型を正しく渡したいのですが
いい方法はありますか?

http://codepad.org/S13HXRbC

macro "MAKE_VAR" passed 3 arguments, but takes just 2
をtypedef以外でなんとかしたい、ということです

よろしくお願いします

345 :デフォルトの名無しさん:2012/05/11(金) 23:33:40.70
無い
typedefしろ

346 :デフォルトの名無しさん:2012/05/11(金) 23:39:43.36
>>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 を記述すれば今の自分にも出来るのですが
子クラスの種類が増えると面倒くさそうな気がします。

348 : ◆QZaw55cn4c :2012/05/12(土) 07:59:13.80
>>347
>>347 struct funcTable を C でどのように使いたいのかサンプルをひとつみせてほしい。
C++ のクラスだからといって劇的に改善されるわけではない。

349 :デフォルトの名無しさん:2012/05/12(土) 08:16:02.53
>>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 :デフォルトの名無しさん:2012/05/12(土) 09:13:54.91
ナニがしたいのか意味不明なのでそこらへん推敲して出直してください。

351 :デフォルトの名無しさん:2012/05/12(土) 09:30:26.44
>>350
普通にif文で書くなら、

 Fruit *f;

 if (条件1) f = new Apple();
 else if (条件2) f = new Orange();
 else if (条件3) f = new Lemon();
     :
     :

 f->Hoge();

という感じになると思うんだけど、
数が増えるといちいちifで書いてられないので、何かスマートな方法が無いかなと。

352 :デフォルトの名無しさん:2012/05/12(土) 09:54:28.36
その似非オブジェクト指向臭いコードよりも>349の方が自然じゃないか。

353 :デフォルトの名無しさん:2012/05/12(土) 10:27:51.24
>>352
そういうものかなー?
1人で考えてると何が自然なのか分からなくなってくるね(´・ω・`)

ただまあ、1つの条件式(キーワード)つき、複数の関数ポインタをセットしなきゃならないような場合、
例えば初期化処理と、ルーチン本体と、終了化処理などがある場合だと、全部書かなきゃならないのは不便かも?

354 :デフォルトの名無しさん:2012/05/12(土) 10:38:01.60
それだったら、関数ポインタを構造体に纏めるだろ。
で、初期化が必要だったりしたらクラスにしてメンバー関数にするとか。
そういうアプローチはオブジェクト指向とは違うけれど、自由度は高いんじゃね。

355 :デフォルトの名無しさん:2012/05/12(土) 10:51:15.71
キーワードとフルーツの対応表を作るだけだよな?

356 :デフォルトの名無しさん:2012/05/12(土) 11:03:47.86
347が要求を満たすなら文字リテラルとの比較でそもそも文字列のまま比較する意味が無い
マジ推敲しなおせや

357 :デフォルトの名無しさん:2012/05/12(土) 11:31:53.82
考えてるうちに、関数ポインタ+FactoryMethodパターンあたりの組み合わせで行けそうな気がしてきた。

>>354
実際に関数ポインタを書かなきゃならないのは変わらないけど、
それを構造体にまとめることで、外側(対応表)に出る情報を抽象的&減らそうってアプローチね?

>>355
うん。それをどうしたら実現できるかなって。

>>356
詳しく。

358 :デフォルトの名無しさん:2012/05/12(土) 12:02:31.53
>>347
意味分からんです

>>349
>> この関数ポインタの部分を、なんとか出来ないかなって。
typedefするぐらいです

>>351
349の内容と違いますよね
線形探索が嫌なら適当なコンテナにでも詰め込めばいいです

>>357
>>347を移植するのに、Factory使う人はいないですし
数ポインタの部分を、なんとかしたかったのでは?


359 :デフォルトの名無しさん:2012/05/12(土) 12:24:11.75
>>347
std::map<std::string, std::function> でおしまいな話じゃないの?
(std::function が使えないなら boost::function で。)

360 :デフォルトの名無しさん:2012/05/12(土) 19:59:39.29
>>347
>さて、これを可能な限りクラスに置き換えたいと思います。

IDが無いからどれが質問主のレスなのか追いづらいんだが
もともとの要点は関数を書いているところをクラスに置き換えたいって話だよね?
クラスインスタンスを返す関数にすれば同じ意味になるんじゃない

 struct { Fruit* (*pFunc)(); char keyword[256]; } funcTable =
 {
   { &Apple::StaticCreateInstance, "APPLE", },
   { &Orange::StaticCreateInstance, "ORANGE", },
   { &Lemon::StaticCreateInstance, "LEMON", },
 };

実際はmap使うなり文字列を定数化するなり効率化した方がいいと思うけどね

361 :デフォルトの名無しさん:2012/05/12(土) 20:01:59.41
最も評価の悪い国
1位 イラン
2位 パキスタン
3位 北朝鮮
4位 イスラエル
5位 ロシア
6位 韓国  ←←←←←←←←←←←

最も評価の高い国
1位 日本
2位 ドイツ
3位 カナダ
4位 イギリス
5位 中国
6位 フランス

BBC世界世論調査2012
http://www.globescan.com/images/images/pressreleases/bbc2012_country_ratings/2012_bbc_country%20rating%20final%20080512.pdf

362 : ◆QZaw55cn4c :2012/05/13(日) 10:36:07.66
>>361
http://toro.2ch.net/test/read.cgi/tech/1333095907/785,789

363 :デフォルトの名無しさん:2012/05/13(日) 11:08:18.64
初歩的な質問ですいません。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

365 :デフォルトの名無しさん:2012/05/13(日) 11:27:06.30
助かりました。Windows APIを利用するためには、
windows.hをインクルードしてあげる必要があるんですね。
ありがとうございました

366 :デフォルトの名無しさん:2012/05/13(日) 15:14:15.22
これってちゃんと宣言されてないんでしょうか?
main.cpp
void Reset();

reset.cpp
void Reset(){
int a[5] = {0,0,0,0,0};
a[0] = SRand (12);
}
こうやってるんですが、定義されていない識別子です。と出てしまいます
ヘッダはちゃんと記入してあります

367 :デフォルトの名無しさん:2012/05/13(日) 15:24:31.98
>>366
.cpp に宣言だけ書くのはおかしいしヘッダがちゃんとしてても #include してなけりゃ意味が無い。
エラーも Reset について出てるのか SRand について出てるのか・・・
変に省略してあるようで状況がよくわからん。

内容はなるべく省略せずに、エラーメッセージはそのままコピペしろ。

368 :デフォルトの名無しさん:2012/05/13(日) 15:36:54.96
>>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);
}

ちゃんと書くとこんな感じです

369 :デフォルトの名無しさん:2012/05/13(日) 15:41:50.66
//reset.cpp
#include "reset.h"//これ忘れてる?
void Reset(){
int a[5] = {0,0,0,0,0};
a[0] = SRand (12);
}

370 :デフォルトの名無しさん:2012/05/13(日) 16:36:17.89
>>368
a は直前で宣言されてるし、その内容が正確だとすると main.cpp でも WINAPI やら
DxLib やらでエラー出るだろうし、まだ状況が伝わってこない。

371 :デフォルトの名無しさん:2012/05/13(日) 16:44:31.83
int a[5]とa[0]の綴りがことなってるとしか

372 :デフォルトの名無しさん:2012/05/13(日) 23:51:10.83
要は、エラーが出るコードをそのまま貼れ、と。

373 :デフォルトの名無しさん:2012/05/14(月) 06:19:32.56
mainの最後のvoidって

374 :デフォルトの名無しさん:2012/05/14(月) 06:23:51.80
・mainの引数
・mainの最後のvoid
・なんでカンマで文をつなげる
エラーの出るソースコピペしてない?

375 :デフォルトの名無しさん:2012/05/14(月) 08:26:46.63
コード関係ないとこでエラー出てるんだろ
初心者にはよくあること

376 :デフォルトの名無しさん:2012/05/14(月) 09:44:23.86
そして自己解決してお礼も言わずに去っていったと

377 :デフォルトの名無しさん:2012/05/14(月) 21:39:34.19
>>374
つまらんツッコミですまんが、その3つ自体は文法上は問題ないじゃん
(windows.hをincludeしてないからコンパイルエラーになるけど)

378 :デフォルトの名無しさん:2012/05/14(月) 22:09:10.68
>>377
いや、voidはエラーになるよ。

379 :デフォルトの名無しさん:2012/05/14(月) 22:10:19.45
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), SetMainWindowText("ランダム"), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK );
void Reset();}
↑ void Reset();ってなんだよ
関数実行するなら Reset();単体だろ



380 :デフォルトの名無しさん:2012/05/14(月) 22:19:09.45
30時間かかってようやく答えめいたモンが出たか
>>279は優秀だな
84点くらいはやろうか

それに引き換えそれ以前のアホは0点んだ0点
味噌汁でツラ洗って出直してこい


381 :デフォルトの名無しさん:2012/05/14(月) 22:19:18.00
>>378
なんてエラーになるの?ただの関数宣言で通るんじゃないの?

382 :デフォルトの名無しさん:2012/05/14(月) 22:23:33.69
二重定義

383 :デフォルトの名無しさん:2012/05/14(月) 22:32:04.96
>>382
なんねーよ。

384 :デフォルトの名無しさん:2012/05/14(月) 22:33:30.77
>>382
ただの宣言を定義だといってエラーにするコンパイラがあるのか?
コンパイラの名前とバージョンを晒せ。

385 :368:2012/05/15(火) 00:38:37.67
初心者すぎたのでいろいろ試してたんですが、仰る通りmainのvoidが原因でした
ありがとうございました()

386 :デフォルトの名無しさん:2012/05/15(火) 00:41:57.31
ねーよ

387 :デフォルトの名無しさん:2012/05/15(火) 00:46:30.07
> ありがとうございました()
オイオイ
こんなのに笑われてんぞw アホ共ww


388 :デフォルトの名無しさん:2012/05/15(火) 07:42:39.65
なんか最近キチガイがいるな

389 :デフォルトの名無しさん:2012/05/15(火) 09:27:11.10
同感だ
> ありがとうございました()
なんて使ってる368が一番の基地外ゴミカスだ

マジ本人だったら最悪だろこいつ
もう二度と来なくていいんじゃね?


390 :デフォルトの名無しさん:2012/05/15(火) 09:35:43.69
開発者の意図を汲み取れないコンパイラの欠陥であり、
言語仕様そのものの欠陥でもある

391 :デフォルトの名無しさん:2012/05/15(火) 09:38:22.36
そうだな脳波をコンパイルできるようにすべきだな

392 :デフォルトの名無しさん:2012/05/15(火) 10:25:13.93
むしろ脳みそをコネコネと

393 :デフォルトの名無しさん:2012/05/15(火) 11:31:23.84
あばばばばば

394 :デフォルトの名無しさん:2012/05/15(火) 11:47:10.58
iphoneは送信の横に()があるからミスだろ
俺もたまにやる

395 :デフォルトの名無しさん:2012/05/15(火) 12:01:21.80
BB2C?はマイノリティか

396 :デフォルトの名無しさん:2012/05/15(火) 12:14:51.09
東京都尖閣諸島寄附金 受付状況


45,089件 609,282,032円 (5月14日入金確認分まで)


http://www.chijihon.metro.tokyo.jp/senkaku_kifu.htm


送金方法:
http://www.chijihon.metro.tokyo.jp/senkaku.htm

397 :デフォルトの名無しさん:2012/05/15(火) 12:42:11.71
俺が3億円寄付したからその倍か

398 :デフォルトの名無しさん:2012/05/21(月) 20:03:43.48
複数の純粋仮想関数を持つ抽象クラスから派生し、独自の変数やメソッドを持たない子クラスを大量に宣言する場合、
子クラスの宣言をマクロにしちゃうのってアリ?
#define CHILD(T) class T :public ParentClass { 〜 }
って感じで。もしくは他に楽に書ける方法ある?

399 :デフォルトの名無しさん:2012/05/21(月) 20:16:43.61
エクセルでポトペタかな
(自称)プロは忌避するだろうけど

400 :デフォルトの名無しさん:2012/05/21(月) 20:25:12.12
そんな用語が。
ありがとう、ちょっと調べてみる。

401 :デフォルトの名無しさん:2012/05/22(火) 01:37:23.30
>>398
マクロだと改行がメンドイから可変部をマクロ定義した上で #include するファイルを作ったほうが
いいかもしれない。

402 :デフォルトの名無しさん:2012/05/22(火) 03:28:00.95
>>401
日本語で

403 :デフォルトの名無しさん:2012/05/22(火) 03:43:13.91
おめーの理解力が足りないだけ

404 :デフォルトの名無しさん:2012/05/22(火) 03:53:21.62
401が何を言いたいのかわかんない

405 :デフォルトの名無しさん:2012/05/22(火) 04:20:11.91
書いてある通りでしょ。
理解できないのは、想像力が足りないから。

406 :デフォルトの名無しさん:2012/05/22(火) 04:43:13.85
書いてある通りのメンドイコード例を示してみてよ

407 :デフォルトの名無しさん:2012/05/22(火) 04:46:15.73
行末

408 :デフォルトの名無しさん:2012/05/22(火) 04:48:01.07
401がメンドイと書いているのは「マクロの改行」ね

409 :デフォルトの名無しさん:2012/05/22(火) 04:58:18.35
ためしに書いて見れよw
include駆使した効率的なコードとやらを

410 :デフォルトの名無しさん:2012/05/22(火) 05:09:01.74
本当にバカだな。

411 :デフォルトの名無しさん:2012/05/22(火) 05:10:15.36
> マクロだと改行がメンドイから可変部をマクロ定義した上で
メンドイといいつつ結局マクロなんですね

> #include するファイルを作ったほうが
> いいかもしれない。
直接書いても別ファイルに書いても書く内容に変わりはないですよね

412 :デフォルトの名無しさん:2012/05/22(火) 05:10:52.27
// 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

413 :デフォルトの名無しさん:2012/05/22(火) 05:16:21.41
各行に\が必要ってのが、修正等でどれだけ面倒か
想像もできないのか?

空行すら入れられないし、行末にコード追加も出来ないし
デバッグで#if 0も不可なんだぞ。


別ファイルにすれば、「普通のコード」を書くだけだろ
個別に変えるシンボル名を#defineしてから#includeするだけ。
「普通のコード」だから、必要ならば#ifdef系の条件コンパイルも出来る。
当然だけど、#includeは複数回可能だし。

414 :デフォルトの名無しさん:2012/05/22(火) 05:18:37.44
>>411
「関数形式マクロ」と「単純置換のマクロ」があることはご存知?

415 :デフォルトの名無しさん:2012/05/22(火) 05:22:34.17
んなメンドイ事するくらいなら
template <int U>class CHILD:public ParentClass{〜};
typedef CHILD<0> A;
typedef CHILD<1> B;
これで十分じゃん?

416 :デフォルトの名無しさん:2012/05/22(火) 05:25:16.12
じゃあ>>398にそう言えば?

417 :デフォルトの名無しさん:2012/05/22(火) 05:32:49.01
>>412
補完効かなそうだな

418 :デフォルトの名無しさん:2012/05/22(火) 06:42:42.02
マクロが嫌でマクロ書く

419 :デフォルトの名無しさん:2012/05/22(火) 07:14:44.29
あるある探検隊

420 :デフォルトの名無しさん:2012/05/22(火) 07:15:07.97
プログラマーは、楽をするための努力はおしまないものです(キリッ

421 :デフォルトの名無しさん:2012/05/23(水) 00:22:36.08
ちょっと変な質問をさせてください

Borland C++で5年ほど前にコンパイルできていたものを、先日久しぶりにビルドを試したらエラーが出て失敗してしまいました
エラー内容はE2134・E2139・W8070などが出ましたが、ソースを見る限り不審な点を見つけられませんでした
なにぶん昔の話なので覚えていないのですが、多少のエラーなら無視して強引にビルドしてしまうような方法を使ったような…

強制ビルドするような方法があったらご教授ください
よろしくお願いします

422 :デフォルトの名無しさん:2012/05/23(水) 02:41:03.61
エラーコードだけで分かるかよ

423 :デフォルトの名無しさん:2012/05/23(水) 02:54:39.32
強制ビルドなんて無理。
エラーを修正してビルドせよ。
強制したいならエラー部分を手動で削除。

424 :デフォルトの名無しさん:2012/05/23(水) 02:58:54.38
質問の意図や前提をくみ取れない糞質問
が多い。それで回答者が逆質問をしたり
悪口を言ったりする。それを前もって思
い描く力が絶望的に欠如してるに違いない。
スーパーハッカーだけが意図を理解できる。
レアなそういう神が颯爽と登場する予感。

425 :デフォルトの名無しさん:2012/05/23(水) 04:12:24.08
また変なのが湧いてる

426 :デフォルトの名無しさん:2012/05/23(水) 05:07:26.75
>>423
そうですか、ありがとうございました







…だとすると、このexeどうやって生成したんだろう…謎だ…

427 :デフォルトの名無しさん:2012/05/23(水) 05:26:24.59
生成日を確認してみなー
修正履歴も探ってみなー

428 :デフォルトの名無しさん:2012/05/23(水) 08:11:39.05
ウィンドウレイヤーを作っているのだけど

429 :デフォルトの名無しさん:2012/05/23(水) 08:58:38.01
そうか

430 :デフォルトの名無しさん:2012/05/23(水) 13:33:14.91
>>421
5年前にビルドした時とOSとかの環境は変わってない?
変わってないなら5年前もエラーが出たはずだろ

431 :デフォルトの名無しさん:2012/05/23(水) 17:54:15.34
でも寝かせておくとエラーが消えることがあるってのも、事実だよね…

432 :デフォルトの名無しさん:2012/05/23(水) 17:57:31.01
本番環境になるとなぜか出現する奴とかなーw
あほかっ!

433 :デフォルトの名無しさん:2012/05/23(水) 18:07:00.05
脳内デフラグで自己完結しても
それを反映させなきゃ変化はないよねー

434 :デフォルトの名無しさん:2012/05/23(水) 18:24:01.95
>>431
ねーよww
酒じゃあるまいし

435 :デフォルトの名無しさん:2012/05/23(水) 19:19:57.80
>>434
なんかのエロゲーを遊んだあとじゃないと動かないアプリ
とかあったよ


436 :デフォルトの名無しさん:2012/05/23(水) 20:34:21.83
深夜だとかっこいいアルゴリズムを思いつくというのはあった

437 :デフォルトの名無しさん:2012/05/23(水) 20:42:27.20
翌朝になるとなぜそう書いたか思い出せない

438 :デフォルトの名無しさん:2012/05/23(水) 21:13:18.66
自分が経験したのは、オブジェクトファイルだか何だったかが
何故か更新されなかったというのがあったな。

翌日ビルドしたら通った。

439 :デフォルトの名無しさん:2012/05/24(木) 00:12:18.27
ファイルを開いたまま握るタイプの糞エディタでビルドログを開いたままビルドして、
ビルドできないと反日悩む馬鹿なら知っている。

440 :デフォルトの名無しさん:2012/05/24(木) 16:04:41.11
>>439
俺か

441 :デフォルトの名無しさん:2012/05/24(木) 17:08:36.46
>>439
普段の書き込み内容がわかる誤変換だなw

442 :デフォルトの名無しさん:2012/05/30(水) 09:35:09.01
__LINE__や__FILE__で与えられる文字列を、関数(またはマクロ関数)に投げたいのですが、
呼び出し側で毎回指定する以外の方法で、実装することは可能でしょうか。
もしくは同等の機能でも構いません。

例えば別のどこかでLog()という関数が定義されてるとして、
main.cpp内でLog()を呼んだとき、このLog()側から「main.cpp」や行番号という情報を扱えるか、ということです。

もちろんLog(__FILE,__LINE__,〜) とやれば済むのですが、あちこちで使う場合ちょっと面倒かなと。

443 :デフォルトの名無しさん:2012/05/30(水) 09:51:08.36
>>442
つ[マクロ]

444 :デフォルトの名無しさん:2012/05/30(水) 10:01:41.44
>>442
こうやるとか

#define Log(foo) _Log(__FILE__, __LINE__, foo)

void _Log(char *file, int line, char *foo){ /* ... */ }

445 :デフォルトの名無しさん:2012/05/30(水) 10:09:40.65
>>443-444
出来た! ありがとう!

組み込みマクロが展開されるタイミングを勘違いしてたよ。
試しもせずに先入観で否定するのは良くないね。反省。

そして今の環境だと可変長引数のマクロ関数には対応してないようだ(´・ω・`)
必要なときにだけsprintfするか。

446 :デフォルトの名無しさん:2012/05/30(水) 10:58:16.90
(`・ω・´)

447 :デフォルトの名無しさん:2012/05/30(水) 12:57:10.10
(´・ω・`)

448 :デフォルトの名無しさん:2012/05/30(水) 12:59:54.88
スプリントゥフ

449 :デフォルトの名無しさん:2012/05/30(水) 23:10:41.70
組み込みマクロが展開するのってマルチバイト文字列だからUnicodeだと困ったことに

450 :デフォルトの名無しさん:2012/06/01(金) 02:18:27.71
10時間ぐらいかけてもコアダンプされるが原因が分からず聞こうと思ったらやっと見つかった・・・
人に説明するために、この原因はないです。この原因はないです。って一つ一つ整理してたら
ループ内で一要素分だけ動的に確保したメモリをオーバーランしてたことに気づく
結果おかげさまで解決しました、ありがとうございました

451 :デフォルトの名無しさん:2012/06/01(金) 02:20:30.08
よかったですね

452 :デフォルトの名無しさん:2012/06/01(金) 12:07:30.52
おめでとう!

453 :デフォルトの名無しさん:2012/06/01(金) 12:49:10.91
メインクラスで宣言した変数を他のクラスで使いたいんですが、グローバル変数を使えばいいんでしょうか?
int a:だけだと宣言されていないと出てしまい、使い方がイマイチ分からないです

454 :デフォルトの名無しさん:2012/06/01(金) 13:06:27.01
>>453
コードとエラーメッセージ晒せ。

455 :デフォルトの名無しさん:2012/06/01(金) 13:38:30.61
>>453
public でもつけとけ。

こんな質問する程度のお前がが作るソフトに継承、カプセル化、ポリモーフィズムも
関係ないだろうからw

456 :デフォルトの名無しさん:2012/06/01(金) 14:35:26.38
#define private public

457 :デフォルトの名無しさん:2012/06/01(金) 14:37:51.79
>>455
お前、ガガ?

458 :デフォルトの名無しさん:2012/06/01(金) 14:44:35.55
レディ

459 :デフォルトの名無しさん:2012/06/01(金) 17:04:10.61
>>155
C#でいいとおもうよ。手軽だし

460 :デフォルトの名無しさん:2012/06/01(金) 17:05:11.79
あ、さっき乙姫とあってたから時間がおかしいみたいだ。すまん

461 :デフォルトの名無しさん:2012/06/01(金) 17:09:18.34
>>459
本格的なものを作りたいんですよ
C#みたいな、お遊びは時間の無駄じゃないですか

462 :453:2012/06/01(金) 17:14:17.02
調べてもたいして重要じゃないのか出てこなかったんで助かりました
煽りはお決まりなんでしょうか?ともかくありがとうございます

463 :デフォルトの名無しさん:2012/06/01(金) 17:29:32.00
>>461
逆だ。時間の有効になる。

464 :デフォルトの名無しさん:2012/06/01(金) 17:31:23.19
>>461
本格的なものってなんぞ

465 :デフォルトの名無しさん:2012/06/01(金) 17:49:07.51
Windows8に代わるOSを作りたいのです

466 :片山博文MZボット ◆0lBZNi.Q7evd :2012/06/01(金) 17:57:19.58
>>465 ReactOS

467 :デフォルトの名無しさん:2012/06/01(金) 17:58:50.20
>>464
人様にお金を払って頂けるようなもの

468 :デフォルトの名無しさん:2012/06/01(金) 18:41:09.74
目標を高く持つのは結構だが
まずはベクターあたりに載るのを目指したらどうだね

469 :デフォルトの名無しさん:2012/06/01(金) 18:47:56.02
ベクターは自己申告だろ。ウイルス入りは弾かれるかもしれん。

470 :デフォルトの名無しさん:2012/06/01(金) 19:04:02.14
それでも何もしないサンプルアプリそのままとかはダメじゃないか?

471 :デフォルトの名無しさん:2012/06/02(土) 05:56:20.22
つーか、C#で喰ってますが何か。

472 :デフォルトの名無しさん:2012/06/02(土) 07:19:16.51
別に

473 :デフォルトの名無しさん:2012/06/02(土) 09:27:26.99
ここはC++スレです

474 :デフォルトの名無しさん:2012/06/02(土) 13:45:35.43
質問です
Windows/VC++10の環境で、libファイルにリソースを埋め込んで使いたいのですが、
LoadResource等の返り値がNULLで、読み込みに失敗していているようです
http://ideone.com/40dyA
こんなコード感じのコードなのですが、原因がわかる方居ませんか?

475 :デフォルトの名無しさん:2012/06/02(土) 14:23:58.17
exeとdllだけ

476 :デフォルトの名無しさん:2012/06/02(土) 15:03:56.06
>>475
あ、そうなんですか……
ありがとうございます

477 :デフォルトの名無しさん:2012/06/02(土) 21:11:12.83
CやC++のリファレンスをダウンロードできるサイトとかありませんでしょうか?
例えばPHPのマニュアルのようなものです
自分、暫く海外へ行くもので、ネットに接続出来ないかもしれないのでオフラインで確認したいと思いまして

478 :デフォルトの名無しさん:2012/06/02(土) 21:33:03.79
C/C++サイト

http://www.geocities.jp/ky_webid/
http://www5c.biglobe.ne.jp/~ecb/index.html
http://nienie.com/~masapico/
http://www.cppll.jp/cppreference/index.html














479 :デフォルトの名無しさん:2012/06/02(土) 22:11:54.49
>>478
ありがとうございます

480 :デフォルトの名無しさん:2012/06/02(土) 23:23:13.20
質問です。

C言語で大抵のコンパイラでは、グローバル変数は0で初期化されます。
これは ANSI C の規格で定められているのですか?

481 :デフォルトの名無しさん:2012/06/02(土) 23:27:44.50
はい。

482 :デフォルトの名無しさん:2012/06/02(土) 23:40:43.62
>>478 ありがとうございます、助かりました

483 :デフォルトの名無しさん:2012/06/02(土) 23:41:14.43
間違えました
>>481

484 :デフォルトの名無しさん:2012/06/03(日) 02:56:06.66
組み込みだとそうでもなかったりする。

485 :デフォルトの名無しさん:2012/06/03(日) 03:13:32.18
>>484 それは規格違反なんだろ。

486 :デフォルトの名無しさん:2012/06/03(日) 04:09:06.83
デバッグしやすいように0以外で初期化してくれたり

487 :デフォルトの名無しさん:2012/06/03(日) 04:15:17.79
一回しか作られないものはちゃんと値初期化。
何度も作られるものはめんどいので放置。

こういう覚え方で。

488 : ◆QZaw55cn4c :2012/06/03(日) 05:19:36.00
>>487
まあそういえなくもないが‥‥やはりプログラムのロードやメモリ配置をここで言及するのはいかんのだろうか?

スタック上のものはプログラム開始時に存在しないので初期化はない。
それ以外のものはプログラム開始時に存在し初期化する。
しかしmalloc() で確保した領域はプログラム開始時にあるものではないので初期化しない。


489 :デフォルトの名無しさん:2012/06/03(日) 05:38:40.70
calloc

490 : ◆QZaw55cn4c :2012/06/03(日) 05:45:09.46
>>489
そんなものつかうのか?

491 :デフォルトの名無しさん:2012/06/03(日) 06:21:53.31
mallocでおじゃる

492 :デフォルトの名無しさん:2012/06/04(月) 13:45:40.85
いきなりで悪いけど、exturnって一人で管理する分にはガンガン使っていいんだよね?
複数人だと宣言が被ったりするから気をつけないといけないだろうけど、苦cってサイトに控えろって書いてあったから気になった

493 :デフォルトの名無しさん:2012/06/04(月) 13:56:10.85
1人でもうっかり被ったりすることはないとはいいきれない
でもまあほとんどないだろうから使いたければ自由に



494 :デフォルトの名無しさん:2012/06/04(月) 13:58:08.14
>>492
関数にexturn → 付ける必要無し
変数にexturn → グローバル変数をガンガン使うな

495 :デフォルトの名無しさん:2012/06/04(月) 14:24:34.18
exturn
exturn
exturn

496 :デフォルトの名無しさん:2012/06/04(月) 14:32:56.25
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);
}
}

497 :デフォルトの名無しさん:2012/06/04(月) 14:35:43.70
メッセージボックスをOK キャンセルにして、キャンセルなら終了

498 :デフォルトの名無しさん:2012/06/04(月) 14:47:50.66
レスありがとうございます

それだとメッセージボックスがでてるときにしか終了できないですよね…
いつでも終了できるようにしたいんですけど…

499 :デフォルトの名無しさん:2012/06/04(月) 15:01:47.46
Shell_NotifyIconが何をするものか理解してるの?
単に追加すればいいってもんじゃないよ
タスクトレイに表示したいアイコンは?
タスクトレイで操作したメッセージは誰が処理するの?
ググればサンプルが出てくるから頑張れ

500 :デフォルトの名無しさん:2012/06/04(月) 15:07:35.26
やっぱり根本的に理解してなかったんですね…
数行追加するだけでタスクバーに表示されるのかなと思ってたんですが
イベント関連のことが説明やサンプル読んでもぜんぜん分からないので
そのへんから理解していかないとダメみたいですね…

答えていただいた方ありがとうございました

501 :デフォルトの名無しさん:2012/06/04(月) 15:39:19.29
Sleepで待つのも異様だからもっと勉強しなさい

502 :デフォルトの名無しさん:2012/06/04(月) 17:18:43.34
Sleepは目的が1分ごとなのか1分間隔なのかにもよるし
この程度のトイプログラムならタイマーイベント使って微妙なタイミングで下手にエンバグするよりシンプルでいいんじゃね

503 :デフォルトの名無しさん:2012/06/04(月) 17:38:25.18
いつでも終了できるようにしたい (タスクマネージャからプロセスを殺すのは不可)
メッセージボックスが
 でていない時には タスクトレイ経由 SYSMENU 〜 終了へ
 でている時には メッセージボックスのキャンセルで

こういう条件だとタイマーやスレッドを使いたくなるな

504 :デフォルトの名無しさん:2012/06/04(月) 17:51:46.02
そもそもSleepしてる間、何の応答もできないし

505 :デフォルトの名無しさん:2012/06/04(月) 18:03:11.77
メッセージボックスが出てる間もカウントするかどうかも
ちょっと退席してる間にメッセージボックスだらけになるんじゃないか?

506 :デフォルトの名無しさん:2012/06/04(月) 18:24:48.76
まあどっちにしろイベント処理を理解してないと難しい
逆にイベント処理を理解すればタイマーも使えるだろ

507 :デフォルトの名無しさん:2012/06/04(月) 19:20:05.64
そもそも、そのメッセージボックスは何の為に出すんだ?
つーか、先ずは基礎からと考えて、ウィンドウを一つ出しておく方法で実装してみることをお勧めしたい。

508 :デフォルトの名無しさん:2012/06/04(月) 19:27:04.63
普通にi使えばいいのに
iが1000になったら表示とかで

509 :デフォルトの名無しさん:2012/06/04(月) 19:35:15.80
GUIプログラム初心者の質問いつまで引っ張ってんだよww
入門サンプル見て勉強しろで終わりだろw

510 :デフォルトの名無しさん:2012/06/04(月) 20:48:22.04
>>492
それエラーになるよ

511 :デフォルトの名無しさん:2012/06/04(月) 21:17:40.76
なんで初心者ってGUIから入るんだろうね
正直GUIなんてどうでもいいよな


512 :デフォルトの名無しさん:2012/06/04(月) 21:22:36.10
そりゃGUIアプリを作りたいからだろう

513 :デフォルトの名無しさん:2012/06/04(月) 21:31:17.85
ただ、最初からGUIアプリを作りたいならC/C++を選ぶのは茨の道だよなw

514 :デフォルトの名無しさん:2012/06/04(月) 21:38:55.40
そうか?
VC++ならマウス操作だけで、カッコいいVisualStudioライクのGUIが即できるぞ

515 :デフォルトの名無しさん:2012/06/04(月) 21:46:28.83
>>496 はたぶん C/C++相談室から誘導されてきたんだろうけど
あっちのソースみる限りアルゴリズム自体はそれなりにかけるんじゃないかな

UNIX系で勉強していきなり Windows APIは C++ といってもまったく別言語だよな
大学なんかで習ってるなら Java あたりで GUI 覚えてからの方が普通だしな


516 :デフォルトの名無しさん:2012/06/04(月) 22:05:48.33
>>496 ですけどあの後もいろいろレスいただいたみたいでありがとうございます

>>501-506
タイマーは使ったことないですけど仕組みは何となくわかります
ループ1回分の処理を別関数に分けて
何秒後にその関数を呼び出すように登録するようなライブラリがあるんですよね…
とりあえずもっとクリティカルなところでつまずいてたので…
そこが解決したらタイマーも使ってみることにします

>>507
別にそれでもいいんですけど現状覚えたのがメッセージボックスだけで…
C++相談室の方でさきに質問したら Shell_NotifyIcon を進められたんです
メッセージボックスを2つ出せれば解決しそうなんですけど
入力待ちをブロックせずに2つ出すことってできるんでしょうか…

>>511
人に頼まれたプログラムなのでGUIの方がいいかなと…

あとVCは完全にはじめてですがGUI自体は Java なら軽く AWT 習いました
理解してるわけではないんですがテンプレの処理とどのメソッドにとんでくるか覚えてるだけですけど

いろいろサイトみてみたんですけど…
Visual C++ は動かすための最小セットが長すぎてすぐに理解できないんですよね><
どこまでがテンプレでどこまでが追加されたコードなのかっていうのが…
GUIのイベント処理理解するための入門サイトみたいなのがあれば知りたいんですけど…

517 :デフォルトの名無しさん:2012/06/04(月) 22:24:26.63
なんでやねん。Javaほど簡単じゃないけど、やってることの基本は簡単だべ。
関数はたった2つ、main関数とコールバック関数(関数名は自由)。
main関数の仕事はたった2つ。
自分自身が何者であるかをOSに登録して無限ループに入るだけ。
これはもう定型文なのでほとんどコピペ。
コールバック関数はOSから呼び出されるたびに、
引数のひとつであるWindow Message(単なる整数)の値に応じて処理を分岐するだけ。
これはイベントドリブン型のプログラムではたいてい同じロジックだから
言語ひとつ知ってれば全部応用できる。

MFCは複雑だけどね。メッセージループがワークフレームの中に隠れてたりするし。

518 :デフォルトの名無しさん:2012/06/04(月) 22:52:21.91
まあ単純にコード行数の問題じゃね
確かに VC++ で挿入されるテンプレみたら初心者はやる気なくす
俺も最初はそうだった

あと Java は興味あるイベントリスナーだけを登録しておけば
イベント内容に応じて分かりやすい関数名にとばしてくれるからな

イベントディスパッチを自分でやるって違いだけなんだけど
switch 文に見慣れない変数がずらずら並んでると難しく見えるのも分からないでもない

519 :デフォルトの名無しさん:2012/06/04(月) 23:04:55.44
本当はwinapiスレ行けと言いたいがどうなんだろうな

520 :デフォルトの名無しさん:2012/06/04(月) 23:11:05.50
環境依存か

521 :デフォルトの名無しさん:2012/06/05(火) 00:01:49.16
質問よろしいでしょうか?
知り合いとプログラムをつくっているのですが
知り合いが new した int配列を mapの中にいれて、eraseでメモリの開放できているといいます。
私がメモリのリークチェックで確認したところ 未開放の情報が出力されるのですがeraseで本当に削除されるのでしょうか?
それともlist::pop_frontみたくmapの中の要素リストから排除するのみなのでしょうか?

522 :デフォルトの名無しさん:2012/06/05(火) 00:07:30.95
自分でdeleteしてね

523 :デフォルトの名無しさん:2012/06/05(火) 00:13:45.04
ですよね ありがとうございます。

524 :デフォルトの名無しさん:2012/06/05(火) 00:50:02.89
>>521-523
delete すんな vector 使え。

525 :デフォルトの名無しさん:2012/06/05(火) 00:59:44.40
std::map<x, std::vector<y> >これアリなんだっけ

526 :デフォルトの名無しさん:2012/06/05(火) 01:23:19.75
もちろん

527 :デフォルトの名無しさん:2012/06/05(火) 11:49:21.23
>>521
何の証拠もなしにできているとほざく知り合いは死ぬべき

528 :デフォルトの名無しさん:2012/06/05(火) 12:34:56.25
だよな
そういうやつがよくわからないバグを生み出す原因だったりするよな

529 :デフォルトの名無しさん:2012/06/05(火) 12:39:32.19
リークしてることを証明すればいい

530 :デフォルトの名無しさん:2012/06/05(火) 12:45:38.46
Thread32First/Nextで列挙したスレッドが
特定のDLLで開始されているか調べるには
どうしたらいいですか?

開始アドレスをNtQueryInformationThreadで
調べるというのは見つけたのですが、
それが特定のDLLのものか、どう調べれば良いですか?

531 :デフォルトの名無しさん:2012/06/05(火) 13:01:09.91
CreateToolhelp32Snapshot(TH32CS_SNAPMODULE)でプロセス内のDLLを列挙して
DLLからエクスポート関数を列挙して
プロセス内のDLLアドレス+関数の相対アドレス == 開始アドレス
もしくは GetProcAddress(dll,fname) == 開始アドレス で比較したら
分かる・・・かもしれない やったことないけど

532 :片山博文MZボット ◆0lBZNi.Q7evd :2012/06/05(火) 13:19:34.63
>>531 それじゃエクスポートしていない関数じゃできないじゃん。

533 :デフォルトの名無しさん:2012/06/05(火) 13:26:48.51
質問が分からないがスレッドがどのプロセスに属するかどうか?

534 :デフォルトの名無しさん:2012/06/05(火) 14:00:31.87
>>532
DLLベースアドレス <= 開始アドレス < DLLベースアドレス+DLLサイズで
分かるんじゃね?

535 :デフォルトの名無しさん:2012/06/05(火) 14:43:42.23
>>533
Process Explorerでプロセス内のスレッド一覧見ると
Start Addressに
  gdiplus.dll!GdipGetVisibleClipBoundsI+0xad4
  firefox.exe+0x1bf9
とか表示されるから、そういう情報を取りたいんだと思う

536 :デフォルトの名無しさん:2012/06/05(火) 15:02:11.80
質問の意図や前提をくみ取れない糞質問
が多い。それで回答者が逆質問をしたり
悪口を言ったりする。それを前もって思
い描く力が絶望的に欠如してるに違いない。
スーパーハッカーだけが意図を理解できる。
レアなそういう神が颯爽と登場する予感。

537 :デフォルトの名無しさん:2012/06/05(火) 15:08:37.44
そのコピペは1スレに1回までにしてください

538 :デフォルトの名無しさん:2012/06/05(火) 15:27:53.91
ありがとうございます。
>>531 >>532 とりあえず、エクスポート関数に限定して、これを試します。
>>534 DLLベースアドレスの取得方法を教えていただけませんか?
ベースアドレスが衝突してデフォルトでない場合も
取得できるのでしょうか? この方法も試してみたいです。
>>533 >>535さんのおっしゃるとおりです。
dll!func+0xXXXというのは、エクスポートされている関数のアドレスから
0xXXX後にある、エクスポートされてない関数という意味なのですか?
>>536 わかりにくくてすいません。

539 :デフォルトの名無しさん:2012/06/05(火) 15:34:38.71
そもそもなにしたいのん?

540 :デフォルトの名無しさん:2012/06/05(火) 15:38:56.47
>>538
ベースアドレスはロードされたDLLの先頭メモリアドレスなので
1プロセス内で衝突することは無い
MODULEENTRY32.modBaseAddr がベースアドレス
MODULEENTRY32.modBaseSize がサイズ

modBaseAddr <= p < modBaseAddr+modBaseSize がDLLのメモリ領域

541 :デフォルトの名無しさん:2012/06/05(火) 16:12:31.78
のんのんのん♪

542 :デフォルトの名無しさん:2012/06/05(火) 18:24:38.63
そんなマニアックなことして何をしたいんだか
ウイルスでも作るのか

543 :デフォルトの名無しさん:2012/06/05(火) 18:35:32.14
わかんねーなら黙ってろよ

544 :デフォルトの名無しさん:2012/06/05(火) 18:59:48.46
やりたいことによっては別案があるかもしれねぇから聞いているかも知れねぇだろ
アスペは黙ってろ

545 :デフォルトの名無しさん:2012/06/05(火) 19:16:25.38
などと、アスペが喚いておりますが、気にしないでくださいね★

546 :デフォルトの名無しさん:2012/06/05(火) 19:17:42.89
んだこら

547 :デフォルトの名無しさん:2012/06/05(火) 19:23:29.12
最終的に何をやりたいのか明らかにしてないだろ

548 :デフォルトの名無しさん:2012/06/05(火) 21:27:18.21
自作のコンテナのイテレータで、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
]
コンストラクターはソース型を持てません、またはコンストラクターのオーバーロードの解決があいまいです。

549 :デフォルトの名無しさん:2012/06/05(火) 21:48:37.88
うん。だって、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
なるほど。そういうことなんですね。ありがとうございました!

551 :デフォルトの名無しさん:2012/06/06(水) 08:26:14.79
codepadはいつ見てもcookpadに見える

552 :デフォルトの名無しさん:2012/06/06(水) 11:46:05.93
基本的な質問で申し訳ありませんが
自分は参照渡しとポインタ渡しは書き方が違うだけでコードは同様と思っていますが
意味が違うと言っている人(ポインタを理解していない?)がいたので質問します

以下のコードに書き方以外の違いはあるのでしょうか?
void hoge::func1(int &p1)
{
p1++;
}

void hoge::func2(int *p1)
{
*p1++;
}


553 :デフォルトの名無しさん:2012/06/06(水) 12:00:28.31
間違えました
コードは同様→機能は同様

です

554 :デフォルトの名無しさん:2012/06/06(水) 12:04:08.66
基本的には一緒
NULLやポインタ演算を使う場合はポインタを使う

本人じゃないと分からんけど
そういった点でセマンティクスが違うと言ってるのかもしれない


555 :デフォルトの名無しさん:2012/06/06(水) 12:04:28.94
>>552
全く違う。ポインタを理解していないのはあんただ。
前者は内容を更新し、後者はポインタを更新する。

556 :デフォルトの名無しさん:2012/06/06(水) 12:09:27.37
ポインタを理解してないのか、演算子の優先順位を理解してないのか
どっちなんだろうな。

557 :デフォルトの名無しさん:2012/06/06(水) 12:12:58.44
>>555
どっちも結果を捨てているから一緒じゃねぇか。

って突っ込もうと思ったが、ポインタ版は在らぬところを指してしまうからやっぱり拙いかな?

558 :530:2012/06/06(水) 12:21:48.86
ありがとうございます。
>>539 >>542 とりあえずは、ws2_32.dllの非同期通信スレッドが
他のスレッドに邪魔されないように、優先度を上げようと思っています。
>>540 これで行けそうです。ありがとうございます。

559 :デフォルトの名無しさん:2012/06/06(水) 12:22:27.46
>>552
*p1++; は *(p1++); になるから (*p1)++; って書かないと参照の方と同じ処理にならないよ

560 :デフォルトの名無しさん:2012/06/06(水) 12:59:12.13
> どっちも結果を捨てている
お前大丈夫か?

561 :デフォルトの名無しさん:2012/06/06(水) 14:47:40.54
>>558
言語のインストーラがやたらと重いし時間が掛かるのでいつもmsiexexcexeをタスクマネージャで
一個下の優先度に変えているぜ

マルチコアだと関係ないと思われるかも知れないがそれでもタスクの切り替えの時に何か引っ掛かる

562 :デフォルトの名無しさん:2012/06/06(水) 15:55:12.46
c++のbool型って1バイト使ってますよね?
bool型の変数を本当に1bitで使うことって出来ますかね?
具体的に言うとboolの配列を出来るだけ多く使いたいので、メモリ節約することで単純に宣言した場合の8倍の量使えるように出来ないかな思ったんですが・・・

563 :デフォルトの名無しさん:2012/06/06(水) 16:06:14.41
bitsetを使おう

564 :530:2012/06/06(水) 16:19:46.29
>>561 マルチコアでも、全部のコアが100%に近い場合は、
優先度が顕著に影響しますね。

言語を頻繁にインストールしているのですか?

565 :デフォルトの名無しさん:2012/06/06(水) 17:10:27.14
>>564
そんな事はないけどあるコアを100%使う時に気づいた
100%使うような処理は優先度を一つ落とすべきだと思った

>>562
Proxy Classを使うと実現可能だと思うけど遅いと思うぞ

566 :562:2012/06/06(水) 17:30:22.35
>>563,565
bitsetで出来たのでこれでやってみます
ありがとうございました

567 :デフォルトの名無しさん:2012/06/06(水) 21:10:51.82
コンストラクタ・デストラクタ呼び出しについて、
new deleteではなくmalloc、コンストラクタ、デストラクタ、freeとやってしまって問題ありますか?
呼び出し忘れの可能性が増えること以外で

568 :552:2012/06/06(水) 21:11:06.78
演算子の優先順を考慮していませんでした (*p)++;ですね
慌ててて書き込むとダメですね

要は
func1を p1 = 0;
func2を *p1 = 0;
として結果は同じことを確認したかったのです

569 :デフォルトの名無しさん:2012/06/06(水) 21:26:40.20
>>567
問題ない
デフォルトのoperator newは大抵mallocを使ってる


570 :デフォルトの名無しさん:2012/06/06(水) 21:32:58.30
そうですか、とりあえず安心
では続けて質問・・・
class Hoge
{
public:
int hensu;
Hoge(){hensu = 0;}
}

//
Hoge* hogeP = (Hoge*)malloc(sizeof(Hoge));
hogeP->Hoge();//エラー
hogeP->Hoge::Hoge();//OKっぽい、hensu = 0になっている

上記エラーとOKの差の意味ってなんでしょう?

571 :デフォルトの名無しさん:2012/06/06(水) 21:46:04.45
本来は両方エラーだがコンパイラの独自拡張が下の例だけ対応しているだけのこと

572 :デフォルトの名無しさん:2012/06/06(水) 21:47:15.64
>>570
配置new
http://ideone.com/ate3L

573 :デフォルトの名無しさん:2012/06/06(水) 21:48:31.56
なるほど・・・気にしたら負けな世界ですかね、あんまり深追いしないでおきます

574 :デフォルトの名無しさん:2012/06/06(水) 21:51:11.80
> new(p) A();

初めて見る書き方です。replacement newですかね?勉強してみます

575 :デフォルトの名無しさん:2012/06/06(水) 22:08:51.39
>>569
おいおい変な事を教えるなよ
規格票に従え

576 :デフォルトの名無しさん:2012/06/06(水) 22:10:22.34
だいたい継承関係にあるクラスの派生クラスをdeleteせずにfreeしたらちゃんと
基底クラスのデストラクタ呼び出してくれるのか?よく考えろ

577 :デフォルトの名無しさん:2012/06/06(水) 22:13:45.30
大概のライブラリでbitsetってスレッドセーフじゃないんだよね…vector<int>より結局遅くなるケースがおまんちん(´・ω・`)

578 :デフォルトの名無しさん:2012/06/06(水) 22:15:37.02
POD型以外はmallocじゃ正しいサイズになる保証もないしな。

579 :デフォルトの名無しさん:2012/06/06(水) 22:26:03.75
引数付きコンストラクタも呼び出せないしな

580 :デフォルトの名無しさん:2012/06/06(水) 23:48:03.25
>>575
具体的に

>>576
されるけど、何がよく考えろ?
http://ideone.com/C8PJH

>>578
sizeofが正しいサイズを返さないってこと?
sizeofにはvtblもアラインメントのパディングも反映されるし
mallocの開始アドレスは基本型のアラインメントも保証されてる

>>579
呼び出せるけど、確認してから言ってるの?
http://ideone.com/TKP9g

581 :デフォルトの名無しさん:2012/06/06(水) 23:56:44.79
>>576
>freeしたらちゃんと
というか継承以前にfreeとデストラクタは関係無い

582 :デフォルトの名無しさん:2012/06/07(木) 00:18:29.56
質問させてください

引数で可変サイズの2次元配列を受け渡すにはどうしたらいいんでしょうか?

int det(int[][] a, int n) {

みたいに2次元配列とサイズをうけとってサイズに応じて計算したいんですけど…

583 :デフォルトの名無しさん:2012/06/07(木) 00:29:35.85
>>580
だれもplacement newの話はしてないんだが・・・

頭おかしい?

584 :デフォルトの名無しさん:2012/06/07(木) 00:32:38.67
>>582
C#のジャグ配列みたいな奴って事?

それじゃポインタのポインタのポインタもしくはポインタのポインタのリファレンスを渡して
行もしくは列方向が伸び縮みするようならreallocもしくはC++ならvectorを使った方がいいね
俺自身はvecctorが常に今の行数と行ごとの列数が簡単に把握出来て好きなんだが

585 :デフォルトの名無しさん:2012/06/07(木) 00:33:30.43
ちなみにポインタのポインタではいけないのは、呼び出し元に行方向にreallocした
場合の結果を返せないから

586 :デフォルトの名無しさん:2012/06/07(木) 00:34:53.65
>>582
こういうの?std::vector使った方が良いとは思うけど
http://ideone.com/pspcT

587 :デフォルトの名無しさん:2012/06/07(木) 00:36:37.16
>>583
どの部分に対するレスかも書けないお前の頭がおかしい

588 :デフォルトの名無しさん:2012/06/07(木) 00:40:51.82
int det(int *, int);
det((int *)a, (sizeof(a) / sizeof(int));

589 :デフォルトの名無しさん:2012/06/07(木) 00:53:17.89
>>587
何でも人のせいにすんなカス
自分の文章を読む能力の不足を棚に上げて偉そうに

590 :デフォルトの名無しさん:2012/06/07(木) 00:57:17.14
>>589
で、結局お前は>>580のアンカ先のうちどれなわけ?
それを書けと言ってるんだが

591 :デフォルトの名無しさん:2012/06/07(木) 01:04:38.95
お返事ありがとうございます

>>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;
}



592 :デフォルトの名無しさん:2012/06/07(木) 01:09:32.39
>>582
http://ideone.com/tQkZx

やっぱりC++とmalloc/free/reallocを組み合わせるのは気が引けるな
std::vector<std::vector<int> > を使うか自前のクラスを作りたい

593 :デフォルトの名無しさん:2012/06/07(木) 01:11:20.40
>>583の正体は次のどれ?
A:>>575 B:>>576
C:>>578 D:>>579

オーディエンスで。

594 :デフォルトの名無しさん:2012/06/07(木) 01:12:46.86
>>591
>>586をCにした
http://ideone.com/VazAq

595 :デフォルトの名無しさん:2012/06/07(木) 01:29:56.54
>>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 :デフォルトの名無しさん:2012/06/07(木) 01:45:02.40
>>595
>>592はC++だよ

597 :デフォルトの名無しさん:2012/06/07(木) 01:48:28.56
>>596
そうなんですけど
Cでも int**& って書き方自体できたので
メソッド中で a[1][1] って書き方でアクセスできれば楽かなって試してみたんですけどダメでした

Cで2次元配列扱うのって結構大変なんですね…

598 :デフォルトの名無しさん:2012/06/07(木) 01:52:46.91
>Cでも int**& って書き方自体できたので

やめてください

599 :デフォルトの名無しさん:2012/06/07(木) 01:56:23.42
>>597
コンパイラが a[1][1] を *(a+1 * n + 1) のような計算に変換してくれているので
nの部分をコンパイラが認識出来ないとどうしようもない
mainの中で書けるのは int a[2][2] という定義が見えているため

↓のように認識させれば a[1][1] のように書けるけど1次元分以外は固定になってしまう
http://ideone.com/vgeLc

600 :デフォルトの名無しさん:2012/06/07(木) 02:09:39.53
>>599
なるほどです

#define ならできるのはわかるんですけど
配列サイズをちっちゃくしながら再帰的にこのメソッドをよびたいので
変数で可変じゃないと困るんですよね…

ちょっとソースが醜くなるけど
一応やりたいことは >>594 でできそうなのでこれでかいてみます
本当にみなさんありがとうございました


601 :デフォルトの名無しさん:2012/06/07(木) 06:55:51.82
C++

class Hoge{
private:
int hogehoge;
};

このclassをvectorに4つ格納したいのですがどう記述すればいいのでしょうか
型の宣言がわかりません。

vector<Hoge> array(4)

これじゃだめなんですか?


602 :デフォルトの名無しさん:2012/06/07(木) 08:21:09.34
#include <vector>
class Hoge{
private:
int hogehoge;
};

std::vector<Hoge> array(4);


603 :デフォルトの名無しさん:2012/06/07(木) 20:31:48.34
.NETで開発する場合C++/CLIは必須ですか?

604 :デフォルトの名無しさん:2012/06/07(木) 20:45:19.07
いいえ

605 :デフォルトの名無しさん:2012/06/07(木) 21:26:18.99
>>604
だとするとCLIはいつ使うのですか?



606 :デフォルトの名無しさん:2012/06/07(木) 21:32:22.18
>>605
http://d.hatena.ne.jp/itaro3/20110727/1311716477

これ見て考えろや
でもここまでするなら普通にC/C++使えと思う
既存の.NETのリソースを活用したい時だけか

607 :デフォルトの名無しさん:2012/06/07(木) 21:33:34.20
>>606
ありがとうございます!!!!!

608 :デフォルトの名無しさん:2012/06/08(金) 17:20:14.46
久しぶりにクラスのポインタの配列をnewしようとしたら記述方法が解らず過去のソース漁っちまったぜ

何でこんな記述方法なんだ

609 :デフォルトの名無しさん:2012/06/08(金) 17:26:58.79
バカ避け

610 :デフォルトの名無しさん:2012/06/08(金) 17:43:51.53
>>608
勘違いしてたらごめん、普通な記述方法だと思うけどコレと違うの?
http://ideone.com/ZCwKK

611 :デフォルトの名無しさん:2012/06/08(金) 19:07:55.41
>>610
自明ではないなあ、確かに調べたくなる。
int *p, *q;
なのに
int* [10];。

612 :デフォルトの名無しさん:2012/06/08(金) 19:08:13.99
Bjarne Stroustrup氏 インタビュー
http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html

613 :デフォルトの名無しさん:2012/06/08(金) 19:31:09.43
そこそこ有名な古文書ですね

614 :デフォルトの名無しさん:2012/06/08(金) 20:28:57.23
>>611
配列のnewは
 type* p = new type[n];
なのでクラスのポインタ(type = cls*)なら
 cls** p = new cls*[n];

まとめて変数を定義する構文は欠陥品みたいなもんだから使わない方がいい
理解云々より「型 変数,変数;」にならない場合があるシンタックスがキモイ

615 :デフォルトの名無しさん:2012/06/08(金) 23:18:54.25
ポインタ配列は使わずにptr_vector使ってるわ

616 :デフォルトの名無しさん:2012/06/09(土) 00:09:07.32
>欠陥品みたいなもん
聞いたことないわ
脳内か?

617 :デフォルトの名無しさん:2012/06/09(土) 01:31:56.33
禿がそんなようなこと言ってた気がする

618 :デフォルトの名無しさん:2012/06/09(土) 06:33:12.18
int *p, *q;

int* p, q;

どっちが意図通りか分かりにくい

619 :デフォルトの名無しさん:2012/06/09(土) 09:22:15.62
>>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.

620 :デフォルトの名無しさん:2012/06/09(土) 10:32:50.57
[C++設計と進化]でもCの宣言シンタクスをdisってるよね。
構文を変えようとしたけどCユーザーの反発とか色々あって放置に決めたっていう。

621 :デフォルトの名無しさん:2012/06/09(土) 11:10:58.17
>>618
どっちがどうなのかさっぱりだ

基本Cな俺は上で記述したくなるけど

622 :デフォルトの名無しさん:2012/06/09(土) 12:27:10.29
int*をtypedefしたらさらにややこしい

623 :デフォルトの名無しさん:2012/06/09(土) 13:20:15.63
いやそこは#define だろ

624 : ◆QZaw55cn4c :2012/06/09(土) 13:47:33.95
なんでもありの #define は避けれるのであれば避けたほうがいい。

625 :デフォルトの名無しさん:2012/06/09(土) 14:35:41.84
コテはアスペとわかっちゃいても
ヤッパむかつくな

626 : ◆QZaw55cn4c :2012/06/09(土) 15:12:12.59
>>625
コードをみせてくれ。話はそれからだ。

627 :デフォルトの名無しさん:2012/06/09(土) 15:46:21.13
ナッパむかつくわ

628 :デフォルトの名無しさん:2012/06/09(土) 21:11:59.64
ラッパズボン

629 :デフォルトの名無しさん:2012/06/09(土) 21:47:37.67
ガッペむかつく

630 :デフォルトの名無しさん:2012/06/09(土) 23:03:37.47
charの配列に2バイト文字列が入ってるものをifとかで場合分けしたいんですが、どーしたらいいんでしょう?
別の事情でstring型は使うことができないんです
初歩的な質問ですいませんがよろしくお願いします

631 :デフォルトの名無しさん:2012/06/09(土) 23:14:05.73
正確ではないと思うが、全角文字の1バイト目を探すというのはどうだろう。
0x80〜 とかその辺だった記憶

632 :デフォルトの名無しさん:2012/06/09(土) 23:21:18.75
>>631
回答有り難うございます
文字列で場合分けしたいので一文字じゃダメなんです……
でも参考になりました ありがとうございます
別で聞いた所strcmp?とかいうもので解決するそうです
もう少し頑張ってみます

633 :デフォルトの名無しさん:2012/06/09(土) 23:59:18.06
いや、charの配列を頭から一文字ずつチェックして
その2バイト文字列の文字コードでマルチバイト文字の1バイト目であることを示す値が出てくるかどうかで判断するって話だろ

634 :デフォルトの名無しさん:2012/06/10(日) 00:17:31.99
なんでそうなるw

635 :デフォルトの名無しさん:2012/06/10(日) 00:24:29.07
3バイト文字列

636 :デフォルトの名無しさん:2012/06/10(日) 05:57:32.60
>>630
扱うコードは
SJIS?
UNICODE?

637 :デフォルトの名無しさん:2012/06/10(日) 06:03:28.19
UTF8以外は認めない

638 :デフォルトの名無しさん:2012/06/10(日) 11:41:33.27
UTF32でおk

639 :デフォルトの名無しさん:2012/06/10(日) 12:11:18.15
Bjarne Stroustrup
ってなんて読むの?

バカジャネ ストラップ

でいいの?

640 :デフォルトの名無しさん:2012/06/10(日) 12:18:44.54
Wikiみろ。しかし、一般にはハゲである。

641 :デフォルトの名無しさん:2012/06/10(日) 12:22:38.71
びよよん ストローストラップ

642 :デフォルトの名無しさん:2012/06/10(日) 16:57:25.35
初歩的な質問ですがよろしいでしょうか?

C++における関数や関数の呼び出しにおける変数の扱いについてです。
関数や関数内にて宣言している静的な変数は、関数を呼び出すたびに実行に必要なメモリ領域を確保しているのでしょうか?
関数、変数ともにstatic、inlineなどがついていない関数を前提とします。




643 :デフォルトの名無しさん:2012/06/10(日) 17:06:46.76
>>642
>関数や関数内にて宣言している静的な変数
>関数、変数ともにstatic、inlineなどがついていない
矛盾しとるがや。


644 :デフォルトの名無しさん:2012/06/10(日) 17:34:56.98
>>643
すみません
つまりこういうことです。

int func()
{
int var;


}
ここでのfuncやvarは実行されるたび確保されるのでしょうか?

645 :デフォルトの名無しさん:2012/06/10(日) 17:38:33.59
仕組みを知りたいなら"スタック 自動変数"でぐぐればわかるよ

646 :デフォルトの名無しさん:2012/06/10(日) 17:51:53.23
>>645
ありがとうございます。
早速調べさせていただきます。

647 :デフォルトの名無しさん:2012/06/10(日) 18:04:43.04
うるせぇ、許可なんか要らないから勝手に調べろよ。

648 :デフォルトの名無しさん:2012/06/10(日) 18:36:02.03
ハイハイワロスワロスwwww

649 :デフォルトの名無しさん:2012/06/10(日) 19:02:24.84
許可を求めてない件

650 :デフォルトの名無しさん:2012/06/10(日) 19:17:56.41
まぁアスペなんだろ
かかわらないほうが吉

651 :デフォルトの名無しさん:2012/06/10(日) 19:40:35.31
そもそも確保しなきゃ使えんだろ

652 :デフォルトの名無しさん:2012/06/10(日) 19:51:54.42
最初に確保して使いまわしているとかそんなのも考えていたんじゃないか?
そうなると再起関数の部分とかで矛盾が発生するとか考えればわかるけど

653 :デフォルトの名無しさん:2012/06/10(日) 20:03:12.96
静的な変数≠static と思っているあたりもっと根本的なところが

654 :デフォルトの名無しさん:2012/06/10(日) 20:09:06.45
Qが最近あちこちのスレでコテ消して暴れているような気がする

655 :デフォルトの名無しさん:2012/06/10(日) 21:02:46.39
>>653
悪い質問者じゃないんだけどさ・・・
関数内での変数ってstatic明示的に書かない限りAuto変数だと思っていた
kwsk教えてエロい人

656 :デフォルトの名無しさん:2012/06/10(日) 21:05:14.17
つまり>>643だよ

657 :デフォルトの名無しさん:2012/06/10(日) 21:12:59.86
そういえば、確かに静的変数なのにstaticがついていないのは矛盾している・・・。
ごめんなさい、なにか勘違いしていました。

658 :デフォルトの名無しさん:2012/06/11(月) 01:56:38.09
>>654
Qは指パッチンで何でもできるからな。

659 :デフォルトの名無しさん:2012/06/11(月) 03:32:25.29
>>654
気のせいだろ?このスレにしてもQにしてはレベルが低い、というかQならとうに知ってるはず。

660 :デフォルトの名無しさん:2012/06/11(月) 03:35:58.64
いやQの正体はこんなもんじゃないのかな

661 :デフォルトの名無しさん:2012/06/11(月) 04:59:12.55
むしまるQ

662 :デフォルトの名無しさん:2012/06/11(月) 10:25:25.11
DQN

663 :デフォルトの名無しさん:2012/06/11(月) 15:13:36.00
C++のコンパイラ、IDEは何を使えばいいでしょうか(各コンパイラは主として何が違うのでしょうか)
今のところ、Borland C++ Compiler、BCC Developerを使おうと思っています

664 :デフォルトの名無しさん:2012/06/11(月) 15:30:43.85
IDEが決まってから環境(OSとか)を合わせるの?

665 :デフォルトの名無しさん:2012/06/11(月) 15:40:13.46
OSはWindowsXPとWin Vistaです
他にも(使用環境について)何か必要でしょうか?

666 :デフォルトの名無しさん:2012/06/11(月) 15:55:48.00
Visual C++ 2010 Express でいいんじゃね

667 :デフォルトの名無しさん:2012/06/11(月) 16:33:13.06
フリーのやつ全部試せ
無駄にはならん

668 :デフォルトの名無しさん:2012/06/11(月) 16:46:17.50
LSI C 3.30試食版

669 :デフォルトの名無しさん:2012/06/11(月) 17:03:17.01
Borland C++ Compilerはクソ古い上に公式が消滅してるし
Linuxメインでない限りmingw,cygwin使うのはアホだし
VC++除けば Digital Mars C/C++ Compilerくらいか?

670 :デフォルトの名無しさん:2012/06/11(月) 18:56:50.56
用途というか、目的によって違うと思う。

簡単なWindowsアプリをお手軽に作ってみたいというならVC++で良いと思う。
C言語を純粋に勉強したいというなら、gcc(Mingw,cygwin)+eclipse(CDT)の方が良いと思う。

VC++のなんとなく嫌な所はC言語としては、Microsoftの方言があると思える所。
GCCの嫌な所は、Windowsアプリを作るのが面倒くさい(という印象)がある所。

「Windowsのアプリを作り易い」ということは、「WindowsのAPIを簡単に使える」という話だから、
C言語の本体とは直接関係ないけどね。

671 :デフォルトの名無しさん:2012/06/11(月) 19:53:51.53
C++だって言ってるだろ

672 :デフォルトの名無しさん:2012/06/11(月) 20:01:11.29
じゃあ、C言語をC++言語に、そして、gccをg++に、読み替えてください。

673 :デフォルトの名無しさん:2012/06/11(月) 21:01:39.16
VC++のCに方言(っていうか、独自拡張?)なんてあったっけ?
C++は規格合致してない方言まみれだけど
Cは89のままで止まってて、かなり素直だと思うんだけど^^;

むしろ99の機能を一部取り入れてるgccの方が独自拡張多くない?

674 :デフォルトの名無しさん:2012/06/11(月) 21:26:55.49
追加仕様はGCCが未対応はVCが多いイメージ

675 :デフォルトの名無しさん:2012/06/11(月) 21:30:58.92
>>673
http://msdn.microsoft.com/ja-jp/library/34h23df8.aspx

676 :デフォルトの名無しさん:2012/06/11(月) 21:34:19.97
__declspec(selectany) 便利だよね

677 :デフォルトの名無しさん:2012/06/11(月) 21:54:35.82
gccもVC++も色々拡張があるんだね、知らなかった
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/gccextend.html

678 :デフォルトの名無しさん:2012/06/11(月) 22:15:19.79
>>677
ふーん、古いページだけれどもその当時の時点でいろいろあったんだ。
>配列変数をコピーする。
は標準じゃなかったっけ。

679 :デフォルトの名無しさん:2012/06/11(月) 22:41:43.30
お前構造体と勘違いしてんじゃね

680 :デフォルトの名無しさん:2012/06/11(月) 23:00:20.26
配列コピーはGCC拡張だったけど今やるとエラーになる
今の一覧はこれ
http://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html
http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Extensions.html

681 :デフォルトの名無しさん:2012/06/11(月) 23:15:12.86
>>679
そだった。なるほど。

682 :デフォルトの名無しさん:2012/06/11(月) 23:20:40.95
配列なんてここ数年使ったときねーな

683 :デフォルトの名無しさん:2012/06/12(火) 03:10:00.73
std::arrayが使えるようになってまた使い出した

684 :デフォルトの名無しさん:2012/06/12(火) 07:10:39.82
独自のものには__が付いてるから許容範囲

685 :663:2012/06/13(水) 14:20:05.80
レスしてくれた方々ありがとうございます。返信遅れてすみません
まずはVisual C++ 2010 Express使ってみて
不満があるようならg++など順番に変えていこうと思います
(cygwinのインストールはしているのですが、使い方があまり分かっていないので勉強する必要が・・・)

686 :デフォルトの名無しさん:2012/06/14(木) 12:47:46.33
std::ostreamってWindows CEでも使える?

687 :デフォルトの名無しさん:2012/06/14(木) 15:15:04.81
試したら?

688 :デフォルトの名無しさん:2012/06/14(木) 19:47:41.13
C++で、外部の.exeファイルを実行するにはどうすればいいですか?
使っているソフトはVS2010です

689 :デフォルトの名無しさん:2012/06/14(木) 20:00:18.12
ExecuteExternExeFile

690 :デフォルトの名無しさん:2012/06/14(木) 20:01:49.08
>>688
普通の起動
CreateProcess

エクスプローラーと同じようにファイルを開く場合
ShellExecute

コマンド実行(起動したプロセスが終わるまで待機)
system
http://msdn.microsoft.com/ja-jp/library/277bwbdz(v=vs.71).aspx

691 :デフォルトの名無しさん:2012/06/14(木) 23:11:18.71
#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です。

692 :デフォルトの名無しさん:2012/06/14(木) 23:46:53.91
size → size()
http://ideone.com/YBuvr

693 :デフォルトの名無しさん:2012/06/15(金) 06:19:36.46
韓国の国内総生産(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

694 :デフォルトの名無しさん:2012/06/15(金) 07:00:42.74
面白い
役に立つ

695 :デフォルトの名無しさん:2012/06/15(金) 19:56:02.03
.うん 日本人も他人の事言えないね。

【今日の感想】この記事を読んで・・・
面白い (349件)
悲しい (19件)
すっきり (44件)
腹立つ (4件)
役に立つ (36件)..

696 :デフォルトの名無しさん:2012/06/16(土) 06:09:17.53
朝鮮人の嫌がらせにも
マニフェストをなにも守れない民主党の嫌がらせにも
耐え忍ぶ民族

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関数にするとコンパイルが通るのですが、メンバー関数にすると通りません。
どこがまちがってるでしょうか?


698 :デフォルトの名無しさん:2012/06/17(日) 11:01:04.58
func1の中のrightがテンプレート引数でなくtreeのメンバのrightとみなされてる

699 :デフォルトの名無しさん:2012/06/17(日) 19:06:53.96
なるほど、テンプレート引数名とメンバ名がかぶってたと。
テンプレート引数を変更したらコンパイル通りました。
ありがとうございました。


700 :デフォルトの名無しさん:2012/06/19(火) 05:42:11.94
C++にはrubyのsuperみたいな予約語はないのでしょうか?



701 :デフォルトの名無しさん:2012/06/19(火) 05:46:13.06
基底クラスのメンバ呼びたいとかなら
規定クラス名::func()
で呼べるよ

702 :デフォルトの名無しさん:2012/06/19(火) 06:38:25.59
__super

703 : ◆QZaw55cn4c :2012/06/19(火) 07:08:52.15
>>700
ないのでは。C++では派生クラスのコンストラクタから基底クラスのコンストラクタへの綱渡りは基本できなかったと思う。


704 : ◆QZaw55cn4c :2012/06/19(火) 07:10:00.84
ああ、いいかたがわるかった。綱渡りのための宣言はあったね。ただ super はない。

705 :デフォルトの名無しさん:2012/06/19(火) 10:49:09.38
たじる継承の時、superではどっち呼びたいのかわからんからなー。
あ、もともとメンバ名の衝突がある時点でだめか。

706 :デフォルトの名無しさん:2012/06/19(火) 13:35:14.84
たじる継承するにはどうしたらいいですか?

707 :デフォルトの名無しさん:2012/06/19(火) 14:37:25.62
まず服をたじます

708 :デフォルトの名無しさん:2012/06/19(火) 15:35:42.57
タジン鍋つかうあれか

709 :デフォルトの名無しさん:2012/06/19(火) 16:27:25.98
たじってしまいました。
どうしますか?

710 :デフォルトの名無しさん:2012/06/19(火) 16:35:01.47
味噌と醤油どちらをメインにするか決めずに他汁継承すると大変な鍋になります

711 :デフォルトの名無しさん:2012/06/19(火) 17:32:54.82
更にそこに塩の配列を確保します。

712 :デフォルトの名無しさん:2012/06/19(火) 17:35:05.28
塩基配列か!

713 :デフォルトの名無しさん:2012/06/19(火) 17:38:03.73
するとあら不思議!!

714 :デフォルトの名無しさん:2012/06/19(火) 17:39:34.30
多汁した汁が鍋から漏れ出し(リーク)します。


715 :デフォルトの名無しさん:2012/06/19(火) 17:41:38.83
ぶたじる継承・完

716 :デフォルトの名無しさん:2012/06/19(火) 17:42:50.23
BADENDじゃねぇか!!!

717 :デフォルトの名無しさん:2012/06/19(火) 17:52:09.79
ぶたじる継承・第二章

親父の豚汁店を継ぐことを固く決意した主人公。
奇跡とも言われた味を守り抜くことはできるのか。

718 :デフォルトの名無しさん:2012/06/19(火) 17:54:05.22
魔王がカレールーを持って現れた!!
どうする豚汁!?

719 :デフォルトの名無しさん:2012/06/19(火) 19:04:58.99
>>489-490
ほじくりかえして申し訳ないんだけど、callocってなんかまずいの?

720 : ◆QZaw55cn4c :2012/06/19(火) 19:07:12.07
>>719
別に問題ないでしょう。わざわざ0クリアをした領域の上に、なにか別の内容をあらためて代入する、という無駄な動きにめをつぶるのであれば。

721 :デフォルトの名無しさん:2012/06/19(火) 19:12:58.27
うお、即レスども。
その特定の状況のみを考えて>>490を書いたってことね。どもです。

722 :デフォルトの名無しさん:2012/06/20(水) 00:05:49.51
class Base
{
};

class Suba : public Base
{
};

class Subb : public Base
{
};


Suba g_scene

このあとg_sceneの型をSubbに変更するといったことはできるのでしょうか?
できるなら書き方の例もお願いします


723 :デフォルトの名無しさん:2012/06/20(水) 00:25:14.27
ごり押しならな・・・・
Subb b = (*reinterpret_cast<Subb*>(reinterpret_cast<void*>(&g_scene)));
ただこんなことするプログラマーとはあまり関わり合いたくないレベル


724 :デフォルトの名無しさん:2012/06/20(水) 00:29:02.27
せめてvoid*を介した変換にはstatic_cast使ってくれ

725 :デフォルトの名無しさん:2012/06/20(水) 00:32:04.21
そんなのどっちでもいいだろ('A`)
普段もこれからもこんなの書かねぇんだから

そもそもLPVOIDは特殊だがポインタのキャストなんだからreinterpret_castでも問題ないんじゃねぇの?



726 :デフォルトの名無しさん:2012/06/20(水) 01:04:27.18
それ以前にこんなウンコードだれが使うんだよwwww

727 :デフォルトの名無しさん:2012/06/20(水) 01:18:06.44
そもそもreinterpret_cast使うんだったらvoid*使う必要ない

728 :デフォルトの名無しさん:2012/06/20(水) 01:54:06.08
キャストの使い分けよくわかってないやつ多いからなあ

729 :デフォルトの名無しさん:2012/06/20(水) 03:30:37.91
というかC++のキャスト周りで使っているやつみねぇえw
Cキャスト使っている奴ばっかだわw

730 :デフォルトの名無しさん:2012/06/20(水) 04:20:06.18
それってお前が居る環境が糞ってだけじゃねーか

731 :デフォルトの名無しさん:2012/06/20(水) 06:31:49.68
すんません(´・ω・`)

732 :デフォルトの名無しさん:2012/06/20(水) 06:33:40.41
>>722
>Suba g_scene;
こう書かずに
Base *scene;
こう宣言すれば?Baseが必要なメンバーを網羅した抽象化クラスなら問題ない。
Base *scene;
Suba a;
Subb b;
scene = &a;
scene = &b;
基本的にはこんな感じで差し替えてやればいい。もし、Suba、Subb固有の操作が
したいなら、そこだけsceneを使わずaとbを直接参照して操作する。
間違ってもダウンキャストしちゃだめよ。


733 :デフォルトの名無しさん:2012/06/20(水) 09:23:49.61
class ABC{};
std::vector<ABC*> xyz;


void erase(void)
{
 while(xyz.empty()){
  delete *(xyz.begin());
  xyz.erase(xyz.begin());
 }
}

vectorの要素を解放するコードは、これ以上短くなりますか?
または、もっと簡潔に記述出来ますでしょうか?

734 :デフォルトの名無しさん:2012/06/20(水) 09:25:47.55
>>733
> while(xyz.empty()){
じゃなく、
> while(!xyz.empty()){
でした、済みません。


735 :デフォルトの名無しさん:2012/06/20(水) 09:46:26.78
std::for_each(xyz.begin(), xyz.end(), [](ABC* p) { delete p; });
xyz.clear();

736 :デフォルトの名無しさん:2012/06/20(水) 10:35:51.68
C++11だったら std::vector<std::unique_ptr<ABC>> だろJK

737 :デフォルトの名無しさん:2012/06/20(水) 10:47:50.02
>>735
ありがとうございます、勉強になりました。
>>736
じゃないのです。

738 :デフォルトの名無しさん:2012/06/20(水) 12:22:00.38
どうしてboost::ptr_vectorを使わないのか

739 :デフォルトの名無しさん:2012/06/20(水) 12:28:09.53
依存をstd::に留めたい人も割りと居る

740 :デフォルトの名無しさん:2012/06/20(水) 12:42:32.69
どの場面でもboostが許されている訳ではない。

741 :デフォルトの名無しさん:2012/06/20(水) 13:55:11.46
処で、>735はC++11?
だとしたら>733はC++05(だっけ?)の範囲では妥当解?

742 :デフォルトの名無しさん:2012/06/20(水) 14:42:02.22
全部消すなら一々eraseするより
後でclearのほうが効率が良いと思う一応

743 :デフォルトの名無しさん:2012/06/20(水) 14:43:53.32
コードの短かさだけで言えばそうかもしれんが
先頭から一つずつeraseとか無いわ
普通にforでdeleteしてclearか、せめて最後の要素からでないと

744 :デフォルトの名無しさん:2012/06/20(水) 14:45:00.27
>>743>>741

745 :デフォルトの名無しさん:2012/06/20(水) 16:08:17.04
それ以前
無条件にdelete出来るポインタをvectorに格納する意味が判らん

746 :デフォルトの名無しさん:2012/06/20(水) 16:30:53.64
>>733 >>741
backとpop_backでもっと短く,速くなる

http://ideone.com/zQdD0
4.1秒
while(!xyz.empty()){
  delete *xyz.begin();
  xyz.erase(xyz.begin());
}

http://ideone.com/R92Ik
0.02秒
while(!xyz.empty()){
  delete xyz.back();
  xyz.pop_back();
}

747 :デフォルトの名無しさん:2012/06/20(水) 17:22:39.84
>>745
わからないならクチを挟むな

748 :741(≠733):2012/06/20(水) 17:28:45.94
>742-746
なるほどね。勉強になったよ。THX!

749 :デフォルトの名無しさん:2012/06/20(水) 17:46:17.97
>>748
もしデストラクタでの処分方法を考えていたのなら、eraseなりclearなりは要らないと思う

750 :デフォルトの名無しさん:2012/06/20(水) 18:00:47.01
for_eachやfor(...;++it)ならな

751 :デフォルトの名無しさん:2012/06/20(水) 18:01:48.71
ああ、そうそう、そこが抜けてたごめん。

752 :デフォルトの名無しさん:2012/06/20(水) 19:22:51.40
クラス→(継承)→サブクラス→(継承)サブサブクラス
とした場合サブサブクラスやサブクラスやクラスの引数なしのコンストラクタって全部動きますか?

753 :デフォルトの名無しさん:2012/06/20(水) 19:26:11.48
当たり前だ

754 :デフォルトの名無しさん:2012/06/20(水) 19:27:30.65
>>753
ありがあとう

755 :デフォルトの名無しさん:2012/06/20(水) 19:32:31.05
デストラクタにvirtualついてなくて乙ることはあるが
コンストラクタですっとばしは考えらん

756 :デフォルトの名無しさん:2012/06/20(水) 19:36:30.29
らんらんるー♪

757 :デフォルトの名無しさん:2012/06/20(水) 20:18:42.52
基底クラスにキャストしたサブクラスの仮想関数を呼び出すと
基底クラスのメソッドとサブクラスのメソッドのどちらが呼び出されますか?

サブクラスのメソッドが呼び出されるとした場合、
サブクラスのフィールドを仮想関数で弄ることはできますか?


アップキャストして基底クラスの状態でまとめたもの(配列)を、
ループで一気に仮想関数を呼ぶことで多種類のサブクラスそれぞれに異なる処理をさせたいです。

758 :デフォルトの名無しさん:2012/06/20(水) 20:25:00.65
何の為の仮想関数なのかわかってないな

759 :デフォルトの名無しさん:2012/06/20(水) 20:29:36.12
仮想関数なんだからどっちが呼ばれるなんて一目瞭然

760 :デフォルトの名無しさん:2012/06/20(水) 20:32:12.85
>>758
すいません、解説サイトがよくわからなくて・・

>>759
つまり・・・!?

761 :デフォルトの名無しさん:2012/06/20(水) 20:35:33.10
>>760
ttp://www5c.biglobe.ne.jp/~ecb/cpp/06_07.html
これ見ればどっちが呼ばれるかわかるだろ

762 :デフォルトの名無しさん:2012/06/20(水) 20:49:52.24
>>757
> 仮想関数を呼ぶことで多種類のサブクラスそれぞれに異なる処理をさせたい
それこそが多態性

763 :デフォルトの名無しさん:2012/06/20(水) 20:53:24.55
仮想関数と言いながら、メソッドとも呼ぶ・・・
メッセージ機能ないんだから関数で通せよ

764 :デフォルトの名無しさん:2012/06/20(水) 20:54:44.78
メゾットなんていわねーよ
メンバ関数だろ

765 :デフォルトの名無しさん:2012/06/20(水) 20:54:53.86
>>761
おお、サブクラスのメソッドが呼ばれるってことですね
ありがとうございます!


766 :デフォルトの名無しさん:2012/06/20(水) 20:58:44.34
>>763
すいません

767 :デフォルトの名無しさん:2012/06/20(水) 21:06:54.73
メゾットって誰?

768 :デフォルトの名無しさん:2012/06/20(水) 21:07:38.92
リゾット

769 :デフォルトの名無しさん:2012/06/20(水) 21:13:40.50
Metzod : (独) メゾッド
特に強くを意味する言葉。
日本ではメッゾフォルテなどが有名。

770 :デフォルトの名無しさん:2012/06/20(水) 21:14:52.08
Matzとではどっちが強いですか?

771 :デフォルトの名無しさん:2012/06/20(水) 21:15:22.00
Matzは全角英数字で殴り続けると死ぬ

772 :デフォルトの名無しさん:2012/06/20(水) 21:16:08.10
その綴りなら読みは メツォット だろ?

773 :デフォルトの名無しさん:2012/06/20(水) 21:17:18.74
いやメトゾッドだ

774 :デフォルトの名無しさん:2012/06/20(水) 21:19:17.74
zeit ツァイト

775 :デフォルトの名無しさん:2012/06/20(水) 21:19:56.51
tはノイズだ
正しくはMezod

776 :デフォルトの名無しさん:2012/06/20(水) 21:21:09.47
それならやっぱりメツォット

777 :デフォルトの名無しさん:2012/06/20(水) 21:39:45.20
↑おまえの負けー

778 :デフォルトの名無しさん:2012/06/20(水) 21:44:41.05
↑↑↓↓←→←→BA

779 :デフォルトの名無しさん:2012/06/20(水) 21:47:07.13
ティリティリティ〜♪

780 :デフォルトの名無しさん:2012/06/20(水) 21:51:50.84
ドイツ語でメゾッドと読ませたいならmesodだ

781 :デフォルトの名無しさん:2012/06/20(水) 22:01:20.13
メソッドもサブクラスもフィールドもC++の標準用語じゃないでしょでしょ
多分C#辺りから渡ってきた人。

782 :デフォルトの名無しさん:2012/06/20(水) 22:06:59.27
英語でどう呼ぶか、だな

783 :デフォルトの名無しさん:2012/06/20(水) 22:32:59.33
Member Functionは、流用元となったSimulaのMember Procedureに準じた言葉。
Methodは、SimulaのMember Procedureに対し、MessageとMethodが分離されていて
別物であることを強調したSmalltalkとObjective-Cの用語。
近頃の言語は、そういう背景を踏まえずにMember Procedureと変わらんものを
Method, Methodと連呼する。ちゃんとMessageを実装している言語に失礼だよね。

784 :デフォルトの名無しさん:2012/06/20(水) 22:53:38.10
勉強になります

785 :デフォルトの名無しさん:2012/06/20(水) 22:58:42.38
言語の背景でプログラム書くわけじゃない

786 :デフォルトの名無しさん:2012/06/21(木) 00:25:00.59
プロセジャーとか言い出す講師にあたったときはひどかった

787 :デフォルトの名無しさん:2012/06/21(木) 05:51:46.07
「プロセージャですよね?」と聞き返すべき

788 :デフォルトの名無しさん:2012/06/21(木) 08:19:27.01
AVL木と、何にもしてないただの木をC++で実装して、大量のランダムデータをinsertしてremoveする、というのの速度を比較したんですが、
データが500万件を越えたあたりでAVLの方が速く終わるようになりました。
insertくらいは普通の木が常に速いと思ったのに。これって正しいですか?


789 :デフォルトの名無しさん:2012/06/21(木) 08:36:09.84
>>786
プログラムをプラム、プロシージャをプロセ、アセンブラをアセムって呼ぶ
ICEベンダーの技術者よりはましだと思う。

790 :デフォルトの名無しさん:2012/06/21(木) 10:01:50.95
あらゆる主要板にスレッド立てられてますなあ
こりゃアフィにも広まるし
完全に日テレはネットに嫌われるね

■モ娘(狼)
日テレ韓国マンセーで遂にGP帯オール一桁wwwwwwwwww
http://hayabusa3.2ch.net/test/read.cgi/morningcoffee/1335226115/

■ニュー速(嫌儲)
最近フジより韓流ゴリ押しの酷い日テレ GP帯(19〜23時)視聴率オール一桁達成
http://engawa.2ch.net/test/read.cgi/poverty/1335228771/

【フジ・日テレ死亡】テレビ朝日視聴率3冠おめでとうございます
http://engawa.2ch.net/test/read.cgi/poverty/1340233396/

■ニュース速報
【第二のフジテレビ】日テレ、韓流ゴリ押しで大爆死
http://engawa.2ch.net/test/read.cgi/news/1335230981/

■なんでも実況J
【朗報】韓流ゴリ押しの日テレが低視聴率
http://hayabusa.2ch.net/test/read.cgi/livejupiter/1335229538/

791 :デフォルトの名無しさん:2012/06/22(金) 00:36:20.43
State/Strategyパターンや関数ポインタテーブルを使い、動的に呼び出し先を変えるとする。

どうしてもその呼び出し先ごとに異なる変数を与えたい場合、
適当な変数を用意して代入し、呼び出し先で解釈してもらうという手法はアリ?

例えば変数hogeを用意しておいて、Foo(int hoge) と Bar(int hoge) とでは、hogeの意味(使用目的)が異なるとか。

792 : ◆QZaw55cn4c :2012/06/22(金) 01:57:49.23
>>791
関数ポインタテーブルでごにょごにょ、ならばやったことありますが、十分にありだと思います。
テーブルに載せてる関数のなかで一番たくさん引数をもつものにプロトタイプをあわせていました、泥臭いけど。

宿題スレでやってcodepad にもあげたけれどもみつけられかったごめんなさい。

793 :デフォルトの名無しさん:2012/06/22(金) 02:00:40.61
>>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が呼ばれるならアウト
}

794 :デフォルトの名無しさん:2012/06/22(金) 02:04:08.51
状態遷移がわかっていて、引数変える分には、ハマることはないような

795 :791:2012/06/22(金) 02:58:37.43
>>792-794
ありがとう。意見は割れるかあ。
便利だけど、危険性が伴うからホントどうしようかなと悩んでた。

そりゃ0除算や配列の外側へのアクセスなんかは、数値の範囲チェックをすれば良いだろうけど、
それでも心理的要因などが原因ではまる可能性はあるからなあ。
ぶっちゃけ使ってて気持ち悪いというのが大きいがw

関数ポインタじゃなくてクラスを利用しているなら、キャストを使うことも出来るだろうけど、
それをテーブル等に収めようとすると結局同じ問題が発生するんだよね。

うーん、mapで持たせたほうがスマートかなあ?

796 :デフォルトの名無しさん:2012/06/22(金) 03:21:50.32
書いてみて試行錯誤するしか
わかってるなら、矛盾した箇所とか出てくるだろうから、そこをどうするかでしょ

797 :デフォルトの名無しさん:2012/06/22(金) 06:55:44.09
>>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();

798 :デフォルトの名無しさん:2012/06/23(土) 04:22:44.42
>>557
お前本気かよ。ぜんぜんちがうだろうがw

799 :デフォルトの名無しさん:2012/06/23(土) 11:39:45.44
どんな亀レスだよ>>560が既にツッコんでる

800 :デフォルトの名無しさん:2012/06/23(土) 17:42:48.24
親クラスのオーバーロードされた代入演算子を使うとコンパイルエラーが出ます
+=や[]のような演算子は使えるのに代入演算子は使えないのは何故なんでしょうか?
ご存知の人、なにとぞアドバイスください

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;
}


801 :デフォルトの名無しさん:2012/06/23(土) 18:08:01.38
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.

802 :デフォルトの名無しさん:2012/06/23(土) 18:17:46.31
>>800
class B : public A {
public:
using A::operator=;
};


803 :デフォルトの名無しさん:2012/06/23(土) 18:21:41.90
800じゃないけど、そっかそれusingでいいのか

804 :800:2012/06/23(土) 18:28:08.18
>>801
子クラスのポインタを親クラスのポインタにキャストしてから使うか(ポインタじゃないとうまくいかなかった)、
子クラスでも演算子オーバーロードするしかないかなと思ったんですが(親クラスが自作クラスじゃないと挙動を再現するのは難しい)
>>802の方法でスマートに動いたんでこうしてみます
感謝します

805 :デフォルトの名無しさん:2012/06/23(土) 18:43:30.06
>>801
どこの引用ですか?

ソースを教えてください。

806 :デフォルトの名無しさん:2012/06/23(土) 18:51:12.29
規格書ぐらい持っとけよ

807 :デフォルトの名無しさん:2012/06/23(土) 18:53:31.21
>>806
もってねーからきいてんじゃん
ばかかおめー

808 :デフォルトの名無しさん:2012/06/23(土) 18:58:09.15
>>807
規格票持ってないって?馬鹿かおめー

809 :デフォルトの名無しさん:2012/06/23(土) 19:08:31.92
規格票

810 :デフォルトの名無しさん:2012/06/23(土) 19:10:43.16
持ってないから引用元を聞くとかわけがわからんな

811 :デフォルトの名無しさん:2012/06/23(土) 19:18:34.46
馬鹿は相手にすんな

812 :デフォルトの名無しさん:2012/06/24(日) 10:06:24.61
【K-POP】購入代金は既に韓国に送金されたことが判明【破産中止】
http://engawa.2ch.net/test/read.cgi/poverty/1340431520/

K-POP終了 「チケット12000枚完売」 → 実は450枚だった
http://engawa.2ch.net/test/read.cgi/poverty/1340496276/

↓チケット購入者の様子
http://long.2chan.tv/jlab-long/10/s/long289597.jpg


K-POPブームついに終焉? チケット売れずイベント中止、返金もできず

兵庫県内で開催予定だったK-POPイベントが、チケット売れ行きが低調で直前になって中止になった。
イベントを主催した会社は事実上倒産し、チケットの払い戻しも出来ないという有様で、
チケット購入者からは怒りの声が出ている。

同社担当弁護士によると、当初1万2000枚ほどの販売を見込んでいた代理店との契約がなくなってしまい、
他でまかなおうとしていたが、それも間に合わず中止になった。
いろいろ事情はあるにせよ、「飛ぶようには売れなかった」ということは確かなようだ。
帝国データバンクによると、同社が直接販売したチケットは450枚。

「『あのKARA』や『あの超新星』が来るのに何で販売低調なんだ」

ネットでは、チケット購入者からは「許せない。責任もって返金してもらわないと」と怒りの声が出ている。
疑問なのが、K-POPがブームの中、KARAや超新星といった大人気グループを呼んでも
なぜチケットを捌けなかったのか、という点だ。

2012/6/22 19:01
http://www.j-cast.com/2012/06/22136771.html?p=2


813 :uy:2012/06/24(日) 12:26:55.44
K-POPはプログラミング言語で言えばRubyだ
俺は韓国が三度の飯より好きだ
ブームは本物だと確信してる

814 :デフォルトの名無しさん:2012/06/24(日) 13:09:20.89
Rubyは日本製だよ
つまり韓国の文化も日本製ってことか?

815 :デフォルトの名無しさん:2012/06/24(日) 16:44:15.57
<  `∀´><Rubyは韓国起源を主張するニダ



816 :デフォルトの名無しさん:2012/06/24(日) 17:01:55.56
rubyが日本製だといつから勘違いしていた?

817 :デフォルトの名無しさん:2012/06/24(日) 17:08:50.81
ナン・・・だと・・・!?

818 :デフォルトの名無しさん:2012/06/24(日) 20:24:21.38
Rubyはモルモン教起源

819 :デフォルトの名無しさん:2012/06/24(日) 21:35:30.69
少し前にも質問させて貰ったのですが、また質問させて頂きます。

スーパークラス型の配列に
サブクラスAやサブクラスBを代入したいのですが
サブクラスのメンバ変数もコピーされるのでしょうか?
仮想関数でサブクラスのメンバ変数の値を操作したいです。

820 :デフォルトの名無しさん:2012/06/24(日) 21:38:55.27
されない

821 :デフォルトの名無しさん:2012/06/24(日) 23:30:01.77
>>819
>>802で解決したんじゃないんかい

822 :デフォルトの名無しさん:2012/06/25(月) 13:35:21.61
SetTimer(0, 0, 0, TimerProc)のTimerProcに
固有の引数を渡したいのですが
グローバル変数を介すしかないのでしょうか?

823 :デフォルトの名無しさん:2012/06/25(月) 13:36:04.28
はい

824 :デフォルトの名無しさん:2012/06/25(月) 16:22:19.04
>>822
・WNDCLASSEX.cbWndExtra = sizeof(void*)、RegisterClassEx
・非表示のウィンドウ作成
・SetWindowLongPtr(hWnd, 0, 固有のデータのポインタ)
・SetTimer(hWnd, 0, n, TimerProc)
・TimerProc内でGetWindowLongPtr
ってした方が良いと思う

825 :デフォルトの名無しさん:2012/06/25(月) 16:41:39.93
引数に相当する値を取得する関数を作れば解決

826 :デフォルトの名無しさん:2012/06/25(月) 16:45:10.00
皆さんはC++でどんなアプリケーションを作成しているのですか?

とりあえず、文法的なことはある程度は覚えましたが、Windowsアプリを作成しようとすると
手も足も出ません。



827 :800:2012/06/25(月) 16:47:29.29
いきなりGUIなんて外枠から入ろうとするからじゃないの?

828 :デフォルトの名無しさん:2012/06/25(月) 16:50:18.32
ライブラリを入れて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
>>824 非表示ウィンドウの作成などの代替案は不可能です。
>>825 どういうことでしょうか?

831 :デフォルトの名無しさん:2012/06/25(月) 17:22:19.67
スキル的に不可能ってこと?

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はどこもかしこも、同じことばっかじゃないですか?
自分が分かる範囲でしか書いてないし。

ちょっと凝ったコントロールを作成しているのはほぼ間違いなく海外のエンジニアだし。

日本は精精、コントロールの基本的な使い方程度

834 :デフォルトの名無しさん:2012/06/25(月) 18:42:00.75
小さいことからコツコツ積み重ねなさい
あと英語も進んで読みなさい

835 :デフォルトの名無しさん:2012/06/25(月) 18:44:36.20
アプリを作りたいのかコントロールを作りたいのか…

836 :デフォルトの名無しさん:2012/06/25(月) 18:49:19.13
アプリを作る過程でその部品としてコントロールを作る場合もあるが
ろくにアプリも作れないのにコントロール コントロール言ってるのは

837 :デフォルトの名無しさん:2012/06/25(月) 18:50:38.03
基本的なコントロールの使い方ができるけど
ちょっと凝ったコントロールを作れないというあなたを理解できない

それともいかしたカスタムコントロール自作すんのめんどいからコードをサクッとコピーしたいってこと?
無駄なUIかますのは商用ソフトだから無理だと思われ

838 :デフォルトの名無しさん:2012/06/25(月) 18:54:29.92
大きな問題を小さく分割して一つ一つ解決するセンスがないと無理
質問者にはなさそう

839 :デフォルトの名無しさん:2012/06/25(月) 18:56:08.72
小さいなことをコツコツと、精々底辺を這いつくばって生きてくださいw

840 :デフォルトの名無しさん:2012/06/25(月) 18:56:42.63
凝ったコントロール作りたいなら普通に自分で描画したらいいよ
基本コントロールは凝ったことせず手早く作るためのものだし

841 :デフォルトの名無しさん:2012/06/25(月) 19:05:30.29
>>839にはセンスのかけらもない

842 :デフォルトの名無しさん:2012/06/25(月) 19:11:35.35
コントロールにコントロールされてどうするんだよ!

843 :デフォルトの名無しさん:2012/06/25(月) 20:28:43.76
もうちょと走り込んで下半身を安定させたほうがいいな

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) とか書かないと駄目なんでしょうか?
よろしくお願いします。


845 :デフォルトの名無しさん:2012/06/25(月) 20:41:31.10
あたりまえ

846 :デフォルトの名無しさん:2012/06/25(月) 21:14:09.98
あたりまえだろ

847 :デフォルトの名無しさん:2012/06/25(月) 21:19:39.44
あたりまえだのクラッカー

848 :デフォルトの名無しさん:2012/06/25(月) 22:37:27.07
だからJava感覚で気安くnew使うのはやめろよー。

849 :デフォルトの名無しさん:2012/06/25(月) 22:50:47.37
参照は暗黙的にポインタ渡しててきもい

850 :デフォルトの名無しさん:2012/06/25(月) 22:55:46.91
C++でSleep(1000);とかとやると
1秒間何もできなくなってしまいます
Sleepしても他の処理ができるようにするにはどうしたらいいですか


851 :デフォルトの名無しさん:2012/06/25(月) 22:57:50.95
Sleep(1000);消せよw

852 :デフォルトの名無しさん:2012/06/25(月) 22:58:49.18
>>850
何がしたいの
止めてる間に他の仕事させるならマルチスレッド

853 :デフォルトの名無しさん:2012/06/25(月) 23:00:28.03
SetDlgItemText(hwndDlg,text,ireruyatu);
Sleep(1000);
SetDlgItemText(hwndDlg,text,ireruyatu2);
Sleep(1000);
...
ってやると
ダイアログがフリーズして何もできなくなってしまうんです...

マルチスレッドですね・・・ぐぐってみます


854 :デフォルトの名無しさん:2012/06/25(月) 23:04:34.16
1秒後にテキストを設定したいだけならタイマーつかえ

855 :デフォルトの名無しさん:2012/06/25(月) 23:16:26.26
窓はマルチスレッドで画面にカキコできんの?

856 :デフォルトの名無しさん:2012/06/25(月) 23:18:27.07
デバコン渡せばできるだろ
ただ最後に描画するのは
メッセージループもってるスレッドだったはずだが

857 :デフォルトの名無しさん:2012/06/25(月) 23:25:00.57
描画したい位置に新しく子ウィンドウを作ってそこに描くのもあり

858 :デフォルトの名無しさん:2012/06/25(月) 23:26:37.52
マルチスレッドで?

859 :デフォルトの名無しさん:2012/06/25(月) 23:33:07.81
デバコンw

860 :デフォルトの名無しさん:2012/06/26(火) 00:46:14.15
出刃紺

861 : ◆QZaw55cn4c :2012/06/26(火) 02:14:05.23
>>826
エバンゲリオン劇場版(昔ね)を見に行ったついでに買ったまま、その部分は今の今まで積読状態なんですが、もしかしてもしかするとお求めのものかもしれません。
http://www.amazon.co.jp/dp/4774100544/
これは16ビットの本だけれども、32ビット版クラスライブラリも、みかけた、ような、きが、す、る。

工藤さん、最近はかいてくださらないんですね、楽しみにしているんですけど。


862 :デフォルトの名無しさん:2012/06/26(火) 07:16:15.67
>>861
綾波レイってウンコするの?

863 : ◆QZaw55cn4c :2012/06/26(火) 07:56:02.78
>>862
当時はレイよりも原田夕子ちゃんにべたぼれでした。

864 :uy:2012/06/26(火) 08:13:30.69
俺は女子のウンコにしか興味がない
ウンコ野郎だからな

865 :822:2012/06/26(火) 09:53:28.98
>>831
ウィンドウレススレッドが多く、それぞれのスレッドにウィンドウを
持たせるのは、コストが大きいので不可能です。

866 :デフォルトの名無しさん:2012/06/26(火) 10:22:00.67
>>855
別スレッドから直接API呼ばなくても
必要な処理が終わったらメッセージ飛ばして
メッセージループしてるスレッドにデータを渡す

867 :デフォルトの名無しさん:2012/06/26(火) 10:29:08.26
>>865
動的に増やせなくていいならグローバル変数
そうでないならウィンドウを使うしかない

あとSetTimer使っててウィンドウはコストが大きいとか意味不明
コスト気にするほど大量にあるなら普通に自分でスケジューラスレッドを用意すべき

868 :デフォルトの名無しさん:2012/06/26(火) 11:22:25.16
もうコールバック使わずにメッセージでやれよって思う

869 :855:2012/06/26(火) 11:22:45.55
>>866
窓はそういう作法だったね

870 :デフォルトの名無しさん:2012/06/26(火) 12:05:05.64
linuxとかもそういう作法っすよ

871 :uy:2012/06/26(火) 12:24:13.18
LinuxがWindowsをパクったんだから当然

872 :デフォルトの名無しさん:2012/06/26(火) 12:38:28.17
燃料だと思ったら紅茶だったレス

873 :855:2012/06/26(火) 12:47:14.76
XWinもそうだね

874 :デフォルトの名無しさん:2012/06/26(火) 12:50:45.23
uyはネタスレから出てくるなよ・・・

875 :uy:2012/06/26(火) 12:52:48.84
ここは俺のスレだ
指図は受けない

876 :vw:2012/06/26(火) 14:24:17.29
俺は糖質だから脳内に指図がくる

877 :デフォルトの名無しさん:2012/06/26(火) 16:06:33.74
ポインタがわかりません。

Cの最大の難所らしいんですが・・・

void ** const (**(**entryMap[ENTRIES])(void**))(void ** const (**)());

ってなんですか?


878 :デフォルトの名無しさん:2012/06/26(火) 16:10:52.21
>>877
ttp://www.tcp-ip.or.jp/~3arrows/
ここに書いてるよ

879 :デフォルトの名無しさん:2012/06/26(火) 16:18:17.43
>>877
変数宣言です

880 :デフォルトの名無しさん:2012/06/26(火) 23:45:42.62
>>877
マジレスしとくと、関数(返却値:関数ポインタのポインタ、引数:voidのポインタのポインタ)のポインタのポインタの配列
ttp://codepad.org/1ZUnvLyo

881 :デフォルトの名無しさん:2012/06/26(火) 23:48:11.78
すっげー

882 :デフォルトの名無しさん:2012/06/27(水) 00:40:52.62
>>880
すごい 

っていうか、このレベルがポインタを理解しているというレベルなのか?

883 :デフォルトの名無しさん:2012/06/27(水) 01:05:00.74
つかわんだろ・・・・

884 : ◆QZaw55cn4c :2012/06/27(水) 03:33:54.50
鬼としかいいようがない‥‥‥

885 :デフォルトの名無しさん:2012/06/27(水) 04:03:39.26
コンパイルして逆アセンブルしてみたらC++の仮想関数ではしょっちゅう
出てきそうなコードだった

886 :デフォルトの名無しさん:2012/06/27(水) 09:07:34.67
>>877
こんなソースみたら書いた人を呪う

887 :デフォルトの名無しさん:2012/06/27(水) 11:31:47.03
実生活でこんな複雑なものを使うアルゴリズムはない

888 :デフォルトの名無しさん:2012/06/27(水) 11:33:37.29
あるだろ

889 :デフォルトの名無しさん:2012/06/27(水) 11:47:16.94
それこそtypedefの出番。

890 :デフォルトの名無しさん:2012/06/27(水) 11:54:09.70
実生活での具体例を示せ
示せないならゴミカス

891 :デフォルトの名無しさん:2012/06/27(水) 12:30:22.93
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.関数内のパラメータリストについても同様に構文解析

んー。あってる気がしない。

892 :デフォルトの名無しさん:2012/06/27(水) 20:01:45.70
ファイルを複製することなく同一DLLをLoadLibraryとかで複数のDLLインスタンスとして
ロードする方法って無いですかね・・・
DEPに逆らうことなく動的にアドレスの異なる関数ポインタを増やしたい

893 :デフォルトの名無しさん:2012/06/27(水) 20:05:02.77
メモリ内に直接機械語を書き込む

894 :デフォルトの名無しさん:2012/06/27(水) 20:25:59.12
機械語書き込んだ領域に実行可能フラグつけるのってどうやればいいのでしょうか?

いや、ぐぐってはいるんですが中々・・・

895 :デフォルトの名無しさん:2012/06/27(水) 20:42:11.03
真っ当な手段でそれが可能ならDEPの意味がないだろう

896 :デフォルトの名無しさん:2012/06/27(水) 20:49:32.83
見つけました
winはVirtualAllocにPAGE_EXECUTE、linuxはmemalign->mprotectにPROT_EXECで出来そうです
JITコンパイラがDEP無効にせずに動いてるんだからそりゃ方法はありますよね
DLL複製とか変なことせず最初からこっちを調べるべきでした

897 :デフォルトの名無しさん:2012/06/28(木) 20:38:03.80
>>885
さすがにこんなのでねぇよ

898 :デフォルトの名無しさん:2012/06/28(木) 23:01:13.70
結局ポインタを本当に理解している人は少なそうですねw

899 :デフォルトの名無しさん:2012/06/28(木) 23:14:57.30
ポインタというより構文や結合優先度の方だな
加えてtypedefで分割統治しないのは愚策
分かるに越したことは無いが

900 :デフォルトの名無しさん:2012/06/28(木) 23:32:32.19
typedefは名前空間汚すから減らすに越したことはない。

int Function( void (* callback )( void * ) );
int ( *Function() )( const char[] );
これぐらいだったら直書きの方がいい。

901 :デフォルトの名無しさん:2012/06/28(木) 23:34:57.87
>>898
なにを上から目線でいってるの

902 :デフォルトの名無しさん:2012/06/28(木) 23:48:40.60
引数にスーパークラスのポインタとして取得したアドレスをサブクラスとして使用するにはどうしたらいいでしょうか?

void func(Super* super){Sub* sub = super;}

Sub* sub=dynamic_cast<Sub*>(super)
もダメでした。

903 :デフォルトの名無しさん:2012/06/28(木) 23:49:02.91
>>901
あなたがあまりにも低いところにいらっしゃるのでは?hw

904 :デフォルトの名無しさん:2012/06/29(金) 00:01:35.53
>>902
Sub* sub=static_cast<Sub*>(super);

905 :デフォルトの名無しさん:2012/06/29(金) 00:03:57.91
>>903
組み込みだから低レベルだぜ

906 :デフォルトの名無しさん:2012/06/29(金) 00:19:53.18
>>904
ありがとう

907 :デフォルトの名無しさん:2012/06/29(金) 00:55:52.84
>>900
名前空間を汚すから、変数の数は少ないに越したことはない。出来るだけ使いまわせ。


と言っているに等しい。

908 :デフォルトの名無しさん:2012/06/29(金) 03:08:03.63
@ClassA hoge;
AClassA *hoge = new classA();

インスタンス生成で上の二つの使い方の違いがよくわかりません。
常に@でもOKですか?


909 :デフォルトの名無しさん:2012/06/29(金) 03:16:57.44
int i;
int *i = new int();

この違いはわかってますか?

910 :デフォルトの名無しさん:2012/06/29(金) 03:32:17.34
>>909
前者が静的で後者が動的?
メモリへの配置され方が違うだけで使い方は一緒?

911 :デフォルトの名無しさん:2012/06/29(金) 03:33:05.84
スコープを超えたいときだけ2を使う

912 :908:2012/06/29(金) 04:04:57.39
>>911
@でアドレスを渡して参照ではだめ?


913 :デフォルトの名無しさん:2012/06/29(金) 04:10:52.47
>>912
スコープ超えたらなくなるからダメ

914 :デフォルトの名無しさん:2012/06/29(金) 04:53:08.76
>>903
馬鹿

915 :デフォルトの名無しさん:2012/06/29(金) 06:52:37.28
>>907
1bit脳かよ。LONGLONGとか定義してるあほな環境はともかく、
UNIXやLinux系で構造体以外のtypedefが少ない理由を考えろよ。
あと、typedefをローカルスコープやファイルスコープで使いたいなら
好きなだけつかいやいい。

916 :デフォルトの名無しさん:2012/06/29(金) 07:42:09.27
つかいやいい

917 :uy:2012/06/29(金) 07:48:03.51
つかいやいいって何だよゴミカス

918 :デフォルトの名無しさん:2012/06/29(金) 08:05:12.61
C++と違ってnamespaceやclassで分割統治出来ないCは
typedefの数にも気を使わないといけないのか

919 :デフォルトの名無しさん:2012/06/29(金) 10:04:56.29
>>908
1の方じゃないと実現できないこと、2の方じゃないと実現できないことってのがある。
ぶっちゃけそれにブチ当たらない限り、最初は1だけでも良いと思う。

920 :デフォルトの名無しさん:2012/06/29(金) 10:58:12.52
>>917
自己紹介乙

921 :デフォルトの名無しさん:2012/06/29(金) 11:45:14.19
>>908
概ね、>919。
但し、(2)は破棄するタイミングに要注意。できる限りスマートポインタを使いましょう。

922 :デフォルトの名無しさん:2012/06/29(金) 11:54:38.58
2は明示的に破棄する必要がある?

923 :デフォルトの名無しさん:2012/06/29(金) 12:03:31.68
破棄しないとメモリリークです
スマポ使えばおk

924 :デフォルトの名無しさん:2012/06/29(金) 15:53:55.56
>>915
構造体以外のtypedefなんて
めちゃくちゃいっぱいあるよ

925 :デフォルトの名無しさん:2012/06/29(金) 16:05:34.40
>>915
ちょっと新しいことを覚えてアピールしようと思ったみたいだけど
あまりにもバカを晒しすぎ。

926 :デフォルトの名無しさん:2012/06/29(金) 18:45:30.36
整数のコンテナを基底?nをつかって
{ x, y, z, ... } <=> x + y * n + z * n^2 + ...
って一意な整数と変換する処理を切り出そうとしてるんだけど

この操作って何か名前ついてる?
気の利いた名前が浮かばない

927 :デフォルトの名無しさん:2012/06/29(金) 18:50:11.98
>>915=uy

名無しでもバレバレ

928 :デフォルトの名無しさん:2012/06/29(金) 19:17:11.69
>>926
リトルエンディアン基数変換・・・とか?

929 :デフォルトの名無しさん:2012/06/29(金) 20:00:44.47
>>928
あー,1バイトずつだとそんな感じだなあ
基数は7とか13でやることになるんだけど,とりあえず基数変換って方向使わせてもらおう
さんくす

930 :デフォルトの名無しさん:2012/06/29(金) 20:05:00.91
基数変換だとまた違うものを指す

931 :デフォルトの名無しさん:2012/06/29(金) 20:17:33.88
基数変換だと101(2)と5(10)の相互変換のみたいなやつになっちゃうのかな

ところでPythonのreduceみたいな関数は標準にあるかな
numericのaccumulateは見つけてて,
これの加算アルゴリズムを関数オブジェクトで渡せるようなのがあるとスッキリ書けるのだけど

932 :デフォルトの名無しさん:2012/06/29(金) 20:29:43.45
とおもったらまさにそのものがaccumulateのオーバーロードにあった
>>931後半は忘れて下さいな

933 :デフォルトの名無しさん:2012/06/29(金) 20:45:26.71
>>924
Posix系で移植目的以外でtypedefしてる型って例えばなんだよ。

934 :デフォルトの名無しさん:2012/06/29(金) 20:50:28.27
POSIX

935 :デフォルトの名無しさん:2012/06/29(金) 21:06:09.00
>>924
多少使ってはいるが、中心で開発してる人間は
移植目的以外なら基本的に避けろと言ってる。

http://www.realworldtech.com/forums/index.cfm?action=detail&id=110699&threadid=110549&roomid=2
http://www.linuxjournal.com/article/5780

936 :デフォルトの名無しさん:2012/06/29(金) 21:15:59.52
K&Rでも利点としてる用途はもっぱら移植用だしな
http://net.pku.edu.cn/~course/cs101/2008/resource/The_C_Programming_Language.pdf

937 :デフォルトの名無しさん:2012/06/29(金) 22:13:17.54
Cは>>877のようにベタに書いて頑張れ
C++はtemplateとtypedefでおk
そんなとこだな

938 :デフォルトの名無しさん:2012/06/29(金) 22:17:18.21
複雑じゃなければベタで書けって話だ

939 :デフォルトの名無しさん:2012/06/29(金) 22:22:45.77
最初から複雑な場合にはtypedef使えって話なのに何言ってんだ

940 :デフォルトの名無しさん:2012/06/29(金) 22:27:46.11
最初から関数引数に取るだけとか、戻り値で返すだけとか
単純ならベタで書けって話だろ

941 :デフォルトの名無しさん:2012/06/29(金) 22:28:57.14
LPCTSTR型は何の型かわかりやすい

942 :デフォルトの名無しさん:2012/06/29(金) 22:35:31.79
・マクロじゃないのに大文字
・移植する気もないのにtypedef
アンチパターンの典型例だよな
cstrって名前でビット数変わるたびに
定義が変わったならまだ許せたが

943 :デフォルトの名無しさん:2012/06/29(金) 22:35:46.37
ハンガリー記法も出始めは重宝されてたけど
今は、どうなんかね

944 :デフォルトの名無しさん:2012/06/29(金) 22:39:47.80
m_lpszHogeFuga
とかやってたな

945 :デフォルトの名無しさん:2012/06/29(金) 22:42:24.95
>>940
>>877から読んでこいよ

946 :デフォルトの名無しさん:2012/06/29(金) 22:43:05.63
システムハンガリアンは論外だがアプリケーションハンガリアンなら使われるな

mmLength;
cmLength;
ptLength;
pxLength;
等々・・・

単位系は間違えると致命的なことになりかねんからな

947 :uy:2012/06/29(金) 22:44:29.69
何それ?
専門用語使うなゴミカス

948 :デフォルトの名無しさん:2012/06/29(金) 22:45:08.23
型を指すハンガリアンは ポインタを示す p ぐらいしか使わない
おおざっぱ用途を指すようなハンガリアンは そこそこ使ってる (大きさを示す サイズを示す とか

949 :デフォルトの名無しさん:2012/06/29(金) 22:46:39.62
提唱者が考えたのはアプリケーションハンガリアンだけど
システムハンガリアンの考えと誤解されて違うものが広められたんだよな

950 :デフォルトの名無しさん:2012/06/29(金) 22:46:56.26
>>945
>>900あたりからそういう話になってんじゃん

951 :デフォルトの名無しさん:2012/06/29(金) 22:47:56.32
>>948
pを付けてポインタを明示して何が嬉しいのか謎

952 :デフォルトの名無しさん:2012/06/29(金) 22:49:48.95
途中から前提変えてそれを「最初から」とか手に負えんな

953 :uy:2012/06/29(金) 22:49:51.65
ハンガリガリガリハンガリガリ

954 :デフォルトの名無しさん:2012/06/29(金) 22:49:51.54
>>951
もはや習慣となっていて、自分でも理由がわからんw
やっぱりおもらしやら不正参照への不安からなのかねぇ

955 :デフォルトの名無しさん:2012/06/29(金) 22:51:37.95
変数名だけを見て、型を推定できた方が便利

956 :デフォルトの名無しさん:2012/06/29(金) 22:54:20.02
>>946
後ろ2つ ポイント単位 画素(ピクセル)単位?

957 :デフォルトの名無しさん:2012/06/29(金) 22:54:31.64
>>953
ゴミカスゴミカスゴミカスの中二

958 :デフォルトの名無しさん:2012/06/29(金) 22:56:01.88
>>956
略称は解りづらいか。pointX,pixelXと書いたら、
これもこれで紛らわしいんだよね。

959 :デフォルトの名無しさん:2012/06/29(金) 22:57:27.43
>>955
変数が型に依存してるのは、OOの観点ではマズイ。

960 :デフォルトの名無しさん:2012/06/29(金) 23:23:16.76
型が同じでも意味が異なるものを混同しないように、というのが
本来のハンガリアン(=アプリケーションハンガリアン)

でもプリミティブのまま代入を禁止する、
強いtypedefがあれば変数名でなく型名でコンパイラチェック出来るんだよな。
D言語ではあったけど機能削除されたから、色々問題はあるようだけど

961 :デフォルトの名無しさん:2012/06/30(土) 01:51:29.16
enumじゃ不足なの?

962 :デフォルトの名無しさん:2012/06/30(土) 02:34:14.20
変数名に意味がある名前を付けるか、付けないかってレベルと同じ話じゃね。

pに意味があると思ってる場合には意味があるんだよ。


m_11234

m_pointX

m_pPixelSize

963 :デフォルトの名無しさん:2012/06/30(土) 03:37:15.20
なんでmだけキャメルじゃなくてバー繋ぎなんだ?
どっち途気持ち悪いからどうでもいいけど。

964 :デフォルトの名無しさん:2012/06/30(土) 05:05:58.41
メンバー変数のm

965 :デフォルトの名無しさん:2012/06/30(土) 07:06:47.45
>>961
intはともかくdoubleとかが・・・

966 :デフォルトの名無しさん:2012/06/30(土) 09:19:53.61
FooBar_Baz()みたいな名前は、たまに使ってるなー。


967 :デフォルトの名無しさん:2012/06/30(土) 10:59:30.66
EUCとか大文字の単語を含むとキャメルは読みにくくなる

968 :デフォルトの名無しさん:2012/06/30(土) 14:52:21.76
データマンバに m_ って付けるのはマイクロソフトハンガリアンの特徴。
今ではマイクロソフト自身が「あれはキモかった上に有害なんでやめるね;_;」って言い出す始末。

969 :デフォルトの名無しさん:2012/06/30(土) 14:53:51.83
素人がかっこいいと思って、ワケワカで真似してたからね、m_

970 :デフォルトの名無しさん:2012/06/30(土) 15:52:43.51
いや、m_ は有用だろ
メンバかどうかパッと見で分からないせいで
もの凄く解析に苦労したプログラムとかあるし

971 :デフォルトの名無しさん:2012/06/30(土) 15:56:06.46
え、何言ってるの?

972 :デフォルトの名無しさん:2012/06/30(土) 16:01:06.71
読む人の事も考えろってことだ
書いた人はどれが何か分かるんだろうけど・・・

973 :デフォルトの名無しさん:2012/06/30(土) 16:06:12.46
引数とデータメンバが同じ名前なことがまれによくある

974 :デフォルトの名無しさん:2012/06/30(土) 16:11:04.05
引数やローカル変数で隠蔽してもコンパイラエラーにならないしね

975 :デフォルトの名無しさん:2012/06/30(土) 16:45:42.51
this->member;って書けって話だろ
そもそも、引数とローカル変数をすぐ確認できないような
長ったらしい関数書くなよ

976 :デフォルトの名無しさん:2012/06/30(土) 17:19:49.84
うっかりthis->忘れてもコンパイルできるから無意味だな

977 :デフォルトの名無しさん:2012/06/30(土) 17:41:53.57
あと長ったらしい関数書いたのは俺じゃねえし
そもそも短かろうが一瞬で判別が付く方がメリットが大きい
バグを減らす為に副作用を常に意識してプログラムしてると
メンバかどうかというのは非常に重要な情報になる
m_ は無意味()とか誰かが言った事を鵜呑みにするのはよろしくない

>>973
m_ があると自然に別になるというメリットもあるね
まあ、同じになりそうなら引数の方をちょい変えればいいし
コンストラクタでは初期化子使える場合は関係ないけど

978 :デフォルトの名無しさん:2012/06/30(土) 18:03:27.62
>>976
見ることが目的であって、記述ミスが目的じゃないだろ
そもそも、thisなしで困るような関数書くな。
結局this忘れでも、メンバーにm_つけ忘れでも大差ねぇよ

979 :デフォルトの名無しさん:2012/06/30(土) 18:04:57.12
大差ないのでm_にします

980 :デフォルトの名無しさん:2012/06/30(土) 18:06:48.56
大差ないのでmMemberにします。

981 :デフォルトの名無しさん:2012/06/30(土) 18:13:00.95
一人で書くときはm_とか付けないけど
チーム開発では付けて欲しいと思ったことも。

982 :uy:2012/06/30(土) 18:18:29.73
マイクロソフト製品に不具合が多いのは誰でも知ってる

故にマイクロソフトのプログラマの質は低い

マイクロソフトが言うことを鵜呑みにするなど愚の骨頂

983 :デフォルトの名無しさん:2012/06/30(土) 18:21:12.84
uyが言うことを鵜呑みにすることに比べたら?

984 :デフォルトの名無しさん:2012/06/30(土) 18:25:43.88
長いのでm_は付けません。
面倒だし。

985 :デフォルトの名無しさん:2012/06/30(土) 18:30:20.21
宗教じみてきたな

986 :デフォルトの名無しさん:2012/06/30(土) 18:32:07.90
むしろm_を消せ

987 :デフォルトの名無しさん:2012/06/30(土) 18:33:07.92
value_これだな

988 :デフォルトの名無しさん:2012/06/30(土) 18:34:11.31
補完が効く環境使ってるとむしろmが付いてるほうがウザい
this->って書いたら次の一字で絞りこませろよ

989 :デフォルトの名無しさん:2012/06/30(土) 18:35:44.35
m_って打てば補完されるだろ

990 :デフォルトの名無しさん:2012/06/30(土) 18:36:30.63
m_で補完するとかどこのIDEだよ

991 :デフォルトの名無しさん:2012/06/30(土) 18:38:44.70
次スレ頼みます

992 :デフォルトの名無しさん:2012/06/30(土) 18:43:58.85
俺が使ってるVC++では m_(Ctrl+Space) で補完してくれるから
this->って書くより楽

993 :デフォルトの名無しさん:2012/06/30(土) 18:46:18.20
じゃあ引数にh_をつけよう(提案)

994 :デフォルトの名無しさん:2012/06/30(土) 18:55:02.42
引数はローカル変数なので結構です(迫真)

995 :デフォルトの名無しさん:2012/06/30(土) 18:55:24.06
スコープ別補完機能最強ってことで

996 :デフォルトの名無しさん:2012/06/30(土) 18:56:04.70
むしろローカル変数だけにプリフィクスつけりゃいいんじゃね

997 :デフォルトの名無しさん:2012/06/30(土) 19:16:57.88
自分はサッターやGoogleに倣って、末尾に_を付けることにしている。
int localData_; のような感じ。

998 : ◆QZaw55cn4c :2012/06/30(土) 19:21:44.85
ローカル変数‥‥
なんだかよくわからなくなってしまったゲシュタルト崩壊中

999 :デフォルトの名無しさん:2012/06/30(土) 19:38:20.94
>>978
見る事が目的なのに、それに信頼性が無かったら全く意味が無いだろ

>>988
this->とか6文字も打ってそんな事言うとか・・・

>>997
後ろに _ でも別に区別が付くという意味ではいいけど、
補完機能を使う時に引数 hoge とメンバ変数 hoge_ があった場合に
ミスって hoge を選択しそうで怖いと言う面もあるな
接尾辞よりは接頭辞の方が間違いを防ぐ意味でも良いと思う

1000 :デフォルトの名無しさん:2012/06/30(土) 19:40:33.29
次スレ

【初心者歓迎】C/C++室 Ver.79【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1341052801/

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

227 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)