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

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

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

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

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

NG推奨:◆QZaw55cn4c←半角にして登録してくだい
2デフォルトの名無しさん:2012/11/29(木) 00:38:12.09
clangはいつになったらWindowsで普通に使えるようになりますか?
3デフォルトの名無しさん:2012/11/29(木) 00:58:14.12
Hoge
4デフォルトの名無しさん:2012/11/29(木) 07:25:31.64
foobar, foo, bar, baz, qux, quux, corge, grault, garply, waldo, fred, plugh, xyzzy, thud
5 ◆QZaw55cn4c :2012/11/29(木) 07:41:25.03
>>2
cygwin にはすでにはいっている。
6デフォルトの名無しさん:2012/11/29(木) 08:02:30.96
前スレ>>1000のAAに吹いたw
7デフォルトの名無しさん:2012/11/29(木) 10:19:29.46
DMC8.55が出てるが更新履歴が見当たらない
何が変わったか分かるエスパーいますか?
8デフォルトの名無しさん:2012/11/29(木) 17:45:28.14
質問ですが、以下のリンカエラーが多発してしまいます。

multiple definition of 'error'

で、私は error という関数を定義していません。

/usr/include/c++/4.4/new:101でかち合ってるみたいですが
何が何やらサッパリです。

何から確認すればいいでしょうか。お願いします。
9デフォルトの名無しさん:2012/11/29(木) 18:25:10.29
ここはエスパースレじゃないぞ
10デフォルトの名無しさん:2012/11/29(木) 19:10:05.65
>>8
多重定義しているんでしょう。

まずは、自分の作ったヘッダファイル全ての1行目に
#pragma once
を書いてリビルドしてみたらいかがでしょう。
それでもダメなら別の原因。
11デフォルトの名無しさん:2012/11/29(木) 19:20:34.85
int main(void) { return 0; }
これだけでエラーになるならコンパイラが壊れている
#include でも何でも、どうしたら再現する不具合なのかを突き止めれ
12デフォルトの名無しさん:2012/11/30(金) 02:03:53.21
マルチスレッドの排他処理のミューテックスって重いんすか?

10スレッド動かして各スレッドが60fpsでループ、その1スレッドの1フレーム間でロックとアンロック合計200回とかきついっすかね?
10スレッドあるのでそれだけで2000回、他の諸々入れるとそのアプリ全体で毎フレーム2200回いく予定なんすけどね
2.4GHzのデュアルコアで他に重いものは動かさない前提っす
今の設計だと上記状態になるんで、無理なら開発を進める前にまた頑張って考えて設計を変更しなきゃいけないんす
13デフォルトの名無しさん:2012/11/30(金) 02:49:01.97
>>12
・Cの質問でない
・ミューテックスの重さはOSによる。もっと言えば実装による。
・そもそも組み込みで無いOSが動いているなら、そのOS自体の重さを考慮する必要があるだろう。
組み込みなら2,4GHzのデュアルコアとか神レベルの速さ。
いずれにせよハイレベルの3Dゲームでも作るんじゃなければ気にする必要はない。
・ミューテックスの一般的な実装をイメージするならそこまで重く無いだろう。
ディスパッチした時は負荷がかかるだろうが、常識的な作りなら1スレッドの実行で数回発生するくらいでは。
・1スレッドごとに200回のロック・アンロック。という設計思想が良く分からない。
ロック->アンロック->ロック->アンロック->の繰り返し?それなら効率が悪いからまとめてロックしとけ。
ロック->ロック->ロック->アンロック->アンロック->アンロック?200回とか階層深すぎじゃないの?
・全てのスレッドを60fpsで動かす必要が本当にあるのだろうか。同じスレッドをたくさん起動するのだろうか。
14デフォルトの名無しさん:2012/11/30(金) 02:59:18.23
Windowsならクリティカルセクションとかインターロックの方が早いかも知れない?
ttp://www.isus.jp/article/intelguide/2-3/
15デフォルトの名無しさん:2012/11/30(金) 07:56:16.97
それ、ミューテックスが重いかどうかよりそんなに同期が必要になる時点で設計がおかしいよ。
16デフォルトの名無しさん:2012/11/30(金) 11:10:53.29
うんだ。設計がおかしい。
大方、画面中のオブジェクト1個ずつに対してスレッドを割り当てて
それぞれが排他しないとまずいタイミングでロックかけようとしてる
んだと思うけど、設計が頭悪すぎる。
17デフォルトの名無しさん:2012/11/30(金) 11:25:07.73
あとなんか>>12の書き方から察するに業務用アーケード基板(TAITOのとか)
くさいニオイがぷんぷんするんだけど、こんなところで質問する前に会社の
上司とか同僚に聞いたほうが早いぞ。

スレッドに分ければオーバーヘッドが減るってものではない。
18デフォルトの名無しさん:2012/11/30(金) 13:49:04.06
>>13-17
ありがとうございます
MMORPGを作ろうとしているニートっす
質問はMMO鯖に関するものっす
最初のユーザーの同時接続数の目標を1000にしてたので、それぞれ接続チェックごとにメッセージキューのロック&アンロックをすると上記の感じになるっす
1スレッドで1000接続全部処理するとタイムラグが出ると思って100接続ずつに分けようと考えたんす
でもスレッドを分けると、同期がいるじゃないっすか
だけどスレッドごとにロックするとそこでまたタイムラグが発生するじゃないっか

例えばスレッドAの誰かがスレッドBの2番目(B-2)の人に攻撃したとき、そのイベントの発生がB-1の人の処理をしてる最中だったとすると、
スレッドごとロックをかけていた場合、B-100まで処理が終わってアンロックされるまでB-2のキューに攻撃されたという情報が渡らないじゃないっすか
だけど接続ごとにロックする方式なら、B-1しかロックされていないからB-2のキューに情報を積めるじゃないっすか

少し前までチョン政府の助成金を追い風にチョンゲ企業が粗悪なMMORPGを大量に送り込んできたじゃないっすか
その助成金もなくなった今、反撃のチャンスだと思ってるんす
そしてそれで稼いでニート脱出するっす

とりあえず設計しなおします
19デフォルトの名無しさん:2012/11/30(金) 13:50:45.57
ROエミュのAEGISでも参考にすれば
20デフォルトの名無しさん:2012/11/30(金) 23:37:55.67
>業務用アーケード基板
近からずといえど遠からずだったなw
21デフォルトの名無しさん:2012/12/01(土) 00:14:23.33
>>18
・60fpsというのは基本的に画面表示用スレッドの周期。
 画面表示の無いサーバなら60fpsで処理する意味は無い。
・普通に考えると受信スレッドとゲームスレッドの2つで良い。
・受信スレッドは常時受信を行い、各ユーザーからの通信メッセージを受けてリストにする
・ゲームスレッドは常にループしていて、各ユーザーの通信メッセージを順次処理していく。
 通信メッセージごとにサーバ上のゲームデータを更新し、必要に応じて通信メッセージを送信する。
・MMOの作り方みたいな本があるはずだから読んだ方が良いかも
22デフォルトの名無しさん:2012/12/01(土) 01:52:26.18
>>21
その本は買ったがプログラム初歩習得ゲームはド素人みたいな人向けに
基本のキの部分しか解説してなかった。役に立つかと言えば微妙。
23デフォルトの名無しさん:2012/12/01(土) 11:00:47.81
>>18
便所の落書きや知恵遅れで質問するなら趣味のプログラミングは辞めたほうがいい。
24デフォルトの名無しさん:2012/12/01(土) 15:44:33.95
質問です。

class PointTest {
private:
  int m_x;
  int m_y;

public:
  void Set(int x, int y) { /*省略*/ }
};
  
このようなクラスにGetメソッドを用意する場合
void Get(int &x, int &y) として1つで済ませるのと
int GetX() int GetY() の2つを提供するのとではどちらがより一般的なのでしょうか?
25デフォルトの名無しさん:2012/12/01(土) 15:46:36.33
struct POINT {
int x;
int y;
};

class PointTest : public POINT
26デフォルトの名無しさん:2012/12/01(土) 15:55:05.36
>>24
両方いれたらいいじゃん
でもよく見るのは各成分getかな
27デフォルトの名無しさん:2012/12/01(土) 16:06:04.13
各成分getが多いけど
別に作りたけりゃ両方作ってもいいのよ
28デフォルトの名無しさん:2012/12/01(土) 17:58:53.19
メンバ変数をpublicにするのはこの場合適切ではないだろ。
29デフォルトの名無しさん:2012/12/01(土) 18:04:33.86
>>28
変数間で保つべき不変条件でも無けりゃ private にする意味ないでしょ。
点の x, y 座標間に何かそんな関係があるか?
30デフォルトの名無しさん:2012/12/01(土) 18:07:10.58
元の>>24でprivateにする意図を示しているのに
publicにしたら質問の意味がなくなるだろう。
馬鹿じゃないの?
31デフォルトの名無しさん:2012/12/01(土) 18:10:08.47
他のクラスのメンバで
void SetPoint(const PointTest& pt);
PointTest GetPoint();
ならまだ理解できるんだが
32デフォルトの名無しさん:2012/12/01(土) 18:59:14.90
privateにするのは不変条件のためだけの話じゃないぞ
ブレークはったりデバッグコード仕込んだりできるのも重要
33デフォルトの名無しさん:2012/12/01(土) 19:13:04.66
やっぱこれだろ。
get、setは余りたくさん書きたくないからx,yくらいなら構造体でまとめる。

struct Point {
  int x;
  int y;
};

class PointTest {
private:
  Point point_;
public:
  void setPoint(Point &point);
  Point getPoint(void);
};
34デフォルトの名無しさん:2012/12/01(土) 20:00:07.53
プロパティってなかったっけ?
35デフォルトの名無しさん:2012/12/01(土) 20:19:17.73
しかしpointごときはprivateにする必要もないと思う
36デフォルトの名無しさん:2012/12/01(土) 20:50:07.77
>>24
getterが
> void Get(int &x, int &y) として1つで済ませるのと
この形の一つだけっていうのならそれは間違いなく駄目な設計

そういうクラスを実際に使うとわかるが値の取得に変数が必要ってのは明らかに使い勝手が悪い
37デフォルトの名無しさん:2012/12/01(土) 22:12:03.43
同時性にこだわる俺っち、別に潔癖症とは思ってない
C++ の const は性的だし♡
38デフォルトの名無しさん:2012/12/02(日) 00:33:52.24
有用を悩む程度のメンバアクセスにはアクセス専用の一時クラス通すんだよ
39デフォルトの名無しさん:2012/12/02(日) 01:39:40.75
適当な型を扱う時に
デバッグ用にブレーク貼れるようにする
クラステンプレート作ってるわ
40デフォルトの名無しさん:2012/12/02(日) 02:03:49.04
const Point& GetPoint() const;のがいいきがする
41デフォルトの名無しさん:2012/12/02(日) 02:59:51.42
山椒がピリリと引き立つわけですか
42デフォルトの名無しさん:2012/12/04(火) 16:01:02.06
Pointぐらいならpublicにしてもいい気はするけど、あとで何か処理が追加されるかもしれない事を考えてgetter,setterを用意するほうが良い
43デフォルトの名無しさん:2012/12/05(水) 05:01:08.51
C++初心者です
cout/wcout/printf/wprintf 全てを共存する一般的な方法はありますか?
44デフォルトの名無しさん:2012/12/05(水) 11:26:48.91
ラップ
45デフォルトの名無しさん:2012/12/05(水) 12:41:34.33
書き込むごとにフラッシュして使い分けるだけだろ
46デフォルトの名無しさん:2012/12/05(水) 17:07:57.34
Print()を作ってパラッパラッパー♪
47デフォルトの名無しさん:2012/12/05(水) 19:18:22.53
>>43
そもそも「共存」ってどういう意味なんだ? そこがはっきりしないと答えようがない。
4843:2012/12/05(水) 21:34:40.59
説明するより見てもらったほうが早そうなのでコードを提示します。
http://ideone.com/WqXlDH
http://ideone.com/zzCBLZ
http://ideone.com/jx3wJU
http://ideone.com/rrhy6C
http://ideone.com/OeHtaM
http://ideone.com/1L9R8J
http://ideone.com/zRmV7N
http://ideone.com/Xdzc9r
こんな結果です。
msvcならバッファのflushに注意すれば大丈夫な気もしますが
gccでは諦めるしか無い?
49デフォルトの名無しさん:2012/12/06(木) 00:01:47.15
printfとwprintfは_tprintf
std::coutとstd::wcoutは共存しない
50デフォルトの名無しさん:2012/12/06(木) 01:20:44.81
>>43
仕様上はstreamにはorientationという概念があってnarrowとwideのI/Oを
同一のストリームに混在させられないことになってる

MSVCだと一見平気で混ぜられるけど、_O_U8TEXTみたいなモードは
orientationに基づいてるみたいで、その場合は混ぜられないよ
5143:2012/12/06(木) 01:58:51.49
>>50
解説したブログが見つかり納得するまでにはいかないけど
理解することは出来ました。
reopenするとかで何とか出来そうなこともなさそうだけど
コストが高そうなので諦めます。
ありがとう。
52デフォルトの名無しさん:2012/12/06(木) 02:00:00.98
>>50
orientationなる単語で検索したところ //←コピペミスで抜けてました。
解説したブログが見つかり納得するまでにはいかないけど
理解することは出来ました。
reopenするとかで何とか出来そうなこともなさそうだけど
コストが高そうなので諦めます。
ありがとう。
53デフォルトの名無しさん:2012/12/10(月) 04:03:55.42
イクリメント、デクリメントの後置きってどういう動作になってるんですか?

>後置きの場合にはインクリメント演算子による演算以外の処理を先に行います。
ググるとこんな感じの事が書いてあるし、自分でもそうだと思ってたんですが
最後に後置きのイクリメント、デクリメントの処理がされると思ってるとなんかおかしい事になります

環境はwindows7でVC++2010Expressです
54デフォルトの名無しさん:2012/12/10(月) 07:24:30.05
>>53
×イクリメント
○インクリメント

例えば、j = i++はj = i, i = i + 1と等価だと考えればいい。
55デフォルトの名無しさん:2012/12/10(月) 07:34:30.28
>>52
普通はずっと片方を使い続ける
56デフォルトの名無しさん:2012/12/10(月) 09:54:07.71
副作用完了点(sequence point)で調べな
57デフォルトの名無しさん:2012/12/10(月) 15:15:31.43
しれっとstdout/stderrに出力するオープンソースのライブラリは結構あるので
そういうの使う時はorientationには要注意
そういうライブラリはまず間違いなくnarrowで出力していると思うが
58デフォルトの名無しさん:2012/12/10(月) 15:30:38.44
MC68000上で開発された名残がそこかしこに。
59デフォルトの名無しさん:2012/12/10(月) 19:28:12.01
インクリメントでした。恥ずかしい・・・
訂正ありがとうございます
副作用完了点でググったら一つの式で一つのオブジェクトの値の変更は一回しかできない、とありました
自分がやろうとしてたのは一つの式で一つのオブジェクトの値の変更が二回になっていたのでたぶんそのせいですね
ありがとうございました
60デフォルトの名無しさん:2012/12/11(火) 01:15:15.61
>>50
このような手当てが必要な理由はなんでしょうか?
61デフォルトの名無しさん:2012/12/13(木) 23:08:54.71
tcharの、charの前のtは何から来ているの?
あと L"あ"の時のLは何から来ているの?
wide文字だよって示すならwprintf見たいに、w"あ"って感じにしたほうがいいような
62デフォルトの名無しさん:2012/12/13(木) 23:14:44.08
Lはlong
tはtext

wにしなかったのは、多分整数と合わせたんじゃないのかな
63デフォルトの名無しさん:2012/12/13(木) 23:30:37.50
LPCTSTR lpszText;
64デフォルトの名無しさん:2012/12/13(木) 23:35:00.03
long pointer constant text string long pointer string zero-terminated text
65デフォルトの名無しさん:2012/12/14(金) 01:25:53.08
long pointer ってなんですか?
66デフォルトの名無しさん:2012/12/14(金) 01:31:06.42
長いポインタです
67デフォルトの名無しさん:2012/12/14(金) 02:43:29.19
>>65
32ビットのポインタ。従来の16ビットポインタより長いという意味。
昔、16ビットと32ビットのポインタを混在して区別する必要があった時代のなごり。
今じゃ(少なくともWindowsやLinuxでは)サイズの異なるポインタが混在することはないから気にするな。
68デフォルトの名無しさん:2012/12/14(金) 02:51:37.77
>>67
far とは違うものなの?
69デフォルトの名無しさん:2012/12/14(金) 07:14:47.65
>>68
同じ
70デフォルトの名無しさん:2012/12/14(金) 08:47:17.38
>>68
違う。あっちはセグメント。
71デフォルトの名無しさん:2012/12/14(金) 09:02:03.02
どっちなの?
72デフォルトの名無しさん:2012/12/14(金) 09:12:48.84
http://msdn.microsoft.com/ja-jp/library/ff381404%28v=vs.85%29.aspx

P は "ポインター (pointer)"、LP は "ロング ポインター (long pointer)"
の略として使われてきました。ロング ポインターはファー ポインター (far
pointer) とも呼ばれますが、16 ビット Windows の名残で、現在のセグメント
の外にあるメモリ範囲をアドレス指定するのに使用されていました。LP プレ
フィックスは、16 ビットのコードを 32 ビット Windows に簡単に移植できる
よう、予約されていました。現在ではこの区別は存在せず、単にポインターと
呼ばれています。
73デフォルトの名無しさん:2012/12/14(金) 09:14:13.28
>>71
far pointerはsegment16bit * 16 + offset16bitで20bit(1MB)のメモリ空間を表すもの。
74 ◆QZaw55cn4c :2012/12/14(金) 09:40:06.25
>>73
しかしリアルモードではCPU 自身がセグメントを16ビット、オフセットを16ビットと持ち、12ビット分を重ねるのはCPU内
したがって記述レベル、たとえばアセンブリ言語で記述するときもセグメント、オフセットそれぞれに word=16bit の領域を準備することが多い
大概のC処理系でもそう。(sizeof(void far *) = 32)
75デフォルトの名無しさん:2012/12/14(金) 10:11:41.90
>>74
同じことしか言ってないように見える
最後4だし
76デフォルトの名無しさん:2012/12/15(土) 08:37:43.76
>>73
long pointer は FAR で定義されている
FAR を far で定義するか空定義にするかは環境次第
77デフォルトの名無しさん:2012/12/15(土) 09:09:59.58
farなんていうのは16bit x86(16bit プロテクトモードを含む)の
化石だよね。だから>>74がリアルモードに限定しているのは間違い。

16bit x86の設計は8bitCPU8080のコードをポーティングしやすくする
ためにアドレス空間も8080と同じ64KBを基本とした。
この範囲のプログラムはポインタも16bitで良かった。

だが時代が進みコードサイズが爆発的に増えた結果、オフセット
だけでは不足してきたので、セグメントとペアで扱うことにした。
だがC言語的にはポインタはポインタでしかないので、ポインタが
アドレス可能な範囲は実装依存だった。

でもオフセットのみのポインタとセグメントとペアのポインタは区別して
扱わないと開発上問題になる。そこで予約語farを定義して、farがつく
ポインタはセグメントとペア、それ以外はオフセットのみと定義すること
にした。

一般的にはfarのつくポインタだけをセグメントとペアのもの、つかない
ポインタはオフセットのみという認識だが、あえて両者を区別しやすく
するという意味でオフセットのみのポインタを「nearポインタ」と呼ぶ場合
もある。でも今となっては用済みのテクノロジでどうでもいいヨタ話。
7874 ◆QZaw55cn4c :2012/12/15(土) 09:12:44.43
>>77
概ね同意です。
79デフォルトの名無しさん:2012/12/15(土) 09:29:44.69
ヨタついでにもう1つ。
昔の16bit x86用Cコンパイラには「メモリモデル」なるものが存在した。

詳しい話は英文だけど
ttp://www.c-jump.com/CIS77/ASM/Directives/D77_0030_models.htm
このへんを参照。

んで、開発を始める前にプログラム規模をまず見積もり、メモリモデル
のどれを採用するかを慎重に決める必要があった。なぜなら途中から
メモリモデルを変更するとコード全体に波及する可能性があったから。

大抵のプログラムでは単一コードセグメント、単一データセグメントで
間に合うものだったが、後々の保険にということで複数セグメント前提
にしてポインタを全部farにする、なんていう「大は小を兼ねる」判断も
行われていた。
80デフォルトの名無しさん:2012/12/15(土) 09:47:22.53
MS-DOS陣営と違い意外に知られていないが、Mac-OSも680x0の時代は
32KBのコードリソースに入るサイズで切り分ける必要があった。
コードリソースと言う制約自体はMac-OSをベースにしていたPalmOSにも受け継がれた。
81デフォルトの名無しさん:2012/12/15(土) 09:51:36.83
32KBのコードリソースっていうのはおそらくMC680x0における
ショートジャンプ(PC相対とかレジスタ相対ジャンプ)の範囲で
おさめるための策だと思われる。

時代背景から考えて現実的とは言えるけど、単なるウィンドウ
システム側の制約なだけ。MC680x0はリニアなアドレス空間で
16MBまでアクセスできた。
82デフォルトの名無しさん:2012/12/15(土) 10:41:58.36
LPは16-bit時代の遺産だからな
farポインタの存在する環境であればfarポインタになるのだが
32-bit環境以上なら普通のポインタと同じ
83デフォルトの名無しさん:2012/12/15(土) 11:26:29.81
コードリソースの32kBというサイズはPC相対アドレッシングの制約からきたものかも
知れないが、セグメント間はA5相対JSRでアクセスするようコンパイラが判断するから、
関数ポインタを使いたいような場面でもない限りプログラマが意識する必要はなかったな。
84デフォルトの名無しさん:2012/12/15(土) 21:29:59.09
昔のコンパイラは
switchがショートジャンプなので
延々と処理を書くと
適当なとこにジャンプしてた
85デフォルトの名無しさん:2012/12/15(土) 21:35:23.60
>>84
「適当」って「適切」じゃなくて「いい加減」という意味ですか?
怖いですね。
86デフォルトの名無しさん:2012/12/15(土) 22:08:15.49
昔のコンパイラと言うかそのコンパイラが手抜k
87デフォルトの名無しさん:2012/12/15(土) 22:40:53.85
飛べねーぞごらぁ って言うのは見たことあるけど、変なとこに飛ぶコードを吐く奴は
さすがに見たことない。
88デフォルトの名無しさん:2012/12/16(日) 02:35:18.51
質問させてください。
http://www.geocities.jp/ky_webid/cpp/language/007.html
上記のURL中に

「デストラクタですが、これはクラスのインスタンスが解体されるときに、
解体の直前で自動的に呼び出されます。
解体されるタイミングは、そのインスタンスのスコープを抜けるときです。 」

とあるのですが、
では

IProduct* createFactory(Content* content)
{
switch( content->id )
{
case PARTS_ID_A:
return new ProductA( content );
default:
return NULL;
}
}

ProductA* product = createFactory(content);

のようなコードはなぜ正常に動くのでしょうか??

createFactory内でnewしたProductAはすぐreturnされてスコープを抜けてしまうので
その時点でデストラクトされ、
productに代入されるポインタはすでに使えないものになっているのではないのでしょうか?
理屈がよくわからないのですが、教えて頂けると嬉しいです。
89デフォルトの名無しさん:2012/12/16(日) 02:53:01.82
newで作成したインスタンスはスコープを抜けても勝手にデストラクトされない
9074 ◆QZaw55cn4c :2012/12/16(日) 02:53:57.65
>>88
new で得たポインタはdeleteしない限り無効にはならない
new で得たポインタは関数を超えても生き残り続ける
new したものはdeleteせよ、という宗教もここからきているかと
91デフォルトの名無しさん:2012/12/16(日) 03:32:27.84
C#だとnewばっかで滅多に削除を明示しない
92デフォルトの名無しさん:2012/12/16(日) 03:36:33.83
なるほど!
ありがとうございますm(__)m
93デフォルトの名無しさん:2012/12/16(日) 17:58:39.31
C++でもスマートポインタ使うから滅多に削除を明示しないよ。
94デフォルトの名無しさん:2012/12/16(日) 18:15:29.85
構文レベルの予約語なのに滅多に記述されずラップして使われるのは
言語としてヤバイ状態なんじゃないかな
95デフォルトの名無しさん:2012/12/16(日) 18:17:24.58
何がヤバイんだ
96デフォルトの名無しさん:2012/12/16(日) 18:18:38.31
gotoみたいなもんだ
下手に使うと危険だが、上手く使えば効果的
97デフォルトの名無しさん:2012/12/17(月) 01:00:18.37
gccならスマポを使う必要がもうないのでわ?
98デフォルトの名無しさん:2012/12/17(月) 01:36:18.88
>>97 え?なんで?
99デフォルトの名無しさん:2012/12/17(月) 01:58:58.85
gcc拡張ってのがあって、配列の宣言時、要素数に変数が
指定できるのですよ。
int a;
a=100;
char hoge[a];

ってもC++の話じゃないね。させん
100 ◆QZaw55cn4c :2012/12/17(月) 02:33:34.65
>>99
c99 で公認されたのでは?
101デフォルトの名無しさん:2012/12/17(月) 02:58:50.82
>>99
スマポの話と関係なくね?
102デフォルトの名無しさん:2012/12/17(月) 03:09:47.47
色々わかってなさ杉だろ
103デフォルトの名無しさん:2012/12/17(月) 07:13:40.26
>>100
C++の話じゃないね
104デフォルトの名無しさん:2012/12/17(月) 07:52:25.63
>>103
>>99 にすでにかいてある
105デフォルトの名無しさん:2012/12/17(月) 21:41:44.74
Effective c++第3版11項p52なんだけど
delete pOrig;のところって
if(pOrig != pb) delete pOrig;
としなければ例外安全とは言えないよね?
106デフォルトの名無しさん:2012/12/17(月) 22:40:58.22
GetPrivateProfileなんたらって標準関数を使ってiniファイルからデータを取得しているのですが、
データ数がどれくらいあるかわからない場合はどうしたらいいでしょうか?

前に見たソースだと
同じiniファイルのどこかでキー名を宣言?しておき、
そのキー名に文字列をくっつけてキー名を作るみたいな事をしていた気がするのですがどこかにいったので・・

[Object]
ObjectName=Hoge
HogeNum=10
HogeStr=ほげ
ObjectName=Aho
AhoNum=20
AhoStr=あほ

みたいな感じだった気がしなくもないんですが・・・、
107デフォルトの名無しさん:2012/12/17(月) 22:50:52.81
あれ?
section名の重複ってありなんでしょうか?
108デフォルトの名無しさん:2012/12/17(月) 22:52:53.16
Aho1,Aho2,Aho3・・・とか順番に読めるとこまで読めばいいだろ
109デフォルトの名無しさん:2012/12/17(月) 23:18:45.24
>>108
キー名決まってないというか、iniファイル側でやりたいです
110デフォルトの名無しさん:2012/12/17(月) 23:27:18.57
[Object]
KeyList=Aho,Hoge
Aho1=>>106
Aho2=>>107
Aho3=>>109
Hoge1=>>3
Hoge2=>>99
111デフォルトの名無しさん:2012/12/18(火) 01:16:34.22
最近、スマートポインタなる概念があると聞き、調べていたのですが、
【1】newを伴わないポインタでは利用できるのでしょうか。あるいは、利用するべきでしょうか。

 char *p1 = "Hello, Work!";     // 例えば文字列定数の先頭アドレス。
 int  *p2 = foo->GetPointer();  // 例えばポインタを返す関数。内部でnewされているかもしれない。

【2】宣言と同時に初期化しない場合、どう記述するべきでしょうか。(boost::scoped_ptrを想定)

 boost::scoped_ptr<bar> p3;
 p3 = new bar();        //今まではこう書いていたが…?
112デフォルトの名無しさん:2012/12/18(火) 01:28:01.15
スマートポインタ、ガベージコレクションは必ずしも使う必要はない。
Java、C#、スクリプト言語には標準で入るが、速度を犠牲にする。
プログラム上で開放を忘れなければ必要なし。
113111:2012/12/18(火) 01:31:05.06
>>112
もちろん、その大前提は把握しているつもりです。
114デフォルトの名無しさん:2012/12/18(火) 01:59:57.85
>>99
hoge使ってる馬鹿は議論しようとするな
馬鹿の議論ほど不毛なものはない
115デフォルトの名無しさん:2012/12/18(火) 02:00:10.64
>>111
> 【1】newを伴わないポインタでは利用できるのでしょうか。あるいは、利用するべきでしょうか。

破棄処理に応じたRAIIラッパーを使うか、 boost::shared_ptr, std::shared_ptr, std::scoped_ptr などの
破棄処理を指定できるスマートポインタを使う。

> 【2】宣言と同時に初期化しない場合、どう記述するべきでしょうか。(boost::scoped_ptrを想定)

p.reset(new ...) とする。
116111:2012/12/18(火) 03:14:08.17
>>115
ありがとうございます。助かりました。
117デフォルトの名無しさん:2012/12/18(火) 06:04:07.44
>>106
セクション名だけ指定したら
キーのコレクションが返却される
とか書いてないか
118デフォルトの名無しさん:2012/12/18(火) 08:25:12.19
>105
俺の持ってるのは英語版なのでページが違うようだが、
Widget& Widget::operator=(const Widget& rhs)
{
&nbsp;&nbsp;Bitmap *pOrig = pb;
&nbsp;&nbsp;pb = new Bitmap(*rhs.pb);
&nbsp;&nbsp;delete pOrig;

&nbsp;&nbsp;return *this;
}
のことだったら new がオーバーロードされてなければ pOrig != pb になるから意味ないんじゃね?
new で例外が飛ぶならそこまで処理来ないし。
119デフォルトの名無しさん:2012/12/18(火) 08:26:01.60
>>106
そもそもそんな標準関数なんてないんだが。
みんながちゃんと、あんたの想定と同じ環境を想定してくれるとは限らんぞ。
120デフォルトの名無しさん:2012/12/18(火) 08:42:30.60
>>117
公式リファレンスが英語でよくわからないです

>>119
すいません、マイクロソフトのページにあったのでつい・・・

>>110
キー名を羅列したものを文字列として取得した後にcsvとして取得しないとダメですか?
121デフォルトの名無しさん:2012/12/18(火) 08:49:57.44
>>117
GetPrivateProfileSection
GetPrivateProfileSectionNames
がそれっぽい関数なんですけどなんでしょうか?
122デフォルトの名無しさん:2012/12/18(火) 08:58:56.53
>>121
GetPrivateProfileSectionNames
これが答えそのもの
123105:2012/12/18(火) 19:46:52.62
>>118
どこかでbad_allocがcatchされているということなら納得です
124デフォルトの名無しさん:2012/12/18(火) 19:57:54.25
例外安全を勘違いしてないか?
125デフォルトの名無しさん:2012/12/18(火) 20:11:44.91
if( flag ) {max = CONSTANT; return;}
else if( (int v = calc_a(i)) > max ) max = v;
else max = calc_b(i);
と書きたいのですがコンパイルが通らないので、仕方なく
int v;
if( flag ) {max = CONSTANT; return;}
else if( (v = calc_a(i)) > max ) max = v;
else max = calc_b(i);
とやっています。
もっと楽な書き方は無いでしょうか?
126デフォルトの名無しさん:2012/12/18(火) 20:17:05.25
if ( flag ) {
max = CONSTANT;
return ;
}
max = calc_a(i) > max ? calc_a(i) : calc_b(i);
127デフォルトの名無しさん:2012/12/18(火) 20:25:53.91
calc_aが2回呼ばれていやだな
128デフォルトの名無しさん:2012/12/18(火) 20:29:36.76
switch(f){
default:
int v=cal_a(i);
if (!(v>m))v=cal_b(i);
m=v; break;
case true: m=CON; }
129デフォルトの名無しさん:2012/12/18(火) 20:34:13.50
どうも、参考になります。
130デフォルトの名無しさん:2012/12/18(火) 21:27:01.98
>>125
一時変数たるvを関数(?)の先頭で宣言して生存期間が長いのが嫌だとエスパーすると、
中括弧で新たにブロックを作ってやれば処理の途中でもブロック内でのみ有効な一時変数を宣言できる。
違ったら無視してくれ。

//  :
// ここまで処理 
{
 int v;
 // ここに処理
}
// ここからも処理
//  :
131デフォルトの名無しさん:2012/12/18(火) 22:03:39.42
インナークラスという機能がありますが積極的に使うべきなのでしょうか?
外側にあっても同じことができますよね?
132デフォルトの名無しさん:2012/12/18(火) 22:17:34.00
使う理由がなければ外に置きましょう
インナークラスのほうがアクセス権限が強いからです
133デフォルトの名無しさん:2012/12/18(火) 22:44:32.06
>>132
C++のインナークラスはただのクラスじゃね?
134デフォルトの名無しさん:2012/12/18(火) 23:38:56.76
http://gyazo.com/372d5b160c8d828f61c9a78794aec43a
文字(hohoho)が入らない(`;ω;´)
135デフォルトの名無しさん:2012/12/18(火) 23:40:23.94
>>122
ありがとう
136デフォルトの名無しさん:2012/12/19(水) 00:06:32.16
>>123
catch されてるかどうか関係なくね?
catch されてなかったとしたら何が問題だと思ってるの?
137デフォルトの名無しさん:2012/12/19(水) 00:37:48.42
>>131
他から隠したいもの、他に公開する必要がないものは内部クラスにする
あるクラスからしか使わないようなものは、内部クラスにした方が良い
138デフォルトの名無しさん:2012/12/19(水) 18:10:01.00
>>136
newが失敗して例外が投げられて、その後誰もcatchしなかったらエラーにならないの?
139デフォルトの名無しさん:2012/12/19(水) 19:12:05.06
なるよ
140デフォルトの名無しさん:2012/12/19(水) 23:19:31.86
例外が誰にもcatchされなかったら、そのままOSが取って動作停止おつかれさんだな
141デフォルトの名無しさん:2012/12/20(木) 00:35:52.57
仕様的には terminate() が呼ばれる
142デフォルトの名無しさん:2012/12/20(木) 00:43:21.73
>>138
例外発生で即 terminate() となるが、それが問題かどうかはプログラムに対する要求による。
問題だとしても >>118 で挙げられているコード片に例外安全上の問題があるとは言わない
143デフォルトの名無しさん:2012/12/20(木) 01:27:24.87
即 terminate() になるか、そこまでのデストラクタが呼ばれるかは未規定だったような
144デフォルトの名無しさん:2012/12/21(金) 18:42:30.68
ある変数が取る値として、enumが定義されているとします。
これらは、ちょうど二進数になるように数値が設定されています。

 enum MyEnum
 {
   APPLE=1, ORANGE=2, GRAPE=4, BANANA=8, STRAWBERRY=16,
 };

const intや#defineで設定するのとは異なり、enumは型チェックをしてくれるので便利ですが、
せっかく二進数になるように値を設定したのに、 APPLE|BANANA のようなORで複数を代入するような使い方ができません。

関数の引数の場合は、呼び出し側でstatic_cast<int>とするなり、
あるいはint版とMyEnum版で関数を作ってオーバーロードするなりすれば問題ないですが、enumの恩恵を受けているとは言いがたいです。。
特に後者の場合は、引数が複数あると定義の数が倍々で増えてしまいます。

何かスマートな解決方法はありませんでしょうか。
145デフォルトの名無しさん:2012/12/21(金) 19:22:36.45
C+で


switch(i) {
 case 1:
  func1();
  break:
 case 2:
  func2();
  break:
 case 3:
  func3();
  break:
}




void func<1>(){}
void func<2>(){}
void func<3>(){}


func<i>();

みたいにして

呼び出すよう方法はありませんか?
146デフォルトの名無しさん:2012/12/21(金) 19:31:41.03
>>144
intでいいよ
147デフォルトの名無しさん:2012/12/21(金) 19:32:58.77
>>145
typedef void (*pfunc)();
pfunc func[] = {func0, func1, func2};
func[i]();

みたいなこと?
148デフォルトの名無しさん:2012/12/21(金) 19:37:05.03
>>146
それしかないですか、ありがとうごあいます。

>>145
関数オブジェクトあるいは関数ポインタなんてどう?
149デフォルトの名無しさん:2012/12/21(金) 19:43:12.92
>>147-148
登録されていない番号の場合はデフォルトで
func<int>()
を呼び出したいdす

多胎とかテンプレートで記述する方法ないですか?
150デフォルトの名無しさん:2012/12/21(金) 19:45:56.36
有りますよ
少し考えればできるから頑張ってね
151デフォルトの名無しさん:2012/12/21(金) 19:47:32.53
>>144
c++ならばenum型を演算子のオーバーロードで

MyEnum operator|(MyEnum a,MyEnum b)
{return static_cast<MyEnum>(static_cast<int>(a)|static_cast<int>(b));}

>>145
つenable_if
152デフォルトの名無しさん:2012/12/21(金) 20:13:34.77
>>151
enable_ifだと
テンプレート関数の特殊化とあんまり変わらない飢餓するのですが
気のせいでしょうか?


func<1>{
 処理1
}

func<2>{
 処理2
}


func<i>();

で呼び分けるような事が屍体のです:

テンプレート関数の特殊化だと、
func<i>();
のi の部分は変数はだめだとコンパイラ(VC10)に起こられました
153デフォルトの名無しさん:2012/12/21(金) 20:24:19.16
(*func)()select(int a){switch(a){
case 1:return func1;
case 2:return func2:
case 3:return func3;
default return NULL; }
とすればいいとおもうよ。
154デフォルトの名無しさん:2012/12/21(金) 20:33:19.87
関数へのポインタの配列
155デフォルトの名無しさん:2012/12/22(土) 03:39:28.35
iを定数にすれば使えるよ
156デフォルトの名無しさん:2012/12/22(土) 11:36:33.89
悪魔の所行にしか見えない
多態でいいじゃん
157デフォルトの名無しさん:2012/12/22(土) 11:47:11.57
コストの問題
158デフォルトの名無しさん:2012/12/22(土) 12:13:57.86
なぜそこまでswitchを使いたくないのか
159デフォルトの名無しさん:2012/12/22(土) 12:15:16.47
コストの問題ならswitch使え
ジャンプテーブル最適化もしてくれるぞ
160デフォルトの名無しさん:2012/12/22(土) 12:30:37.23
つうかダイナミクスを多用するな
多用するとコンパイラはおろかPGの目でもコードが追跡出来なくなる
それは間違いなく破滅に繋がる
すべて静的な世界で完結させる癖を付けなさい
161デフォルトの名無しさん:2012/12/22(土) 13:39:12.11
そうだな
switch(i) {
 case 1:
  func1();
  break:
 case 2:
  func2();
  break:
 case 3:
  func3();
  break:
 case 4:
  func4();
  break:
 case 5:
  func5();
  break:
 case 6:
  func6();
  break:
 case 7:
  func7();
  break:
 case 8:
  func8();
  break:
 case 9:
  func9();
  break:
}
162デフォルトの名無しさん:2012/12/22(土) 14:29:43.20
template <int N> struct Factorial {
enum { value = N * Factorial<N - 1>::value };
};
template <> struct Factorial<0> {
enum { value = 1 };
};
163デフォルトの名無しさん:2012/12/22(土) 14:37:20.90
で、でた〜くだらないTMPでドヤ顔するやつwww
164デフォルトの名無しさん:2012/12/22(土) 15:53:00.27
変数でやりたいってのにどうしてTMP出してくるんだよ・・・
165デフォルトの名無しさん:2012/12/22(土) 20:48:52.60
166デフォルトの名無しさん:2012/12/22(土) 21:23:42.86
呼び出すときに未意味な0指定したり
99とかいうマジックナンバーで再起をとめたり
連番じゃないといけないのがダサい
167デフォルトの名無しさん:2012/12/23(日) 15:38:11.30
>>162
それさあ、コンパイラによって再帰のネストレベルがえらく違うんだよね
168デフォルトの名無しさん:2012/12/23(日) 16:30:47.50
その前にオーバーフローするから大丈夫
169デフォルトの名無しさん:2012/12/23(日) 20:35:52.64
変更できるんじゃね? コンパイラスイッチをしらべろ
170デフォルトの名無しさん:2012/12/23(日) 22:51:53.94
番号の型と関数ポインタのtupleをあらかじめ、なにかしらのコンテナに入れておく
171デフォルトの名無しさん:2012/12/24(月) 08:42:33.16
>>167, >>169
環境によるけど、大抵コンパイラじゃなくてリンカーのオプションだよ。

て言うか、そこで指定されるのは初期値なだけで、例えば Windows
ならスレッド作る時に個別に指定できるし。
172デフォルトの名無しさん:2012/12/24(月) 10:42:38.90
なんでリンカが出てくるんだよ
templateはリンカに頼らずコンパイラの内部でバイナリ吐いてしまうだろうが
それにネストレベルを変更するスイッチがないコンパイラもある
173デフォルトの名無しさん:2012/12/24(月) 11:11:32.05
ネストレベルが何に制限を受けるのかぐらい理解してから書こうよ…
174デフォルトの名無しさん:2012/12/24(月) 11:13:20.50
>>173
関数の再帰呼び出しならスタックかもしれないけど、templateはコンパイル時に展開されてしまうんだぞ
175デフォルトの名無しさん:2012/12/24(月) 11:27:38.30
すまん、マジでよく見てなかった。
176デフォルトの名無しさん:2012/12/24(月) 17:59:44.46
const int SIZE = 10;
typedef int intArray[SIZE];

と同じことをstd::vectorでもやりたいのですが

typedef std::vector<int> intVector[SIZE]; //これは意図したものとは違う挙動になる
typedef std::vector<int> intVector(SIZE); //エラー
typedef std::vector<int>(SIZE) intVector; //エラー

などやってみても、どうしてもエラーが出て実現できません。

std::vectorと全く同じ振る舞いをするが初期サイズだけが決まっている別名をつけたいのですが、
std::vectorは継承もダメっぽいということで、どうすれば実現できるでしょうか?
今のところ
class intVector
{
public:
std::vector vec;

intVector() : vec(SIZE) {}
};
これしか思い浮かばないのですが、やはり振る舞いに不満があります・・・
177デフォルトの名無しさん:2012/12/24(月) 18:02:26.10
std::arrayじゃダメなん?
178デフォルトの名無しさん:2012/12/24(月) 18:05:01.56
>>176
そのクラスになんの意味があるの?
ファクトリ関数ではいけないの?
179デフォルトの名無しさん:2012/12/24(月) 18:23:32.17
ありがとうございます

>>177
すみません知りませんでした、試してみます

>>178
サイズの保証された用途別のvectorを色々なクラスのメンバとして持たせたいと思いました
その名前でメンバとして宣言すればサイズが保証されるようにしたかったのです。
それぞれのクラスの初期化子にconst変数持ち出してサイズ指定するのでは保証できないなと思ったので
180デフォルトの名無しさん:2012/12/24(月) 20:00:55.67
質問
class Base
{
...
public:
virtual ~Base(){}
};

class Derive : public Base
{
...
public:
~Derive(){}
};

このように仮想デストラクタを持つ基底クラスとその派生クラスがあったとします。
派生クラスのインスタンスをfprintfなどで一旦シリアライズし、それをさらに派生クラスとして
デシリアライズし、その派生クラスをdeleteしようとするとエラーがでます
これは、基底クラスの仮想デストラクタがvtableを持ち、シリアライズ・デシリアライズで
ポインタがずれたため、と思って正しいでしょうか?
自分でもいまいち仮想デストラクタのdeleteの挙動について正しく理解できていない気がします
181デフォルトの名無しさん:2012/12/24(月) 20:11:07.59
まさかそのままバイナリで読み書きしたのか
182デフォルトの名無しさん:2012/12/24(月) 20:15:18.98
他にポインタなどは持っておらず地味に読めるのです
deleteだけ通らないので何故と思いまして
183デフォルトの名無しさん:2012/12/24(月) 20:20:08.56
> 地味に読めるのです
気のせい
184デフォルトの名無しさん:2012/12/24(月) 20:21:22.21
悪魔を召喚したいならそれで正しいコードだよ
185デフォルトの名無しさん:2012/12/24(月) 21:04:06.86
デシリアライズしたプロセス内で手順再生して同じもの作って比べてみりゃいいじゃん
186デフォルトの名無しさん:2012/12/24(月) 21:05:20.48
これが現代の召喚魔法か
187デフォルトの名無しさん:2012/12/24(月) 22:44:00.43
そのデシリアライズってどうやってるの?deleteはそのプログラムの実行中にnewしたポインタにしか使えないぞ
188デフォルトの名無しさん:2012/12/25(火) 03:35:29.35
>>187
結局これなんですよね>deleteは〜
悔い改めました
ちゃんとシリアライズ用データ用意し事無きを得ました
なお、実際のシリアライズ・デシリアライズはあるapiで行ってるので詳細はわかりませんが
恐らくバイナリベタ書きと思われます
189デフォルトの名無しさん:2012/12/26(水) 02:46:39.53
char配列をファイルに書き出す時に、読み込むときに楽をするために改行も含め一行で書き出したい。
そこで、\nを他の数値に置き換えて書き出し、読み込み時にその数値の部分を\nとして
読み出せばいいやと考えているんですが、日本語環境では絶対に入力されることの
ない数値や、または入力される可能性がすごく低い数値を教えてください
190デフォルトの名無しさん:2012/12/26(水) 02:48:47.56
\rでいいだろ
191デフォルトの名無しさん:2012/12/26(水) 03:40:29.71
つーか、
>読み込むときに楽をする
の目的で
>改行も含め一行で書き出したい
に至った理由が判らん。

単に複数行纏めて読みたいだけならfread()でも使えばいいのに。
192デフォルトの名無しさん:2012/12/26(水) 07:12:40.47
理由は分かる

0x01〜0x1F の中で通常使われない値、
例えば 0x01 を使えばいいと思われ
193デフォルトの名無しさん:2012/12/26(水) 09:38:47.89
まさにその\をつけるエスケープじゃだめなん?
194デフォルトの名無しさん:2012/12/26(水) 11:12:23.41
王道はエスケープだけどとにかく手抜きしたいってことだよな
俺のおすすめは\v(vertical tab)。一応改行類だが通常のテキストファイルでは
まず出てこない(俺は今まで見たことが無い)
Unicodeにまで広げていいならU+2028(LINE SEPARATOR)ってのもあるよ
195デフォルトの名無しさん:2012/12/26(水) 13:20:45.94
class Base
{
private:
 int m_base;
public:
 virtual int GetSize() { return( sizeof(this) ); }
};

class Sub : public Base
{
private:
 int m_sub;
};


int main(void)
{
 Base *pBase = new Sub;
 int size = pBase->GetSize(); //※

 return(0);
}

自分の環境でコレを試したところ、※の部分で得ることが出来るサイズはBaseの大きさになり、
Subクラス側のpublic部分にBaseと同じ記述の【 virtual int GetSize() { return( sizeof(this) ); } 】を追加しても、
サイズはBaseの大きさのままでした。
このような場合でSubのサイズを取得したい場合は、pBaseをSubにdynamic_castしてから行うか、
サブクラスに【 virtual int GetSize() { return( sizeof( Sub ) ); } 】と記述するしかないのでしょうか?
196デフォルトの名無しさん:2012/12/26(水) 13:23:41.34
>>195
× sizeof(this)
○ sizeof(*this)
197デフォルトの名無しさん:2012/12/26(水) 15:33:10.99
#include <chrono>
VS2012でこれをコードに書くとx64でビルドできません。
Win32ではできます。
みなさんはどうですか?
198デフォルトの名無しさん:2012/12/26(水) 16:02:14.19
自分のところではビルド通りました
プラットフォームツールセットがVisual Studio 2012 (v110)になってるか確認してください
199改造神:2012/12/26(水) 18:11:04.78
C++って、VBSの言語ですよね?
200デフォルトの名無しさん:2012/12/26(水) 19:40:57.25
>>196
ありがとう!
201デフォルトの名無しさん:2012/12/27(木) 13:57:47.27
Win8 VisualStudio2012 で Win標準(?)のOrientationSensorクラスを扱うには
何をincludeしてどうする必要があるんでしょうか・・・?
MSのmsdn読んでも理解できないし 他のブログなどを探しても見当たりません・・・
とりあえずは傾きをハードから受け取ってprintfなんかで表示できるようになればOKなんですが・・・
どうかお助けください
202デフォルトの名無しさん:2012/12/27(木) 13:58:02.83
ストリームとキューって何が違うんですか?
203デフォルトの名無しさん:2012/12/27(木) 14:58:42.83
ストリームは流れ、キューは待ち行列。
204デフォルトの名無しさん:2012/12/27(木) 15:03:22.04
同じだよ
どっちもFIFOの要素集合でしかない
205デフォルトの名無しさん:2012/12/27(木) 16:07:13.24
キューは一つのプロセス内でも読み書きするけど、
ストリームはそんなことしないんじゃね?

実装はFIFO
206デフォルトの名無しさん:2012/12/27(木) 16:43:23.30
>>201
まずOrientationSensorクラスがWindows Runtime classであるってのは理解してる?
207デフォルトの名無しさん:2012/12/27(木) 16:58:05.48
>>206
知識としてはわかるけど 完全に理解してるかというと微妙
C++から名前空間や関数を簡単に呼び出すってのは可能なの?
208デフォルトの名無しさん:2012/12/27(木) 18:11:44.51
>>202
本質的にはキューは溜めておいたものを取り出すもの、ストリームは今流れているものを取り出すもの
209デフォルトの名無しさん:2012/12/27(木) 18:12:33.71
http://www.wisdomsoft.jp/366.html を読む

#include <iostream>
using namespace Windows::Devices::Sensors ;
int main(Platform::Array<Platform::String^>^ args)
{
auto sensor = OrientationSensor::GetDefault();
if (sensor != nullptr){
auto result = sensor->GetCurrentReading();
}
else{
std::wcout << "No orientation sensor found" << std::endl;
}
return 0;
}
前C#で書いたのを書き直してみた
こんな感じで出来ないかな?センサー使えるハードウェアがないからわからない
210デフォルトの名無しさん:2012/12/27(木) 18:31:51.88
ストリームを実現するのに、読む方より書く方が速いと困るので、
その溜めておく場所がキュー
211デフォルトの名無しさん:2012/12/27(木) 18:38:03.40
ストリームは長さが分からない
キューは長さが分かる
212片山博文MZボット ◆0lBZNi.Q7evd :2012/12/27(木) 19:38:50.87
>>199 違います
213デフォルトの名無しさん:2012/12/27(木) 23:11:43.08
インターフェイスクラスについて質問ですが

定数のスコープの関係でインターフェイスクラス内にconstな静的メンバ変数を持たせいのですが
それはC++のインターフェイスクラスの概念的にOKなのでしょうか?

また、メンバ関数の動作を保証するために静的メンバ変数を持つというのはOKなのでしょうか?
例えば、そのインターフェイスクラスを継承しているクラスのインスタンスが今現在どれだけ
あるかを得る、というメンバ関数の動作を保証するためには基底クラスのメンバにインスタンスを
カウントするためのstatic intが必要になる。という場合です
214デフォルトの名無しさん:2012/12/28(金) 00:32:02.27
スレ違いだった申し訳ないのですが、
あるソフトウェアを作って、それをユーザーにインストールさせるとき、
ライセンスの問題上ソースコードをダウンロードさせてユーザーの環境で
ビルドさせる必要がある場合、インストーラにgcc(mingw)のバイナリを同梱させて、
ユーザーの環境で無理やりビルドさせるようなことってできるのでしょうか??
昔rubyで作られたマリオをインストールさせる際、rubyの処理系自体を
バイナリで固めたものをダウンロードさせていたものがあったので
似たようなことができるのではないかなと思ったのですが
どうでしょうか
215デフォルトの名無しさん:2012/12/28(金) 01:02:43.33
簡単に出来るが?
216214:2012/12/28(金) 01:25:34.28
レスありがとうございます。

手順としてはこんな感じであってますでしょうか。

1. 214 が作ったソフトウェア(Xとする)のインストーラをユーザーがダウンロードする

2. ユーザーがダウンロードしたインストーラを実行

3. インストーラがMinGWをダウンロード。 Cドライブ直下あたりに配置

4.ソフトウェアXをビルドするためのソースコードをインストーラがダウンロード

5.インストーラがmingwを実行してダウンロードしたソースコードをコンパイル&リンク

6. exeファイルを生成
217 ◆QZaw55cn4c :2012/12/28(金) 02:06:59.10
>>214
午後のコーダもそうじゃなかったかな?
218デフォルトの名無しさん:2012/12/28(金) 07:29:14.66
>>213
他のクラスのと名前が被ると名前解決は必要だけど
特に問題はないと思う

分かってると思うけど、インタフェースクラスは仮想継承することね
特にインスタンス数をカウントするのなら必須
219214:2012/12/28(金) 16:27:18.35
ありがとうございます。
216の形式でやってみます。

あと別件でお聞きしたいのですが、
c++のpriority_queue で 先頭から2個目の要素をpopを使わずに
取り出したいのですが、何か方法はありませんでしょうか。
queueの性質上先頭から2個めが欲しいというのがそもそも
おかしいとは思うのですが・・
220デフォルトの名無しさん:2012/12/28(金) 17:29:40.28
int test(string file){
wfstream fst;
wchar_t buf;

fst.open(file.c_str(), ios::in);
if(fst.fail()) printError(990);

while(fst.get(buf)){
wcout << buf << endl;
}
return 0;
}

上の関数でファイルから一文字ずつ読み込み→出力っていうことをやりたいんですが、マルチバイト文字をうまいことgetしてくれません。。。
どうすれば処理できるようになりますか?
ちなみに入力ファイルの文字コードはUTF-8を想定しています。
221デフォルトの名無しさん:2012/12/28(金) 17:35:22.70
#include <codecvt>
std::wfstream filestream(L"filepath");
filestream.imbue(std::locale(std::locale(), new std::codecvt_utf8_utf16<wchar_t>));
222デフォルトの名無しさん:2012/12/28(金) 17:40:44.68
>>218
ありがとうございます。無名空間も考えてみます
223デフォルトの名無しさん:2012/12/28(金) 17:41:26.53
>>221
すみません、開発環境はLinuxです。。。
224デフォルトの名無しさん:2012/12/28(金) 17:49:21.14
>>223
そういうのは先に言え
ファイルから全部読みだしてicuあたりを使ってUTF-8からUTF-32に変換して渡してやればいい
225デフォルトの名無しさん:2012/12/28(金) 17:59:33.51
>>224
すみませんでした。
icuがよくわからないんで色々調べてみます。
226デフォルトの名無しさん:2012/12/28(金) 18:23:20.23
どっちみちlocaleさわらないとwcoutに出力しても日本語文字は出ないよ
でもLinuxのlibstdc++はwcoutにimbueしてもスルーされて
グローバルロケール設定しないと動かないっぽいね
227デフォルトの名無しさん:2012/12/28(金) 18:29:44.34
ロケールてなんなんや
プロンプトの文字コードとか?
228デフォルトの名無しさん:2012/12/28(金) 18:43:06.68
文字エンコーディングだけでなく国別の数値や時刻の書式、文字のソート順等
いろんな種類(カテゴリ)の情報を扱うのがロケール
ただしC/C++標準で提供されている物は正直大して役に立たないし
あまり利用されていない気がする

Linuxだとそもそもwchar_tの利用がレアじゃないか?そういう印象があるけど
229デフォルトの名無しさん:2012/12/28(金) 20:30:05.03
>>219
priority_queue を継承すれば、
内部利用してるコンテナ c を使ってどうとでもできそう
(ただし仮想デストラクタが無いので注意)

でも、そういう目的なら priority_queue じゃなくて
set 使えばいいんじゃないのかな
230デフォルトの名無しさん:2012/12/28(金) 21:51:24.15
class HogeA {
 public:
  HogeA() {}
  〜〜〜
  HogeW toHogeW(); //←構文エラー ';' が、識別子 'toHogeW' の前に必要です。
};

class HogeW {
 public:
  HogeW() {}
  〜〜〜
  HogeA toHogeA();
};

相互に変換するメンバ関数を持ったクラス宣言はどう書けばいいのでしょうか?
HogeWクラス宣言前にHogeW使ってるからエラーなのだと思うのですが、どう解決すればいいのかわからないです
231デフォルトの名無しさん:2012/12/28(金) 21:57:22.63
ニンゲン側から歩み寄ってやる必要があるんだよ
232デフォルトの名無しさん:2012/12/28(金) 22:25:35.99
class HogeW;
class HogeA {
〜〜〜
233デフォルトの名無しさん:2012/12/28(金) 22:37:50.77
>>230
Hogeとか書いてる暇があるなら自分で調べろ池沼
それができてないお前のような奴には無理
234デフォルトの名無しさん:2012/12/28(金) 22:42:59.98
>230
解決しなくていいからさっさと回線切れや糞hoge厨。
235デフォルトの名無しさん:2012/12/28(金) 22:49:41.94
>>230
ファイルを削除する
236デフォルトの名無しさん:2012/12/28(金) 22:55:35.36
>>230は露骨な荒らしなんだからいちいち構うなようっとうしい

スルーよろ
237デフォルトの名無しさん:2012/12/28(金) 23:05:41.01
>>230
hoge使うこととネットで見ず知らずの他人にタダで教えろって情報乞食することは覚えられても
自分に必要な情報を自分で調べることは覚えられないのか
どんなクズにどういう教育受けたらお前みたいなクズに育つの?
自覚ないんだろどうせ、自覚のないクズが一番迷惑
238デフォルトの名無しさん:2012/12/28(金) 23:22:16.31
>>230
これでも参考にするといい
そのレベルでいくとこれくらいがちょうど分かりやすいと思う
http://www.google.co.jp/search?q=%E3%81%8A%E5%89%8D%E3%82%A6%E3%82%B6%E3%81%84%E3%82%88
239デフォルトの名無しさん:2012/12/28(金) 23:27:46.63
240デフォルトの名無しさん:2012/12/28(金) 23:33:45.73
>>231
それは>>230が人間だった場合にしか伝わらない。
>>230の知能はチンパンジー並。
241デフォルトの名無しさん:2012/12/29(土) 00:25:59.35
またHOGE厨か
242デフォルトの名無しさん:2012/12/29(土) 00:32:07.55
わざわざ時間おいて連投とか情熱あるな
243デフォルトの名無しさん:2012/12/29(土) 00:45:44.33
244デフォルトの名無しさん:2012/12/29(土) 00:59:17.07
hogeに恨みはないけど何で文字数の少ないfooではなくわざわざ文字数の多いhogeを選択したのかが疑問。
245デフォルトの名無しさん:2012/12/29(土) 01:43:33.37
hoge使ってる基地害はどうせ書籍すら調べてないんだろ
hoge使ってる基地害には知恵遅れが多いからな

書籍→検索→質問掲示板
の順じゃなくて、
検索→質問掲示板
って順の基地害が多い
どうかしたらいきなり質問掲示板に来る基地害までいる
246デフォルトの名無しさん:2012/12/29(土) 01:58:16.04
お前ら禿げてるからってhoge叩くのやめろよ
247デフォルトの名無しさん:2012/12/29(土) 03:22:35.28
>>230
何でこの年の瀬に荒らしにきたの?
248デフォルトの名無しさん:2012/12/29(土) 05:22:11.35
hogewwwwwwww




















馬鹿じゃね
249デフォルトの名無しさん:2012/12/29(土) 08:45:56.36
ホントこのスレ伸ばすのは手軽でいいなwww
250デフォルトの名無しさん:2012/12/29(土) 09:26:39.99
class Hoge{
public:
Hoge();
};
251デフォルトの名無しさん:2012/12/29(土) 09:34:09.86
年の瀬で寂しいから適当なhoge質問作って人気者になろうかな
252デフォルトの名無しさん:2012/12/29(土) 10:55:34.72
hogeを含む質問をすればスレが伸びる風潮
253デフォルトの名無しさん:2012/12/29(土) 13:48:59.77
>>230=基地害
>>253=基地害をスルーできないバカ
255デフォルトの名無しさん:2012/12/29(土) 18:49:43.54
std::shared_ptrの説明を読んで、受け渡しする際にはきちんと一度宣言して名前を付けてから
受け渡すということはわかったのですが、どうしてもうっかりmake_pairなど便利な関数の
返り値を使ってそのまま受け渡しをしてしまったりします。
こういったミスが起きないようにするためのみなさんの心がけや良い方法があったら
アドバイスお願いしたいです。
256デフォルトの名無しさん:2012/12/29(土) 18:51:33.02
例外安全の崩れたプログラムで一度痛い目を見るといいよ
257デフォルトの名無しさん:2012/12/29(土) 19:41:21.13
ほげぇ
ほげぇ

頭悪そう
258デフォルトの名無しさん:2012/12/29(土) 20:08:34.84
急遽プログラミングを使うことになり、昨日からc++の勉強をしているのですが、
ポインタについて自分の認識があっているかを確認させていただけませんでしょうか?

・char* mojiという宣言はmojiというchar型のポインタ宣言なのでmojiに入れるのはアドレス
・関数の宣言の中で、function(char* c)
と引数の型を指定したとき呼び出す際はcにはchar* moji1は入れられるが、char moji2入れられない
moji2を入れたければfunction(&moji2)とすればいい
・char tekito[10]="waiwai"として初期化できると思いますが、char* tekito2も同じように初期化できるのでしょうか?
・また、tekitoの2文字目を変えたいとき、*tekito[1]="z"とすればよいのでしょうか?

間違いがあれば指摘していただけませんでしょうか
よろしくお願いいたします
259デフォルトの名無しさん:2012/12/29(土) 20:19:18.43
>・char* mojiという宣言はmojiというchar型のポインタ宣言なのでmojiに入れるのはアドレス
はい
>・関数の宣言の中で、function(char* c)
>と引数の型を指定したとき呼び出す際はcにはchar* moji1は入れられるが、char moji2入れられない
>moji2を入れたければfunction(&moji2)とすればいい
はい
>・char tekito[10]="waiwai"として初期化できると思いますが、char* tekito2も同じように初期化できるのでしょうか?
はい
>・また、tekitoの2文字目を変えたいとき、*tekito[1]="z"とすればよいのでしょうか?
*はいりません
260デフォルトの名無しさん:2012/12/29(土) 20:20:05.20
>>258
・char* mojiという宣言はmojiというchar型のポインタ宣言なのでmojiに入れるのはアドレス
Yes

・関数の宣言の中で、function(char* c)
と引数の型を指定したとき呼び出す際はcにはchar* moji1は入れられるが、char moji2入れられない
moji2を入れたければfunction(&moji2)とすればいい
Yes
ただし c を文字列として扱う場合は
単一の変数である moji2 のアドレスを入れてはいけない。(危険)
*c = 'A'; のように単一の文字を返すためにポインタを使ってるなら問題ないけど、
文字列なら配列を渡すこと。

・char tekito[10]="waiwai"として初期化できると思いますが、char* tekito2も同じように初期化できるのでしょうか?
初期化できるけど意味合いが異なる。
配列 tekito の初期化の場合は配列が指定した文字列で初期化され、
ポインタ tekito2 の初期化の場合は文字列リテラル "waiwai" がメモリ上のどこかに置かれ、そこへのアドレスで初期化される。
あと、文字列リテラルは変更不可なので、const char* でないと危険。
C++11 で正式に const がないとだめになったが、C++03 までは互換性のために許容されている。(だったよね?)
配列の場合は tekito[10] の領域に "waiwai" がコピーされるので、変更しても問題ない。

・また、tekitoの2文字目を変えたいとき、*tekito[1]="z"とすればよいのでしょうか?
tekito[1] = 'z';
261デフォルトの名無しさん:2012/12/29(土) 20:52:48.41
C#で変数宣言するときvarを使う人は結構多いと思いますが、
C++でautoを使ってる人をほとんど見かけません。何か理由があるんでしょうか。
C#からC++に入った私は結構使ってるんですが、やめたほうがいいですか。
262デフォルトの名無しさん:2012/12/29(土) 21:02:03.75
>>259-260
ありがとうございます!
参考にさせていただきます
263デフォルトの名無しさん:2012/12/29(土) 21:05:01.11
>>261
初期化の構文が違うから
264デフォルトの名無しさん:2012/12/29(土) 21:27:42.87
>>261
C++11 の機能だから。
265デフォルトの名無しさん:2012/12/29(土) 21:37:53.92
>>261
最近追加された機能だから
サポートしてないコンパイラを使ってると当然使えない
266デフォルトの名無しさん:2012/12/29(土) 21:43:42.78
>>260
>ただし c を文字列として扱う場合は
>単一の変数である moji2 のアドレスを入れてはいけない。(危険)
>*c = 'A'; のように単一の文字を返すためにポインタを使ってるなら問題ないけど、
>文字列なら配列を渡すこと。

function(char* c[ ])としておかないといけないということでしょうか??
例えばchar* cで受けて、実装で文字列に変換することはできないのでしょうか?
ポインタcからポインタを進めて0が入ってるところまでをメモリを確保した先にコピーするようなことはできないのでしょうか?(あまり意味のない実装だとは思いますが…)
267デフォルトの名無しさん:2012/12/29(土) 21:49:23.36
>>266
function(char* c) のまま

char mojiretsu[128];
function(mojiretsu);

と渡す
268デフォルトの名無しさん:2012/12/29(土) 21:49:33.39
汚ジャバつかってろ
269デフォルトの名無しさん:2012/12/29(土) 22:01:00.06
>>267
それは配列は先頭のポインタが格納されているからという理解でよいでしょうか??
270デフォルトの名無しさん:2012/12/29(土) 22:03:29.29
>>269
配列にはポインタなど格納されていない
mojiretsu はポインタに変換出来て
その値は配列の先頭アドレス (&mojiretsu[0]) になるというだけ
271デフォルトの名無しさん:2012/12/29(土) 22:06:22.13
>>270
理解しました!ありがとうございます!
272デフォルトの名無しさん:2012/12/31(月) 15:19:47.08
class CObject {
public:
 virtual CObject* GetPtr(void) const {return this;}
};

↑のようなクラスを作ってコンパイルすると
「error C2440: 'return' : 'const CObject *const ' から 'CObject *' に変換できません。」とエラーになってしまいます
constメンバ関数の中でメンバに対する変更は行えないのは知ってますが
メンバに対する変更をしているのではなく、ただポインターを返そうとしているだけなのになぜエラーになるのでしょう?
273デフォルトの名無しさん:2012/12/31(月) 15:36:21.58
virtual CObject* const GetPtr(void)
274デフォルトの名無しさん:2012/12/31(月) 15:40:08.36
constをそこにつけると関数中のthisがconst Type*型になる?しかないよな
試しに
virtual const CObject* GetPtr(void) const{return this;}
にしたら通った
275デフォルトの名無しさん:2012/12/31(月) 18:50:45.94
本当だ・・・const CObject*にしたり、(CObject*)thisにしたりしたら通った
constメンバ関数は戻り値もconstってことなんですかね
276デフォルトの名無しさん:2013/01/01(火) 00:20:46.76
(CObject*)this はまずいだろう。
277デフォルトの名無しさん:2013/01/01(火) 11:50:04.46
void* が4バイトの環境で、まずポインタが保持するアドレス値を8バイトの整数値に
reinterpret_castして、その値をもう一度ポインタにreinterpret_castした場合、そのポインタは
元の通りの動作をしてくれるのでしょうか?
278デフォルトの名無しさん:2013/01/01(火) 12:22:06.40
ポインタサイズの整数型にreinterpret_castしてから
8バイト値に入れればいいと思うぞ
279デフォルトの名無しさん:2013/01/01(火) 12:23:23.34
そもそも8バイト整数値にする理由とはなんぞや
intptr_t型が使えるならそれ使っとけ
280デフォルトの名無しさん:2013/01/01(火) 12:23:55.21
無ければ似たような物作っとけ
281デフォルトの名無しさん:2013/01/01(火) 13:29:54.32
整数にする意図は何だ?
282デフォルトの名無しさん:2013/01/01(火) 13:45:25.74
チートコードぐらいじゃね
283デフォルトの名無しさん:2013/01/01(火) 14:27:33.78
汎用パラメータに渡すとかはよくある話
284デフォルトの名無しさん:2013/01/01(火) 20:54:31.38
mapのキーにstringを使うと文字列を比較するせいで数値のキーに比べて時間がかかるということで
今までは文字列を適当にハッシュ化してからインサートしてたんですが、
unordered_mapなら理論上1回しか比較しないからstringのままでも十分速いんでしょうか?
285デフォルトの名無しさん:2013/01/01(火) 21:46:24.42
ハッシュ化だけだとハッシュが被ったら困るぞ >
286デフォルトの名無しさん:2013/01/01(火) 21:49:21.67
途中で書き込んじゃった

ハッシュ化だけだとハッシュが被ったら困るぞ >map
ハッシュが被った場合は string を使って管理しないと

unordered_map はまさにハッシュで管理するので string のままでも速いし
ハッシュが被った場合に string の比較もやってくれる
287デフォルトの名無しさん:2013/01/01(火) 23:15:52.46
>>286
なんと素晴らしい!ありがとうございました
288デフォルトの名無しさん:2013/01/02(水) 00:42:10.92
今年はhoge厨が来ませんように。
289デフォルトの名無しさん:2013/01/02(水) 03:06:43.03
NG掛けて放っておいたらいいんじゃないですかねぇ・・・
290デフォルトの名無しさん:2013/01/02(水) 04:17:54.86
hogehoge
291デフォルトの名無しさん:2013/01/02(水) 05:40:29.32
NGの使い方を知らないプログラマなんていませんよね・・・ホゲホゲ・・・
292デフォルトの名無しさん:2013/01/02(水) 18:05:49.36
異なるデータ型を返すようなインターフェースは作成可能なんでしょうか?例えば

class IHelper {
public:
virtual ~IHelper() {}

template <class T>
virtual T Get() = 0;
};

template <class T>
class TypeHelper : public IHelper {
private:
T val;

public:
virtual ~TypeHelper() {}

template <class T>
virtual T Get() {return val;}
};

//main
std::vector<IHelper*> test;
test.pushback(new TypeHelper<int>);
test.pushback(new TypeHelper<float>);

int i = test.at(0)->Get();
float f = test.at(1)->Get();

このようなことはできるのでしょうか?
293デフォルトの名無しさん:2013/01/02(水) 18:48:41.29
メンバ関数テンプレートは virtual にはできない
boost::any のような variant 型を使うしかないね
294デフォルトの名無しさん:2013/01/02(水) 19:09:09.07
>>293
ありがとうございます。やはりスクリプトは偉大ですね
295デフォルトの名無しさん:2013/01/02(水) 19:18:59.08
引数を void* にして引数から返すという手もある
そのままでは危険なので一工夫あった方がいいが
296デフォルトの名無しさん:2013/01/02(水) 22:45:19.91
用途によってはCRTPが適用できる
297デフォルトの名無しさん:2013/01/03(木) 02:12:22.20
GUIを使って簡単なプログラムを組んでいたのですが、行き詰ったので助けてください
ウィンドウにウィジェット(入力BOX、ボタン)を組み込んで、
それらを使いボタンを押すたびに円が表示されるようにします。
さらに、その円をそれぞれキーボードなどで動かしたいと思っていたのですが
解決法が見つかりませんでした。ヒントでもいいので教えてください。
ヘッダファイルなどはこちらのものを使っています↓(主にgarph,point,window)
http://www.stroustrup.com/Programming/Graphics/
298デフォルトの名無しさん:2013/01/03(木) 02:17:39.38
宣言時に未定義なクラスAでも
void Func(class A& a);
みたいな宣言はできますよね
このクラスがnamespace Nのなかだった場合は同宣言すべきですか?
void Func(class N::A& a);
のようなことがやりたいのですが
using namespaceすべき?
299デフォルトの名無しさん:2013/01/03(木) 02:19:24.10
namespace N
{
class A
}

void Func( N::A &a );
300デフォルトの名無しさん:2013/01/03(木) 02:31:33.56
なるほど
運用的には、namespaceとその中の宣言だけのファイルとかあったほうが良いのですかね
まあ運用は自分でも考えてみます
ありがとうございます
301297:2013/01/03(木) 03:15:16.73
自己解決しました!
circle型のヴェクタ使えばできるんですね
302デフォルトの名無しさん:2013/01/03(木) 14:11:16.10
他のクラスの関数を呼ぶと
「静的でないメンバー参照は特定のオブジェクトを基準とする相対参照である必要があります」
と怒られます。どうすればいいのでしょうか
ConfLoader.cpp:
#include "ConfLoader.h"

class ConfLoader {
char *Get (char *name) {
こーど
}
}

ConfLoader.h:
class ConfLoader {
public:
char *Get (char *name)
}

Display.h:
#include "ConfLoader.h"

Display.cpp:
#include "Display.h"

void Display::updateNotify() {
Lang::Get("文字列");
}
303デフォルトの名無しさん:2013/01/03(木) 14:57:06.17
Langってどこから出てきたん
304デフォルトの名無しさん:2013/01/03(木) 16:13:14.56
すみません
"class ConfLoader"でなく
"class Lang"です。
305デフォルトの名無しさん:2013/01/03(木) 17:10:57.10
静的メソッドじゃないものを、静的に呼び出されても・・・
そのGet()関数は静的関数じゃない

なんらかのインスタンスを使って呼び出さないと

Lang lang;
lang.Get("もじれつ");
または
Lang lang = new Lang;
lang->Get("もじれつ");
306デフォルトの名無しさん:2013/01/03(木) 17:19:12.52
あるいは逆に関数を静的にするとか
ConfLoader.h:
class ConfLoader {
public:
static char *Get (char *name)
}
ただしこれは「こーど」の内容次第
(非staticメンバ変数依存)では不可能
307デフォルトの名無しさん:2013/01/03(木) 22:53:25.91
なるほど
分かりました
308デフォルトの名無しさん:2013/01/04(金) 01:15:30.49
こんな感じのコードを書いてみたのですが、ループに入っても円が動いてくれません
動く前に次のループに入ってしまっているのでしょうか?


//ループしている間a(x座標),b(y座標)ずつ円が動く
char c;
while(1){
cin >> c;
if(c == 'q') {gui_main();} //ループを抜ける
circle.move(a,b);
}
309デフォルトの名無しさん:2013/01/04(金) 01:26:05.84
cinからの読み込みは入力があるまで待つからそこで止まってるhogehoge
310デフォルトの名無しさん:2013/01/04(金) 01:44:47.03
うああああああああああああああああああ
これは恥ずかしい
どうやって抜けようか・・・
311デフォルトの名無しさん:2013/01/04(金) 02:01:33.03
peek()で確認すればいいんじゃね
312デフォルトの名無しさん:2013/01/04(金) 02:06:26.68
peek()関数は初めて聞きました、こういう事でしょうか?

char c;
while(1){
c=cin.peek();
if(c == 'q') {gui_main();} //ループを抜ける
circle.move(a,b);
}
313312:2013/01/04(金) 03:29:47.52
本当はデバッグの丸投げはしたくなかったのですが、自分の限界を感じてきました。
http://codepad.org/rQHVgGeZ
初めてc++でコードを書いたので見にくいかもしれませんが、このコードのおかしい部分を教えてくれませんか?
分かっている問題点は「円が動いてくれない」と「ループから抜けて制御をgui_main()に戻らない」の二点です。
fltkとヘッダファイルはこちらを使いました
http://www.stroustrup.com/Programming/Graphics/
314デフォルトの名無しさん:2013/01/04(金) 04:17:10.17
>>312
これでいいんじゃね?
#include <conio.h>
while(1){
if(_kbhit() && (_getch() == 'q')) {gui_main();} //ループを抜ける
circle.move(a,b);
}
315デフォルトの名無しさん:2013/01/04(金) 09:59:04.75
たしかpeekも入力があるまで待つはずだけど
もし標準準拠の範囲でやるのなら11使ってマルチスレッド化だな
316デフォルトの名無しさん:2013/01/04(金) 11:00:42.42
>>315
> たしかpeekも入力があるまで待つはずだけど

仕様見てないけど、peek という名前で入力待ちするような設計をする奴はアホだと思う。
317312:2013/01/04(金) 15:04:25.02
>>314
レスありがとうございます!
ですがstart()に入った瞬間プログラムが終了してしまいます。
入力待ちの方は問題ないと思うので、別のところにミスがあるようです。。
318デフォルトの名無しさん:2013/01/04(金) 16:50:41.35
>>313
よくわからんけど
236行目は
 > int main()
 > try{
 > …
じゃなくて
 > int main()
 > {
 > try{
 > …
じゃないかな
319デフォルトの名無しさん:2013/01/04(金) 18:06:18.18
>>318 そこはどっちでもいいだろ。
320317:2013/01/04(金) 19:29:49.32
例外が発生し処理されて、プログラムが終了されている可能性があるので例外処理の部分を一旦削除してみました
http://codepad.org/I2kQrJae
ヘッダファイルに問題がある(?)ようで、こんがエラーが出てきました
どういうことなのでしょうかさっぱり分かりません
http://www.dotup.org/uploda/www.dotup.org3809134.png.html
321デフォルトの名無しさん:2013/01/04(金) 19:32:17.08
例外処理中に例外でたらどないしはります?
322デフォルトの名無しさん:2013/01/04(金) 19:39:24.03
>134 vdx_dy[n] = dxy + vdx_dy[n];
ここで落ちてるようで
ソース見たところvdx_dyにpushしてるところが一つもないんだが
そりゃランタイムエラー出るわな、要素が一つもないのにアクセスしようとしてるんだから
323デフォルトの名無しさん:2013/01/04(金) 20:44:08.12
>>313
LinuxでFLTKの最新stableのv1.3.2を入れて、ディレクトリに
> ttp://www.stroustrup.com/Programming/Graphics/
を置いて
> ttp://codepad.org/rQHVgGeZ
を313.cppで置いてmakeしたけど通りません。

313.cpp: In constructor ‘Coulomb_window::Coulomb_window(Point, int, int, const String&)’:
313.cpp:63:3: error: class ‘Coulomb_window’ does not have any field named ‘Window’
313.cpp:76:13: error: ‘attach’ was not declared in this scope
313.cpp: In member function ‘void Coulomb_window::add()’:
313.cpp:157:21: error: ‘attach’ was not declared in this scope
313.cpp:161:21: error: ‘attach’ was not declared in this scope
313.cpp:164:9: error: ‘redraw’ was not declared in this scope
313.cpp: In member function ‘void Coulomb_window::quit()’:
313.cpp:210:7: error: ‘hide’ was not declared in this scope
313.cpp: In member function ‘void Coulomb_window::reset()’:
313.cpp:226:22: error: ‘detach’ was not declared in this scope

と出ます。
どうすれば良いのでしょう。
324デフォルトの名無しさん:2013/01/04(金) 20:46:15.05
makeてまだ現役なの?
もっと使いやすい新しいの無いんですか?
325デフォルトの名無しさん:2013/01/04(金) 20:49:40.15
makeはなんか馴染めなかったgccから直打ちしてたよ
326デフォルトの名無しさん:2013/01/04(金) 20:59:36.34
分割コンパイル時にはmakeかその類は必須
327デフォルトの名無しさん:2013/01/04(金) 21:12:41.24
>>320
配列の添字が範囲外になっているという例外
328デフォルトの名無しさん:2013/01/04(金) 21:16:13.86
標準の例外クラスってコピーするときに例外安全なんですか?
329デフォルトの名無しさん:2013/01/04(金) 21:21:55.45
>>328
そりゃそうだ。

例外安全でないってことは例外発生時にメモリリークやデータ破壊が
起こるってことで、そんなの実装がバグってるってことだろ。

具体的に何を疑ってるのかよくわかんないけど。
330317:2013/01/04(金) 21:30:08.27
>>321
それは困るので戻しておきます

>>322
やっぱりですか、これはだめですよね
それも含めて少し訂正してstart()関数を使ってみたところ
ボタンが固まっているのでループはしているようです、ただ円は動いてくれませんでした。。。
http://codepad.org/h9QogXXh

>>327
配列の添字を変えたりはしていませんし、pushのし過ぎというのも考えにくですね
原因は何なのでしょう。。だんだんと動いてくれないのが不思議になってきました。
引き続きランタイムエラーを探してみます
331デフォルトの名無しさん:2013/01/04(金) 21:32:54.46
>>330
ステップ実行しろい
332デフォルトの名無しさん:2013/01/04(金) 21:56:01.24
そもそも FLTK のキー入力処理自体イベントが飛んで来たりするんじゃないの?
よく知らないけど普通の GUI フレームワークならそう。

今の状態なら FLTK で開いたウィンドウじゃなくて
起動したコンソール側でキー叩けば反応するかもね。
333デフォルトの名無しさん:2013/01/04(金) 22:11:41.38
追記。
>分かっている問題点は「円が動いてくれない」と「ループから抜けて制御をgui_main()に戻らない」の二点です。
これ多分同じ問題だと思うけどね。
>ボタンが固まっているのでループはしているようです、ただ円は動いてくれませんでした。。。
ボタンが固まっている=再描画ルーチンとかその辺に処理が回っていない=「円が動いてくれない」&&「ループから抜けて制御をgui_main()に戻らない」
だと思う。

イベント駆動の考え方に慣れてないんだと思うけど、
1) とりあえず1つ円を表示するだけ
2) 1つ円を表示、キー入力がある毎に円が移動
3) 1つ円を表示、キー入力があるまで移動(タイマーイベントとかを使う)
4) 複数の円でできるようにする
とか、ステップ踏んでいく方がいいと思うよ。
334デフォルトの名無しさん:2013/01/04(金) 22:13:50.22
printf で添字をダンプするとかの焼き畑デバッグも
意外と役に立つ
335317:2013/01/04(金) 23:08:17.84
>>331
ステップ実行かなり便利ですね!!くせになりそうです
エラーをどんどん見つけているところです
a,b=0; とするとbだけ初期化されてaはされないんですね。。

>>332
>>333
>>334
その通りでした、ループに入ってすぐにランタイムエラーが出てました
ステップ実行でも無理ならそうしようと思います。
336335:2013/01/05(土) 02:38:35.80
修正したところ、正常に246行目のmove()関数まで動いているようです(数値上では円は移動している)。
http://codepad.org/x6UThpod
ですが、ループ中は全く円は移動してくれません。
ループを'q'で抜けて再びadd()関数で円を追加したり、ウィンドウの大きさを変更したりすると円が瞬間移動します。

>>333さんの方法で書いてみてたところ上と同じような事になりました。
http://codepad.org/GnZHzOVr
最初から円を配置しておいて、startボタンを押すとループに入ります。
ループ中にキーボードの'a'を押すたび右へ少しずつ動くようにしてありますが、ループ中は全く動いてくれません。
そして'q'でループを抜けると一気に右へ'a'を押した分だけ瞬間移動します。

リアルタイムでの描画が出来ていないようです、何かいい方法はありませんか?
337デフォルトの名無しさん:2013/01/05(土) 03:36:17.85
>>336
描画を行なわせるための仕掛けが用意されているはずなので、それを使えばいい。
イベントドリブンなライブラリならイベントフラッシュ、描画エリアの無効化などのキーワードを参考に。
338デフォルトの名無しさん:2013/01/05(土) 09:30:41.31
>335
全然分かってねええええええええええええええええ。
自分でイベント待ちのループを回すという発想をやめよう。他の部分に処理が回らない。
FLTK 良く分からないけどこれで動かない?

struct Coulomb_window :Window{
// 略 ↓追加
public:
int handle(int); // in Fl_Widget
};

void start() {} // とりあえず空にする

// ↓追加
void handle(int e)
{
int ret = 0;
switch (e) {
case FL_FOCUS:
case FL_UNFOCUS:
ret = 1;
break;
case FL_KEYDOWN:
if ( Fl::event_key('a') ) { ret = 1; circle.move(10,0); }
break;
}
return ret || Fl_Window::handle(e);
}

>337
彼は redraw() は呼んでる。なので InvalidateRect() なり RedrawWindow() は多分呼ばれてる。
自分でループを回していてそこから抜けないので WM_PAINT を処理するメッセージループまで処理が戻ってないんだ。
339335:2013/01/05(土) 16:44:17.46
>>338
なるほど、自分でループを作るのではなくてgui自体のループを利用するってことですよね
'a'を押しても円はは動いてくれませんでした。。
widgetの操作には反応するのに、キーボードからの入力には反応しないのでしょうか

fltkで検索してもあまり引っかからないですね、マイナーなのかな
340335:2013/01/05(土) 16:57:44.02
ちなみにstart()を
void start()
{
circle.move(10,0);
redraw();
};
にするとうまく動きました。
どしても起点がwidgetにあるようです、キーボー入力起点もできればいいのですが。。
なんだか目標の無限ループが遠のいていくようです
341デフォルトの名無しさん:2013/01/05(土) 17:28:09.51
>340
ごめん。俺が redraw() つけるの忘れてた。
if ( Fl::event_key('a') ) { ret = 1; circle.move(10,0); redraw(); }
でどうだろう。
うちの環境(Cygwin)だと、なぜか Fl::event_key('A') にしないと動かなかったんでその辺も試してみて。
342デフォルトの名無しさん:2013/01/05(土) 17:40:55.81
んで、これが start 押したら動き始めるコード。>>333 の 3)
ttp://ideone.com/KXvQw1
343デフォルトの名無しさん:2013/01/05(土) 17:46:35.50
説明書くの忘れてた。0.1 秒毎に timeout_callback が呼ばれるんで

this_->circle.move(10,0); this_->redraw();

の部分を適宜書き換えてくれ。動きを止めたければ repeat_timeout を呼ばないようにすればいい。
344335:2013/01/05(土) 17:53:06.67
おぉぉぉぉぉぉぉぉ!!
動きました、ありがとうございます!
これからいろいろ試してみます
345323:2013/01/05(土) 17:55:40.18
かたや>>323はいまだにビルドが通らないのであった・・
346335:2013/01/05(土) 22:39:50.09
>>343
元のプログラムに>>342を組み込もうと思ったのですが、Fl_系,timeout系の関数の使い方が分かりません。。
検索してもなかなか引っかからないのですが、使い方が乗っているHPなどはありませんか?
もう一つ
int handle(int)
void start()
timeout_callback(void*)
この3つはどう関連しているのでしょうか?
ステップ実行を使っても今並べた順番で動いているということしか分かりませんでした。。
347デフォルトの名無しさん:2013/01/05(土) 23:15:46.02
>346
FLTK の公式サイトのドキュメント http://www.fltk.org/doc-1.3/index.html 見ても分からないってことだよねぇ。
Fl_Gl_Window になってるけど基本的な考え方は↓が参考になると思う。FL::add_timeout でぐぐったら 7 番目に出てきた。
http://www.slis.tsukuba.ac.jp/~fujis/cgi-bin/wiki/index.php?Fl_Gl_Window%A4%C7%A4%CE%A5%A2%A5%CB%A5%E1%A1%BC%A5%B7%A5%E7%A5%F3

>int handle(int)
>void start()
>timeout_callback(void*)
>この3つはどう関連しているのでしょうか?
まず、CUI のプログラムを書いてるときは自分が次々に関数を呼び出していく形だけど、
GUI のプログラムでは次々に自分が呼び出される形になるってのはまず押さえといてくれ。

handle() は他のと無関係で関連してない。キー入力に対応する分のコードを消し忘れてただけ。
FLTK 内部のループに入ってるときに何かイベントが発生したら都度呼び出される。
キー入力だけじゃなくてマウスの移動とかクリックでも呼び出されてる。

で他の2つについて。
start() の中の
Fl::add_timeout(0.1, timeout_callback, static_cast<void*>(this));
によって、0.1 秒後に timeout_callback() を呼び出して欲しい、と FLTK に指示している。

で、(FLTK 内部のループから) timeout_callback() が呼び出されたときに移動処理と再描画を指示した上で、
Fl::repeat_timeout(0.1, timeout_callback, static_cast<void*>(this_));
で、再度 0.1 秒後に timeout_callback() を呼び出して欲しい、と指定している。
以下繰り返し。

handle() も start() も timeout_callback() も FLTK 内部のループから呼び出されるってことは同じだね。
348335:2013/01/06(日) 02:53:34.63
>>347
ありがとうございます、納得しました!

どうやらtimeout_callback(void*) が静的らしく非静的のCalculation_of_powervoid()が中で使えないようなので
repeat_timeoutでコールバックして使おう思ったのですが
「型"void(Coulomb_window::*)(void *pp)"の引数は型"Fl_Timeout_Handler"のパラメータと互換性がありません」
とエラーが出ます。
void Coulomb_window::Calculation_of_power(void* pp)
{} //ppは使用していない

と修正し
void timeout_callback(void* ptr)
{
  void* p;
  Fl::repeat_timeout(0.1, Coulomb_window::Calculation_of_power, p); //Coulomb_window部分にエラー

  Coulomb_window* this_ = static_cast<Coulomb_window*>(ptr);
  this_->circle.move(10,0); this_->redraw();
  Fl::repeat_timeout(0.1, timeout_callback, static_cast<void*>(this_));
}
と書いています。エラーの原因は何でしょうか?

ちなみにビルドエラーでは
「 error C3867: 'Coulomb_window::Calculation_of_power': 関数呼び出しには引数リストがありません。メンバーへのポインターを作成するために '&Coulomb_window::Calculation_of_power' を使用してください」
と表示されます。
349348:2013/01/06(日) 02:57:41.89
>非静的のCalculation_of_powervoid()ではなく非静的のCalculation_of_power()です
Calculation_of_power()の中には非静的なものが含まれているのでstaticは使えませんでした
350デフォルトの名無しさん:2013/01/06(日) 04:20:11.77
メンバ関数ポインタだけあっても適切に呼び出すことはできない
どうにかしてstaticな関数にしないと無理
351デフォルトの名無しさん:2013/01/06(日) 08:39:02.76
>>348
もちっと考えようや。
circle だって非静的メンバでしょ。
きっとそうなろだろうと思って this_ ポインタ用意したのに。
this_->Calculation_of_power(); の形式で呼んでください。
念のために言っとくと this ポインタみたいに使うってことで、
this_ という名前にしただけで this とは別物だしそういう
機能が有るわけでもないからね。
352デフォルトの名無しさん:2013/01/06(日) 08:57:31.53
>まず、CUI のプログラムを書いてるときは自分が次々に関数を呼び出していく形だけど、
>GUI のプログラムでは次々に自分が呼び出される形になるってのはまず押さえといてくれ。

って書いちゃったから混乱させちゃったかもしれないけど、必ず FLTK 側から呼びださせなければ
いけないわけではなくて、必要な処理だけして十分短い時間で処理を戻せばいいです。
んで、Calculation_of_power() って毎回やらせたい移動処理なんだから move の代わりに、

void timeout_callback(void* ptr)
{
  Coulomb_window* this_ = static_cast<Coulomb_window*>(ptr);
// 毎回必要な処理があったらこの辺に追加していく
// 非静的メンバ関数1つにまとめておいてそれ呼び出した方が見通しがいいかもしれないけど。
  this_->Calculation_of_power();
  this_->redraw();
  Fl::repeat_timeout(0.1, timeout_callback, static_cast<void*>(this_));
}

ってすればいいです。

ちなみに、この静的、非静的の問題というか枠組みは cb_start() と start() でも発生していて、
FLTK からは静的な cb_start() を呼んでもらって、cb_start() から非静的な start() を呼び出してる。
reference_to<Coulomb_window>(pw). にあたるのが this_-> とその前のキャスト。
参照とポインタという違いはあるけどね。
353デフォルトの名無しさん:2013/01/06(日) 09:06:27.06
バカにはムリ
354デフォルトの名無しさん:2013/01/06(日) 09:11:05.29
>348
あー、あと忘れてた。

>どうやらtimeout_callback(void*) が静的らしく非静的のCalculation_of_powervoid()が中で使えないようなので

現状の timeout_callback() は非静的メンバ関数ですらなくて通常の関数。フリー関数と呼んだりもする。
ただし friend 指定をつけて無理矢理 private メンバをアクセスできるようにしたりしてる。
それなら静的メンバ関数にする方が自然だし friend 指定も消えるので(一般的に friend は避けるべき)、

  friend void timeout_callback(void*);

  static void timeout_callback(void*);

void timeout_callback(void* ptr)

void Coulomb_window::timeout_callback(void* ptr)

とした方が良かった。名前も cb_timeout にした方が他と揃っていいかもね。
cb_ は callback (FLTK から呼び出される)の意味で付けてるはず。
355デフォルトの名無しさん:2013/01/06(日) 09:18:50.44
いい加減ウザイわ
356デフォルトの名無しさん:2013/01/06(日) 09:22:57.82
そうだよなーそこまでやるなら基礎から勉強しなおして自分でやれって感じだよなー

まあお人好しな暇人が多くて良かったね、と
357349:2013/01/06(日) 09:24:57.59
すいません、もうこのスレには現れません、勉強しなおしてきます

もし今後この質問を私のふりをしてぶり返す人がいてもそれは
私の偽物ですので無視してください。

ご迷惑をお掛けしました
358349:2013/01/06(日) 09:49:29.48
↑こいつは私の偽物です
間に受けないでください
359348:2013/01/06(日) 14:13:45.18
>>354
今考えればどうしてこうthis_->Calculation_of_power(); しなかったのが不思議です
おかげでほとんど完成しました、親切にありがとうございました

もっと勉強が必要ですね、初心者になれたらまたきます
なんだかF10とF11のテンキーが欲しくなってきました
360デフォルトの名無しさん:2013/01/07(月) 04:00:31.98
C++です。

ある関数の成否を判断する必要があって、かつ例外を出すほど大袈裟ではないとき、
どういう作りにするのがスタンダードでしょうか。

特に理由がない限り、成功時は戻り値にマジックナンバーで0を、失敗時は-1を返すくらいで問題ないでしょうか。
361デフォルトの名無しさん:2013/01/07(月) 04:08:54.49
>>360
C++さんに物申す。
特に理由がない限り、成功時は戻り値にtrueを、失敗時はfalseを返すくらいでも問題ないかと。
362デフォルトの名無しさん:2013/01/07(月) 04:09:25.38
boost::optionalを返す
363デフォルトの名無しさん:2013/01/07(月) 04:20:38.34
>>361-362
ありがとう。
364デフォルトの名無しさん:2013/01/07(月) 07:21:02.02
0/-1ってBASICかよ
365デフォルトの名無しさん:2013/01/07(月) 09:23:21.82
DXライブラリがそれだから、使う場合に合わせたくなる気持ちはわかる
366デフォルトの名無しさん:2013/01/07(月) 10:02:35.64
>>365
お前か宿題スレにありもしない問題を書いたのは
367デフォルトの名無しさん:2013/01/07(月) 15:26:59.89
BASICやDXライブラリは分からんけど、Cの標準関数で失敗時に非0(特に負の数)を返すものはチラホラあった気がする。
368デフォルトの名無しさん:2013/01/07(月) 17:57:12.68
main の戻り値とか?
369デフォルトの名無しさん:2013/01/07(月) 19:28:20.08
成功時に0、失敗時に非0というものは
標準関数じゃmainとsystemくらいじゃね
OSのAPIじゃよくあるけど
370デフォルトの名無しさん:2013/01/07(月) 19:40:09.58
戻り値の論理が反転しちまった一部の関数には
揃える用のインライン関数
371デフォルトの名無しさん:2013/01/07(月) 19:42:22.88
つかなんでCはmainが成功0なのに非0がtrueなんだろう。
372デフォルトの名無しさん:2013/01/07(月) 19:52:49.83
>>371
シェルの都合
373デフォルトの名無しさん:2013/01/07(月) 21:03:39.70
>>369
最近少し増えた。
C11のerrno_tとC++11のerror_codeクラス(それぞれ別物)。
374デフォルトの名無しさん:2013/01/07(月) 21:05:17.85
shared_ptrはSTLコンテナ用に比較演算子がget()で生ポインタの値を渡してから
比較するようにオーバーロードされているようですが、
unordered_mapのハッシュ化には対応しているでしょうか?
375デフォルトの名無しさん:2013/01/07(月) 21:13:24.76
失敗が複数ある場合は0を正常にするのが普通
376デフォルトの名無しさん:2013/01/07(月) 21:19:58.85
0 なんていうマジックナンバーを直接使うからいけない
#define SUCCESS 0 とでもしておいて
return SUCCESS; とか if (result == SUCCESS) って書けば不自然さはない
main の戻り値も return EXIT_SUCCESS; って書いとけ
377デフォルトの名無しさん:2013/01/07(月) 21:32:29.80
なんちゃら_OK とかよく定義されてるな
378デフォルトの名無しさん:2013/01/07(月) 21:32:51.66
C++で#define使うなよ
379デフォルトの名無しさん:2013/01/07(月) 21:35:37.71
Cでも使うなら許す
380374:2013/01/07(月) 21:58:29.88
すみませんunique_ptrとshared_ptrが対応してるのは確認できました
weak_ptrはリファレンスにもないみたいですね
381デフォルトの名無しさん:2013/01/07(月) 21:58:33.39
auto宣言が用意された今ならテンプレートクラスでboolを取り出すべきだよ
382デフォルトの名無しさん:2013/01/07(月) 22:38:37.28
>>380
今はstd::mapとowner_lessで我慢するしかない。
383デフォルトの名無しさん:2013/01/07(月) 23:30:25.62
標準でサポートされてるから知らんが
ハッシュくらいいくらでも指定すればええんでないの
384デフォルトの名無しさん:2013/01/07(月) 23:30:58.07
×標準でサポートされてるから知らんが
○標準でサポートされてるかは知らんが
385デフォルトの名無しさん:2013/01/07(月) 23:47:01.52
class Hoge
{
public:
  explicit Hoge(int v) : v_(v) {}
  explicit Hoge(const std::string& v) : v_(v) {}
private:
  boost::variant<int, std::string> v_;
};
こういうようなクラスがあって、
Hoge a(...);
if (a == "foo" || 4545 > a) ...;
というようにやりたいんですが、比較演算子を1個ずつ対応する型ごとに全部実装しないとダメですか?
386デフォルトの名無しさん:2013/01/08(火) 00:06:32.26
他には

const boost::variant<int, std::string>& v() const { return v_; }

を作るくらいしか
387デフォルトの名無しさん:2013/01/08(火) 01:02:57.91
>>385
4545 > Hoge("bar") なんてのをどう定義するつもり?
388デフォルトの名無しさん:2013/01/08(火) 01:03:38.86
>>385
荒らすな基地害
389デフォルトの名無しさん:2013/01/08(火) 01:06:09.40
>>385
比較の仕様によってはテンプレート使って数を減らすこととかは出来るでしょ
390デフォルトの名無しさん:2013/01/08(火) 01:12:28.25
>>389
荒らしの相手をしないでください。
391デフォルトの名無しさん:2013/01/08(火) 13:19:42.10
>>385
Hoge
Hoge
Hoge






















こいつ本物のクズだろw
392デフォルトの名無しさん:2013/01/08(火) 22:40:34.16
std::make_pairのリファレンスを眺めていたところ

template <class T1,class T2>
pair<T1,T2> make_pair (T1 x, T2 y)
{
return ( pair<T1,T2>(x,y) ); //←※
}

※の部分で生成したペアを直接返していますが、つまりこれは
T1かT2にshared_ptを指定すると事故ってしまう場合があるということでしょうか?
393デフォルトの名無しさん:2013/01/08(火) 22:47:18.59
なぜshared_ptrが関係するんだ
394デフォルトの名無しさん:2013/01/08(火) 22:48:10.52
pairのメンバ変数が参照持ちならな
395デフォルトの名無しさん:2013/01/08(火) 22:58:43.61
ありがとうございます。
make_pair( "TestID", shared_ptr<int>(new int(10)) );
あくまでこのようなnewしたポインタで一時的なshared_ptrを生成するのが危ないのであって
この使い方はmake_pairに限ったことではなかったのですね。失礼いたしました。
396デフォルトの名無しさん:2013/01/08(火) 23:11:34.96
>>395
その例だと他で例外発生しないから大丈夫だと思うけど、
一般的には

shared_ptr<int> p(new int(10));

と構築してから

make_pair("TestID", p);

とすれば何の危険も無い
397デフォルトの名無しさん:2013/01/09(水) 00:35:53.74
shared_ptr<int>(new int(10)) という文脈は全て
make_shared<int> (10) に置き換えれば安全
398デフォルトの名無しさん:2013/01/09(水) 01:49:42.04
あるクラスのソースファイルには自身のクラスのヘッダファイルのみを
インクルードするのが原則らしいですが、そのヘッダファイル内では
必要のない情報(例えばソース側でしか使用しないヘルパ関数や、
ヘッダファイルで使うインターフェイスクラスのImplを記述したファイルなど)
はソースとヘッダのどちら側でインクルードするのが望ましいのでしょうか?

インターフェイスの実装部分などは隠蔽・分散の概念からするとソース側で
インクルードしたいのですが、原則がノドにつっかえる気分です
399デフォルトの名無しさん:2013/01/09(水) 02:16:58.94
>>398
何その原則初めて聞いたんだが
普通にソースで必要なヘッダをインクルードしろよ
実装の都合でヘッダファイルにインクルード晒すとかないわ
400デフォルトの名無しさん:2013/01/09(水) 02:18:27.28
>>398
宣言と定義の違いを正しく認識できたらまたきてください。
401デフォルトの名無しさん:2013/01/09(水) 03:49:19.07
>>399>>400
マジっすかありがとう!隠蔽しまくるわ
402デフォルトの名無しさん:2013/01/09(水) 08:02:06.67
>>398
その原則が業務上の縛りならそれを護るのが筋だがな。
403デフォルトの名無しさん:2013/01/09(水) 20:02:18.06
そんな意味の無いどころかむしろ危険な縛りなんて糞喰らえだ
404デフォルトの名無しさん:2013/01/09(水) 22:34:43.92
>>402
害しかないような縛りは改善しろよ。それが「業務」ならなおさら。
405デフォルトの名無しさん:2013/01/10(木) 12:44:16.52
おかしな規約作るバカは排除する
こっちが死なないためにはそうするしかない
406デフォルトの名無しさん:2013/01/10(木) 16:34:16.87
ヘッダファイルで思い出した。
外部に公開する必要はないんだけど、定数やら宣言やらを切り分けて1ファイルにしたい時ってどうしてる?

一切禁止のところから、ヘッダファイル名に一定のルールを付ける(拡張子等)ところ、
あるいは、あまり気にせずに普通に外部用ヘッダに書いてしまうとか、色々あると思うけれど。
407デフォルトの名無しさん:2013/01/10(木) 17:20:07.61
#ifdef LIBHOGE_PRIVATE
非公開な定義とか;
#endif
みたいにするのが最近の俺のやり方
408デフォルトの名無しさん:2013/01/10(木) 18:01:03.46
>>406
翻訳単位に閉じてるって意味なら、ヘッダには書かない
モジュール/ライブラリプライベートって意味なら、公開ヘッダには書かず
非公開ヘッダに書く(両者を分けるのが重要)
409デフォルトの名無しさん:2013/01/10(木) 18:26:28.48
shared_ptrのスコープについての質問です(各種includeや名前空間のstdなどは省いてます)

class Test
{
private:
shared_ptr<int> m_spInt;

public:
Test() { m_spInt.reset( new int); } //コンストラクタ
int Get() { return (*m_spInt); }
void Set(int val) { (*m_spInt) = val; }
};

int main(void)
{
Test test;
test.Set(100); //※

cout << test.Get() <<endl;

return 0;
}

これを実行すると※の行で「test.m_spIntは空だよ」と怒られてしまうのですが
↑のようにメンバ関数内(ここではコンストラクタ)でshared_ptrに対しresetで
newした実態を渡しても意味がないのでしょうか?(関数から抜ける時に消滅してしまうのでしょうか)
410デフォルトの名無しさん:2013/01/10(木) 18:38:28.17
vc2012
別に怒られんが
もっと環境を晒せよ
411デフォルトの名無しさん:2013/01/10(木) 18:47:33.84
>>410
どうもありがとう、
そしてご指摘どおりコンストラクタの記述ミスってただけでした、本当に申し訳すみません・・・
412406:2013/01/10(木) 18:53:33.61
>>407
上手いなそれ。
foo.cppに対するfoo.hのような、正しいところからインクルードする際の手間は増えるけど、
コンピュータ側からも人間の目でも、インクルードミスをミスだと判断できるのは良いよね。

>>408
非公開ヘッダにするとき、何かやってることはある?
413デフォルトの名無しさん:2013/01/10(木) 19:26:40.44
質問させてください。

struct Events
{
int numEvents; ///< number of Events in array
Event* events[2]; ///< event pointer array, variable size
};

使用しているライブラリの中に上記のような構造体が定義されていたのですが、
この構造体のメンバのeventsにはEvent*のポインタがいくつでも入れられるのでしょうか。
///< event pointer array, variable size
とあるのでそのように見えるのですが、
では events[2] の 2は一体なんなのだろうと思っています。
いくつでも可ではなく、2個までしか入れられないのでしょうか。

ご教示いただけると嬉しいです。
414デフォルトの名無しさん:2013/01/10(木) 19:28:55.90
>>406
どうしても公開せざるを得ない場合は
boost の detail 名前空間みたいなのを作って
内部使用用ですよと分かるようにする
415デフォルトの名無しさん:2013/01/10(木) 19:38:10.02
配列のポインタじゃなくて
ポインタの配列だから
ふつうに予想すればリンクどリスト
416413:2013/01/10(木) 19:53:54.35
レスありがとうございます。
連結リストとのことですが、それと2という数字はどう関わりがあるのでしょうか
events[2]
で連結リスト表すといった慣習があるのでしょうか??
417デフォルトの名無しさん:2013/01/10(木) 19:57:17.46
俺は聞いたことないな
どうしても知りたければライブラリ製作者に直接聞けばいい
418デフォルトの名無しさん:2013/01/10(木) 20:00:18.41
前の要素と次の要素で2つだろ
419デフォルトの名無しさん:2013/01/10(木) 20:09:07.38
   ↓
Events の中に Event があるんだから前後はなくない?
beginとendだと思われる
420デフォルトの名無しさん:2013/01/10(木) 20:11:37.37
なるほど
配列って言ってるしそうかもな
421デフォルトの名無しさん:2013/01/10(木) 20:14:54.10
p->event[x]のxを代えるだけでシフト演算子を使いたりヤヤこしい事せず
上向き下向きを一つのコードで扱えるから
422デフォルトの名無しさん:2013/01/10(木) 21:06:05.85
英語に慣れてない身としては複数形のsを付けるのと付けないのとで
定義が違うなんて見分け付かないから止めて欲しいが
メリケンにとっては日常的に重要な部分だから目に付くんかな
423デフォルトの名無しさん:2013/01/10(木) 21:51:45.71
それは単に粗忽なだけ
424デフォルトの名無しさん:2013/01/10(木) 21:57:48.60
>>422
そんなことないとおもうよ
英米人でもまちがえるだろう
425デフォルトの名無しさん:2013/01/10(木) 22:43:51.76
sはコンテナを表すサフィックス、くらいには思ってるけど、
それの有無で別の変数になるような命名は避けるようにしてる
426デフォルトの名無しさん:2013/01/10(木) 23:10:42.60
別の変数になっても型が大きく違うから
間違えてもコンパイルエラーになる
427デフォルトの名無しさん:2013/01/11(金) 01:44:47.35
コンテナのコンテナとかになるとよくわからなくなるからsでごまかすのやめて
428デフォルトの名無しさん:2013/01/11(金) 01:52:21.44
ベクトル計算とかGPU計算はfortranとC系列どちらが得意ですか?
物理シミュレーションで伸び悩んでるので習得したいのですがどっちでやるべきでしょう
429デフォルトの名無しさん:2013/01/11(金) 02:31:00.66
>>428
ライブラリによると思うが、、Cを覚えたらFORTRANを覚えるのは苦にならないが、
FORTRANを覚えてもCを覚えるのに応用があまり利かないので、
Cを覚えるべきだと思う。
430デフォルトの名無しさん:2013/01/11(金) 07:04:08.22
fortran は並列化コンパイラが発達してるから
ベクトル計算は得意
GPUやるならC系列だろうな
431デフォルトの名無しさん:2013/01/11(金) 10:07:54.91
ベクトル計算つってもそういうスパコンないと無意味じゃね?
432デフォルトの名無しさん:2013/01/11(金) 11:57:07.85
gnuな環境で、素敵な乱数を教えて
433デフォルトの名無しさん:2013/01/11(金) 14:02:47.49
error: '素敵' が未定義です。
434デフォルトの名無しさん:2013/01/11(金) 19:52:01.53
>>431
今時ベクトル演算もできないPCとかあり得へん
435デフォルトの名無しさん:2013/01/11(金) 19:53:38.72
でもgpuはfloatしか使えませんし…
436デフォルトの名無しさん:2013/01/11(金) 20:11:28.50
floatあれば充分だろ
437デフォルトの名無しさん:2013/01/11(金) 20:12:16.70
物理じゃ精度が足りない事がままある
9桁くらい精度が必要だったり
438デフォルトの名無しさん:2013/01/12(土) 14:19:04.87
物理やるなら128bit欲しくなるよ
スケールを工夫すればdoubleでもなんとかなるケースが多いけど
439デフォルトの名無しさん:2013/01/12(土) 18:48:29.06
※128bit:39桁
440デフォルトの名無しさん:2013/01/13(日) 00:48:19.11
Fortranだと128bit浮動小数点数があったと思うけど
それが使える環境だとC/C++でもlong doubleが128bitなのかな
441デフォルトの名無しさん:2013/01/13(日) 01:31:52.31
>>440
言語仕様的にfloat≦double≦long doubleなのがな……
しかも、http://www.wdic.org/w/TECH/long%20double読む限りでは128bitなlong doubleはレアなようだし
「自力で実装しろや」ってことだねこれは
442デフォルトの名無しさん:2013/01/13(日) 01:33:44.53
CPU自体が128bit浮動小数点数をサポートしてないと遅そうだな
443デフォルトの名無しさん:2013/01/13(日) 02:49:43.57
std::vectorとstd::dequeで、dequeの方が機能豊富で便利なのですが、
vectorは何のために残されているのでしょうか?
444デフォルトの名無しさん:2013/01/13(日) 02:53:49.80
高速でリニアだから
445デフォルトの名無しさん:2013/01/13(日) 02:53:51.92
dequeは連続性が保証されないじゃん
配列を受け取るポインタ引数に渡せない
446デフォルトの名無しさん:2013/01/13(日) 09:45:31.21
>>440
最近のGCCは__float128で4倍精度使える
printfとかがまだ対応していないけど
447デフォルトの名無しさん:2013/01/13(日) 12:21:52.07
C++の本読んでたらイベントマネージャとリスナーを作れってあって
さらにインターネットで調べたらどうもJavaの概念らしいんですが
これって結局、各クラスが相互にアクセスできるような手段を
グローバル空間に用意することと同じようなものなんですよね?
448デフォルトの名無しさん:2013/01/13(日) 12:42:40.03
publicイコールグローバルならそういうことだろう
449デフォルトの名無しさん:2013/01/13(日) 12:48:53.49
先頭への挿入・削除を行わない場合はvectorの方が効率がいい。
450デフォルトの名無しさん:2013/01/13(日) 12:59:17.83
>>447
お互いの参照を持つだけ
451デフォルトの名無しさん:2013/01/13(日) 13:16:11.40
>>447
なんて本?おもしろそうだな
452デフォルトの名無しさん:2013/01/13(日) 14:54:59.02
C++の継承に関する質問です
class cBase {
public:
virtual ~cBase(){};

int func1(int num1, int num2) {
return num1+num2;
}
};

class cSub : public cBase {
public:
int func1(int num1, int num2) {
return cBase::func1(num1,num2)+num1;
}
};

以上のようなテストクラスを作ったのですがclass cSubのfunc1で使用している
cBase::func1という呼び出しは正しい記述なのでしょうか?
コンパイルや結果は正しく動いているようですが、好ましくないといった感じなのでしょうか
宜しくお願い致します
453デフォルトの名無しさん:2013/01/13(日) 15:04:56.55
正しいよ
454デフォルトの名無しさん:2013/01/13(日) 15:12:41.41
あまり見ない記述方法だったので不安だったのですが正しいのですね
ありがとうございました
455デフォルトの名無しさん:2013/01/14(月) 03:16:11.13
あまりlong doubleは多用するなってことなんかな?
二次配列上?でとある数値計算を行なっているんだけど、一部の列がnanになってしまう
456デフォルトの名無しさん:2013/01/14(月) 10:21:16.60
>>454
よく見る記述方法だよ
457デフォルトの名無しさん:2013/01/14(月) 11:09:44.08
>>455
> 一部の列がnanになってしまう

普通にバグでしょ。
ちゃんと見直しなよ。

>>456
よく見ると言うほどには使わないと思う。
日常的に書いてるというなら、むしろ設計を疑ったほうが良いかも。
458デフォルトの名無しさん:2013/01/14(月) 11:16:04.28
>>457
まあ確かにあまり使わないけどw
入門書に普通に書いてあるレベルには見るという事
459デフォルトの名無しさん:2013/01/14(月) 11:21:09.85
「オーバーライドするときは最初に親の呼び出す」ってルールは危ういんだよな
それするくらいなら継承じゃなくて包含にして呼び出し順序を固定しろって話だったよな
460デフォルトの名無しさん:2013/01/14(月) 11:57:54.64
親の処理をある程度知ってないとダメだからな
少なくとも、子の処理の前に実行すべきか、後に実行すべきか、
それとも途中で実行すべきかくらいは
あまりやりたくはない
461デフォルトの名無しさん:2013/01/14(月) 12:03:55.56
というかオーバーライド自体に
継承関係の上から下までよく知ってるor良くルールを決めてある
のどちらかが必要になるという欠点があるのであって
べつに親の仮装関数を呼び出すことに限った話ではない
462デフォルトの名無しさん:2013/01/14(月) 16:55:23.82
この例はオーバーライドじゃない
463デフォルトの名無しさん:2013/01/14(月) 20:44:30.85
オーバードライブだよ
464デフォルトの名無しさん:2013/01/14(月) 20:50:20.98
映画版オズの魔法使いの曲?
465デフォルトの名無しさん:2013/01/14(月) 20:51:43.21
>>457
おk見なおしてみるとするよ〜
466デフォルトの名無しさん:2013/01/15(火) 01:08:40.27
//hoge.h
template<typename T>class Hoge
{
public:
static T m_hoge;
Hoge(T hoge){m_hoge = hoge;}
};
template class Hoge<Fuga>;
template<> Fuga Hoge<Fuga>::m_hoge = (Fuga)0;

このようなテンプレートクラスの具体化を含むヘッダを複数のcppでインクルードして
ビルドしたところ、duplicate symbolで弾かれてしまいました
gcc4.2
各cppファイルではm_hogeにアクセスする必要があるのですが
どうすべきでしょうか
467デフォルトの名無しさん:2013/01/15(火) 02:13:48.69
hoge.hをincludeするcppのどれか一つに
template class Hoge<Fuga>;
template<> Fuga Hoge<Fuga>::m_hoge = (Fuga)0;
を書く
468デフォルトの名無しさん:2013/01/15(火) 02:23:13.86
>>466
hoge基地害はさっさと消えろ
469デフォルトの名無しさん:2013/01/15(火) 02:29:16.57
hoge piyo fugaで発狂するキチガイをからかうのが楽しい
470デフォルトの名無しさん:2013/01/15(火) 03:38:47.96
からかってるだけなのにマジレスしちゃってる>>467哀れwwwwwwww
471デフォルトの名無しさん:2013/01/15(火) 04:08:12.23
>>467-468
荒らしにレスするのやめてくれない?
荒らしにレスしてる時点でお前らも立派な荒らしだよ。
迷惑でしかないんだけど、親には他人に迷惑かけなさいって教育受けたのかね?
472デフォルトの名無しさん:2013/01/15(火) 04:56:48.20
>>466←はい、いつもの「Hogeを覚える暇はあっても必要なことは調べられないゴミクズ」入りました〜



こいつ本当に頭おかしいんじゃね

どうせ自覚ないだろ、基地害の典型
473デフォルトの名無しさん:2013/01/15(火) 04:57:47.23
foo, bar, baz, qux, quux, foobar
474デフォルトの名無しさん:2013/01/15(火) 06:17:36.37
>>466
template<typename T,typename D=void>class Hoge{〜};
template<typename D>Hoge<Fuga,D>::m_hoge=(Fuga)0;
475デフォルトの名無しさん:2013/01/15(火) 08:45:31.98
>>467
ありがとうございます。
cppファイルに記述してしまうとほかのcppファイルからアクセス出来ないと思ったのですが
できているようです。不思議

>>474
{~}は全部書くということでしょうか?Dで更にテンプレートっぽく見せるのが味噌なのでしょうか
476デフォルトの名無しさん:2013/01/15(火) 10:31:32.47
Hoge is cool.
477デフォルトの名無しさん:2013/01/15(火) 10:34:02.35
HogewwwwwwwwHogewwwwwwwww
ほらHoge厨かかってこいよwwwwへいへいwwwwHogewwww
478デフォルトの名無しさん:2013/01/15(火) 10:39:41.40
No Hoge. No Life.
479デフォルトの名無しさん:2013/01/15(火) 10:48:20.12
質問者が Hoge とか使うな。
Hoge ってのは目上の人間が、教える時に使う言葉だ。
将棋で玉を目上の対戦者に譲るのと同じ。
自分で使うなど、失礼な態度を見せておいて教えを乞うなどあってはならない。
質問者は頭を悩ませて例にあった名前を考えろ。それが礼儀だ。
480デフォルトの名無しさん:2013/01/15(火) 12:47:59.16
答えられない質問が来ると必ずhogeって書くなって言う奴が出てくるよね
481デフォルトの名無しさん:2013/01/15(火) 13:49:57.89
>>475
お前が友達だと勘違いしてる動機に何て思われてるか知ってる?
氏ねばいいのにって思われてるよ
それを言わないのはゴミに氏ねって言っただけで自殺教唆で逮捕されるのが嫌だからだよ
482デフォルトの名無しさん:2013/01/15(火) 14:41:12.95
>475=歩く恥さらし
483デフォルトの名無しさん:2013/01/15(火) 14:53:00.81
hoge厨が来る度に荒れるのにはうんざりだ。
484デフォルトの名無しさん:2013/01/15(火) 15:20:32.56
>>475も結局底辺の基地害だったな

今回もHoge厨にまともな奴はいないという説を強化する結果と相成りました
485デフォルトの名無しさん:2013/01/15(火) 16:38:07.40
>>475
荒らしって楽しいの?
486デフォルトの名無しさん:2013/01/15(火) 16:49:13.26
それわほげほげだな
487デフォルトの名無しさん:2013/01/15(火) 16:52:03.04
>>466
お前みたいな池沼にプログラミングは無理
何でfooじゃなくてhogeなの?
無意識なんだろうけど、無意識で手間を4/3にするとかありえないよ
そういう無意識はコーディングにも現れるよ
そういう池沼は9000行で済むはずコードが12000行になっても平気なんだよ
知識や経験が足りないタイプの馬鹿は努力でどうにかなるけど、
お前みたいに感覚から腐ってるタイプの馬鹿は救いようがない
488デフォルトの名無しさん:2013/01/15(火) 16:52:28.10
>>485
hoge?hogehogeho?
hogehhohogehhohogehogehoge?
489デフォルトの名無しさん:2013/01/15(火) 17:16:23.19
レスが飛びまくってるけど>>477,>>486を見ると
どうやらhoge厨が来たみたいだな
490デフォルトの名無しさん:2013/01/15(火) 18:10:22.71
>>475
いい加減ウザがられてるのに気付け。
お前リアルでもウザがられてるだろ。
491デフォルトの名無しさん:2013/01/15(火) 19:34:35.78
>>475
テンプレートっぽくというと言うか、一般的にはこんな感じ
ttp://www.google.co.jp/search?q=%EF%BC%A8%EF%BD%8F%EF%BD%87%EF%BD%85%E5%8E%A8%E3%82%A6%E3%82%B6%E3%81%84
492デフォルトの名無しさん:2013/01/15(火) 20:38:54.48
ホゲホゲマシーン もーれーすー!
493デフォルトの名無しさん:2013/01/15(火) 20:48:54.99
>>466
ks乙
494デフォルトの名無しさん:2013/01/15(火) 21:34:18.29
ほげぇ
ほげぇ



頭悪そう
495デフォルトの名無しさん:2013/01/15(火) 22:25:08.92
Romancing HoGe
496デフォルトの名無しさん:2013/01/15(火) 23:46:49.85
ホーゲと発音するのね
497デフォルトの名無しさん:2013/01/16(水) 03:32:13.76
>>475
何の疑問も持たずにHOGEとか使えるってのそれ精神異常だから。
498デフォルトの名無しさん:2013/01/16(水) 07:31:47.57
きゃりぃほげほげ
499デフォルトの名無しさん:2013/01/16(水) 09:27:02.63
hogeはハゲにhageを見られると困るからごまかしたもの
500デフォルトの名無しさん:2013/01/16(水) 09:52:51.23
ああなるほどそういうことか
何でそんなにファビヨってるのかと思ってた
501デフォルトの名無しさん:2013/01/16(水) 09:57:52.10
"デベロップ"とか"デバッグ"とかも省略語作るとき注意した方がいい
502デフォルトの名無しさん:2013/01/16(水) 10:22:54.43
struct Hoge { bool isCool() const { return true; } };
503デフォルトの名無しさん:2013/01/16(水) 12:04:52.14
今socket入門して勉強してるんですが
httpとかpop3みたいな通信はもしかしてsocket.hには無いんですか?
どうすれば出来るようになるんでしょうか?
504デフォルトの名無しさん:2013/01/16(水) 12:46:01.96
>>503
ソケット使って自分で作るか、適当なライブラリ拾ってくる
505デフォルトの名無しさん:2013/01/16(水) 13:51:31.03
TCPソケットを開いたら自分でHTTPをしゃべるだけ。
506デフォルトの名無しさん:2013/01/16(水) 13:56:28.40
SSLみたいな暗号化も自分で書くんですか?
めちゃくちゃ大変じゃないですか
507デフォルトの名無しさん:2013/01/16(水) 14:02:25.02
今FILE入門して勉強してるんですが
エクセルとかビットマップみたいなファイルの読み書きはもしかしてstdio.hには無いんですか?
どうすれば出来るようになるんでしょうか?
508デフォルトの名無しさん:2013/01/16(水) 14:07:41.28
>>506
そのとおり
どのプログラムにもめちゃくちゃ大変な同じ処理を書くのが面倒なので
誰かがライブラリを作ってそれを利用する
509デフォルトの名無しさん:2013/01/16(水) 14:11:59.97
>>507
ファイル構造を調べて、それに沿って読み書き
あるいは、ライブラリを探すか変換ツールを探す
510デフォルトの名無しさん:2013/01/16(水) 14:19:41.51
応用レベルのライブラリは標準化などしないというのがC以来のポリシーだから
511デフォルトの名無しさん:2013/01/16(水) 15:52:17.93
>>510
C以来もへったくれも、>507はCのことだろ。
512デフォルトの名無しさん:2013/01/16(水) 16:06:20.60
> ファイルの読み書き
は、標準ライブラリにあるでしょ
内部のフォーマットは言語に依存してないような
513デフォルトの名無しさん:2013/01/16(水) 16:21:13.64
>>511
そうだねスマン
そのポリシーはC++でも受け継がれてるからJavaとかC#からC++に入って来た奴が
戸惑うパターンをよく見掛けるもので
514デフォルトの名無しさん:2013/01/16(水) 21:12:43.17
関数一発で解決したいガキはHSPでもやってろよ
HSPはそういう低能のための開発ツールなんだから
515デフォルトの名無しさん:2013/01/16(水) 21:25:41.72
Javaのクラスライブラリはそのへんすごく割り切っていて、
HttpURLConnectionでできないことをやる場合はソケット作って
自分でプロトコル処理を書かないといけない。
516デフォルトの名無しさん:2013/01/16(水) 21:53:32.15
未だに高レベルは外部ライブラリーとか時代遅れだな
517デフォルトの名無しさん:2013/01/16(水) 21:58:24.52
外部ライブラリーのお世話になってるのも知らんのがいるな
518デフォルトの名無しさん:2013/01/16(水) 22:00:50.86
boostでいいやん標準ライブラリ
519デフォルトの名無しさん:2013/01/16(水) 22:42:53.95
スクリプト全否定のゴミは置いとくとして
>>507
API……いやそれだとstdio.hじゃないな
ファイルフォーマットをググるとかして理解してから自作するor他ライブラリ利用でおk
>>512
ただのバイナリって話だからな……
バイト単位でデータを作れる必要はあるが、それだけだしな
520デフォルトの名無しさん:2013/01/18(金) 14:57:10.50
msdnのloadLibrary関数を使って
全く同じdllのインスタンスを複数並列に読み込ませたいと思い、
単純に loadLibary(L"path");を複数回繰り返してみたのですが、
参照カウントが増えるだけで全部同じインスタンスを指してしまっているようなのです

http://rarara.cafe.coocan.jp/cgi-bin/lng/vc/vclng.cgi?print+200903/09030026.txt
おそらくここに書いてある通りだと思います。

dllの元は同じだが別のインスタンスを複数同時に保持するうまいやり方って何かないでしょうか??
521520:2013/01/18(金) 16:00:05.11
追記です。

上記のURLには別のプロセスから呼べば別インスタンスに出来るとかいてあるのですが、
わざわざ別プロセスにしないでなんとかする方法がないものかと思っています。

loadLibrary以外の関数で別インスタンスでのdll読み込みができるものとかはないでしょうか
522デフォルトの名無しさん:2013/01/18(金) 16:17:53.55
そもそもdllを複数読み込んで何がしたいんだ?
523デフォルトの名無しさん:2013/01/18(金) 16:22:29.31
お手軽スレッドセーフが出来るとでも思ってるんじゃないの?
524デフォルトの名無しさん:2013/01/18(金) 16:24:07.67
rundll32を複数起動させてプロセス間通信とかできないことはないだろうけど
絶対やりたいこととずれてる気がするわ
525デフォルトの名無しさん:2013/01/18(金) 17:34:36.10
LoadLibrary を LoadLibrary に頼らず自力でやってる記事をどっかで見た覚えがあるが
それをやればいいんじゃね
526デフォルトの名無しさん:2013/01/18(金) 17:36:54.52
同じ関数名が存在できるの?
527デフォルトの名無しさん:2013/01/18(金) 17:40:01.33
当たり前だ
528デフォルトの名無しさん:2013/01/18(金) 18:07:23.86
DLLをコピーして別々に読み込めばできる、ってリンク先にも書いてあるか。
でも、何をしたいのか教えてくれれば、もっと穏当な解決方法を提示できると思う。
529520:2013/01/18(金) 19:24:40.65
レス有難うございます

>でも、何をしたいのか教えてくれれば、もっと穏当な解決方法を提示できると思う。

やりたいことは、
とあるGUIプログラムを複数立ちあげたいというものです。
dllを呼び出すホストアプリケーション側でloadLibrary(gui.dll)
をしたあとに、gui.dllのmainEntry()関数を呼ぶと、
自動的にGUI.dllのウィンドウがが立ち上がります。

これを複数回繰り返した時、繰り返した数分のウィンドウが立ち上がる動作を期待しているわけですが、
loadLibaryを使うと同じウィンドウが毎回アクティブになるだけという問題です。(複数ウィンドウにならない)

解決方法教えていただけると嬉しいです。
530デフォルトの名無しさん:2013/01/18(金) 19:30:58.79
gui.dll側を修正できないんなら複数プロセス立ち上げるしかないだろ
531デフォルトの名無しさん:2013/01/19(土) 00:49:52.92
某所でネトゲ複アカ立ち上げチートの質問してた人っぽいな
532デフォルトの名無しさん:2013/01/19(土) 01:13:00.16
ホストアプリケーションが複数立ち上がらないとどうにもならんだろ。
533デフォルトの名無しさん:2013/01/20(日) 15:03:50.55
Linuxというか、MacOSXの10.8.2で、Xcodeを使ってC言語でプログラミングしています。
シリアルポートと通信をするプログラムを作っているのですが、
最初から躓いています。。。

http://ideone.com/HGOYeo

シリアルポートを開くopen関数が帰ってこないのです。
出力は program startだけ表示されて、それ以降は表示されません。

terminalで
ls /dev/tty.*
で確認してみると、確かにシリアルポートでtty.usbmodemfa1311は存在しています。

何か原因は考えられますでしょうか?
534デフォルトの名無しさん:2013/01/20(日) 16:28:34.08
ちなみにUSBに接続しているのはArduino UNOです。
Arduino IDEのプログラムは終了させた状態で接続しています。
535デフォルトの名無しさん:2013/01/20(日) 16:44:50.68
すみません、今色々いじっててわかった情報ですが、
ずっとopenのところでプログラムが止まっているのですが、
ArduinoのUSBを引っこ抜いたらopenから返って来ました。
ただ、もちろんopenの関数はエラーで返って来てます。。。
536デフォルトの名無しさん:2013/01/20(日) 21:38:17.60
こっちで聞いた方がいいと思うよ

Arduino初心者熱烈大歓迎質問スレ part8
http://uni.2ch.net/test/read.cgi/denki/1352019283/
537デフォルトの名無しさん:2013/01/21(月) 13:48:22.41
>>533
>シリアルポートを開くopen関数が帰ってこないのです。
>出力は program startだけ表示されて、それ以降は表示されません。
まさかと思うが、実はopen()からは帰ってきていて
printf()の出力がバッファリングされていて見えていないだけ、なんてことはないよな。
538デフォルトの名無しさん:2013/01/21(月) 16:48:53.15
>>533
使い方が正しいのなら、O_NONBLOCK&nbsp;フラグを付けて使うデバイスかもしれない
539デフォルトの名無しさん:2013/01/21(月) 20:30:58.39
C++で引数でwchar_tってところに'a'とL'a'が両方入るのですが同じなんでしょうか?
540デフォルトの名無しさん:2013/01/21(月) 20:46:30.87
違うよ
541デフォルトの名無しさん:2013/01/21(月) 22:43:34.99
printf()がprintf(笑)に見える
542デフォルトの名無しさん:2013/01/21(月) 23:03:35.94
コパイルエラーになりそうですね
543デフォルトの名無しさん:2013/01/22(火) 00:00:26.43
>>539
たいていの処理系では 'a' と L'a' の値は同じだろうから事実上同じだけど、厳密に言えば異なる。
'a' は char型、L'a' は wchar_t型 で、char から wchar_t へは自動的に整数の昇格が行われるので
引数として渡せる。
544デフォルトの名無しさん:2013/01/22(火) 01:10:13.12
>>539
どういうこと?

>>543
そういう事なら違うよ
キャストだけでなく内部リテラルの扱いも考えなくちゃならんよ
exec-charsetのオプション一つで乙っちゃう
545デフォルトの名無しさん:2013/01/22(火) 01:34:14.39
>>544
void f(wchar_t c);
こういう関数を
f('a');
と呼び出してもエラーにならないってことだろう。
546デフォルトの名無しさん:2013/01/22(火) 02:03:47.55
それはオーパロードだろ
547デフォルトの名無しさん:2013/01/22(火) 02:09:16.61
なんか気が抜けそうな名前ですね
548デフォルトの名無しさん:2013/01/22(火) 02:16:55.68
char* と wchar_t* ならともかく、char と wchar_t のオーバーロードなんて恐ろしいもの作るなw
549デフォルトの名無しさん:2013/01/22(火) 07:21:03.89
>>546
オーバーロードじゃないじゃん

>>548
別にいいじゃん
むしろ>>545みたいな事にならないよう、オーバーロードしてあった方が安全に見える
550デフォルトの名無しさん:2013/01/22(火) 07:54:46.13
めくるめく文字コード障害マラソン走の世界へようこそ
551デフォルトの名無しさん:2013/01/22(火) 12:37:57.31
cpp固有の話か迷ったんだけど聞いて良いかな
グローバル変数を使うと、ローカル変数とグローバル変数のキャッシュ載せ替えが頻発して、プログラムが遅くなる
↑これは正解?
552デフォルトの名無しさん:2013/01/22(火) 12:42:54.84
グローバルだろうがローカルだろうがたくさん変数使えば乗せ換えが発生するがな
553デフォルトの名無しさん:2013/01/22(火) 12:45:59.61
>>546
baka
554デフォルトの名無しさん:2013/01/22(火) 12:46:19.87
アドレスが離れてるからキャッシュミスは起こりやすいはず
555デフォルトの名無しさん:2013/01/22(火) 13:12:26.64
キャッシュミスよりアルゴリズムの善し悪しによる性能差のほうが
ぜんぜん大きいから安心しろ。
556デフォルトの名無しさん:2013/01/22(火) 13:57:25.32
cpp固有ってどこが
557デフォルトの名無しさん:2013/01/22(火) 21:50:54.38
>>556
ん?
558デフォルトの名無しさん:2013/01/22(火) 21:53:47.44
キャッシュミス率が増えるとは聞くけど
全ては実測だろ?
559デフォルトの名無しさん:2013/01/23(水) 01:15:01.64
理論は実験を裏付ける為の道具であって
主役は実験である

理論と現実が異なるならば現実を優先させるべきだ
cf. アキレスと亀
560デフォルトの名無しさん:2013/01/23(水) 01:41:32.66
キャッシュミスが増えたから何だと言うのか
561デフォルトの名無しさん:2013/01/23(水) 01:44:58.27
キャッシュ効率の悪いコードは、場合によってはキャッシュ効率の良い同等のコードなら数分の処理が、何時間かけても終わらないなんてこともある
562デフォルトの名無しさん:2013/01/23(水) 02:13:33.48
キャッシュ効率なんて一般論における実装では誤差にもならんぞ。
効率の悪いコードはキャッシュ効率などではなくアルゴリズムまたは
実装方法そのものの効率が悪いだけだ。
563デフォルトの名無しさん:2013/01/23(水) 02:15:31.39
>>562
そう思うんならそうなんだろう
お前の中ではな
564デフォルトの名無しさん:2013/01/23(水) 02:19:03.14
>>561
じつれいはよ
565デフォルトの名無しさん:2013/01/23(水) 02:24:23.68
実行コードの読み込みが早くなるだけでしょ
逝ってる系はどんだけキャシュメモリ積んでると思ってるんだろう
566デフォルトの名無しさん:2013/01/23(水) 02:32:05.43
CPUにおけるキャッシュの話なら、量を積んでも一定のラインから
極端に効果が低くなることが統計的にわかってきている。
だからプロセスルールが進んでキャッシュを大量に搭載可能でも
巨大なキャッシュにしないのは、コストに比べて効果が低いから。

>>565
コードキャッシュとデータキャッシュがある。最近のCPUではL1が
コードとデータ独立、L2以降が混在になっている。
567デフォルトの名無しさん:2013/01/23(水) 03:05:10.66
キャッシュ効率なんかどうでもいいみたいな意識低いレスしてるやつらはなんのためにC系使ってんだろうな
そんな効率無視の粗悪品しかかけないならままごとみたいなスクリプトでもいじってればいいのに
568デフォルトの名無しさん:2013/01/23(水) 03:09:55.97
キャッシュに頼らないと速度出せないの?
569デフォルトの名無しさん:2013/01/23(水) 03:32:36.06
キャッシュさえ積めば高速になるという迷信を信じている時点で
技術もへったくれもないんだろ。
570デフォルトの名無しさん:2013/01/23(水) 03:55:03.93
char a[1024];

これって1024バイトの物理的に連続したメモリ領域が確保されるって認識でOK?

char a[1024*1024];

メモリが1024*1024バイト以上空いてるのにこれが失敗するのは
連続した領域として確保できなかったからって認識でOK?

それでも確保したかったら
char *a;
a = malloc( 1024*1024 );

でOK?
571デフォルトの名無しさん:2013/01/23(水) 04:04:44.32
はい
572デフォルトの名無しさん:2013/01/23(水) 04:21:37.35
>>570
配列の宣言が失敗するっていうのはどういう状態を想定してるか
知らないけど、普通は無いよ。

アーキテクチャ上の制限で確保できない配列なら、ポインタとして
確保しようとしてもアクセスは保証されない可能性がある。
573デフォルトの名無しさん:2013/01/23(水) 04:22:24.19
vectorを使おう(提案)
574デフォルトの名無しさん:2013/01/23(水) 04:28:05.50
>>572
スタックサイズの制限に引っかかてるだけでしょ。
575デフォルトの名無しさん:2013/01/23(水) 04:40:50.40
>>570
ローカル変数はスタックという領域に確保される。
スタックというのは、(簡単に言うと)プログラムの開始時に確保される領域で、
変数を宣言してもメモリ確保のコストがかからない代わりに容量の制限がある。
VC++だとデフォルトのスタックサイズが1MBだから、スタックから1MB確保することはできない。

malloc() はヒープという領域からメモリを確保する。
メモリ確保のコストがかかる代わりに、容量の制限が緩い。
基本的には(WindowsやLinux環境なら)連続したアドレス空間が空いていれば確保が可能。
1MBの連続したアドレス空間が空いてないということはまずないので、ほとんどの場合は成功する。

でもせっかくC++なんだから、malloc()なんか使わないで、解放し忘れる心配のない方法を使おう。
std::vector<char> a(1024);
std::unique_ptr<char> a(new char[1024 * 1024]);
576デフォルトの名無しさん:2013/01/23(水) 07:19:11.47
>>561
行列演算はそういう傾向あるかもしれないけど
今回の話とはあまり関係がないような
577デフォルトの名無しさん:2013/01/23(水) 07:46:51.11
昔は(Pen2の頃だが)、設定でCPUのキャッシュを無効にできたものだけど、
最近は可能なのかな?

実行時間が10倍くらいになったりして、キャッシュの効果が如実にわかったものだけど。
578デフォルトの名無しさん:2013/01/23(水) 12:00:35.60
アドレスが離れているのとキャッシュヒット率は関係ないだろ。
579デフォルトの名無しさん:2013/01/23(水) 12:43:57.00
最近、UNIX系ばかりでVC++から離れていた。
作りたいものがあって久々にVC++2005・・・警告やエラーメッセージが難解すぎる(汗)。
最近のVC++も同じく難解ですか?
580デフォルトの名無しさん:2013/01/23(水) 12:57:24.90
>>579
「難解な警告やエラーメッセージ」例の一つも出さずに質問とは・・・
581デフォルトの名無しさん:2013/01/23(水) 13:16:14.90
>>578
あるだろ
582デフォルトの名無しさん:2013/01/23(水) 13:34:39.77
>>571-575
あざっす
長年のもやもやがスッキリした

最初にドカッと宣言するとその関数に入った時点で強制終了するけどmallocなら強制終了しない
一応これで動いてるけど、大丈夫なのか?mallocにしたのがよかったのか?それとも偶然か?

といった感じで開発続けてた
vectorが便利だという噂はきいてたのでこれを機に試してみます
583デフォルトの名無しさん:2013/01/23(水) 14:23:57.55
巡回セールスマンに似たNP問題を再帰関数と配列使ってやろうとしたら
行くべき地点が増えるにつれて計算時間が爆上がりしてお手上げ状態です
以前行った場所を記憶しときつつ繰り返し処理になるので配列と再帰を使ったが
もっと効率的な計算方法はないでしょうか?
584デフォルトの名無しさん:2013/01/23(水) 15:11:39.94
>>575
new[]に対してはstd::unique_ptr<T[]>にしないとだめだぞ
585デフォルトの名無しさん:2013/01/23(水) 16:10:08.32
>>583
NP問題に効率的な計算方法とか求めんなよ
近似解法ならともかく
586デフォルトの名無しさん:2013/01/23(水) 19:16:47.67
>>581
論理メモリ上のアドレスが近くても、物理メモリ上がどう配置されるかはわからないだろ。
587デフォルトの名無しさん:2013/01/23(水) 19:55:30.73
ページ単位内なら近い事は保証されるけど
それ以外は保証されない(近いかもしれないし遠いかもしれない)のだから
確率的には近い方がいいだろ
588デフォルトの名無しさん:2013/01/23(水) 20:21:28.26
fortranでもつかえ
589デフォルトの名無しさん:2013/01/23(水) 20:25:46.09
COMMON変数で結局同じ話が出てくるだけだろ
590デフォルトの名無しさん:2013/01/23(水) 20:40:41.81
近いって、32バイトとか64バイト以内しか無意味
591デフォルトの名無しさん:2013/01/23(水) 20:59:54.54
int baka[1];
int i;

for(i=0;1;i++){
&nbsp; &nbsp;baka[i]=1;
}


BAKA
592デフォルトの名無しさん:2013/01/23(水) 21:00:52.98
実体参照使えなくなったのも知らないBAKAがいる
593デフォルトの名無しさん:2013/01/23(水) 21:02:25.65
そもそもページが違えばキャッシュラインも変わる
594デフォルトの名無しさん:2013/01/23(水) 21:41:11.02
二分探索木を実装しているんですが、
下みたいなコードを書いたらコンパイルエラーが出ました。
struct tree {
struct node {
int key, value;
node *left, *right;
} *root;
int find(int key, node *n = root) { /* ... */ }
}
error: invalid use of nonstatic-data member 'tree::root'

今はこれを回避するために
int find(int key, node *n = root) { /* ... */ }
int find(int key) { return find(key, root); }
と、補助関数を作って対応しているのですが、
1つで済ます方法はないでしょうか。

よろしくお願いします。
595デフォルトの名無しさん:2013/01/23(水) 21:44:39.38
メンバ変数はデフォルト引数には使えない仕様だな

そもそも普通はnodeは外に公開しないので
自然と補助関数を作る実装になると思う
596デフォルトの名無しさん:2013/01/23(水) 21:46:36.68
正確には静的でないメンバ変数は、だ
分かってるとは思うけど
597デフォルトの名無しさん:2013/01/23(水) 22:59:34.22
FILEでopenしてfcloseした後にdelete出来ないんですか?
598デフォルトの名無しさん:2013/01/23(水) 23:12:06.31
読み込み専用ファイルなら削除できないだろうから
条件次第というところ
599デフォルトの名無しさん:2013/01/23(水) 23:35:06.46
>>595-596
ありがとうございます。
ずらずらと find, insert, remove, ... と root から再起する関数の
補助関数が並ぶのが美しくなかったので聞いてみたのですが
確かに公開範囲を考えればそうするものですね。
600デフォルトの名無しさん:2013/01/23(水) 23:53:29.67
再帰関数はわりと補助関数作る事が多い
再帰用の引数はあまり公開したくないしね
inline関数にしておけば速度的にも気にすることは無いし
601デフォルトの名無しさん:2013/01/24(木) 00:07:31.92
再帰関数はインライン展開できないだろ
602デフォルトの名無しさん:2013/01/24(木) 00:13:25.14
入り口をinlineにするって事だよ
603デフォルトの名無しさん:2013/01/24(木) 00:15:41.15
>>597
fclose(); した後に、

#include <stdio.h>

int remove(const char *pathname);

で消せないの?
604デフォルトの名無しさん:2013/01/24(木) 00:22:09.87
>>597の書き直しします
FILE *p_file = new FILE();
fopen(省略);
fclose(省略);
delete p_file;
ってやったらいけないんですか?
deleteのところでエラーになります。
605デフォルトの名無しさん:2013/01/24(木) 00:31:04.41
>>604
端折り過ぎで何語かわからんなあ
606デフォルトの名無しさん:2013/01/24(木) 00:50:40.33
>>604
newもdeleteもするな
そんな糞コード捨てろ
607デフォルトの名無しさん:2013/01/24(木) 01:06:49.00
なんでFILEをnewしてんだバカじゃねーの
608デフォルトの名無しさん:2013/01/24(木) 01:22:31.11
上級者になると使えるテクだよ
609デフォルトの名無しさん:2013/01/24(木) 01:23:41.17
FILE *fp;
fp=fopen("hoge.txt","r");
/*なんかの処理*/
fclose(fp);
610デフォルトの名無しさん:2013/01/24(木) 01:27:16.06
>FILE *p_file = new FILE();

この時点でコンパイルエラーになるはず。
611デフォルトの名無しさん:2013/01/24(木) 01:41:19.59
#include<stdio.h>
int main() { FILE *fp = new FILE(); delete fp; return 0; }

これを
g++ -Wall
で何も警告もなくビルド出来たし、実行しても何も問題なかったよ。
612デフォルトの名無しさん:2013/01/24(木) 01:47:31.91
そりゃそうだろ
613デフォルトの名無しさん:2013/01/24(木) 02:02:27.30
>>611
それどこで、教えてもらったの?
614611:2013/01/24(木) 02:05:39.56
>>613
ああ。私、>>604じゃないアルよ
615デフォルトの名無しさん:2013/01/24(木) 02:10:04.67
なるほど、書き方としては、エラーにならんけど
使い方が...
616デフォルトの名無しさん:2013/01/24(木) 02:14:27.00
まともに相手するなよ。

CかC++をちゃんと勉強したなら>>604みたいなの書くわけないし、
勉強している途中だったら>>604みたいなコードにお目にかかることもないだろ?

あるとしたら、ちゃんと勉強しなかった者同士で作っているプログラムにそういうコードがあったか、
釣りだ。
617デフォルトの名無しさん:2013/01/24(木) 05:42:03.85
>>609=基地害
618デフォルトの名無しさん:2013/01/24(木) 07:21:22.23
>>604
こんなのエスパーできるかっ!!
fopenのヘルプを見ろ!
619デフォルトの名無しさん:2013/01/24(木) 07:38:15.92
>>611
VCだとFILEが不完全型だったような気がする
不確かな記憶だが
620デフォルトの名無しさん:2013/01/24(木) 07:39:01.32
fopen/fcloseがalloc/free相当で
fstream::open|constructor/fstream::close|destructorがnew/delete相当
CとC++で資源操作取得の混在はほぼ許されるけど混用は許されないんだよ
621デフォルトの名無しさん:2013/01/24(木) 09:26:51.40
>>620 ハァ?
622デフォルトの名無しさん:2013/01/24(木) 10:52:18.35
>>621
エスパーすると、fopen/fcloseはC/C++両方にある機能、fstreamはC++にしかない機能って言いたいんだと思うよ。
ここでそれを言う意味はわからないけど。
623デフォルトの名無しさん:2013/01/24(木) 11:44:25.75
FILE *fopen(const char *path, const char *mode);
int fclose(FILE *fp);
624デフォルトの名無しさん:2013/01/24(木) 11:53:36.34
CかC++標準でファイルのアクセス権を指定することは出来ないの?
読み込み専用に開いてアクセス権を独占とか
書き込み専用に開いて後続の読み込みアクセスは許可とか
625デフォルトの名無しさん:2013/01/24(木) 11:56:29.90
626デフォルトの名無しさん:2013/01/24(木) 16:59:41.55
規格で想定されているようなシステム環境に何かを期待すんじゃねえ
自分以外のスレッドの存在は想定されてないから排他制御の仕組みなんか標準に無い
627デフォルトの名無しさん:2013/01/24(木) 17:11:49.56
暖房だけでは部屋が暖まらず今は布団をかぶって震えています。
マジで寒くて凍え死にそうです。
今から夜になればさらに気温が下がり、ほんとやばいです。
そこでC/C++が得意な皆さんに質問です。
パソコンはクアッドコアのCPUと670Wの電源を積んでいるので、
これを全力で動かして部屋を暖めたいと思います。
どんなコードなら全力で動かすことができるでしょうか。
よろしくお願いします。
628デフォルトの名無しさん:2013/01/24(木) 17:12:52.44
while(true) ;
629デフォルトの名無しさん:2013/01/24(木) 17:51:16.28
寒いから着る毛布ってやつ買ったよ
630 ◆QZaw55cn4c :2013/01/24(木) 18:48:48.01
>>627
distributed.net
631デフォルトの名無しさん:2013/01/24(木) 22:15:37.85
Cygwin環境で、boostというライブラリを使うファイル一式手に入れ、リンクまで行うmakefileをmakeするとライブラリが見つからないというエラーがでてきてしまいます。(表現あってる?)
指定バージョンのboostをダウンロードして、./bootstrap や./bjam 、./bjam installという手順でビルド、インストールまで成功しましたが、リンクでエラーが起こります。
ライブラリのパスの設定がうまくいってないのかな?やり方教えてください。
ちなみに見つからないのは、
-lboostprogramoption_mtみたいなのや、-lboostregex_mtです。
インストール先は、libboost〜on/ex.aで微妙に違うけど問題ない?
632デフォルトの名無しさん:2013/01/24(木) 22:18:10.19
> CygwinのインストーラでBoostを一緒にインストールできます。
> 「Devel」カテゴリの「boost」と「boost-dev」を選択してください。
633デフォルトの名無しさん:2013/01/24(木) 22:22:25.83
-L /your/boost/lib/path -lboost_xxxxx-mt みたいな感じで。
なお、boost のビルドの仕方によっては -mt だけじゃなくて -lboost_xxxxx-mt-gcc45 みたいにする必要があるかもしれないのでライブラリのファイル名を確認してくれ。
634デフォルトの名無しさん:2013/01/24(木) 23:50:08.22
newでメモリ確保したら、returnする前にかならずdeletする
であってますか?
635デフォルトの名無しさん:2013/01/24(木) 23:59:10.88
newする必要あんのかそれ
巨大バッファならありだが
636デフォルトの名無しさん:2013/01/24(木) 23:59:38.72
ローカル変数にnewしてるなら、その変数の生存期間がその関数内だよ
deleteしないと、メモリリークする
637デフォルトの名無しさん:2013/01/25(金) 00:04:42.48
スマポを使うのがモダンC++
638デフォルトの名無しさん:2013/01/25(金) 00:27:34.29
>>636
newしたブロックとそれを受ける変数は直接関係ねえ。
deleteせずにreturnで返すなんてのはごく普通にやるだろ。
639デフォルトの名無しさん:2013/01/25(金) 00:29:15.78
なるほど、そういう場合もあるね
640631:2013/01/25(金) 00:31:18.65
>>632
includeで良いもの、ビルド必須があるらしく、programoptionなどは、
ビルドしないといけないとネットにあった。
インストーラから入れたものでもOKですか?試してみたいと思います。
>>633
makefileにあるg++コマンドのオプションのことでしょうか。
makefileいじる必要ないと思っていたのですが、いじることも考えなけ
ればいけないでしょうか。オプションは、-lboost_programoption-mtなどあり
実際(usr/local/include/lib?うるおぼえ)は、libboostprogramoption.a
というのありました。意味不明かもですが、心当たりあったらお願いします。
641デフォルトの名無しさん:2013/01/25(金) 00:40:27.36
>>639
ローカル変数にnewして、他に渡さず、関数内でdeleteするのって
巨大バッファを確保する時くらいしか意味が無い
しかもそれすら普通vector使うし

newはreturnしたりメンバ変数に保持したりしてなんぼやで
642デフォルトの名無しさん:2013/01/25(金) 00:43:27.48
c++はGUI系でちょっとやったぐらいだから
お作法みたいなのはよー知らんのよね
643デフォルトの名無しさん:2013/01/25(金) 04:17:36.75
配列のアドレスの配列を作りたいのですがどうしたらいいですか

int *cp_0 , *cp_1 , *cp_2;

と宣言しているのを、一つにまとめたいのです
cp_0〜cp_2についてはmallocで必要なぶん領域を確保しますが、最初は確保するサイズも決まってません

int cp[3];

みたいな感じでまとめてしまいたいのです
また、この例ではポインタを3つ固定で宣言していますが、可変にしたいです

int cp;

みたいに宣言して、可変な配列のアドレスの配列にしたいです
例えばcp[2]が3番目の配列の先頭のアドレスを指すのが理想です
644デフォルトの名無しさん:2013/01/25(金) 04:19:00.74
int** cp = new int[3];
645デフォルトの名無しさん:2013/01/25(金) 04:20:42.43
ミスった
int** cp = new int*[3]; ね
646643:2013/01/25(金) 04:22:59.57
>>644-645
ありがとうこざいます
647デフォルトの名無しさん:2013/01/25(金) 05:25:18.51
>>643
ttp://ideone.com/D4sWTm

char* だけど、こんな感じで・・
648デフォルトの名無しさん:2013/01/25(金) 06:22:55.29
>>643
他の人も言ってるポインタへのポインタを覚えるよろし。
基礎はぐぐって勉強して、最終的にはこれのいずれか→http://d.hatena.ne.jp/tondol/20090713/1247426321
649 ◆QZaw55cn4c :2013/01/25(金) 06:39:56.68
>>648
>キモくなる
>マジキチな
>若干キモい
これ日本語?意味がわからない
650デフォルトの名無しさん:2013/01/25(金) 07:26:28.08
ポインタへのポインタなど何の特殊な事もないのにみんな怖がり過ぎー
typedef int* intp_t; と置いて考えてポインタ以外の型と使い方を比べれば
きっと一体何を悩んでいたのだろうと思うこと請け合い
651デフォルトの名無しさん:2013/01/25(金) 07:39:58.56
constが絡むと少しややこしいルールがあるし
そこんとこがCとC++で仕様が異なるが
二次元配列を動的確保する分には問題は無いな
652デフォルトの名無しさん:2013/01/25(金) 07:53:42.99
*が3つくらいから、設計を見直したくなってくる
653デフォルトの名無しさん:2013/01/25(金) 08:06:54.73
>>645
配列 new するぐらいなら std::vector 使えよ。
std::vectpr<int*> cp(3);
654デフォルトの名無しさん:2013/01/25(金) 08:34:26.84
配列で確保して構造把握してメタればポインタ変数なんてnewで受け取る一個で十分。
655デフォルトの名無しさん:2013/01/25(金) 10:58:14.50
>各行の要素数が違うマジキチなデータ構造を実現したいならこれしかない。
お前がそう思うのならそうなんだろうよ。お前の中ではな。
つーか、「各行の要素数が違う」のならその要素数を保持する配列も必要になるのだが、
それを考慮していない時点で論外。
656デフォルトの名無しさん:2013/01/25(金) 12:52:05.01
ヘビーメタる
657デフォルトの名無しさん:2013/01/25(金) 15:50:28.25
CとC++どっちが学習量おおいですか?
C++を勉強する場合、Cの知識は役に立ちますか?
658デフォルトの名無しさん:2013/01/25(金) 16:57:35.47
>>657
後者です。
はい。
659デフォルトの名無しさん:2013/01/25(金) 21:03:07.92
>>653
(vectorのvectorじゃ)いかんのか?
660デフォルトの名無しさん:2013/01/25(金) 21:44:46.20
vectorでひとまとめにバッファを確保して
vector<int*>で各行のアドレスを保持すれば
メモリの確保が2回で済んで良い
661デフォルトの名無しさん:2013/01/25(金) 23:33:29.33
>>659 いいよ。
>>660 メモリの確保を減らさないといけない理由が特になければそんな面倒なことはしなくてよい。
662デフォルトの名無しさん:2013/01/26(土) 00:23:45.90
vectorでひとまとめにバッファを確保して
インデックスを自分で作ればいいんだよ
行列演算だと常套手段だ
663デフォルトの名無しさん:2013/01/26(土) 01:59:24.27
long *data;
long *index;

//3つの配列を作成
//1つ当たりの配列の長さは、12、8、16byte

data = (long*)malloc( sizeof( long ) * ( 12 + 8 + 16 ) );
index = (long*)malloc( sizeof( long ) * 3 );

&index[0] = &data[0];
&index[1] = &data[12];
&index[2] = &data[12+8];
664デフォルトの名無しさん:2013/01/26(土) 02:06:21.20
>>663
long *data;
long **index;
data = (long *) malloc(sizeof(long) * (12 + 8 + 16));
index = (long **) malloc(sizeof(long *) * 3);
index[0] = &data[0];
index[1] = &data[12];
index[2] = &data[12 + 8];
665デフォルトの名無しさん:2013/01/26(土) 02:13:11.31
>1つ当たりの配列の長さは、12、8、16byte

48
32
64
バイトだろ
666デフォルトの名無しさん:2013/01/26(土) 03:07:49.13
>>664
見せられたら理解できるけど
自力でそれを書けない

一度見てしまったから全く同一の状況なら自力で書けるけど
ちょっと違う状況だと書ける気がしない

どうしたもんか
667デフォルトの名無しさん:2013/01/26(土) 03:18:27.40
>>666
いきなりコーディングしない。
紙にメモリイメージを描いて、理解できたらコーディング。
668デフォルトの名無しさん:2013/01/26(土) 03:22:45.28
ポインタのポインタとか全部順番にtypedefしておけ。

typedef long* pLong;
typedef pLong* ppLong;

参照とかconstとか混乱しなくてすむ。
669デフォルトの名無しさん:2013/01/26(土) 09:01:08.65
>>666
long *data;
int *index;
data = malloc(sizeof(long) * (12 + 8 + 16));
index = malloc(sizeof(int) * 3);
index[0] = 0;
index[1] = 12;
index[2] = 12 + 8;

data[index[0] + i] = x;
data[index[1] + j] = y;
data[index[2] + k] = z;

とやってる事は大して変わらない
怖がり過ぎてるだけ
670デフォルトの名無しさん:2013/01/26(土) 09:17:43.84
>>666
std::vector<std::vector<int> > v(3);
v[0].resize(12);
v[1].resize(8);
v[2].resize(16);

メモリとかにきつい要件が無いならこれでいい。
自身の無いやつが malloc() なんかに手を出すべきじゃない。
671デフォルトの名無しさん:2013/01/26(土) 13:48:17.16
char a[100];
strcpy(a, 'hoge');

あらかじめ、こんな風に文字列が入っているケツに書式文字列を追加したいです。

char b;
char c[10];
sprintf(c, "%02X", b);
strcat(a, c);

こんな風が一般的だろうと思いますけど、代わりに

char b;
sprintf(&a[strlen(a)], "%02X", b);

ってやっちゃってもいいんでしょうか
672デフォルトの名無しさん:2013/01/26(土) 13:52:12.33
>>671
ウゼえ消えろ
673デフォルトの名無しさん:2013/01/26(土) 13:54:01.10
>>671
やればいいんじゃない?
hogeとか使ってるようなゴミの書くコードなんだからどうでもいいだろ。
674デフォルトの名無しさん:2013/01/26(土) 13:58:03.07
hogeとか書く一般的じゃないお前が一般的とか気にしてどうするの

ウジ虫は回線切れ
675671:2013/01/26(土) 14:00:07.14
はい、ヴァカが3匹釣れたwwww
ほんとここはいい釣り堀だなwwwwww
本気で質問してると思った?wwwwwwwwwwwwwwwwwwwwwwwwwwwwww
676デフォルトの名無しさん:2013/01/26(土) 14:06:11.79
>>671
できるけど、その前にstrcpyとstrcatとsprintfは
セキュリティホールになりかねない危険な関数なので使い方には気をつけろ

どんな条件でも文字列が格納可能なバッファサイズが残っている事はチェックしろよ
677デフォルトの名無しさん:2013/01/26(土) 14:13:01.73
>>676は荒らしにレスしてるから同類の荒らしなんだろうな
678デフォルトの名無しさん:2013/01/26(土) 14:14:52.04
ほげwwwwっうぉげほげwwwwwほげーwwwwwwwwほっほげーwwwwwww
HOGEHOGEwwwwwwwwwHogewwwwwwwwwwwHohhohおHOGEEえええええええええええwwwwwwww
679671:2013/01/26(土) 14:21:37.08
ここIDでないのかよ
俺は >>675 じゃないぜ

strcpy(a, 'hoge');
でコンパイルエラーでますた

strcpy(a, "hoge");
でっと

>>676
ありがと
外部から引数で可変文字列をもらうわけじゃないから
特にサイズチェック不要ですよね?
680デフォルトの名無しさん:2013/01/26(土) 14:29:20.79
>>679
チェックは不要だよ



















お前がそもそも世の中に不要
不要なゴミの書いたゴミコードに問題があっても誰も困らない
681デフォルトの名無しさん:2013/01/26(土) 14:30:36.13
>>679←こいつ何?釣り宣言したりレスしたりしててキモい。二重人格か?
682デフォルトの名無しさん:2013/01/26(土) 14:33:53.47
>>676が荒らしたいだけの馬鹿だということはよく分かった
分かったから他スレでやってくれ
荒らす理由は何か知らないけどとにかく迷惑
683デフォルトの名無しさん:2013/01/26(土) 14:38:32.73
>>679
チェックというかこういう処理が必要。
ttp://www.google.co.jp/search?q=%E3%83%90%E3%83%BC%E3%82%AB%EF%BD%97
684デフォルトの名無しさん:2013/01/26(土) 14:39:14.29
>>681
釣り宣言とか無視しろよ。子供じゃあるまいし
685デフォルトの名無しさん:2013/01/26(土) 14:42:08.55
>>679
>ここIDでないのかよ

自分の不手際をシステムのせいにする典型的な知恵遅れ入りましたー
他人のせいにする腐った根性してたらそりゃプログラミングも上達しないわな
686デフォルトの名無しさん:2013/01/26(土) 14:44:05.53
>>671,>>675,>>679は荒しだからスルーよろ。
荒したい人だけレスして。
687デフォルトの名無しさん:2013/01/26(土) 14:51:43.39
>>681,682,685,686は荒しだからスルーよろ。
荒したい人だけレスして。
688デフォルトの名無しさん:2013/01/26(土) 14:53:04.78
hoge厨が来るたびに荒れてうんざり
689デフォルトの名無しさん:2013/01/26(土) 14:57:28.13
HOGE厨はそれが目的だからな。
690hoge厨撲滅委員会:2013/01/26(土) 16:37:49.87
hoge厨、ダメ、ゼッタイ
691デフォルトの名無しさん:2013/01/26(土) 16:57:06.22
hogeって韓国が起源なんだけどな。これはガチ。
韓国のエンジニアって自分の名前とかその略称をメタ変数に使うことが多くて、hogeもその一種。
キム・ホンギョン(うろ覚えだから間違ってるかも)とかいう韓国のエンジニアが自分の名前の略称hongeを使ったのが始まり。
当然他の人は自分の名前を使ってたわけだからhonge以外にもたくさんあった。
ではなぜhogeだけが日本に入ってきたのか?
日本のエンジニアと韓国のエンジニアの交流はほとんどなく、たまたま交流会を開催したときに韓国のエンジニアチームの中にキム・ホンギョンが混ざっていた。
そして資料の一部に載っていたコードがキム・ホンギョンのものだったから、hongeという文字が含まれていた。
日本のエンジニアは意味が分からなかったから、hongeとは何だと質問したら、メタ変数だと返答が帰ってきた。
当時は今みたいに反韓の風潮はなかったから日本のエンジニアは日本へ帰ってきて使ってみたところ、それが少しずつ広まった。
最初はhongeだったがいつしか省略されて今のような状態になった。
692413:2013/01/26(土) 17:58:24.96
レスありがとうございました。
全部拝見させていただいてますが、結局よくわからない・・
自分でもう少し調べようとしているところです..
693デフォルトの名無しさん:2013/01/26(土) 18:37:22.61
>>691がコピペネタなのかマジで言ってるのか分からん…
694デフォルトの名無しさん:2013/01/26(土) 19:18:11.12
アスペの疑い
695hoge厨撲滅協議会:2013/01/26(土) 19:27:51.29
hogeは犯罪です
696デフォルトの名無しさん:2013/01/26(土) 19:48:30.87
>>692
このスレの結論としては
可変長配列ではないかという推測

void Resize(Events* ev, int num)
{
 Free(ev);
 events[0] = new Event[num];
 events[1] = events[0] + num;
 numEvents = num;
}

のような形で確保して、
ev.events[0] は begin、
ev.events[1] は end を表す

例えば

std::sort(ev.events[0], ev.events[1]);

のように使える

あくまで推測だけどね
697日本基地害hoge房防止協会:2013/01/26(土) 19:53:51.86
こんにちは、日本基地害hoge房防止協会、通称「hoge防」の者です。
hogeというワードの利用はあなたの育ちの悪さを疑われることになります。
例えば、相手の言っていることが気にいらない場合、
育ちの良い人は「何をおっしゃってるのか理解しかねますな」と言いますが、
育ちの悪い人は「あんだとテメーバーローちょーしこいてんじゃねーぞボケが」と言います。
hogeを使っていると間違いなく後者に見られるでしょう。
698デフォルトの名無しさん:2013/01/26(土) 19:58:52.40
>>696で ev 使ってなかったw

void Resize(Events* ev, int num)
{
 Free(ev);
 ev->events[0] = new Event[num];
 ev->events[1] = ev->events[0] + num;
 ev->numEvents = num;
}

で、

Events ev = {};
Resize(&ev);

のように確保して

std::sort(ev.events[0], ev.events[1]);

のようにソートする
699デフォルトの名無しさん:2013/01/26(土) 21:32:04.59
>>691
hogeはアメリカ生まれだよぉぉ
700デフォルトの名無しさん:2013/01/26(土) 22:00:51.44
>>699
それは根拠ないだろ。

1995年ごろに、ニフティのパソコン通信でhoge, hugaみたことある。
701デフォルトの名無しさん:2013/01/26(土) 22:38:45.07
「発祥時期は1970年代終わり〜1980年代前半頃」

「hoge」の起源を求めて
ttp://togetter.com/li/47113
702デフォルトの名無しさん:2013/01/26(土) 22:43:46.93
>>699
そもそも英語圏は foo, bar だろ。

>>700
huga って…

まあ、にちゃんのヨタ話よりまだこのページの方が信用できる。
http://kmaebashi.com/programmer/hoge.html
703デフォルトの名無しさん:2013/01/26(土) 23:17:29.56
foo、barのセンスのなさは異常
マジでどんな精神構造してたらfooとかbarみたいなアルファベットの並びが出てくるんだろうな
絶対にまともじゃない
音の響きもアホっぽいし使うと恥ずかしい

















それでもhogeより100倍マシだけど
704デフォルトの名無しさん:2013/01/27(日) 00:12:39.92
どうせ書き換えるんだから…

て言うか、書き換えないといけないんだから、あえて違和感のある名前じゃないと困るんだが…
705デフォルトの名無しさん:2013/01/27(日) 00:39:12.37
だったらhogeじゃなくてobobo_i-x-i_ododoでいいだろ馬鹿かお前
706デフォルトの名無しさん:2013/01/27(日) 00:53:55.24
またhoge厨が荒らしにきてたのか
707デフォルトの名無しさん:2013/01/27(日) 02:09:46.34
>>705
それでいいんじゃね、まあ >>703 と同じこと言われるだけだろうけど (w
708国際hoge活動禁止機構日本支部:2013/01/27(日) 03:56:33.82
国際hoge活動禁止機構日本支部広報よりお知らせです

hogeはfooよりも文字数が33%多いため効率が悪く、これが広まることによりIT業界全体の効率が低下することが懸念されています
試算によると、IT業界の約50%の人間がhogeに汚染された場合、業界全体の合計作業時間が約1.166666倍となることが明らかになっています
IT業界全体への悪影響が避けられないばかりか、関連する他の業界への影響も深刻なものとなります
健全な社会の発展のためにhogeは使わないようにしましょう
709デフォルトの名無しさん:2013/01/27(日) 07:52:23.77
CPUとメモリアクセスの関係と同じで、入力がやや多くなったくらいでは、思考時間の長さがあるから、結果への大きな影響はねーよ
710デフォルトの名無しさん:2013/01/27(日) 07:57:10.38
入力してるのは人間
711デフォルトの名無しさん:2013/01/27(日) 12:27:18.59
ブラインドタッチできる人なら、fooよりhogeの方が入力速いと思うぞ
712デフォルトの名無しさん:2013/01/27(日) 12:52:26.11
理由は?

f は、左手人差し指のホームポジションで移動不要、o も右手薬指で
少し移動するだけの上に、二回目の o は移動不要。

対して、hoge は全て移動が必要なので、普通に考えたら、hoge の方
が入力が遅いと思うぞ。
713デフォルトの名無しさん:2013/01/27(日) 13:01:04.35
一つの指で連続してキー押すのはタイピングのプロにとっても一番のボトルネックなんだぜ
714デフォルトの名無しさん:2013/01/27(日) 13:17:31.04
ああ、言われればそうかも。
715デフォルトの名無しさん:2013/01/27(日) 13:20:31.92
じゃぁbarでいいだろ
716711:2013/01/27(日) 13:22:15.23
>>713
だな
717711:2013/01/27(日) 13:24:53.11
>>715
bar も微妙に遅い気がする
718デフォルトの名無しさん:2013/01/27(日) 13:26:07.51
barは全て左手
hogeは右手と左手をバランス良く使うので入力早い
719デフォルトの名無しさん:2013/01/27(日) 13:30:06.12
foo bar baka
720デフォルトの名無しさん:2013/01/27(日) 13:34:00.78
>>718
>hogeは右手と左手をバランス良く使うので入力早い

右右左左だろ。

hgoe の方が速いかも。
721デフォルトの名無しさん:2013/01/27(日) 13:47:20.39
>>720
いや、やってみると分かるけど、
交互より2つずつのが遥かに速い
722デフォルトの名無しさん:2013/01/27(日) 13:56:34.84
その理論だと、bar の方が速いぞ。


って思ったが、b と r が両方人差し指だから、打ちにくいな。
723デフォルトの名無しさん:2013/01/27(日) 13:57:08.72
geho gohe
724711:2013/01/27(日) 13:57:37.72
>>720
リズムが悪くなりそう
慣れの問題かもしれないけど
725デフォルトの名無しさん:2013/01/27(日) 14:02:56.25
hogehoge ぴー! ほげほげ
726デフォルトの名無しさん:2013/01/27(日) 14:13:20.48
>>722
片手3つより片手2つを交互の方が打ちやすい
727デフォルトの名無しさん:2013/01/27(日) 14:20:44.10
>>726
さすがにそれは人によるかと。
728デフォルトの名無しさん:2013/01/27(日) 14:26:15.14
しかしhogeよりも打ちやすい並びがあるのは確か
つーか1文字が一番速いだろ
わざわざホゲとか恥ずかしいものを打ち込む必要はない
729デフォルトの名無しさん:2013/01/27(日) 14:31:40.64
>>727
全て違う指だというのも重要
hogeの配置は優秀

>>728
短すぎると目視検索し辛い
3文字以上は必要だな
hogとかならいける
730デフォルトの名無しさん:2013/01/27(日) 14:42:10.19
その条件を満たすならmizでいいじゃん
hogeとか恥ずかしいだけだし

ほげぇ
ほげぇ

頭悪そう
731デフォルトの名無しさん:2013/01/27(日) 14:47:09.21
小指打ち辛い
732デフォルトの名無しさん:2013/01/27(日) 14:54:44.66
打ち辛さより恥ずかしいさをとるhoge厨

人としての尊厳のかけらもないとかね

服着ると暑いとかめんどくさいとか言ってパンイチで電車に乗ってるキチガイが昔いたけどあれと同じ
733デフォルトの名無しさん:2013/01/27(日) 14:59:21.84
プログラマは冷徹な実利主義であるべき
734デフォルトの名無しさん:2013/01/27(日) 15:04:04.10
じゃあパンイチで電車乗ってろ
そのパンツにhogeとか書いとけばいいんじゃね
735デフォルトの名無しさん:2013/01/27(日) 15:10:59.06
実利主義とか言ってる奴に限って人間の心理を無視した数値のみの評価基準作ったりするんだよな。
それで効率が良くなるならまだしも、士気を下げる結果になって効率を下げることが多い。
736デフォルトの名無しさん:2013/01/27(日) 15:16:57.68
VC++ 2010 expressを使ってCのコードを書いています。
1行目のサイズは2^0 = 1、2行目のサイズは2^1 = 2、3行目のサイズは2^2=4・・・最後は11行目で、サイズは2^10というような配列を作りたい場合、
double **hoge;
hoge = (int**)malloc(sizeof(int*)*(cDEPTH+1));
hoge[0] = (int*)malloc(sizeof(int)*maxgroup*2);
for(i=1;i<=cDEPTH;i++){
hoge[i] = GP_NUM0[i-1]+pow2n(i-1);
}
というようなコードでいいのでしょうか?
どこかでメモリエラーが出ているらしく、途方にくれています・・・
737デフォルトの名無しさん:2013/01/27(日) 15:17:38.73
>>736
C++じゃいかんのか?
C++でvector使えば捗るで
738デフォルトの名無しさん:2013/01/27(日) 15:18:45.48
>>736
hogeとか使ってるからだろ
失せろゴミ
739デフォルトの名無しさん:2013/01/27(日) 15:19:42.08
>>736
doubleなのになんでintなんだ
740デフォルトの名無しさん:2013/01/27(日) 15:20:43.56
>>736
hoge使って違和感感じない歪んだ感覚が原因じゃないの?

普通の感覚してたら一発で書けるけど。
741デフォルトの名無しさん:2013/01/27(日) 15:22:03.33
>>736
お前みたいなゴミhoge厨が途方にくれたところで誰も困らないからさっさと回線切ってね^^
742736:2013/01/27(日) 15:23:09.59
すいません、変数の名前がおかしかったので書き直します。
double **hoge;
hoge = (int**)malloc(sizeof(int*)*(line+1));
hoge[0] = (int*)malloc(sizeof(int)*1024*2);
for(i=1;i<=cDEPTH;i++){
hoge[i] = hoge[i-1]+pow2n(i-1);
}
よろしくお願いします。
作りたいのは
1x1,1x2,1x4・・・1x1024のジョグ配列のようなものです。
743デフォルトの名無しさん:2013/01/27(日) 15:24:27.72
なんだ、荒らしだったか
744736:2013/01/27(日) 15:25:56.84
>>737-741
返信ありがとうございます。
またコードを間違って張っていました。実際のものは型を間違ってはいません。
double **hoge;
hoge = (double**)malloc(sizeof(double*)*(line+1));
hoge[0] = (double*)malloc(sizeof(int)*1024*2);
for(i=1;i<=cDEPTH;i++){
hoge[i] = hoge[i-1]+pow2n(i-1);
}
かなりのコードをすでにCで書いてしまっているのと、C++は知らないもので・・・
あまり時間がないので今から習得している余裕が無いです。
745デフォルトの名無しさん:2013/01/27(日) 15:26:28.34
だからスルーしろって
回答してる奴も煽ってる奴も
荒らしの相手をしてる時点で荒らしだから
746デフォルトの名無しさん:2013/01/27(日) 15:26:39.59
>>744
卒論か?
それなら自分でやれと言いたいが
747736:2013/01/27(日) 15:28:48.02
>>746
そのとおり、卒論です。
この部分が間違っているのであれば、それだけでも教えていただけると嬉しいです。
748デフォルトの名無しさん:2013/01/27(日) 15:30:10.29
>>736の配列が欲しいんだったら
double **hoge;
int i, alloc_size = 1, cDEPTH = 10;
hoge = (double **) malloc(sizeof(double *) * cDEPTH);
for(i = 0; i < cDEPTH; i++) {
hoge[i] = (double *) malloc(sizeof(double) * alloc_size);
alloc_size *= 2;
}
で良いんじゃないの?
749デフォルトの名無しさん:2013/01/27(日) 15:33:04.02
一発でメモリ確保したいんだろ
場合によってはメモリの連続性が必要な場合もあるかもしれないし
750748:2013/01/27(日) 15:33:38.72
>>748
間違った
cDEPTH = 11;
751デフォルトの名無しさん:2013/01/27(日) 15:36:02.03
cDEPTH = 10で通るコードにすべきだろ
2^10という上限を意味してんだから
752デフォルトの名無しさん:2013/01/27(日) 15:36:59.34
>>748
投稿前にチェックできないほど知能の低いゴミはレスするな
753デフォルトの名無しさん:2013/01/27(日) 15:38:19.39
>>747
hoge使ってるのが間違い
それにお前の存在そのものが間違い
754デフォルトの名無しさん:2013/01/27(日) 15:39:28.82
煽ってる奴は当然ながら、回答してる奴も荒らしたいんだろうな。
755736:2013/01/27(日) 15:39:29.68
すみません、int pow2n(int x)は2^xを返す関数です・・・・
我ながらひどい

>>748
ありがとうございます。ただ>>748さんの仰っているとおり、メモリを一度に取得したいです。
人に見せてわかりやすいコードってのはこういうものなんですね、勉強になります。
756デフォルトの名無しさん:2013/01/27(日) 15:45:37.31
>>744
まだintじゃねえか
757デフォルトの名無しさん:2013/01/27(日) 15:46:56.63
他人に卒論を手伝ってもらうとかやっぱりhoge厨の思考回路はすごいな
758デフォルトの名無しさん:2013/01/27(日) 15:47:08.06
>>744
なんで>>736からそう変わるのか。
小出しされてしかも間違ったものだとな・・
759デフォルトの名無しさん:2013/01/27(日) 15:47:35.75
pow2nとかビットシフトでいいじゃねえか
760デフォルトの名無しさん:2013/01/27(日) 15:48:17.29
>>756
まだ気づかない?
煽るためだけに質問してることに。
761デフォルトの名無しさん:2013/01/27(日) 15:48:25.40
やり方を教えるより、デバッグの仕方を教えた方がいいわこれ
変数の内容をダンプしろダンプ
762デフォルトの名無しさん:2013/01/27(日) 15:54:00.36
>>754
ぶはあああああああああああああああああああああああああああああwwwwwバレたwwwwwwwwwwwwwwwwwwww
そうですwwwwwwwwwだって回答者のふりしてたらゴミ質問者がまた書き込むから、そうしたらアンチhogeがまた叩いて荒れるからなwwwwwwwwwwwwwwwwwww
回答者のレスがつかないと質問者は叩かれてどっかいってしまって長く続かないもんwwwwwwwwwwwwwwwwww
自分では手を下さなくてもスレが荒れるからいい手段だと思ったのにwwwwwwwwwwwwwwwwwwwwwwwwwばwwwれwwwwたwwwwwwww
そりゃそうだよなwwww荒らす目的がなかったらhoge厨に回答なんかしないもんなwwwwwwwwwwwwwwwやっぱ不自然だったかwwwwwwwwwwwwwwwwwwwwwwww
763736:2013/01/27(日) 15:54:08.76
質問に不備が多すぎて申し訳ないです。
質問を取り下げます。
764デフォルトの名無しさん:2013/01/27(日) 15:55:39.56
そりゃ丸わかりだろ。
まともな回答者はhogeをNGに入れてるし。
765デフォルトの名無しさん:2013/01/27(日) 15:56:43.80
>>763
卒論は本気なの?
本気なんだったら



















卒業できないことをお祈りしていますw
766デフォルトの名無しさん:2013/01/27(日) 16:02:41.18
hoge嫌いの話題のさなかにhogeコード投下するってことは釣りだったのか…
767デフォルトの名無しさん:2013/01/27(日) 16:14:04.17
周りが見えてないよね
768デフォルトの名無しさん:2013/01/27(日) 16:28:36.40
釣り宣言もないし、ただ荒れるのを見て楽しんでる釣りより程度の低いキチガイだと思う。
769デフォルトの名無しさん:2013/01/27(日) 16:50:12.54
fooでもhogeでも何でもいいけどくだらないことにこだわる人が
常駐してるんだねこの板。
770デフォルトの名無しさん:2013/01/27(日) 17:03:20.41
その手の話しか出来ない人なんでしょ、スルーしなよ。
771デフォルトの名無しさん:2013/01/27(日) 17:08:40.21
3文字でも4文字でもいいってことは30文字でも40文字でもいいと言ってるのと同じ。
それが大規模開発になると300万文字と400万文字になる。
スピードでいえばキーボードは左右交互に売ったほうががががががががとか言いながら無駄に長いコードを書く。
100万文字の差は無視できないのにね。
アルゴリズムや実行時の効率上の関係で長くなるならまだしも、それ関係なく100万文字長くなるとかもうね。
普段から「くだらないこと」と決めつけてる思考停止は雇わないほうが吉。
こういう根本的に腐ってる人間は文字数以外にも現れるから、
300時間も400時間も同じだと言って仕事チンタラ仕事をする。
772デフォルトの名無しさん:2013/01/27(日) 17:13:22.82
>>771
>3文字でも4文字でもいいってことは30文字でも40文字でもいいと言ってるのと同じ。

この批判は、まあわかるが…

>それが大規模開発になると300万文字と400万文字になる。

これは、馬鹿だろ。

大規模だと、それ以外の部分も多くなるし、そもそも1人で開発するわけじゃないし。
773デフォルトの名無しさん:2013/01/27(日) 17:26:41.25
>>771
そんなことに思考を割くこと自体が時間と労力の無駄
一番貴重なのは人的にリソースだからな
774デフォルトの名無しさん:2013/01/27(日) 17:33:04.54
> それが大規模開発になると300万文字と400万文字になる。
こいつのプログラムは識別子並べるだけで構成されてるらしい。
775デフォルトの名無しさん:2013/01/27(日) 17:37:03.70
変数名の長さを短くした方がいいとかいいたいのか?w
時代に逆行してんな
776デフォルトの名無しさん:2013/01/27(日) 17:37:49.43
>>775
アホ発見
777デフォルトの名無しさん:2013/01/27(日) 17:43:23.32
入力補完がある今の時代、識別子の長さなんてどうでもいいんだよ
そんな事より見て意味が分かる方が重要
778デフォルトの名無しさん:2013/01/27(日) 17:46:41.85
hogeは意味が分からない
意味が分からないだけならまだしも馬鹿っぽい
779デフォルトの名無しさん:2013/01/27(日) 17:50:09.05
>>777
bool kore_ha_nanrakano_jyoutai_no_hitei_wo_arawasu_huragu_desu;
bool kore_ha_nanrakano_jyoutai_no_koutei_wo_arawasu_huragu_desu;

そうやって似たような名前の変数補完ミスるんだよな
780デフォルトの名無しさん:2013/01/27(日) 17:54:50.01
変数名短い方が似やすいだろw
アホか
781デフォルトの名無しさん:2013/01/27(日) 18:04:44.62
意味の分からないhogeを使う頭のおかしいhoge厨
782デフォルトの名無しさん:2013/01/27(日) 18:04:53.90
人間が判別しやすいかどうかが全てであってな、長さは関係ないと思うの
783デフォルトの名無しさん:2013/01/27(日) 18:10:59.46
hoge使ってる奴って見事に社会の落伍者ばっかだよな。
784デフォルトの名無しさん:2013/01/27(日) 18:44:43.42
MSVC x64で、
std::wstringstream wss;
wss << L"year: " << 2013; ←ここでエラー

なぜなんでしょうか?
MSVC Win32では正常にとおります
x64でビルドすると数字がくっつきません
785デフォルトの名無しさん:2013/01/27(日) 18:45:06.24
hogeにトラウマありすぎて笑える
786デフォルトの名無しさん:2013/01/27(日) 19:01:53.22
>>784
環境がないから分からんが、
ロケールに問題があるのかも?
787デフォルトの名無しさん:2013/01/27(日) 19:05:55.21
そりゃ会う奴会う奴hoge使ってる奴が例外なく精神障害ならトラウマにもなるだろうよ

お前だって外出たら黒のパーカー着た奴が全員ゲイでしかも全員お前に襲いかかったら
黒のパーカーがトラウマになるよ

そういう背景を考慮せずに笑うのは、まともに精神が発達してるという前提なら小学生低学年までなんだけどな
788デフォルトの名無しさん:2013/01/27(日) 19:11:50.19
>>779
そんな同じ意味の変数を複数作る奴はバカだと思う。
789デフォルトの名無しさん:2013/01/27(日) 19:58:04.87
>>736
#define DEPTH 5
#define AMOUNT_ARRAY (1<<(DEPTH-1))
#define AMOUNT_X(a) (1<<((a)-1))
#define TOP_INDEX(a) ((1<<((a)-1))-1)
#define IS_INDEX(a,b) AMOUNT(((a)-1))+(b))
#define L_INDEX(a,b) (IS_INDEX((a)+1,(b)*2)
#define R_INDEX(a,b) (L_INDEX(a,b)+1)
790デフォルトの名無しさん:2013/01/27(日) 23:55:39.87
クラスをポインタ使ってオブジェクト生成できるようになったんだけど俺もしかして才能あるのかな
791デフォルトの名無しさん:2013/01/28(月) 00:38:40.70
>>790
コードをみせろ判定してやる
792デフォルトの名無しさん:2013/01/28(月) 01:27:33.31
オブジェクト生成ってなんだ?
793デフォルトの名無しさん:2013/01/28(月) 01:30:59.01
new hoge とか new fuga とか new hage のことじゃない?
794デフォルトの名無しさん:2013/01/28(月) 05:05:08.56
できないなら卒業できるレベルじゃないってことだから
留年するか中退
795デフォルトの名無しさん:2013/01/28(月) 15:11:25.80
hogeよりhageのほうがマシだな
796デフォルトの名無しさん:2013/01/28(月) 15:29:15.31
そもそも、おれは学校がきらいだ
797デフォルトの名無しさん:2013/01/28(月) 15:57:28.13
g++で科学計算向けの最強の最適化オプションを教えてくれ
798デフォルトの名無しさん:2013/01/28(月) 16:03:44.53
-O2
799デフォルトの名無しさん:2013/01/28(月) 16:20:03.18
-march=native
800デフォルトの名無しさん:2013/01/29(火) 03:28:08.54
object->func() {
/*省略*/
}

って感じでセミコロン無しでメンバ関数呼び出した後にブロック書いてるコードがあったんだけどこれってどうやるの?
801デフォルトの名無しさん:2013/01/29(火) 03:29:50.18
カプセル化について質問です

class Example
{
private:
 int val;

public:
 Example(int _val) : val(_val) {}
 bool Compare(const Example& target) const { return (this->val == target.val); }
};

Compare内でtargetのプライベートメンバを直接参照してもコンパイルエラーに
ならないのですが、自身と同じクラス(もしくはアップキャストできるクラス)の
インスタンスであれば関数内でプライベートメンバにアクセスできるということでしょうか?
802デフォルトの名無しさん:2013/01/29(火) 05:18:20.05
>>801
自分自身はできる
親(基底)クラスはダメ
後者を許すために protected がある
803デフォルトの名無しさん:2013/01/29(火) 05:57:50.96
学習した手の初心者ですがよろしくお願いします。
理解があやふやな部分の確認をお願いしたいです。
Person & operator=(const Person & psn); について、
Person & operator= の&はアドレスを指す&のことで、
つまり返値は&Person(Personの先頭アドレス)であると解釈して良いでしょうか?
実際の定義を見ると返値がreturn *this; になっているのですが。
つまりポインタthisの実際に指すデータはオブジェクトPersonの先頭アドレスということですか?
this自体がポインタなのに、*thisもアドレスを指すというのがしっくり来ないのですが。
804 ◆QZaw55cn4c :2013/01/29(火) 06:11:33.37
>>803
>Person & operator= の&は
参照です。

>ポインタthisの実際に指すデータはオブジェクトPersonの先頭アドレス
ですが、
>*thisもアドレスを指す
わけではありません。

宣言で int *p と書いたとき、p はアドレスではあっても、*p はアドレスではなく、p が指し示すなにかのオブジェクトそのものでしょう、それと同じです。
805デフォルトの名無しさん:2013/01/29(火) 06:19:25.29
>>804
ああ。なるほど。アドレスを見る&ではなくて、参照の&でしたか。
つまりここで参照を使っているのは、thisが大きなデータかもしれないので、
コピーした値を返すより効率よいという理由なのですね?
806 ◆QZaw55cn4c :2013/01/29(火) 06:39:26.72
>>805
これは個人的な見解ですが、参照は表記の上でインスタンスを渡すように記述しながら実はアドレス渡しをているだけ――糖衣構文――と考えています。
こちらでは、きっちりポインタで(あたかもアセンブラレベルで)記述するのと、参照を使ってわかりやすい(かどうかは議論のところかもしれませんが)記述をとることを比較しています。
(私はかいてみないとわからない人ですから‥‥orz)
http://toro.2ch.net/test/read.cgi/tech/1313183984/605

もっとも & は const と一緒に使ってコンストラクタ発動を防止する、とかが普通の使い方のようですけど。
807デフォルトの名無しさん:2013/01/29(火) 07:40:18.12
いいえ参照です
808デフォルトの名無しさん:2013/01/29(火) 11:07:01.40
thisさんは参照が産まれるよりも前に決められてしまいました
809デフォルトの名無しさん:2013/01/29(火) 11:19:45.16
QZさんもだいぶ頑張ってるようだけど、あと一歩のところから
全然先に進めてないね。
いったん自分の知識を体系立てて学びなおした方がよさそう。
810デフォルトの名無しさん:2013/01/29(火) 13:53:32.14
老害だからもう新しい事は頭に入らないんじゃね
811デフォルトの名無しさん:2013/01/29(火) 13:55:01.42
個人的な見解とかいらないしねえ
812デフォルトの名無しさん:2013/01/29(火) 15:11:27.92
参照の実装方法なんて規格で決まってないんだから処理系依存ですわ。
813デフォルトの名無しさん:2013/01/29(火) 17:40:19.17
>>802
ありがとう、なんだか不思議な感じ
814デフォルトの名無しさん:2013/01/29(火) 17:41:39.65
ああ不思議じゃないのか、GetやSetがなくてもコピーはできるようになってるんだ
815デフォルトの名無しさん:2013/01/29(火) 20:55:04.23
テンプレート関数やクラスに接頭語付けてる人いる?
816デフォルトの名無しさん:2013/01/29(火) 21:32:47.73
つけない
817デフォルトの名無しさん:2013/01/29(火) 21:43:31.09
接頭語付けるよりネームスペースだは
818デフォルトの名無しさん:2013/01/29(火) 21:47:10.93
テンプレート引数くらいにはつける
819 ◆QZaw55cn4c :2013/01/29(火) 23:36:41.68
>>809
ご指摘感謝いたします。たしかに自身でもうすうす感じるところです。
言語仕様を今一度押さえるべきでしょうか?
言語処理系自体にも興味があるのでセオリーを成書で学ぶべきでしょうか?
それとも応用分野を決めて追求していくべきなのでしょうか?
820片山博文MZパンク ◆0lBZNi.Q7evd :2013/01/30(水) 00:10:09.35
>>819 applicationの本来の意味は何でしょうか?
821デフォルトの名無しさん:2013/01/30(水) 02:50:11.18
>>819-820
ム板の汚物の2匹は専用スレ作ってそこから出てくるな
822 ◆QZaw55cn4c :2013/01/30(水) 06:03:43.62
炎上学習法もそろそろ終わりですね
823デフォルトの名無しさん:2013/01/30(水) 14:10:55.47
cgvgってどうやって使うんだ? まったく資料が無いぞ
824デフォルトの名無しさん:2013/01/30(水) 22:57:09.54
namespace hoge
825デフォルトの名無しさん:2013/01/31(木) 16:33:31.08
hoge?
826デフォルトの名無しさん:2013/01/31(木) 16:40:16.95
huga
827デフォルトの名無しさん:2013/01/31(木) 17:06:43.61
大量に呼び出される関数内で、
if(cond1) /*何かする*/
if(cond2) /*何かする*/
if(cond3) /*何かする*/
というのコードを挿入する場合、cond1とcond2とcond3が全部ランダムに変化する場合は遅くなるが、
main関数で一度設定された後変わらない場合は、分岐予測が全部ヒットして速度が変わらないという認識で問題ないでしょうか?
(ただし、if文の/*何かする*/はa = bなどのほとんど計算時間のかからない処理だとします。)
828デフォルトの名無しさん:2013/01/31(木) 17:08:30.58
CPUはSandyBridge世代以降のIntel CPUだとしてください
829デフォルトの名無しさん:2013/01/31(木) 17:11:48.08
コンパイルさんが静的に解決してくれるんじゃね?
830デフォルトの名無しさん:2013/01/31(木) 17:22:25.41
>>829
すみません言葉足らずでしたが、cond1〜3はmain関数内で(正確に言うと上記関数を呼び出す前の段階で)
外部の設定ファイルを読み込んで動的に決定されるものとしてください
831デフォルトの名無しさん:2013/01/31(木) 17:31:47.69
だったらイーブンだろ
小さな効率のことは忘れ、時間の97%について語ろう。時期尚早な最適化は諸悪の根源だ
832デフォルトの名無しさん:2013/01/31(木) 17:40:02.46
つまり、分岐予測は効かないということでしょうか?
833デフォルトの名無しさん:2013/01/31(木) 17:46:19.72
分岐予測なんて宝くじみたいなもんだろ
せいぜいあたればいいなって思っとくぐらいで
そんなことより手を動かすべきだろう
834デフォルトの名無しさん:2013/01/31(木) 17:47:31.92
なぜそのように言えるのですか?分岐予測にの具体的な挙動を理解している人の話を聞きたいのですが・・・
835デフォルトの名無しさん:2013/01/31(木) 17:57:03.21
分岐予測がないと困るようなもんでも作ってるの?

/*何かする*/
の組み合わせを全パターン用意して
関数ポインタで呼び出したら、ifの判定いらなくなるよ
836デフォルトの名無しさん:2013/01/31(木) 18:09:45.64
>分岐予測にの具体的な挙動を理解している人
こんな人が2chに居るわけがないだろ…
あんたに分岐予測という機能を教えた人に聞けばいいんじゃないか?
837デフォルトの名無しさん:2013/01/31(木) 18:13:24.28
cpp初心者なんですが、namespaceというのがよくわかりません。
教えて下さい。
838デフォルトの名無しさん:2013/01/31(木) 18:18:32.33
ここで聞くよりCPP namespaceでぐぐって出てきたページを見たほうが
詳しくてわかりやすく書かれてますよ
それでもわからない点がでてきたときに改めてここに書き込めばいいでしょう
839デフォルトの名無しさん:2013/01/31(木) 18:20:48.07
namespaceは単にClassの名字のようなものです
840デフォルトの名無しさん:2013/01/31(木) 18:22:45.21
>>837
関数なんかの苗字ですよ
Hoge家のfuga関数って感じ
841デフォルトの名無しさん:2013/01/31(木) 18:26:06.13
分岐予測すら理解しないでifを使うって低脳ゆとり杉
俺もだが2chは低脳ゆとりだらけだからな
842デフォルトの名無しさん:2013/01/31(木) 18:34:14.31
C++プログラマ的にはifなんぞ使わずに静的に解決すべき
843デフォルトの名無しさん:2013/01/31(木) 19:15:09.09
>>840
ありがとうございます。
なんでcppでは「苗字」が必要になったんですか?
cにはないですよね?
844デフォルトの名無しさん:2013/01/31(木) 19:19:40.08
なるべくプリプロセッサを使わないようにしたかったからだよ
845デフォルトの名無しさん:2013/01/31(木) 19:23:13.19
分岐予測テーブルには限りがあるんだから
当たればイイナくらいに思っておいた方がいい
846デフォルトの名無しさん:2013/01/31(木) 19:47:59.65
>>843
実はCの時代にも、名称被りを防ぐために

 会社名_プロジェクト名_機能別カテゴリ_プログラマ苗字_関数名( )

みたいな命名をすることがあったらしい。(もちろんこれは極端な例だが)
847デフォルトの名無しさん:2013/01/31(木) 19:53:43.67
まあ名前空間が被ったらどうにもならないんだけどな
自分で作ってるプログラムなら変更出来るが
848デフォルトの名無しさん:2013/01/31(木) 20:12:14.14
std::mapとかのコンテナのテンプレートパラメータに不完全型を指定してもよいのでしょうか?

やりたいのは
struct C {
 std::map<int, C> val;
};
みたいなことです。
GCCだとコンパイルは通るのですが、規格を読むと明示的にOKとは書いてないようで、
規格のクラス定義の内容にも「実装依存」の箇所があり自分では判断できませんでした。
849デフォルトの名無しさん:2013/01/31(木) 20:19:27.72
大人しくポインタにすれば?
850デフォルトの名無しさん:2013/01/31(木) 20:25:37.96
>>848
テンプレートのインスタンス化が起こる地点で完全型になっていればOK。
851デフォルトの名無しさん:2013/01/31(木) 20:25:47.00
無理に決まってんだろ
852デフォルトの名無しさん:2013/01/31(木) 20:32:36.92
Standard 17.4.3.6:

In certain cases (replacement functions, handler functions, operations on types
used to instantiate standard library template components), the C++ Standard
Library depends on components supplied by a C++ program.
If these components do not meet their requirements, the Standard places no requirements
on the implementation.

In particular, the effects are undefined in the following cases:
(...)
--- if an incomplete type (3.9) is used as a template argument when instantiating
  a template component.
853デフォルトの名無しさん:2013/01/31(木) 20:35:13.25
問題のある実装は特に無いとは思うが、
コンパイルエラーになっても文句は言えんだろうね
854デフォルトの名無しさん:2013/01/31(木) 20:46:53.43
>>849-853
回答ありがとう。
大体動くような気がするけど、規格でダメだと決まってて、
ポインタでも使ってどうにかしろと。
855デフォルトの名無しさん:2013/01/31(木) 20:48:17.24
>>848
>>850の言う通りで、>>848のそれだけではインスタンスが生成されないから
なんともいえない。インスタンスの部分まで示さないと
856848:2013/01/31(木) 20:56:12.25
>>855
あれ? C::valの宣言のところでstd::map<int, C>型のインスタンス化
が起きて、その時点でCは不完全型だからダメって話じゃないの?
857デフォルトの名無しさん:2013/01/31(木) 21:19:48.44
Cをインスタンス化しないから大丈夫
なのが普通の実装

だけど規格は保証してくれない
858848:2013/01/31(木) 22:15:10.84
くどくてごめんね。自分の理解が間違ってるかもしれないので。
>>857 テンプレートクラスのインスタンス化はそのインスタンスを
使用した(848ではC::valの宣言)時点で起きるのであって、struct Cの
インスタンスを定義した時点ではないと思ってたけど、そういう
コンパイラもあり(というか普通はそう)ってことですか?

GCCが実際通ったり>>853で言われた「問題のある実装は特にない」
のはstd::mapがstruct Cのポインタまたは参照しか使用しないから
だと思ってた。
859デフォルトの名無しさん:2013/01/31(木) 23:18:13.46
>>857
Cはテンプレートじゃなくて普通のクラスなわけで「Cをインスタンス化」の意味がわからない。
860デフォルトの名無しさん:2013/01/31(木) 23:19:52.75
std::map<int, C> のメンバ変数に C c; のようなものがなければ
問題が起きないよという事
861848:2013/01/31(木) 23:38:58.06
>>860
理解できました。どうもありがとう。
862デフォルトの名無しさん:2013/01/31(木) 23:58:40.67
>>859
分かった方が良いと思うぞ
863デフォルトの名無しさん:2013/02/01(金) 15:05:22.27
int = 1
とint 100ってメモリ使用量同じなんですか?
864デフォルトの名無しさん:2013/02/01(金) 15:10:04.31
int 100はコンパイルエラーになりますという冗談はさておき
どっちも同じです
865デフォルトの名無しさん:2013/02/01(金) 15:55:03.82
配列の長さ指定して宣言するときによく長さを2の乗数にしてるのよく見るけどこれだといいことあるの?
866デフォルトの名無しさん:2013/02/01(金) 16:04:37.94
unsigned short a = 65530;
a += 100;

これやったら、a は
65530+100-65536=94
になるんでしょうか
867デフォルトの名無しさん:2013/02/01(金) 17:11:20.10
あるクラスを継承した派生クラスで、継承元のメンバ変数に別名を付けることはできますか?
クラス内で参照を宣言しようとしたところ「静的メンバじゃないと初期化できないよ」って
コンパイラに怒られました
868デフォルトの名無しさん:2013/02/01(金) 17:13:55.88
ポインタ使えば良いんじゃない?
869デフォルトの名無しさん:2013/02/01(金) 17:20:07.06
>>868
振る舞いは同じ方が嬉しいですね・・・

一応、コンストラクタの初期化子で指定するとエイリアスとして機能するみたいですが
コンストラクタだと誰かがまたこれを継承した場合、確実にエイリアスとして動作するか保証しにくいような・・・
これはconstメンバーと同じで仕方ないのでしょうか
870デフォルトの名無しさん:2013/02/01(金) 19:37:41.33
>>865
なにもない。ただ、2の乗数だとキリがいいような気がする。
871デフォルトの名無しさん:2013/02/01(金) 21:45:22.41
>>865
プログラマの習性ってだけ
100,1000よりも256,1024の方が切りの良い数字に見えるのがプログラマ
872デフォルトの名無しさん:2013/02/01(金) 22:09:00.18
1000とか凄い切りが悪いよねー
あとたった24で切りが良くなるのにって思ってしまう
873デフォルトの名無しさん:2013/02/01(金) 22:15:17.77
ヒープ上だとエントリ情報があるから
チョット小さい確保は逆に美しく見える
874デフォルトの名無しさん:2013/02/01(金) 22:17:10.18
http://codepad.org/swsJU5G7

7よりも8の方がキリがいい。

単に、キリがいいので、という理由からかもしれないし、
アライメントの関係上2のべき乗にしているのかもしれない。
875デフォルトの名無しさん:2013/02/02(土) 00:30:58.34
ポインタをconst参照で受け取る意味ってあるんですか?
876デフォルトの名無しさん:2013/02/02(土) 00:34:36.78
constポインタでなくconst参照ってこと?
->より.の方が打鍵数が少ないとか
const参照にする前にNULLチェックしておけば
以降NULLでない事がコード上見て取れるとか

constなのは変更しないのならその方が安全だからだな
877デフォルトの名無しさん:2013/02/02(土) 00:35:32.57
->って打ちにくい
878デフォルトの名無しさん:2013/02/02(土) 00:40:46.74
func(const Kurasu* &hikisuu)
こんな感じです
879デフォルトの名無しさん:2013/02/02(土) 00:55:57.25
それはconst参照ではないぞ
constポインタへの非const参照だ

const Kurasu* p;
func(p);

として、func 内で p に値を入れてもらう使い方が普通かな
880デフォルトの名無しさん:2013/02/02(土) 01:06:27.49
ポインタからヒープのサイズを取得したいと思っています

void* operator new[](size_t a)
{
 void* ptr = ::malloc(s);
 map[ptr] = a;
 return ptr;
}

void operator delete[](void* p)
{
 heapsize = map[p]; (GetHeapsize(void* p)などに使える)
 ::free(p);
}

例えばnew[]してdelete[]するだけのプログラムで,ptr != pとなってしまっています(Windows/VS2012使用)
別のmallocを使う(…と上手くいく)以外にいい方法は無いでしょうか
881デフォルトの名無しさん:2013/02/02(土) 01:18:02.84
症例を勘違いしてました.別のmallocを使っても上手くいきません
ptr == p ですが,deleteのp != GetHeapSize(p)のpとなっているのが問題です
882デフォルトの名無しさん:2013/02/02(土) 01:34:50.65
これ、何やってるの?
883デフォルトの名無しさん:2013/02/02(土) 01:36:37.20
new[] と delete[] はあまりオーバーロードしない方がいい
引数に渡ってくるサイズが未規定で、環境に応じて挙動も変わりうる

GCCで実験した場合は、new[] に渡されるサイズは次のようになる

・デストラクタを持たない型の場合
  → 型のサイズ×要素数
・デストラクタを持つ型の場合
  → 型のサイズ×要素数+要素数を保持する領域のサイズ(8)

オーバーロードした new[] から返したアドレスに
要素数を保持する領域のサイズを足した値が実際の new[] から返されて、
要素数は自動的に入れられるようだ
この要素数は delete[] 時にデストラクタを呼ぶループの周回数を決めるのに使われる

で、delete[] 時は ptr == p になってくれるので
そのまま free してしまえばいい

VC++ではこれが ptr != p になってくれないということだが、
もしかしたらVC++では要素数分のオフセットの扱いがGCCとは異なるのかもしれない
ptr と p をダンプして、4 か 8 くらいずれてたらビンゴだと思う
884デフォルトの名無しさん:2013/02/02(土) 01:40:40.30
あと、配列 new/delete では問題はないだろうけど、
通常の new/delete でこれやろうとすると
map がメモリ確保を行った時に無限ループに陥ると思われる
new/delete を使わない allocator を map に指定してやるといい
885デフォルトの名無しさん:2013/02/02(土) 01:47:38.49
って、ptr == p なのね
なら多分GCCとVC++は同じ挙動だと思う
(余分に確保する領域のサイズは異なるかもしれないけど)

GetHeapSize の p にならないのは
要素数を保持する領域のサイズ分ずれてるからだな
でも、ズレるかズレないかは型次第なので
new[]/delete[] の内部からは分からない
886デフォルトの名無しさん:2013/02/02(土) 01:48:13.28
stdlib.hにある int system(const char*) ですが、これの実行は同期・非同期どちらなんでしょうか?
gcc,g+ですが、言い換えれば
func1();
err=system("ps");
func2();
のコードの時、func2()のコールはかならずsystem()の後であることが言語ライブラリ仕様で保障されているかどうかということです。
それから、system("sh -c ps")とシェル経由の時では、呼び出し元は同期するためにsystemコール・コマンドが完了復帰するまで待つのでしょうか。
887デフォルトの名無しさん:2013/02/02(土) 01:53:53.14
バックグラウンド実行すれば非同期だな
まあ&つけなきゃ同期だろ
プログラムのreturnコードを返す仕様なんだし
888デフォルトの名無しさん:2013/02/02(土) 02:08:02.54
>>885
大変参考になりました,まずはオーバーロード以外の方法を考えてみたいと思います
889デフォルトの名無しさん:2013/02/02(土) 02:08:11.06
>>887
そう思ってたんですが、仕様では返却値はNULLのときはcmdが可能かどうかで、NULL以外はコンパイラ定義の値であってプログラム実行成否ではないみたいです。
&をつけるのもshell/cmd processerの問題なので言語ライブラリ仕様とは関係なく、system機能の仕様で同期なのか非同期なのかはやはり環境・コンパイラ依存なのでしょうか。
どちらかはっきりしないとsystem()を使ったコードはかなり煩雑になると思うんですが。
一応g++ですがbetter cとjava jniで使っているので本来はc99の環境が前提です。
890デフォルトの名無しさん:2013/02/02(土) 02:38:37.26
#include <stdio.h>
int
main(void)
{
system("date");
printf("hello\n");
}
891デフォルトの名無しさん:2013/02/02(土) 03:32:26.76
glibcのsystem関数は
__execve
を呼び出してるよ
892デフォルトの名無しさん:2013/02/02(土) 08:14:37.08
windowsで頻出してくるDWORD型がunsigned longって分かりにくい
unsigned intだったら、いつも使ってるintのマイナス無し版ってわかるのに
わざわざlong選択してる意図がよくわからない
893デフォルトの名無しさん:2013/02/02(土) 08:30:21.95
アライメントを基準にしてるからだよ
894デフォルトの名無しさん:2013/02/02(土) 08:45:16.64
>>892
「DWORD は 32bit符号なし整数型」として決めたから long を使ったのでしょう。
int だと、処理系によってビット幅が変わるから。
895デフォルトの名無しさん:2013/02/02(土) 09:28:59.86
>>892
WORD, DWORDはプラットフォーム非依存の16ビット、32ビット整数なんだけど、
16ビット時代のVC++ではshortとintが16ビット、longが32ビットだったから、
unsigned int で定義すると環境によってビット数が変わってしまう。
896デフォルトの名無しさん:2013/02/02(土) 10:12:35.23
>>889
systemはセキュリティ上問題ある関数だから
普通は環境依存のもうちょい安全な関数を使うよ
そっちならもう少し環境に応じた保証があると思う
897デフォルトの名無しさん:2013/02/02(土) 10:47:17.74
>>896
kwsk
898デフォルトの名無しさん:2013/02/02(土) 10:59:14.16
ググれ
899デフォルトの名無しさん:2013/02/02(土) 10:59:23.42
>>889
>そう思ってたんですが、仕様では返却値はNULLのときはcmdが可能かどうかで、

返却値が NULL ?
system( ) の戻り値は int だぞ。

まじで、日本語の勉強からした方が良いレベルだと思う。

http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/system.3.html
> エラーが発生した場合 (fork(2) に失敗した場合など)、-1 を返す。
> そうでなければ、コマンドのステータスを返す。
> command の値が NULL のときは、 system() はシェルが利用可能ならゼロ
> 以外の値を返し、利用不可ならゼロを返す。

あと、べつに system( ) にセキュリティの問題があるとか言ってるバカもいるが、
それは無視しても、セキュリティ上の問題を生じやすい関数なのは間違いないので、
可能なら避けたほうが良い。
900デフォルトの名無しさん:2013/02/02(土) 11:17:56.17
>>899
他人の日本語を気にしてるようだけど自分の日本語には自信あるの?
901デフォルトの名無しさん:2013/02/02(土) 11:30:09.51
無害化できなくはないが
扱いに重々注意が必要な時点で
セキュリティ上問題があるんだよ
902デフォルトの名無しさん:2013/02/02(土) 11:37:04.11
意味不明
903デフォルトの名無しさん:2013/02/02(土) 11:49:45.51
これを意味不明と思う奴がやらかすんだよなあ
904デフォルトの名無しさん:2013/02/02(土) 11:56:26.25
何を?
905デフォルトの名無しさん:2013/02/02(土) 11:56:49.89
>>900
>>900

>>901
×: セキュリティ上問題がある
○: >>901 みたいな馬鹿が使うとセキュリティ上問題がある
906デフォルトの名無しさん:2013/02/02(土) 12:04:35.93
>あと、べつに system( ) にセキュリティの問題があるとか言ってるバカもいるが、
それは無視しても、セキュリティ上の問題を生じやすい関数なのは間違いないので、
可能なら避けたほうが良い。

具体的にどういう問題があるのか具体例をあげてもらえますか?
907デフォルトの名無しさん:2013/02/02(土) 12:07:39.86
> あと、べつに system( ) にセキュリティの問題があるとか言ってるバカもいるが、

この日本語がおかしいことにも気付かないとか、本当に日本人か?
908デフォルトの名無しさん:2013/02/02(土) 12:08:16.02
>>906
ググれ
炎上勉強法に乗る気はない
909デフォルトの名無しさん:2013/02/02(土) 12:11:10.99
顔真っ赤だなおまえw
910デフォルトの名無しさん:2013/02/02(土) 12:15:40.99
>>906
http://www.ipa.go.jp/security/awareness/vendor/programmingv1/b06_04.html

>>907
なんで噛み付いてるの知らんけど、意味取れるだろ。
ちなみに、>>889 は、戻り値と引数の区別も付いてないみたいだから、指摘しただけ。
911デフォルトの名無しさん:2013/02/02(土) 12:38:11.20
age
912デフォルトの名無しさん:2013/02/02(土) 12:57:32.62
const int* hage = &hoge;
これって使い道あるの?
913デフォルトの名無しさん:2013/02/02(土) 13:15:06.70
>>886
Cの規格にはsystem()の動作は処理系が文書化することとなっています。
UNIX系ならman systemを読めばいいんじゃないでしょうか。
914デフォルトの名無しさん:2013/02/02(土) 13:15:19.84
>>910
「べつに」の意味が分からん
915デフォルトの名無しさん:2013/02/02(土) 13:30:16.69
>>912
テーブルを参照する時とかどう?
916デフォルトの名無しさん:2013/02/02(土) 13:40:17.23
思ってたよりレベル低いなこのスレ
917デフォルトの名無しさん:2013/02/02(土) 13:56:43.39
>>914
>> あと、{ 君 (>>899) とは } べつに system( ) にセキュリティの問題があるとか言ってるバカもいるが、

マジで理解力がなかったんだ… チーン (w
918デフォルトの名無しさん:2013/02/02(土) 13:58:35.23
その場合は「他に」を使うのが普通だと思うが
919デフォルトの名無しさん:2013/02/02(土) 14:01:44.62
920デフォルトの名無しさん:2013/02/02(土) 14:07:29.85
横からけど、

>>896
> systemはセキュリティ上問題ある関数だから

この表現が不適切なのは、間違いない。
921デフォルトの名無しさん:2013/02/02(土) 14:10:22.95
>>918
「他に」でも噛み付いてくると思うけど?
922デフォルトの名無しさん:2013/02/02(土) 14:11:06.38
>>921
少なくとも日本語には噛み付かないわ
923デフォルトの名無しさん:2013/02/02(土) 14:17:32.53
なら、「べつに」にも噛み付くなよ。

まあ、そういうところしか噛み付けないんだろうけど (w
924デフォルトの名無しさん:2013/02/02(土) 14:18:51.52
systemとか使うだけでコンパイラが文句いう事もある関数ですから
925デフォルトの名無しさん:2013/02/02(土) 14:23:31.52
fopen( ) でも文句言う奴もあるんだぜ。
926デフォルトの名無しさん:2013/02/02(土) 14:28:40.06
そりゃerrnoとか糞仕様ですし
927デフォルトの名無しさん:2013/02/02(土) 14:30:59.94
いつまでもC++のやっつけ仕事ばかりをやってないで、Java,C#のどちかをちゃんと勉強して、現代的なプログラム・ソフトウェアの設計・手法といものを身につけた方がいいと思いますよ
928デフォルトの名無しさん:2013/02/02(土) 14:33:03.87
>>899
晒しあげw
929デフォルトの名無しさん:2013/02/02(土) 15:15:47.08
反論できずに晒しあげとか、恥ずかしいね (w
930デフォルトの名無しさん:2013/02/02(土) 15:19:26.82
>あと、べつに system( ) にセキュリティの問題があるとか言ってるバカもいるが、
>それは無視しても、セキュリティ上の問題を生じやすい関数なのは間違いないので、
>可能なら避けたほうが良い。

結局セキュリティの問題があるんじゃないか
931デフォルトの名無しさん:2013/02/02(土) 15:27:47.37
>>930
問題を起こしやすいって言ってるだけで、あるとは言ってない。
932デフォルトの名無しさん:2013/02/02(土) 15:45:12.86
保守を考えれば、起こしやすいだけで問題あると言っていいだろ
933デフォルトの名無しさん:2013/02/02(土) 15:49:16.42
言葉遊びをするつもりはないけど、
system();そのものに問題があることと、system();の使い方によっては問題があることと、
切り分けて考えているんだけど、間違っているかな…。
934デフォルトの名無しさん:2013/02/02(土) 16:00:14.36
気をつけて使えば大丈夫、と言っても、
本当に全ての人が気をつけられるか、
自分が居なくなっても安全性が保たれるか、という事まで考えるべき
ましてやもっと安全な代替物があるんだから、
強く「問題がある」と主張して使わせないようにするのが良い
935デフォルトの名無しさん:2013/02/02(土) 16:33:48.98
>>933
どんなセキュリティーホールも悪用されない限りは安全って言ってるようなものじゃないか。
936デフォルトの名無しさん:2013/02/02(土) 16:42:34.88
windows7 pro 64bit
開発環境VisualStudio 2012
C++についての質問をしようと思ったのですが、レスを書いているうちにハッと気付いて解決してしまいましたので、ここにご報告させて頂きます。
937デフォルトの名無しさん:2013/02/02(土) 19:51:12.44
そこまで書くなら、どんな質問でどんな解決方法だったのかも書けよw
938デフォルトの名無しさん:2013/02/02(土) 21:34:05.20
初心者ですが質問させてください。
c言語で、関数の引数に二次元配列を取りたいときはどのように書けばいいのでしょうか?

void check(int f[int n][int m], int x, int y, int depth)←これだとコンパイルエラーになってしまいます
配列の要素数が決まっていないとできないのでしょうか?
939デフォルトの名無しさん:2013/02/02(土) 21:38:53.16
void check(int** f,
940デフォルトの名無しさん:2013/02/02(土) 21:39:40.30
構造体ならわたせるね。構造体にいれとけばできるね
941デフォルトの名無しさん:2013/02/02(土) 21:40:24.50
>>938
void foo(int(*f)[5], int x)
{
 for (int i = 0; i < x; i++)
  for (int j = 0; j < 5; j++)
   f[i][j] = i * j;
}

int a[10][5];
foo(a, 10);

のように、普通にやる場合は最初の要素数以外が固定されてしまう

これを回避するには

void foo(int* f, int x, int y)
{
 for (int i = 0; i < x; i++)
  for (int j = 0; j < y; j++)
   f[i * y + j] = i * j;
}

int a[10][5];
foo(&a[0][0], 10, 5);

のように自分でインデックスを計算するしかない
942デフォルトの名無しさん:2013/02/02(土) 21:52:25.73
サイズが固定なら可能なんだがなぁ。
動的にしたいなら、他の人も書いてるようにポインタを扱って、添え字計算を自分で行うしかない

ちなみに二重ポインタでryというのは、記述を動的な二次元配列風にするのには使えるが、引数に二次元配列を渡す場合は違うぞ
943デフォルトの名無しさん:2013/02/02(土) 21:59:38.51
C++使えって話だ
944デフォルトの名無しさん:2013/02/02(土) 22:00:53.25
int func(int n, int a[][n])

C99で可能、C11はoptionのはず。
C++は98, 03, 11すべてで不可。
945デフォルトの名無しさん:2013/02/02(土) 22:16:04.52
void check(int (*f)[], ...)
と書けなくもないが関数内でのアクセスがメンドイ
946デフォルトの名無しさん:2013/02/02(土) 22:18:13.31
構造体とかサイズがどうとかクソなコトしなくても
#define N 10
#define M 5
typedef int ary[N][M];
int f(ary a){int r=0;for (int j=0;j<N;++j) for (int i=0;i<M;++i)r+=a[j][i];return r;}
947デフォルトの名無しさん:2013/02/02(土) 22:21:22.19
配列のtypedefは悪魔的挙動を示すからあまり使わない方がいい
せいぜい配列ポインタの解説に使う程度で

Cで要素数1の配列をtypedefして
C#などの参照型みたいに扱えるように見せるテクニックはあるけど
正直悪魔的だと思う
948デフォルトの名無しさん:2013/02/02(土) 22:24:44.03
>>947
標準ライブラリでも使われているテクニックなのに大袈裟すぎだろ
949デフォルトの名無しさん:2013/02/02(土) 22:25:47.34
C++なら
template <size_t U0,size_t U2>int f(int&a[U0][U1]){...}
950デフォルトの名無しさん:2013/02/02(土) 22:26:50.92
>>947
クソにまみれてろ
951デフォルトの名無しさん:2013/02/02(土) 22:31:25.67
>>886,889
system()についてですが処理系依存なのは分かったのですが、質問はsystem()の動作についてではありません。
system()のsub shellと同期するのか非同期なのかですが、もっとわかりやすく言い換えれば、user code(呼び出し元)がsystem()の完了復帰までブロックされているのかどうかということです。
つまりfunc2()の時点でsystem(cmd)の呼び出しは、cmdはsubshellの実行し完了していて、しかもfunc2はそのcmd完了まで待機してる(つまりプロセス・スレッドとして同期)なのが、
言語仕様で保障されているのかブロックするかどうかすらも処理系依存なのかどうかとういことです。
なおjavaではjdk14までならRuntime.exec(cmd)ですが非同期処理で、execはcmdを完了するかに係わらずすぐ復帰し、runtimeはcmdを非同期(別スレッドなど)で実行します。
引き続きお願いします。
952デフォルトの名無しさん:2013/02/02(土) 22:39:16.41
>>934
C とか C++ 使うの止めた方がいいんじゃね。

>>935
さすがにその解釈は無理があるだろ。

>>951
> 処理系依存なのは分かった

だったら、その処理系のスレに逝けよ。
953デフォルトの名無しさん:2013/02/02(土) 22:44:41.55
C++でプロセスやスレッドを使える人(使っている人)はまずいないのでsystem()の議論は難しいでしょうね
954デフォルトの名無しさん:2013/02/02(土) 22:45:41.14
>>951
あんたが聞いてるのはどう見てもsystem()の動作だよ。
955デフォルトの名無しさん:2013/02/02(土) 22:50:28.72
自分の知ってるsystemは同期型だが。windowsだとどれもそうだろ。
javascriptなどから、外部コマンド呼びだそうとしてAPIのShellExecuteを使うと非同期になって
javascriptなのにプログラムが面倒になった経験がある。javascriptにはsystemがない。
956デフォルトの名無しさん:2013/02/02(土) 22:51:04.12
>>951
で、>>913の通り規格では決まってません。
957デフォルトの名無しさん:2013/02/02(土) 22:57:51.51
systemに渡す引数が処理系依存するわけで、systemだけにこだわってもダメだろう。
いちおう、同期だと想定してやってみて不具合が出たら直したらいい。
これが非同期で動作するコンパイラは見たことがない。
958デフォルトの名無しさん:2013/02/02(土) 23:03:29.11
>>951
上の方でも書いてあるコードを実際に自分で試せよ。同期か非同期かくらいわかるだろ
959デフォルトの名無しさん:2013/02/02(土) 23:09:58.15
C/C++使いには「同期」とか「ブロック」とかスレッド関連の議論をするとかなり難しいし、ましてプロセス(システム)の話題も絡めるなると、質問自体が一体全体何の議論であるのかを理解できる人は一握りもいないんじゃないか。
960デフォルトの名無しさん:2013/02/02(土) 23:14:35.72
マルチコアの時代では、非同期は一般的だろ。
教科書なんかには乗りにくいかもしれないが、概念は難しくはない。
ただしエラー修正やデバッグはしにくい。
961デフォルトの名無しさん:2013/02/02(土) 23:25:35.80
system()についてですが、user code blockがブロックされるのかどうかまでも環境・処理系存となると、同期ようと非同期ようの2つ用意しないといけなくてかなり煩雑なんですよ。
最近だとvc++はもちろんgcc (g++)すらも使わないで、c99仕様で、dll,soを作れるようになってるので、vc++ (win sys), gcc (linux sys)など処理系べったりのc/c++コードはそろそろ卒業かなって。
962デフォルトの名無しさん:2013/02/02(土) 23:26:33.04
Qtあたりでも使えばいいんじゃないでしょうかね
963デフォルトの名無しさん:2013/02/02(土) 23:39:07.35
そしたらsystemが非同期だと仮定して、待ちをいれろ。その関数をsystem0とでもする。
964デフォルトの名無しさん:2013/02/02(土) 23:56:00.95
>>961
なんで system( ) に固執しているんだろう?
そもそも使うのやめたほうが良いぞって言われてるんだが、人の話を聞かないタイプなんだろうな…
965デフォルトの名無しさん:2013/02/02(土) 23:57:31.28
systemの引数が確実に環境依存
966デフォルトの名無しさん:2013/02/03(日) 00:34:38.24
どういうのをsystem関数で動かそうとしてるのか、書かないから、もめるんだよ
例示してるのはどうみても環境依存ですから
それで汎用的な答えをもらおうとしてるところが...
967デフォルトの名無しさん:2013/02/03(日) 01:17:23.83
system関数なんて使うなって言われてんのに・・・
OS依存になるだろうけど、元々systemの挙動自体環境依存なんだから
環境にあった実行関数使え
968デフォルトの名無しさん:2013/02/03(日) 01:34:57.71
どうでもいい話に限って伸びるよな
969デフォルトの名無しさん:2013/02/03(日) 01:37:03.95
わかりやすいとやぱ反応する人多いでしょ。
俺みたいにw
やっぱfork()でしょ。
970デフォルトの名無しさん:2013/02/03(日) 07:26:09.19
環境非依存にこだわるのも必要なとき、必要な範囲だけでいいんだぞ。
徹底しても労力に見合わない。環境を決めてその範囲で安全を追求する現実的だし意義も大きいぞ。
971デフォルトの名無しさん:2013/02/03(日) 07:26:35.18
そこは spawn() で
972デフォルトの名無しさん:2013/02/03(日) 11:42:04.10
でっどりー
973デフォルトの名無しさん:2013/02/03(日) 20:02:35.89
as3だとthis使いまくるんだけど、c++はas3のthisに相当する機能がなくて不便ですね
974デフォルトの名無しさん:2013/02/03(日) 22:05:52.57
型が静的なんでそういう便利さはないね
975デフォルトの名無しさん:2013/02/03(日) 22:53:22.62
>>973
c++ にも this は十分あると思うのですが、AcsionScript3 にはできて c++ にはできない this の使い方とはなんでしょうか?
976デフォルトの名無しさん:2013/02/03(日) 23:21:16.96
>>975
C++の人はthis->filedName = "SSS";なんてやるの
普通やらないでしょ

this.が無いとフィールド or ローカル変数か判断がしにくいと思ったんだ。javaの人もthisよく使うって言ってたよ。
m_ ってするのもダサいしさ、そんだけ
C++にそんな機能は無いって言ったのは間違い
977デフォルトの名無しさん:2013/02/03(日) 23:24:15.17
this 必須ならいいけど、必須じゃないから何の判断にもならない
たまに this-> って書く人がいるけど、命名で強制的に区別させろと
978デフォルトの名無しさん:2013/02/03(日) 23:27:08.00
thisなんてラムダ使う時ぐらいしか使わんな
979デフォルトの名無しさん:2013/02/03(日) 23:29:15.37
AS3とかjavaってthisは省略できないんだっけ?
980デフォルトの名無しさん:2013/02/03(日) 23:33:36.27
ASはよく知らんが
Javaで省略できないわけがない
981デフォルトの名無しさん:2013/02/03(日) 23:35:12.52
書き忘れてもコンパイル通るものを判断基準にできるわけがないし
そもそもthis->とか長過ぎてウザくてダサい
m_の方がよっぽど良いわ
982デフォルトの名無しさん:2013/02/03(日) 23:44:30.86
生成コードに影響しなければ this-> ってやってしまうのは未熟者ですかねえ‥‥
983デフォルトの名無しさん:2013/02/03(日) 23:46:27.06
メンバを表示するためにthis->で入力補完させる人はいる
最後に一括削除して欲しいが
984デフォルトの名無しさん:2013/02/04(月) 00:32:26.80
IDEで色分けするから大体入力補完目的になるよな
985デフォルトの名無しさん:2013/02/04(月) 00:34:25.66
同じクラスのを引数にとる時とかはthisをつけてるな
それ以外は全部省略、代わりちょっと冗長でも分かりやすい名前をつけるようにしてる
ローカル変数は使い捨てをいい事にかなり手抜きで命名をしてる
986デフォルトの名無しさん:2013/02/04(月) 00:39:40.52
>>984
色分けされるIDEばかりじゃないから
当てにしない方がいい
987デフォルトの名無しさん:2013/02/04(月) 02:16:49.54
コーディングの流儀に関する部分は言語の優劣ではありません。
988デフォルトの名無しさん:2013/02/04(月) 02:42:27.47
うめ
989デフォルトの名無しさん:2013/02/04(月) 05:42:41.60
【初心者歓迎】C/C++室 Ver.82【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1359924126/
990デフォルトの名無しさん:2013/02/04(月) 08:07:24.66
>>989
80代からテンプレートが変、次代にはちゃんともとどおりにしておくように。
991デフォルトの名無しさん:2013/02/04(月) 15:06:29.63
int **n = new int*[10];
delete[] n; // ←ここはnだけでいいんですか?
992デフォルトの名無しさん:2013/02/04(月) 15:16:48.40
いいんです
993デフォルトの名無しさん:2013/02/04(月) 15:17:25.12
そんなもん使うなよ
994デフォルトの名無しさん:2013/02/04(月) 15:31:33.39
libgdbってどんなものなの?
995デフォルトの名無しさん:2013/02/04(月) 16:44:37.15
libをとってみる
gdb
gdb を用いたデバッグ方法
996デフォルトの名無しさん
gdb - GNU デバッガ