[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/09 11:16 / Filesize : 192 KB / Number-of Response : 848
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

スレを勃てるまでもないC/C++の質問はここで 5



1 名前: ◆h6A7qfFFu6 mailto:sage [2008/12/29(月) 11:05:07 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
pc11.2ch.net/test/read.cgi/tech/1221633708/

100 名前:デフォルトの名無しさん [2008/12/30(火) 13:49:40 ]
>>99
それならスマートポインタ(笑)もいらないだろ馬鹿

101 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 13:50:30 ]
>>100
RAIIを知らない馬鹿が出てきたよ

102 名前:デフォルトの名無しさん [2008/12/30(火) 14:03:27 ]
マジレスすると、
単純にnew delete の解放忘れで発生するバグと
ごちゃごちゃしたスマートポインタの使い間違いによるバグと
どっちが発生しやすいと思う?

後者の方が断然多いと思うのだが。

103 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 14:12:15 ]
>>77みたいなのがスマートポインタ?

104 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 14:16:44 ]
ゴチャゴチャしたスマートポインタって、たとえばどんな?

105 名前:デフォルトの名無しさん [2008/12/30(火) 14:25:06 ]
auto_ptr
weak_ptr
intrusive_ptr
scoped_ptr


106 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 14:26:17 ]
>>105
それをゴチャゴチャしていると感じるなら、単にそれはお前の勉強不足。
自分の勉強不足を棚に上げてよく言うよ

107 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 14:29:46 ]
スマートポインタですら管理できないならC/C++はやめた方が・・・

108 名前:デフォルトの名無しさん [2008/12/30(火) 14:33:19 ]
>>106
で、new-deleteよりスマートポインタの方が問題が発生しにくいことについて、
お前の「勉強」の成果は述べないの?



109 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 14:35:21 ]
>>108
人の事を気にする前に自分の能の無さを嘆けよw

110 名前:デフォルトの名無しさん [2008/12/30(火) 14:39:43 ]
new-deleteの方が、スマートポインタより問題が少ないという仮説を述べた。
それに対して>>106は勉強不足とか頓珍漢な事を言っている。

勉強不足と言うなら、どう勉強不足なのか具体的に説明しろ。
それが出来ないなら>>106は単なる馬鹿だ。話にならん。

111 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 14:43:54 ]
>>110
うぜえんだよゴチャゴチャと
スマートポインタについて説明しだすと長くなる
勉強にも長い時間がかかるしな

お前の屁理屈に付き合ってる時間はない

112 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 14:46:22 ]
仮説って・・・
根拠もなく「俺は思うのだが」を仮説と呼ぶのか?

113 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 14:51:39 ]
シチューの方が、カレーよりうまいという仮説を述べた。
それに対して>>106は食わず嫌いだとか頓珍漢な事を言っている。

食わず嫌いと言うのなら、どう食わず嫌いなのか具体的に説明しろ。
それが出来ないなら>>106は単なる馬鹿だ。話にならん。

114 名前:デフォルトの名無しさん [2008/12/30(火) 15:10:05 ]
GCもnewも使わず、STL一本でいけば良いと思うんだが。
そしたら自動変数と同じ使い方でしょ。

115 名前:デフォルトの名無しさん [2008/12/30(火) 15:11:36 ]
速度や安定性重視ならはじめに確保したメモリを使い回すのが良いし。
頻繁に動的確保するのは、速度と安定面でよくない。

116 名前:デフォルトの名無しさん [2008/12/30(火) 15:15:46 ]
STLを含めて動的確保は実測してみると速度が遅い。
C++の自動変数だと、あらかじめ確保した領域を、使い回すから、確保と解放が無くて良い。

117 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 15:39:07 ]
>>116
自動変数はスタック領域だから、あらかじめ確保した領域を使いまわすってのは
ちょっと違うだろ

まぁ 「厳密にいえば間違ってはいない」 ってやつだろうが

118 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 15:40:43 ]
ageてる釣り野郎に反応しちゃダメだってば



119 名前:デフォルトの名無しさん [2008/12/30(火) 15:53:49 ]
スタック領域 = あらかじめ確保した領域

必要なサイズがコンパイル時に決定されて、それを確保したらC++が管理して使い回す。

120 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 16:21:57 ]
スマートポインタに迷ったらshared_ptr/array使っておけばいいじゃない。
循環参照?何それおいしいの?

まあでもスマートポインタの乱立を許したのはC++の失策だったと思う。
auto_ptrの代わりにshared_ptrをC++98の時点で入れておけば少しは良くなったと思うんだけど。

121 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 16:25:14 ]
>>108
こいつ頭おかしいな。
これで仕事とか勤まるのか?

122 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 16:27:29 ]
>>121
こいつ頭おかしいな。
これで仕事とか勤まるのか?

123 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 16:29:37 ]
自作自演くせえなあ

124 名前:4 mailto:sage [2008/12/30(火) 16:30:05 ]
4ですが、あまりのスルーされっぷりに泣きそうです

125 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 16:32:59 ]
>>124
>>5-7>>12

126 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 16:43:10 ]
>>123
だってマジで頭おかしいもん。
new-deleteのほうが問題起きないって、証明どころか傍証をあげるとか
説明もいっさいなしで、>>108の頭の中では、いつのまにか証明済みっていうか
「事実」になちゃってるわけでしょ?

>>110で、多少おかしいと思ったのか「仮説」って言い直してるけど、
自分から言い出したのに、相変わらず相手に反論しろって言ってるし。

127 名前:デフォルトの名無しさん [2008/12/30(火) 16:50:11 ]
new-deleteでは、newしたら必ずdeleteすることだけを覚えておけば問題が起きない。

スマートポインタは乱立するそれぞれのポインタの特性を覚えておかなければいけない。
例えば、shared_ptrを使うところをweak_ptr を使ったら死亡。

故に、new-deleteの方が問題起きない。

証明終

128 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 16:51:39 ]
>>127
俺がいまいじってるソースは、異常ケースでreturnして、delete忘れてるってのが
何箇所もあるんだけど。



129 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 16:52:36 ]
>>128
それはお前があほなだけ

130 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 16:54:21 ]
すげぇ真性のバカだな
証明終
とか書いちゃってもうみてらんない

131 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 16:56:18 ]
注意してコーディングしてればなんとかなるってもんじゃないから、
あたらしい言語はGC採用してるんだろ。

132 名前:デフォルトの名無しさん [2008/12/30(火) 16:59:13 ]
つまり、C++は標準のGCを備えない時代遅れのダメ言語ってことだな。

133 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 17:01:52 ]
もうそういう事でいいようぜぇ

134 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 17:02:26 ]
悔しいが、反論できない、、

135 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 17:03:54 ]
C++/CLIがあるじゃないか

136 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 17:03:57 ]
Dみたいに、GCあって、スコープが外れたらデストラクタ(相当)が呼ばれるって
仕組みがあればいいけど、ま、C++ならスマートポインタでいいかな。

137 名前:デフォルトの名無しさん [2008/12/30(火) 17:06:10 ]
auto と同じ使い方だけで良いんだったらSTL使えばいいじゃん

138 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 17:07:05 ]
GCはメモリに対してリークの心配がなくなるというだけであって、
それ以外のリソースには無力だぞ



139 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 17:09:22 ]
>>130
反論できないからってごまかしてんじゃねーよカス

140 名前:デフォルトの名無しさん [2008/12/30(火) 17:11:30 ]
GCが標準装備だったら、高性能なハードでない場合に困るだろ。
組み込みとか

組み込みシステム - Wikipedia

具体例
家庭用電気機械器具
炊飯器、洗濯機、エアコンディショナー
デジタルカメラ
テレビ、ビデオデッキなどAV機器
ゲーム機、携帯電話などのデジタル家電
エレベーター
信号機
複写機
自動販売機
パチンコ機、パチスロ機、スロットマシン

141 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 17:13:54 ]
世の中、参照カウントでGC付きって言っている言語処理系だってあるんだから、
C++でコーディングするときも常にshared_ptrを使えばいいんだよ。

>>127の「newしたら必ずdeleteすること」を次のように言い換える。
new→newしてshared_ptrの構築
delete→reset()
128の問題は無くなるし、循環参照もnew-deleteで(手動でやれば)問題にならないならば、
shared_ptrでも手動でやれば問題ないはず。

性能とか組込とか知らんがなという前提で。

142 名前:デフォルトの名無しさん [2008/12/30(火) 17:18:21 ]
ガベージコレクションはプログラムの本来の動作とは別に時間のかかる処理であり、実装によっては一旦処理が開始されると他の処理を止め、CPUを長時間(数百ミリ秒から数十秒)占有することもある。
さらに、ガベージコレクションの動作タイミングの予測やCPUの占有時間の事前予測などが困難なことから、デッドラインが決められてるリアルタイムシステムには向いていない。


ガベージコレクション - Wikipedia
ja.wikipedia.org/wiki/%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3

143 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 17:19:32 ]
あんまり関数を分けると重くなるから良くないって聞いたことあるけど、それって
昔のCPUがしょぼしょぼの時の話しで今ではそれほど気にしなくていい?
たまに数行づつで関数に分けてる人いるけどそのぐらいまでやっちゃっていいの?

144 名前:デフォルトの名無しさん [2008/12/30(火) 17:22:38 ]
>>143
程度によるが、最新のコンパイラを使っていれば差はたいしてでない。
分割したりオブジェクト指向にすることは、管理が楽になるという利点がある。

145 名前:デフォルトの名無しさん [2008/12/30(火) 17:25:21 ]
でも、再帰呼び出しは確実に遅くなるよ。ループに書き換えられるという再帰定理というのがあるので
なるべく再帰呼び出しは使わない方が良い。

146 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 17:26:55 ]
「早すぎる最適化は諸悪の根源」

実行性能が許容できないくらい悪くて、その原因が本当に
関数呼び出しのコストだと分かった時点で初めて
そういう小手先の手段に出るものだ

そんな関数の分け方くらいではまず間違いなく性能に何の影響もないと思うが

147 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 17:27:36 ]
>>143
数行とか一行の関数を書くとか普通だから。

148 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 17:29:27 ]
>>139
おまえは常に「覚えておいて」プログラム組んでろカス



149 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 17:30:33 ]
>>145
意味が分からない。
「末尾再帰だったら、再帰でもいい」とかだったら意味が通じるけど。
(再帰だって、速度に問題なかったらふつーに使うわな。あたりまえだけど)

150 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 17:31:25 ]
再帰はループに書き換えられるよ!って言ってるんだろう

151 名前:デフォルトの名無しさん [2008/12/30(火) 17:35:07 ]
関数呼び出しに、時間食ってるのでは? と予測してマクロ関数に書き換えてみたり
するのだが、ほとんど差が出ないという経験から関数として\を使うマクロは使わないことにしている。

152 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 17:39:09 ]
ありがとう。とりあえずガンガン関数に分けちゃって問題ないんだね
これからはガンガン分けていくことにします

153 名前:デフォルトの名無しさん [2008/12/30(火) 17:44:46 ]
MS-BASICはガベージコレクション内蔵らしいね

154 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 17:47:08 ]
>>143
数行の関数を作ってもOKだし推奨

関数の呼び出しのコストが問題になるのはループ内とかとにかく繰り返し多数呼び出される場合だね。そういう場合はinlineを使う。
仮想関数は少し重めだからループ内では要注意

最近のコンパイラはinlineの指定をしなくても勝手に判断してインライン展開をしてくれるから気にしないでいい。

155 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 17:52:21 ]
>>153
ああ文字列の操作領域だろ
確か3Kバイトが標準で一杯になったらGCを走らせる
8ビットならではの世界だった

N88BASIC(86)はもう少し広いだろうが

156 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 18:01:55 ]
突然マイコンが止まるあれだね



157 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 18:11:57 ]
そうそう
BASICで文字列を頻繁に操作していると時々止まった
その謎が解けるまで(つまりはGCだという事を知るまで)時間がかかった

158 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 18:29:05 ]
GC GCってゲームキューブじゃないのなw
何の騒ぎかわからんかったよ



159 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 18:31:28 ]
>158
ゲーム関連板ならゲームキューブのことだろうけど
ここはプログラム板だぞw ガベージコレクションに決まっておろう

160 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 19:07:49 ]
どの言語を覚えればいいの・・?
C言語ってだめなの??

161 名前:デフォルトの名無しさん [2008/12/30(火) 19:09:13 ]
Cでいいよ。C++でもいいけど。

162 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 19:25:30 ]
C++ってCの付けたし見たいなものだよね・・?

163 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 19:26:54 ]
CがC++の一部を抜き出したものだと思え

164 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 19:28:13 ]
わかりました

165 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 19:29:05 ]
>>162
いまや全くの別物のくせに、そういう偏見が間違っているとも言えない微妙な関係。

166 名前:デフォルトの名無しさん [2008/12/30(火) 19:37:27 ]
まあ、質問スレを共通にされるくらいだから、同じようなものだ

167 名前:デフォルトの名無しさん [2008/12/30(火) 20:50:04 ]
結論としては、shared_ptr以外は不要ってことで、おk?

168 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 20:52:27 ]
>>167
他のスマートポインタも使い方憶えればいいんじゃない?



169 名前:デフォルトの名無しさん [2008/12/30(火) 20:55:54 ]
struct shiken_in test;

memset(&test,0,sizeof(test));

このような文があるのですが、
&testがさす意味はなんなのでしょうか?
&がつく意味がよくわからないのです

170 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 20:58:52 ]
アドレスです

171 名前:デフォルトの名無しさん [2008/12/30(火) 21:02:39 ]
>>168
覚えたとしても、それらを使い間違わないようにビクビクしながら使うよりは、
単純にshared_ptr使った方が、バグが少ない堅いコーディングができると思うけど。

172 名前:デフォルトの名無しさん [2008/12/30(火) 21:07:19 ]
>>170
ポインタの宣言がなくてもアドレスは使用可なのでしょうか
ていうか、子の場合アドレスで指定する意味はなんでしょうか?

173 名前:デフォルトの名無しさん [2008/12/30(火) 21:10:39 ]
コピーを避けるためです。

174 名前:デフォルトの名無しさん [2008/12/30(火) 21:30:52 ]
ポインタならコピーをされる?

175 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 21:38:00 ]
ポインタなら、ポインタだけ渡せばいいからデータ自体はコピーされない


176 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 21:43:01 ]
>>167
自ら使うのはshared_ptrだけでもいい。次期標準にも入る。

入るおかげで、C++0xでは、標準に入っていないのは無視してOKと言えるようになるんだが。
例えば、>>105で挙げられているintrusive_ptrは知っていても大多数が使ったことないだろう(俺もだ)。
scoped_ptrはauto_ptrとまとめてunique_ptrになる。
#びくびくせず自信を持って使えるならweak_ptrも使ってほしい。


177 名前:169 [2008/12/30(火) 21:51:30 ]
ますますよくわからなくなってきた

まず、構造体を宣言して
sizeof(test)でなにをかえすんだろうか
testの中身は宣言だけしてるだけで、実際何もはいってない?いや、0ならはいってるのかな
で、memsetでそのtestのアドレスの先頭からだけど、testのアドレスの中身じゃなくて、アドレスの
先頭から0で埋めるとかおかしくないのかな。アドレスであってアドレスが差す値じゃないから。

178 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 21:57:22 ]
memsetは、アドレスが指す領域を指定した値で埋める関数だよ




179 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 21:57:33 ]
sizeof testはsizeof (struct shiken_in)と同じと決まっている。
memsetにはアドレスを渡すけど、
memsetが0で埋めるのは、アドレスが差す値。

180 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 21:59:08 ]
変数じゃなくて、変数の「場所」を渡してる
memsetはその「場所」をみてそこをsizeof(test)バイト分0で埋めてる

181 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 22:15:59 ]
>>171
まあ、でも、そこまで難しいものでもないし。

182 名前:169 [2008/12/30(火) 22:20:36 ]
実際、sizeof(test)は何バイトになるのでしょうか?



183 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 22:22:30 ]
わかりません

184 名前:デフォルトの名無しさん [2008/12/30(火) 22:26:41 ]
>>182
testの型による。
testはどう宣言してるの?

185 名前:169 [2008/12/30(火) 22:40:44 ]
struct shiken_in test;

>>184
はい、このように宣言しております

186 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 22:47:17 ]
やべぇちょっと笑ってしまった

187 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 22:58:22 ]
structなんだからstruct shiken_in がなんなのか探せ

188 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 23:00:07 ]
そもそも shiken_in が分かったところで
アラインメントの設定が分からんとサイズは分からんだろ。



189 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 23:02:16 ]
>182
shiken_in のサイズになる。
具体的には環境による。

190 名前:169 [2008/12/30(火) 23:05:34 ]
sockaddr_in
すみません、正確にはこういう構造体です
中身はかいてません。sizeofしたら何バイトになるのかな?

191 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 23:06:45 ]
sizeof すればいいじゃん。

192 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 23:13:27 ]
だから構造体のメンバの内容とアライメントの2つの情報がないと誰にも答えられないんだってば。
そして理屈抜きでサイズだけ知りたいなら5行くらいのソースを書いてsizeofを見るのが一番早い。

193 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 23:27:35 ]
typedef struct DADADADADADADA
{
    char p[1024];
} CDDB;

CDDB cddb;

int main(void)
{
    return cddb;
}


194 名前:デフォルトの名無しさん [2008/12/30(火) 23:28:33 ]
printf("sizeof(struct sokaddr_in)=%d\n", sizeof(struct sockaddr_in));

195 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 23:36:16 ]
printf("%d\n", sizeof(printf));

196 名前:デフォルトの名無しさん [2008/12/31(水) 12:48:14 ]
>>140
言語が標準GCを備えることと、GCが言語の使用と不可分でシステムに組み込まれることとは別だろ。

「高性能なハード」とやらの場合には、GCを組み込んで
「高性能なハード」でない場合には、GCを組み込まず手動のメモリ管理を使用してシステムを構築すればいい。

C++はマルチパラダイム言語とやらを標榜するくらいだから、それくらい普通にするだろ。

それなのに何故標準GCを提供しないのか意味不明。
きっと言語設計者およびその取り巻きはバカなんだろうな。

197 名前:デフォルトの名無しさん mailto:sage [2008/12/31(水) 12:55:47 ]
ということにしたいのですね

198 名前:デフォルトの名無しさん [2008/12/31(水) 12:58:24 ]
したいのではなく、事実なのです。



199 名前:デフォルトの名無しさん mailto:sage [2008/12/31(水) 12:58:42 ]
>>196
高性能なハードでない場合には手動のメモリ管理を使用してってwwwwwwww
その辺が自動化できればGCを導入するのに必要な苦労がいないし、GCもいらないじゃんwwww
バカかこいつは

200 名前:デフォルトの名無しさん mailto:sage [2008/12/31(水) 12:59:16 ]
ということにしたいのですね






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<192KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef