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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 10:31:46 ]
スレを勃てるまでもない低俗な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/
スレを勃てるまでもないC/C++の質問はここで 5
pc11.2ch.net/test/read.cgi/tech/1230516307/
スレを勃てるまでもないC/C++の質問はここで 6
pc11.2ch.net/test/read.cgi/tech/1231564903/
スレを勃てるまでもないC/C++の質問はここで 7
pc11.2ch.net/test/read.cgi/tech/1232983248/
スレを勃てるまでもないC/C++の質問はここで 8
pc12.2ch.net/test/read.cgi/tech/1235921779/
スレを勃てるまでもないC/C++の質問はここで 9
pc12.2ch.net/test/read.cgi/tech/1240022781/
スレを勃てるまでもないC/C++の質問はここで 10
pc12.2ch.net/test/read.cgi/tech/1242300936/
スレを勃てるまでもないC/C++の質問はここで 11
pc12.2ch.net/test/read.cgi/tech/1245059383/
スレを勃てるまでもないC/C++の質問はここで 12
pc12.2ch.net/test/read.cgi/tech/1248010352/
スレを勃てるまでもないC/C++の質問はここで 13
pc12.2ch.net/test/read.cgi/tech/1260842197/
スレを勃てるまでもないC/C++の質問はここで 14
pc12.2ch.net/test/read.cgi/tech/1269273471/

422 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 09:42:28 ]
ポインタも参照もほとんどの実装では中身は同じだろうから
LLP64とかは関係ないと思われる
もちろん規格は保証してくれないが

ダミー変数の必要のない方法
ttp://codepad.org/h1sj56ka
もちろん実際に使っちゃだめだよ

423 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 10:47:02 ]
get()メソッドで妥協していいならboost::optional<T &>だな

int x, y;

boost::optional<int &> opt(x);

opt.get() = 1; // x = 1

opt = y; // yに張替え

*opt = 2; // y = 2

424 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 10:48:23 ]
*でも面倒くさいと言ってんのに.get()はないわ

425 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 10:58:50 ]
じゃあどうしようも無いな
operator . がオーバーロードできない時点で参照剥がしの手間はかならず必要になる
代入と暗黙変換はその限りではないが

426 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 11:05:40 ]
unionに参照は入れられないか・・・

427 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 11:26:35 ]
LZ77で圧縮したデータを解凍するソースを書いて欲しいと言われたんだが
圧縮情報を表す箇所って、規定無いよね?
abcdeabcdezをLZ77に掛けると、abcde[5,5]zとなるけど
[5,5]を判断する場合どうすれば良いの?
圧縮側もこちらで書いていいなら\\[5,5]とか目印入れれば分かるけど
解凍ソースのみで困ってる

428 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 11:40:52 ]
解凍ソースあるならいればいいじゃん

429 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 11:51:35 ]
>>428
ソースは一切なし。圧縮したデータを見ることもまだ出来ない
それでいて、最初のLZ77を使ってるからと言われ
きちんと解凍出来るソースを書かなきゃいけないみたい
調べると、何処のサンプルも圧縮情報の前に適当なマーク入れたり
9bitにして、その後ろが圧縮情報か見たりしてるから、一発で動くのが書ける気がしない

430 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 12:00:37 ]
LZ77の仕様書よめばどう扱ってるか解るんじゃね?



431 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 13:48:25 ]
亜種が大量にあるとかいう話だけど

432 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 22:41:12 ]
int[10]が書き込まれてるファイルをfread(hoge,sizeof(int),100,fp)とかやったら足りない部分はどうなるの?
ちゃんと0で埋まる?それとも保障されてない?

433 名前:デフォルトの名無しさん [2010/06/05(土) 22:43:52 ]
>>432
埋まらない。何もされない。

434 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 23:17:42 ]
thx

435 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 02:36:53 ]
C++の具体的に難しいところってどの辺なんでしょうか?Cだとポインタと配列辺りだと思うんですが。
ちなみに今継承あたりを勉強中です。

436 名前:デフォルトの名無しさん [2010/06/06(日) 02:40:11 ]
TMP

437 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 09:58:14 ]
経験的には、ポインタとか配列は難しくなくて、初心者でもすぐに使い始める。
難しいのは適切に使うこと。初心者はなんでもポインタで解決しようとしがち

C++とかもだいたい同じで言語仕様が難しいというより、どう使うのかが難しい。
いっぱい用語があるのも難しいところかも。pimplとか

438 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 10:03:11 ]
pimpl使ったら分からんと怒られた

439 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 10:08:35 ]
ポインタは概念が難しいのではなく書式が難しいと言う人が多いけど
どう考えても書式が難しいのではなく概念が難しいから初心者はつまずくだろ

440 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 10:17:43 ]
ポインタのポインタの配列とか
関数ポインタの配列とか

概念は簡単でも書き方に戸惑う



441 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 10:21:32 ]
そんなふうに書かなくても済ませられるのがC++のいいところじゃないか

442 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:32:38 ]
>>439
概念が簡単だとは言わないが、わけのわからん書式が、せっかく理解しかけた
初心者の脳を改めて引っ掻き回して台無しにするのも事実。

443 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:38:06 ]
>>442
int *a;
*aはint変数のように扱える。論理的かもしれないけど直感的ではないな。
イテレータも、二つのイテレータを使えば0個も表現できるってのも論理的だけど直感的ではなくわかりにくいね。

444 名前:デフォルトの名無しさん [2010/06/06(日) 11:41:00 ]
ポインタは全く難しくないよ。

だってお前らですら全員理解してるじゃんwww

445 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:47:36 ]
つうか概念は簡単だろ

446 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:50:16 ]
Cでポインタより難しい概念あるの?

447 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:51:35 ]
int *p じゃなくて *int p ならまだ分かりやすかったんじゃないかとか思ったり

448 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:59:43 ]
int* a

449 名前:デフォルトの名無しさん [2010/06/06(日) 12:13:04 ]
>>447
int *a;
int pa;
int asteriska;
int XXX;

これらの表記では、*a も pa も asteriska も XXX もすべて int型として扱える。
int の後ろに書いたものが、int型になる。
つまり、aの参照剥がしは*aと直感的に分かる。

*int p;

この表記では、pがint型へのポインタということが分かるのかもしれないが、
pをどう参照剥がしすればint型になるのかこの書式からは分からない。

以上の点で、前者の表記のほうが分かりやすいと考えられる。

450 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 12:19:44 ]
>>449
ならば、int *a;で変数の領域が確保されなきゃおかしいじゃん。



451 名前:デフォルトの名無しさん [2010/06/06(日) 12:20:51 ]
ああ、そうだね。

452 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 12:24:03 ]
じゃあ int &a; は &a が int なんだね

453 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 12:38:21 ]
int *a = XXX の右側に来るのがポインタ値って時点で全く直感的じゃない

454 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:07:06 ]
>>280
遅れましたがありがとうございました

455 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:08:47 ]
int *a; のメリットは int *a, *b; とするのを確実に忘れないという一点のみなのに
*a が int だとよく分かる(キリッ とか言うから面倒なことになる

456 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:10:25 ]
なるほど

457 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:10:52 ]
int* const a = XXX;
とやりたい時はどうするの?

458 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:14:58 ]
それでいいんじゃないの

459 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:15:50 ]
int *const a = XXX, *const b = YYY;

460 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:20:47 ]
直感に頼るからいけない
俺は左から型に演算していくと理解してる


int const * const & a;

(((((int) const) *) const) &) a;

intをconstにして、そのポインタ型をとって、それをconstにして、その参照型をとって、それにaという名前をつける

add_ref<add_const<add_ptr<add_const<int>::type>::type>::type>::type a;



461 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:44:31 ]
>>460
こんなに深い宣言なんだぞ。キリッ

462 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:49:35 ]
そこへ配列宣言が颯爽と登場。

463 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:14:17 ]
メンバ関数ポインタへの配列があらわれた!

464 名前:デフォルトの名無しさん [2010/06/06(日) 14:19:24 ]
>>452-463
つまり、C/C++の構文はダメダメってことだね。

465 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:22:54 ]
別に

466 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:37:03 ]
identityとtypedefがあればすべて解決

467 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 22:37:11 ]
構文と言うか文法と言うか、とにかくそっち方面で残念な言語だとは思う

468 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 20:20:00 ]
すみません。
現在1クラス1ヘッダ&1ソース という形で30対のヘッダーとクラスがずらっと並んでいます。
他の方のプロジェクトを見るとヘッダの数だけがやたら多かったり、
逆にヘッダは1個しかなかったりする様なのですが、

1クラス1ヘッダ&1ソース というのは無駄で変なのでしょうか?
新クラスを作るたびに宣言程度のヘッダーを増やすのはやめて、
クラスの宣言程度のヘッダーはギッシリ纏めてしまったりした方が良いのでしょうか。

469 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 20:28:41 ]
boostなんてファイルのモンスターハウスだぜ

470 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 20:30:04 ]
↑ ×30対のヘッダーとクラスがずらっと
  ○30対のヘッダーとソースがずらっと(訂正すみません)



471 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 20:37:11 ]
>>468
原則分けたほうがいいよ

472 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 21:57:34 ]
1クラス1ヘッダ&1ソースでいいだろ

473 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 00:48:47 ]
Javaじゃないんだから、1クラス1ソースに拘ることはないだろ。
まぁ、関連のないクラスを纏めるのは論外だが。
インクルードファイルに関しては、ソースの数だけあっても全くおかしくはないと思う。

474 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 12:19:37 ]
>>468
業務開発なら珍しくない
メンテ時には、ひとつのファイルに詰め込むより
こっちのが良いことが多い

475 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 13:25:51 ]
C++のdelete[]の挙動について質問です。

int* p = new int[5];
int* q = new int[10];

int* z=p;p=q;q=z; //ポインタの交換

delete[] p; //どこまで開放されるのか?
delete[] q; //どこまで開放されるのか?

これ、メモリリークが起きたり、
逆に、開放しちゃいけない場所まで
開放されたりしないでしょうか?

476 名前:468 mailto:sage [2010/06/09(水) 13:31:07 ]
>>469 >>472-474
間違ってはなかったのですね。ありがとうございます。疑問が解決しました。

477 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 13:50:54 ]
p[-1], q[-1] あたりにサイズが入ってるから大丈夫

478 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 14:54:43 ]
>>475
それはない

配列newは自分で確保したサイズを覚えているので
アドレスさえ渡せば配列deleteは間違えない

479 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 15:08:14 ]
>>477-478
安心しました。
ありがとうございました。

480 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 16:12:40 ]
p[-6], q[-6] にサイズ入ってた
codepad.org/8mjF6LOr



481 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 16:20:39 ]
なんでだろうね20byteも間に挟むなんて勿体無い

482 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 16:32:30 ]
フリーリストとかブロックサイズとかハウスキーピングに必要な情報はいっぱいあるだろうさ。

483 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 16:56:52 ]
>476
入れてもらえなかった471涙目www

484 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 19:11:24 ]
サイズの情報があるのにプログラマからは使えないというのは理不尽な気がする

485 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 20:53:46 ]
プログラマがnewにサイズ渡してんだから要らんでしょという考え

486 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 21:26:43 ]
数バイト確保するより数キロバイトとか多めにとる方が一回の処理時間は大きいの?

487 名前:デフォルトの名無しさん [2010/06/09(水) 21:28:48 ]
大きくないよ

488 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 01:48:00 ]
>> ずっと前の人
ctfmonをkillっても駄目ダタ
やっぱりコンソールが閉じない&killできない。
激オソ報告スマソ

489 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 08:59:00 ]
デフォコンのみ、constメソッドのみ
つまり状態が1つで変化しないクラスのオブジェクトを何個も作るのは勿体無いと思うんだけど
これを共有する自然なコードってどう書く?シングルトンかな?

490 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:02:33 ]
>>480
環境依存の事を書いても仕方がない
BCCだとp[-4], q[-4]にサイズが入ってるぞ



491 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:10:14 ]
別に>>480は単なる例であって、どんな環境でもそうだとは言ってないだろ

492 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:12:47 ]
環境依存のスレは別にあるんだからこのスレで書くな

493 名前:デフォルトの名無しさん [2010/06/10(木) 09:21:50 ]
return 0;は0に返すという意味って大雑把な意味はわかるんですが、
例えば関数 keisan()があったとして
return keisan();ってのは同じようにkeisan()に返すって意味ですか?
returunの概念がいまいちよくわからんのですが・・

494 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:23:54 ]
returnは返す。
keisan()はkeisan関数を呼び出して、その値。
つまり、return keisan()はkeisan関数を呼び出して、その値を返す。
以上

495 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:24:33 ]
あー、そもそもreturn 0は0「を」(呼び出し元に)返すだからね。

496 名前:デフォルトの名無しさん [2010/06/10(木) 09:30:21 ]
>>494
なるほど、わかりやすい
別にreturn使わなくても
int main(void)
{
keisan();
}
だけで呼び出せるけどどういうことでしょう?


497 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:31:36 ]
意味が違うし、色々と説明したいのは山々だが時間がないので後続に期待w

498 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:34:26 ]
Pascal ならfunctionとprocedureってしっかり分かれているから
理解しやすいのだが、C言語はごちゃ混ぜに出来るし、戻り値を
捨ててしまえるというエレガント(?)な設計になっているため初心者が
ここで混同しやすい

499 名前:デフォルトの名無しさん [2010/06/10(木) 09:39:12 ]
>>497
そこをなんとか・・

500 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:43:26 ]
>>499
たとえばkeisan()の戻り値型がdoubleだとすると

double a;
...
a = keisan();
return a;



return keisan();

は同じような意味になる
要するにこの関数は値を返すか返さないかの違いだけ



501 名前:デフォルトの名無しさん [2010/06/10(木) 09:50:42 ]
>>500
関数ってのは返すのが当たり前じゃないんですか?


502 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 09:53:57 ]
>>501
そんな事はない

void kansuu(void);

のように戻り値の所にvoidと書いた関数は値を返さない
返そうとするとコンパイルエラーになる

503 名前:デフォルトの名無しさん [2010/06/10(木) 09:55:47 ]
プログラムの中でreturn使ってないのはいいの?
正しいプログラムなの?

504 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 10:01:36 ]
>>503
戻り型があるのにreturnを使わないと大抵のコンパイラでは警告が出る
正しいとは言えないが、戻り値を使わないプログラムだとそのまま動いて
しまう事がある

505 名前:480 mailto:sage [2010/06/10(木) 10:11:11 ]
>>490
うちのbccだとp[-1],q[-1]だったけど

>>492
らじゃ

506 名前:デフォルトの名無しさん [2010/06/10(木) 10:27:22 ]
>>504
#include<stdio.h>
int main(void){
int a;
scanf("%d",&a);
printf("%d\n",a);
}
エラーでないけどなwreturn使ったほうがいいのかこんな簡単なもんでも。

507 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 10:35:04 ]
>>506
誰もエラーが出るとは書いてないだろアホ

「警告が出るコンパイラが多い」と書いたんだよ日本語わかる?

508 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 10:43:52 ]
mainはエラーでないが他だとVCではエラー出る
voidなら不問

509 名前:デフォルトの名無しさん [2010/06/10(木) 10:45:37 ]
>>506はreturn使う必要どこにあるの?ないと思うが。
複雑なプログラムだけだろ。

510 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 11:41:18 ]
>>506 だまって0を返しとけ。



511 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 11:50:52 ]
取り敢えずvoid main()と書く奴はCを使う資格ないな

WindowsのGUIならvoid main()でもいいが

512 名前:デフォルトの名無しさん mailto:void main() (笑) [2010/06/10(木) 12:33:58 ]
>>511
その根拠は?

513 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 12:51:49 ]
またかよおめーら

514 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 12:53:12 ]
>>512
根拠は俺様だ
LinuxなどのUNIX環境でvoid main()などあり得ない
シェルが実行ファイルの戻り値をほとんど使う

515 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 12:54:30 ]
それだけじゃなくてWindowsでもコマンドプロンプトからバッチファイルで
使う場合は戻り値を使う

その時にvoid main()じゃ戻り値が不定値になってしまうだろうが

516 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:12:47 ]
1がエラーとか0が成功とかの規定なんて無いだろ。
0が成功かもしれないし1がエラーかも知れないし、
それ以外の情報を戻り値が教えてくれるかもしれない。
だから何も返さない方が一般性が高いと思う。

517 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:18:43 ]
はいはい
勝手に言ってろ

518 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:21:41 ]
>>516
www.opengroup.org/onlinepubs/000095399/functions/exit.html
ちゃんと規定されてる

519 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:29:29 ]
>>516
Cのstdlib.hににEXIT_SUCCESSとEXIT_FAILUREというマクロが
定義されているのは何のためだと思う?

無知にも程がある

520 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:35:46 ]
マクロというのはC言語の中でしか通用しないから
OSからみたら1か0にしか見えないの。
もし、プログラムが成功や失敗ではなくて
計算の結果を返して、その答えが1か0だった場合どうするの?
だから規定なんて無い。



521 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:37:53 ]
>>520
>>518が読めないのか?もしかして英語音痴か

522 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:38:56 ]
だいたいC言語のマクロというのはUNIXの総合環境の中で培われて
きたものだ

だからC言語の中でしか通用しないという言い訳はおかしい






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

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

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