トップページ⇒tech
1001コメント287KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001 ◆h6A7qfFFu6 2008/12/29(月) 11:05:07
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
http://pc11.2ch.net/test/read.cgi/tech/1221633708/
0154デフォルトの名無しさん2008/12/30(火) 17:47:08
>>143
数行の関数を作ってもOKだし推奨

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

最近のコンパイラはinlineの指定をしなくても勝手に判断してインライン展開をしてくれるから気にしないでいい。
0155デフォルトの名無しさん2008/12/30(火) 17:52:21
>>153
ああ文字列の操作領域だろ
確か3Kバイトが標準で一杯になったらGCを走らせる
8ビットならではの世界だった

N88BASIC(86)はもう少し広いだろうが
0156デフォルトの名無しさん2008/12/30(火) 18:01:55
突然マイコンが止まるあれだね

0157デフォルトの名無しさん2008/12/30(火) 18:11:57
そうそう
BASICで文字列を頻繁に操作していると時々止まった
その謎が解けるまで(つまりはGCだという事を知るまで)時間がかかった
0158デフォルトの名無しさん2008/12/30(火) 18:29:05
GC GCってゲームキューブじゃないのなw
何の騒ぎかわからんかったよ
0159デフォルトの名無しさん2008/12/30(火) 18:31:28
>158
ゲーム関連板ならゲームキューブのことだろうけど
ここはプログラム板だぞw ガベージコレクションに決まっておろう
0160デフォルトの名無しさん2008/12/30(火) 19:07:49
どの言語を覚えればいいの・・?
C言語ってだめなの??
0161デフォルトの名無しさん2008/12/30(火) 19:09:13
Cでいいよ。C++でもいいけど。
0162デフォルトの名無しさん2008/12/30(火) 19:25:30
C++ってCの付けたし見たいなものだよね・・?
0163デフォルトの名無しさん2008/12/30(火) 19:26:54
CがC++の一部を抜き出したものだと思え
0164デフォルトの名無しさん2008/12/30(火) 19:28:13
わかりました
0165デフォルトの名無しさん2008/12/30(火) 19:29:05
>>162
いまや全くの別物のくせに、そういう偏見が間違っているとも言えない微妙な関係。
0166デフォルトの名無しさん2008/12/30(火) 19:37:27
まあ、質問スレを共通にされるくらいだから、同じようなものだ
0167デフォルトの名無しさん2008/12/30(火) 20:50:04
結論としては、shared_ptr以外は不要ってことで、おk?
0168デフォルトの名無しさん2008/12/30(火) 20:52:27
>>167
他のスマートポインタも使い方憶えればいいんじゃない?
0169デフォルトの名無しさん2008/12/30(火) 20:55:54
struct shiken_in test;

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

このような文があるのですが、
&testがさす意味はなんなのでしょうか?
&がつく意味がよくわからないのです
0170デフォルトの名無しさん2008/12/30(火) 20:58:52
アドレスです
0171デフォルトの名無しさん2008/12/30(火) 21:02:39
>>168
覚えたとしても、それらを使い間違わないようにビクビクしながら使うよりは、
単純にshared_ptr使った方が、バグが少ない堅いコーディングができると思うけど。
0172デフォルトの名無しさん2008/12/30(火) 21:07:19
>>170
ポインタの宣言がなくてもアドレスは使用可なのでしょうか
ていうか、子の場合アドレスで指定する意味はなんでしょうか?
0173デフォルトの名無しさん2008/12/30(火) 21:10:39
コピーを避けるためです。
0174デフォルトの名無しさん2008/12/30(火) 21:30:52
ポインタならコピーをされる?
0175デフォルトの名無しさん2008/12/30(火) 21:38:00
ポインタなら、ポインタだけ渡せばいいからデータ自体はコピーされない
0176デフォルトの名無しさん2008/12/30(火) 21:43:01
>>167
自ら使うのはshared_ptrだけでもいい。次期標準にも入る。

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

まず、構造体を宣言して
sizeof(test)でなにをかえすんだろうか
testの中身は宣言だけしてるだけで、実際何もはいってない?いや、0ならはいってるのかな
で、memsetでそのtestのアドレスの先頭からだけど、testのアドレスの中身じゃなくて、アドレスの
先頭から0で埋めるとかおかしくないのかな。アドレスであってアドレスが差す値じゃないから。
0178デフォルトの名無しさん2008/12/30(火) 21:57:22
memsetは、アドレスが指す領域を指定した値で埋める関数だよ
0179デフォルトの名無しさん2008/12/30(火) 21:57:33
sizeof testはsizeof (struct shiken_in)と同じと決まっている。
memsetにはアドレスを渡すけど、
memsetが0で埋めるのは、アドレスが差す値。
0180デフォルトの名無しさん2008/12/30(火) 21:59:08
変数じゃなくて、変数の「場所」を渡してる
memsetはその「場所」をみてそこをsizeof(test)バイト分0で埋めてる
0181デフォルトの名無しさん2008/12/30(火) 22:15:59
>>171
まあ、でも、そこまで難しいものでもないし。
01821692008/12/30(火) 22:20:36
実際、sizeof(test)は何バイトになるのでしょうか?

0183デフォルトの名無しさん2008/12/30(火) 22:22:30
わかりません
0184デフォルトの名無しさん2008/12/30(火) 22:26:41
>>182
testの型による。
testはどう宣言してるの?
01851692008/12/30(火) 22:40:44
struct shiken_in test;

>>184
はい、このように宣言しております
0186デフォルトの名無しさん2008/12/30(火) 22:47:17
やべぇちょっと笑ってしまった
0187デフォルトの名無しさん2008/12/30(火) 22:58:22
structなんだからstruct shiken_in がなんなのか探せ
0188デフォルトの名無しさん2008/12/30(火) 23:00:07
そもそも shiken_in が分かったところで
アラインメントの設定が分からんとサイズは分からんだろ。
0189デフォルトの名無しさん2008/12/30(火) 23:02:16
>182
shiken_in のサイズになる。
具体的には環境による。
01901692008/12/30(火) 23:05:34
sockaddr_in
すみません、正確にはこういう構造体です
中身はかいてません。sizeofしたら何バイトになるのかな?
0191デフォルトの名無しさん2008/12/30(火) 23:06:45
sizeof すればいいじゃん。
0192デフォルトの名無しさん2008/12/30(火) 23:13:27
だから構造体のメンバの内容とアライメントの2つの情報がないと誰にも答えられないんだってば。
そして理屈抜きでサイズだけ知りたいなら5行くらいのソースを書いてsizeofを見るのが一番早い。
0193デフォルトの名無しさん2008/12/30(火) 23:27:35
typedef struct DADADADADADADA
{
    char p[1024];
} CDDB;

CDDB cddb;

int main(void)
{
    return cddb;
}
0194デフォルトの名無しさん2008/12/30(火) 23:28:33
printf("sizeof(struct sokaddr_in)=%d\n", sizeof(struct sockaddr_in));
0195デフォルトの名無しさん2008/12/30(火) 23:36:16
printf("%d\n", sizeof(printf));
0196デフォルトの名無しさん2008/12/31(水) 12:48:14
>>140
言語が標準GCを備えることと、GCが言語の使用と不可分でシステムに組み込まれることとは別だろ。

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

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

それなのに何故標準GCを提供しないのか意味不明。
きっと言語設計者およびその取り巻きはバカなんだろうな。
0197デフォルトの名無しさん2008/12/31(水) 12:55:47
ということにしたいのですね
0198デフォルトの名無しさん2008/12/31(水) 12:58:24
したいのではなく、事実なのです。
0199デフォルトの名無しさん2008/12/31(水) 12:58:42
>>196
高性能なハードでない場合には手動のメモリ管理を使用してってwwwwwwww
その辺が自動化できればGCを導入するのに必要な苦労がいないし、GCもいらないじゃんwwww
バカかこいつは
0200デフォルトの名無しさん2008/12/31(水) 12:59:16
ということにしたいのですね
0201デフォルトの名無しさん2008/12/31(水) 12:59:29
>>199
お前は、先ず日本語を勉強しろ。
0202デフォルトの名無しさん2008/12/31(水) 13:00:23
>>196
GCの有無で言語仕様が大きく変わるんだよ。
GCが必要な人はGCを持つ言語を使えばいい。GCが不要な人はGCがない言語を使えばいい。
0203デフォルトの名無しさん2008/12/31(水) 13:04:28
>>202
変わるのではなく、パラダイムが追加されればいいんだろ。
GCが必要な人はC++をGCを持つ言語として使えばいい。GCが不要な人はC++をGCがない言語として使えばいい。

C++はそういうことが得意な言語じゃないのか?
0204デフォルトの名無しさん2008/12/31(水) 13:05:56
C++はgcがない言語
0205デフォルトの名無しさん2008/12/31(水) 14:17:07
>>203
パラダイムという言葉を使わずに、C++にGCを実装するのに必要なことは何か言ってごらん。
0206デフォルトの名無しさん2008/12/31(水) 14:18:57
ゲームキューブで議論するスレだったのか
0207デフォルトの名無しさん2008/12/31(水) 14:21:44
C++/CLI使えばいいじゃん
0208デフォルトの名無しさん2008/12/31(水) 14:27:23
>>203
一方C++はスマートポインタを実装した。
0209デフォルトの名無しさん2008/12/31(水) 14:36:33
一方STL野郎は独自のアルゴリズムを実装した
0210デフォルトの名無しさん2008/12/31(水) 15:00:21
>>205
先ず、お前の勘違いを訂正する。
実装するのはC++にではなく、C++の処理系に対して。

C++の処理系にGCを実装するのに必要なことは
GCの設計/コーディング/デバグ

それ以前に、C++の言語仕様にGCの仕様を追加する必要がある。
0211デフォルトの名無しさん2008/12/31(水) 15:07:23
お手軽に付け外しができる機能とでも思ってるのか
0212デフォルトの名無しさん2008/12/31(水) 15:09:38
日本語でおk
0213デフォルトの名無しさん2008/12/31(水) 15:28:19
お前らがグダグダ何と言おうが、既に将来の規格改定でGC導入は間違いない路線。
残念ながらC++0xには間に合わなさそうだけど。

現状こんな感じ。
ttp://d.hatena.ne.jp/faith_and_brave/20081117/1226913980
02142052008/12/31(水) 15:36:48
>>210
よし、訂正された。
つづきをどーぞ
0215デフォルトの名無しさん2008/12/31(水) 15:39:09
>>214
何の続き?
0216デフォルトの名無しさん2008/12/31(水) 16:52:51
C++0x
0217デフォルトの名無しさん2008/12/31(水) 17:19:59
素晴らしいオセロゲームを作りたいんですが・・・

作れるようになるまでに、どれくらいかかるんでしょうか?
0218デフォルトの名無しさん2008/12/31(水) 17:24:45
自分が出来を素晴らしいと思えるようになるまで。
0219デフォルトの名無しさん2008/12/31(水) 17:32:14
3ヶ月くらい
0220デフォルトの名無しさん2008/12/31(水) 17:37:55
>>217
>>23の言う補間機能を使うといいよ
0221デフォルトの名無しさん2008/12/31(水) 17:48:14
23 :デフォルトの名無しさん:2008/12/29(月) 18:24:20
>>19
こういうのは原則としてやめろ
エディタの補間機能が働かなくなるし
0222デフォルトの名無しさん2008/12/31(水) 17:49:40
>>217
素晴らしいの意味によるし、経験にも依るでしょ。
強いという意味なら自分で考えるならそれなりに解析が必要。
見栄えという意味ならお絵描き/画像作りが必要。
0223デフォルトの名無しさん2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
0224デフォルトの名無しさん2008/12/31(水) 18:18:45
>>223
わざわざ答えてもらってるのに失礼じゃないですか
そういうレスはやめてください
0225デフォルトの名無しさん2008/12/31(水) 18:25:28
>>224
いや、答えてないから。
0226デフォルトの名無しさん2008/12/31(水) 18:30:49
>>225
グダグダうるせーよwwwww
0227デフォルトの名無しさん2008/12/31(水) 18:37:07
223 :デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
0228デフォルトの名無しさん2008/12/31(水) 18:38:11
223 :デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
0229デフォルトの名無しさん2008/12/31(水) 18:55:27
>>222
C言語を学ぶだけではなく、絵もうまくなる必要があるってことですね!
0230デフォルトの名無しさん2008/12/31(水) 19:03:15
223 :デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
0231デフォルトの名無しさん2008/12/31(水) 19:05:11
223 :デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
0232デフォルトの名無しさん2008/12/31(水) 19:14:34
223 :デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
0233デフォルトの名無しさん2008/12/31(水) 19:25:07
>>223
期間 : 5か月くらい
前提 : 俺が作るとして
0234デフォルトの名無しさん2008/12/31(水) 19:44:37
>>219 >>233
thx
0235デフォルトの名無しさん2008/12/31(水) 19:44:41
223 :デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
0236デフォルトの名無しさん2008/12/31(水) 20:27:30
223 :デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
0237デフォルトの名無しさん2008/12/31(水) 23:07:08
なんか、新しいスレになってから荒れてるね
0238デフォルトの名無しさん2008/12/31(水) 23:16:17
223 :デフォルトの名無しさん:2008/12/31(水) 18:03:39
どれくらいって聞いてるのに、グダグダうるせーっつーの。
お前らは期間を示せばいいんだよ。前提があるなら前提も示せっつーの。
0239デフォルトの名無しさん2009/01/01(木) 00:17:12
だめだ・・・僕にはプログラミングなんて・・無理かもしれない・・
0240デフォルトの名無しさん2009/01/01(木) 00:31:42
なぜ?具体的に。
0241デフォルトの名無しさん2009/01/01(木) 00:39:35
・・いま苦Cで文字列を扱う方法してるんですけど・・
そこで少し分厚い壁に当たってしまいました・・
こんなしょっぱなから壁にぶつかるようじゃ、俺にC言語習得なんて無理なんじゃないか・・?
って考えてます・・
0242デフォルトの名無しさん2009/01/01(木) 00:45:46
全然具体的じゃないきがするなぁ
プログラムでつまづくのは別にいいけど「良い質問/相談」を持ちかけるのはやっぱり必要だとオモ

あ、あけましておめでとう
0243デフォルトの名無しさん2009/01/01(木) 00:53:22
>>241
web で勉強してるの?個人的には本一冊買った方が良いと思うなぁ。
あと、論理的思考能力とやる気さえあればプログラミングはできるよ。
0244デフォルトの名無しさん2009/01/01(木) 01:00:58
あけましておめでとうございます

>>243
よし!本を買うことにします
0245デフォルトの名無しさん2009/01/01(木) 02:00:08
>>241
俺もWEBで勉強した

で、した感想

本買ったほうが100倍速いぞw
0246デフォルトの名無しさん2009/01/01(木) 02:31:11
やはり、特に用途がないものを学ぶのは辛いもの。
勉強でやってるなら、とりあえず作ってみて
必要になったら、Webなり2chで聞くなりした方が絶対覚えが早いよ。
0247デフォルトの名無しさん2009/01/01(木) 03:29:27
gets()は絶対に使ってはならない

↑実際どうなの
0248デフォルトの名無しさん2009/01/01(木) 03:50:21
実際そのとおり。fgetsで何も困らない。
0249デフォルトの名無しさん2009/01/01(木) 04:25:07
 使うべきではない、が正しいと思う。
バッファオーバーフローで、PCがハック(今ではクラックの方が正しいか)されたいのであれば、使えばいい。
1988年にfingerdを襲った悲劇の教訓からそう語り継がれているんだよ。
0250デフォルトの名無しさん2009/01/01(木) 04:35:03
やっぱそうか
1つくらいいいところあるかなと思ったけど、いいとこないな
0251デフォルトの名無しさん2009/01/01(木) 13:15:35
list< orekurasu > data;

data
0252デフォルトの名無しさん2009/01/01(木) 13:19:38
list< orekurasu > data; として dataにデータを入れて、リストで3連続するもののうち、
前後の二つと中央のデータにある違いがある場合、真ん中のデータを削除したいのですが、
remove_ifと叙述関数(プレディケート)を使って作れますか?
叙述関数では各要素毎にしか比較できませんか?
0253デフォルトの名無しさん2009/01/01(木) 13:20:58
まとめるとremove_ifで、一つ前と一つ後ろのデータを参照して削除可能かということです。
■ このスレッドは過去ログ倉庫に格納されています