スレを勃てるまでもな ..
725:デフォルトの名無しさん
09/09/02 00:51:54
CをまともにやらずにC++をやろうとするのは無謀?
それなりに努力はするつもりなんだが、どうなんですか?
726:デフォルトの名無しさん
09/09/02 01:13:18
別にいいと思うよ。
Cでポインタを理解しておけば、C++でポインタを勉強する必要がなくなるとかそんな程度だし。
727:デフォルトの名無しさん
09/09/02 01:14:01
先にC++に慣れ切ってしまうと、後からではCではプログラムを組めなくなるんじゃないかという危惧がある
ゆとり教育とかいうと聞こえが悪いけど、なんかそんな感じ
でもいまどきC++が使えない環境ってのもそうそうないだろうとも思うわけで、
まぁ別にいいんじゃないか
無謀というほどのことはない
むしろSTLとか便利なライブラリのおかげでポインタをやたら使わずに済む分つまづくポイントは減ってるかもしんない
728:デフォルトの名無しさん
09/09/02 01:30:28
>>726 >>727
返答ありがとうございます
729:デフォルトの名無しさん
09/09/02 02:15:29
>>725
いやいきなりC++をやる事をオススメする
禿もそう言っているし
730:デフォルトの名無しさん
09/09/02 06:50:19
>>725
> それなりに努力はするつもりなんだが
この覚悟があるならC++で良いと思うよ。
731:デフォルトの名無しさん
09/09/02 06:55:07
Accelerated C++やC++プライマーを使うと良いでしょう。
732:デフォルトの名無しさん
09/09/02 12:33:11
ビジュアルCとビジュアルCじゃないCはどの程度の違いがありますか?
733:デフォルトの名無しさん
09/09/02 13:04:47
「ビジュアルCじゃないC」 とかじゃなくて具体的な製品名をあげてくれ
734:デフォルトの名無しさん
09/09/02 13:35:26
try catchで配列[]の添え字範囲外の例外をキャッチ出来る?
メモリのアクセス違反のキャッチと言うべきかな
735:デフォルトの名無しさん
09/09/02 13:42:33
>>734
これ?
URLリンク(msdn.microsoft.com)(VS.80).aspx
736:デフォルトの名無しさん
09/09/02 13:50:10
>>735
それっぽいけど
エラーの種類の判別方法がわからんね
調べてみます
737:デフォルトの名無しさん
09/09/02 14:16:12
>>733
ずびばせん……
例えばボーランド?というやつではどういう違いがありますか?
738:デフォルトの名無しさん
09/09/02 15:14:59
Borland C++Builder と Borland C++Compiler の2種類があるけど・・・
Borland C++Builder と Visual C++ はまったく異なる。
Borland C++Builder は Visual Basic みたいに部品ポトペタで開発していくスタイル。
Visual C++ はエディタでごりごりコードを書く開発スタイル。
Borland C++Compiler と Visual C++ はごりごりコードを書く点では変わらないけれど、
Borland C++Compiler には開発環境が付いておらず、
普通のテキストエディタ(メモ帳とか)でコードを書き、コマンドラインからコンパイラを使うことになる。
(いちおうベクターあたりを探せばフリーの開発環境がいくつか見つかる)
Visual C++ には豪華な開発環境が付いていて、ボタン一発でコンパイルでき、デバッガも組み込まれている。
ちなみにボーランド(の開発製品群)はエンバカデロに買収されました。
なので、たぶん Embacadero C++Builder とか呼ぶべき。
739:デフォルトの名無しさん
09/09/02 15:18:25
>>738
で、そのコードはCなの?
740:デフォルトの名無しさん
09/09/02 15:22:47
そもそも Visual C というのは無いから
Visual C++ のことだろうと推測した (C#のことだったらすまんね)
説明したのは書いてるとおり Visual C++ とボーランドなんとかというやつの比較
741:デフォルトの名無しさん
09/09/02 17:07:20
ははあ……なるほど
Cプラが使えるのには違いはないんですね!?
ありがとうございました!
742:デフォルトの名無しさん
09/09/02 21:45:07
hoge f(int a, int b, int c)
{
return hoge(a, b, c);
}
hoge h(f(1, 2, 3));
これだとコピーコンストラクタが無視されて、あたかも
hoge h(1, 2, 3);
のような挙動になるのは仕様で決められてる?
それともたまたまコンパイラの中の人が親切だっただけで?
743:デフォルトの名無しさん
09/09/02 21:57:59
>>742 仕様で許可されている。返り血最適化RVOという。
許可されているだけなので最適化されるかどうかは中の人次第。
744:デフォルトの名無しさん
09/09/02 22:08:24
下記の書についてです。
(1).ANSI C/C++辞典(URLリンク(www.amazon.co.jp))
(2).新ANSI C言語辞典(URLリンク(www.amazon.co.jp))
CだけでなくC++についても調べたいので(1)は買う予定でいます。
(2)は色々と評判に上がることが多いようなので迷ってるのですが、
・ (2)は(1)と重複している部分が結構あったりするのでしょうか。
・ (2)ではC++についてはまったく触れられていないのでしょうか。
・ 両方とも割と昔の本ですが、仕様の変更などで現在と異なる点はあるのでしょうか。
ご存知の方がいましたら教えていただきたいです。
745:デフォルトの名無しさん
09/09/02 22:29:39
C++は1998と2003年に改正されてるけど1996年の本でいいの?
いいんだ。あ、そう。
746:デフォルトの名無しさん
09/09/02 22:54:35
新のつかないほうのANSI C言語辞典を持っているけど、これは今でも使える。
まあ古い本なので、ワイド文字関係と誰も使っていないC99に関する事柄が抜け落ちているけど。
だから、新のほうもおそらくおすすめできると自分は思っている。
ANSI C/C++辞典は分からない。初版は図書館で見たことあるけど、これ3版だからノーコメント。
個人的には、C++の内容を辞典的に網羅するにはページ数が少なすぎるだろうというのが気掛かり。
そのアマゾンによれば590ページらしいが、C言語辞典ですら500ページ近くある。
(初版でもC言語辞典より小さな字で詰めて配置してあったとはいえ)
747:744
09/09/03 00:22:24
情報ありがとうございます
最近の本も探してみたのですが、評価が芳しくないものやパッとしないものが多くて…
古い本なので逆に図書館にあるかも知れませんね
近所の図書館をあたってみて、もしあれば中身を確認してみようと思います
748:デフォルトの名無しさん
09/09/03 02:00:47
今まで文字列の取り扱いは char * を使ってたのですが、そろそろ汎用性を考えたコードも
意識して書かないといけないかなとか思い始めてます。
ところがなんか TCHAR だの wchar_t だの LPTCSTR だのと色々とあって、どういう時に
どれを使えばいいというのが判りません
どういう考えで、どういう型を使うのが一般的なのでしょうか
749:デフォルトの名無しさん
09/09/03 02:38:19
char*でおk。
750:デフォルトの名無しさん
09/09/03 02:47:38
蒸し返すようだけどGET_SET_ACCESSORって要するに
「今は何もしない素通し処理にしておくけど、将来的に別の処理が入った時に
クライアントコードの書き換えが必要になるとまずいからとりあえずアクセサ
になってますよ」って意味じゃね?
必要になったら普通に書き直せばいいし、何もしてないです、ってのが一目で
分かるし、悪くないマクロだと思うが。
まぁ俺はマクロ嫌いだから極力使わないんで、これも使わないけど。
751:デフォルトの名無しさん
09/09/03 04:09:28
・いつか処理が変わるかもしれないからアクセサは常に作るべき
・次のフェーズで変更されることが分かっているからアクセサを作るべき
・必要になってから作るべき
という感じで意見がいつも割れるんだよ
752:デフォルトの名無しさん
09/09/03 04:24:39
ハイ!先生
「メンバは原則 public しといてゲッタセッタ必要になったら private に異動で十分」派です。
753:デフォルトの名無しさん
09/09/03 05:40:12
それ呼び出し側のコードが変わるじゃん
754:デフォルトの名無しさん
09/09/03 05:51:34
で?
755:デフォルトの名無しさん
09/09/03 05:54:39
>>752
それだとメンバ変数名を変えたくなっても変えられないな。
Get/Setでポリモーフィズムが使えないな。
>>750
単純な代入とかだったらGET_SET_ACCESSORでいいと思うし、
頑なに拒否する人を見て何が悪いのかと思ってたけど、
デバッガで見れないって言うのがね、ちょっと嫌かな。
756:デフォルトの名無しさん
09/09/03 06:26:37
そうやってアクセサとメンバ名の乖離が起こるわけですね。
ポリモーフィズムが使えないという点は全く理解できないので追加説明をしていただけると助かります。
757:デフォルトの名無しさん
09/09/03 06:46:09
>>753
変わって何か問題ある?
758:デフォルトの名無しさん
09/09/03 07:12:09
別に問題ないよ
759:デフォルトの名無しさん
09/09/03 10:22:49
書き換えるのが面倒
プロジェクト内の全ファイルから問題の箇所を一発で全部置換できるエディタを持ってるのなら気にする必要はない
760:デフォルトの名無しさん
09/09/03 12:47:14
wrproperty使ったほうがクライアントがすっきりうんこ
761:デフォルトの名無しさん
09/09/03 15:06:03
汎用的なライブラリでそんな作業しようと思うとぞっとする。
変数書き換えのタイミングも追いづらいし。
762:デフォルトの名無しさん
09/09/03 15:10:09
a* [2]
a[0] = new b[2]
これって可能?アクセス方法ってどうやるの?
763:デフォルトの名無しさん
09/09/03 15:31:20
不可能
764:デフォルトの名無しさん
09/09/03 17:50:35
プラスとマイナスをひっくりかえす関数ってありますか?
例えば5なら-5に、-9なら9に変えてくれる関数です
765:デフォルトの名無しさん
09/09/03 17:55:16
関数にするまでもない
a = -b;
とかで十分
766:764
09/09/03 18:00:34
本当だ、できました
ご親切にありがとうございました
767:デフォルトの名無しさん
09/09/03 19:31:38
1.f←これってfloatとして扱うってことですよね?
いま呼んでいる本に
double r = srcR * srcA + ( 1.f - srcA ) * dstR;
というコードがあるんですが
「1.0」(double型)じゃなくて「1.f」(float型)をつかう意味ってありますか?
srcR、srcA、dstR、はどれもdouble型です。
768:デフォルトの名無しさん
09/09/03 19:46:22
>>767 ありません。
769:デフォルトの名無しさん
09/09/03 20:02:16
もともと全部floatで書いていたコードを何かの理由でdoubleに直したときに
そこだけ修正し忘れた、とか
770:デフォルトの名無しさん
09/09/03 20:06:08
>>768-769
わざわざfloatにしてるから
何かしらメリットがあると思ったんですが
何もないんですね。
ありがとうございます。
771:デフォルトの名無しさん
09/09/03 20:19:58
>>767
何か勘違いしてそうだから念のためにいっておくと、
double の 1.0 は 1. と書くこともできる
float の 1.0f は 1.f と書くこともできる
772:デフォルトの名無しさん
09/09/03 20:23:02
shared_ptrに確保されたインスタンスがあったとして
そいつのweak_ptrを返すメンバ関数とかってどうやって実装してるの?
773:デフォルトの名無しさん
09/09/03 20:26:22
>>756
変数がpublicだったらアクセサを経由した取得にならないからだろ。
774:デフォルトの名無しさん
09/09/03 20:58:14
>>771
0付けなくても良かったんですね
ありがとうございます
775:デフォルトの名無しさん
09/09/03 21:13:34
>>772
shared_ptrとweak_ptrはインスタンスを直接保持するのではなく、インスタンスを管理するオブジェクトを経由して保持している。
weak_ptrは管理オブジェクトを参照すればインスタンスが有効かどうかが分かる。
776:デフォルトの名無しさん
09/09/03 22:08:14
wktk_ptr
kwsk_ptr
sneg_ptr
777:デフォルトの名無しさん
09/09/03 22:08:39
いや、なんていうか
sp->getThisWeakPtr();
みたいなことしたいんですけど無理なんですかね?
778:777
09/09/03 22:46:10
あ、自己解決したわ
779:デフォルトの名無しさん
09/09/03 23:32:43
使いたくもない敬語を無理に使ってるってことがよく分かる
780:デフォルトの名無しさん
09/09/04 02:37:31
?
781:デフォルトの名無しさん
09/09/04 13:18:09
1: char a[20];
2: char a[20]={0};
3: char *a = new char[20];
これらのうちでは
動作が軽い順で言うとどうなりますでしょうか?
782:デフォルトの名無しさん
09/09/04 13:40:41
1が最も軽く、3が恐らく最も重い
783:デフォルトの名無しさん
09/09/04 14:00:22
3は
delete[]a;もセットで考えないといけない。
784:デフォルトの名無しさん
09/09/04 14:18:13
>>782
なるほど。
1と2では、
初期化する場合としない場合とでやはり速度差があるのですね。
>>783
ありがとうございます。そうすると3は重そうですね。
ありがとうございました。
785:デフォルトの名無しさん
09/09/04 14:20:44
1.のコストは0なのだ。
786:デフォルトの名無しさん
09/09/04 15:20:48
C++のisoが定めた規格が
無償で(英語でもいいので)見られる
サイトを教えていただけますでしょうか?
787:デフォルトの名無しさん
09/09/04 15:39:02
C++のqueueについてなんですが、
queueで作ったデータ列を配列みたいに見るってできないんでしょうか?
front()で頭を見る以外の方法が分かりません…
788:デフォルトの名無しさん
09/09/04 16:00:37
>>787配列のように扱えないのがstd::queueのメリット。
配列のように使えるキューが欲しいならstd::dequeを使う。
789:デフォルトの名無しさん
09/09/04 16:02:12
>>786
iso 14882 2003 pdf - Google Search
URLリンク(www.google.com)
790:デフォルトの名無しさん
09/09/04 16:04:58
>786
C++についてはC言語ほど詳しいわけではないけど
ドラフトなら無償で手に入れることができたはずだったんだけど、なんか本家死亡中?
規格書の正式名称をどうたらこうたらで手に入れることができる
791:786
09/09/04 16:08:13
>>789-790
丁寧にありがとうございました。
助かりました。
792:デフォルトの名無しさん
09/09/04 16:14:52
>>788
分かりました。どうもです
793:デフォルトの名無しさん
09/09/04 17:11:55
全然別人ですが、
C99の規格は英語でいいのでどこかで手に入りませんか?
ググろうにも何でググればいいのか悩みます。
794:デフォルトの名無しさん
09/09/04 17:17:06
JISの規格票じゃだめなのか?
795:デフォルトの名無しさん
09/09/04 17:34:38
JISの規格は閲覧するのにとても苦労するので。
(標準のpdfリーダがadobeじゃ無いためです。)
796:デフォルトの名無しさん
09/09/04 17:50:34
n1124.pdfとか
797:デフォルトの名無しさん
09/09/04 17:55:47
>796
それはC0x Draft, N1124, 6 May 2005だな
798:デフォルトの名無しさん
09/09/04 17:57:26
どの版がいいの
799:デフォルトの名無しさん
09/09/04 18:09:13
ええと、一番普遍的な版がいいのですが。
そんな最先端のプログラミング技法には深入りするつもりもないので。
800:デフォルトの名無しさん
09/09/04 18:27:02
テンプラメタプログラミングなんてやってなんか得したことあった?
801:デフォルトの名無しさん
09/09/04 18:41:44
知的好奇心が満たされるw
802:デフォルトの名無しさん
09/09/04 18:49:15
>>800 似たような重複コードを書かなくてすむ用になる。
803:デフォルトの名無しさん
09/09/04 19:05:32
(プラシーボで)実行速度が速くなった
804:デフォルトの名無しさん
09/09/04 19:48:32
C++でスレッドをやってみたら思いのほか簡単にできた。
それでも複数の値渡しはいちいち構造体を定義しないといけないなんてどうしてこんな回りくどいやり方でないといけないのか
もっとすっきりしたやり方考えろよ
805:デフォルトの名無しさん
09/09/04 19:50:41
自分で好きなように作ればいいじゃないか?
806:デフォルトの名無しさん
09/09/04 21:25:36
>>804
スレッド開始時の関数に引数を渡すときのことを言っているなら、boost::threadはどう?
bindと組み合わせれば何引数でもいけるよ。
もちろん、それ以外のAPIでもbind使えるようにできるけど。
807:デフォルトの名無しさん
09/09/04 23:34:38
テンプレートメタプログラミングは定数のコレクションを生成するとき便利だよ。
その数が万単位になると劇的に速度が変わる。
808:デフォルトの名無しさん
09/09/04 23:37:14
テンプレートメタプログラミングは
天才がライブラリを作るときに便利だと思うよ。
凡人が挑戦すると死亡するだけ。
809:デフォルトの名無しさん
09/09/05 05:58:07
ちょっとやってみたけどコードがぐちょんぐちょんになった
810:デフォルトの名無しさん
09/09/05 15:50:47
C言語における、ダブルクォートで囲んだ文字列と、
シングルクォートで囲んだ文字列は、どういう違いがあるのでしょうか?
明確に違って、ダブルクォートで囲んだほうは文字列の最後に何か追加されたような気がする、まではおぼえているのですが…
どなたかご教授いただけませんでしょうか
811:デフォルトの名無しさん
09/09/05 15:52:34
>>810
シングルクォートで囲んだ文字列
の意味が分からん。
そんなもの存在しない。
812:デフォルトの名無しさん
09/09/05 15:56:35
>>811
ごめんなさい
文字列という言葉ではおかしかったかもしれません
っていうか、シングルクォートで囲んだものは文字列ではなくて、文字、でしたっけ
"aaa" == 'aaa' ではないことは覚えているのですが
あえて
"aaa"をあえてシングルクォートで囲んで表現したらどう表記するのでしょう、といった質問です
813:811
09/09/05 15:58:56
>>812
"aaa" -> 言語仕様として存在する
'aaa' -> 言語仕様として存在しない
というこれ以上ないほどの違いがあるぞ。
814:デフォルトの名無しさん
09/09/05 15:59:51
つーか、どんなC使ってるのか知らんが、
'aaa'
はCでは出来ないよ。
815:デフォルトの名無しさん
09/09/05 15:59:52
{ 'a', 'a', 'a', '\0' }
こんな感じか?
816:811
09/09/05 16:01:13
それとも
"aaa" -> C/C++ではcharないしconst char型の配列型で、その数は4である。(終端にヌル文字が付く。)
"a" -> C/C++ではcharないしconst char型の配列型で、その数は2である。(終端にヌル文字が付く。)
'a' -> const char型の文字型変数。
であることを言いたいのか?
817:デフォルトの名無しさん
09/09/05 16:01:55
char *p = malloc(3);
p[0] = p[1] = p[2] = 'a';
818:810
09/09/05 16:02:24
過去ログを読み直していたらこんなコードにぶつかったので質問した次第です
文字とか文字列とかそういう問題で捉えたのがいけなかったんですかね
624 :デフォルトの名無しさん[sage]:2008/01/30(水) 00:58:29
#include <iostream>
int main(void)
{
const int max_str = 50 + 1;
char str1[max_str], str2[max_str];
std::cout << "数値a入力>";
std::cin >> str1;
std::cout << "数値b入力>";
std::cin >> str2;
int len1, len2;
for( len1 = 0; len1 < max_str; ++len1 ){
if( str1[len1] == '\0' )
break;
}
for( len2 = 0; len2 < max_str; ++len2 ){
if( str2[len2] == '\0' )
break;
}
819:810
09/09/05 16:05:44
>>816
ヌル文字!
と
文字数!
それです、私が思い出したかったと思われるキーワードはそれです!
あとは自力で調べられそうです
ありがとうございましたー
820:デフォルトの名無しさん
09/09/05 16:07:04
たぶんシングルクォートの文字列は
char foo[] = {'f', 'o', 'o', '\0'}; /* '\0'は'\000'または'\x00'などと同じnull character(JISではNULと表記される)を表す */
だと思う、シングルクォートは文字定数を表記するときによく使われる、そのほかの目的でも使うことはある
ダブルクォートの例は
char bar[] = "bar"; /* {"baz"};とかくこともできる */
char *baz = "baz";
ダブルクォートで囲んだ場合、文字列リテラル(文字列定数)と呼ばれる
この場合、コンパイラは気を利かせてnull characterを付けてくれる
したがって、sizeof(bar)は4となる
しかしながら
char hog[3] = "hog";
の場合、コンパイラは気を利かせてnull characterを追加しない、つまり
char hog[] = {'h', 'o', 'g'}; /* char hog[3] でもよい*/
とした場合と同じ結果となる
と長々書いているうちに解決していたでござるの巻
821:810
09/09/05 16:08:38
>>820
ありがとうありがとう
大感謝です
822:デフォルトの名無しさん
09/09/05 16:22:47
どうでもいいけど、
結局何を疑問に思っていてどう解決したのかさっぱりわからん。
823:デフォルトの名無しさん
09/09/05 16:30:04
要はかなりのうろ覚えだからどう検索すりゃいいのかも分からなかったんだろ。
824:デフォルトの名無しさん
09/09/05 17:20:19
>>820
char *baz の sizeof は勘違いしたらいかんよ。
825:デフォルトの名無しさん
09/09/05 17:28:41
>824
例が悪かったか
ほとんどの環境ではsizeof(char *)も4だったね
826:デフォルトの名無しさん
09/09/05 17:33:44
記号関係で検索しようと思ったら確かに詰むわな。どうにかならんかな。
827:デフォルトの名無しさん
09/09/05 17:46:40
>>825
例えが悪いっていうか、同列に並べたら混同しちゃうだろw
char bar[] = "bar"; とchar *baz = "baz"; じゃ意味が全然違うのに。
828:デフォルトの名無しさん
09/09/05 17:49:24
>>813-814
いや、'aaa'のように中に文字が複数ある場合、その値は処理系定義。
仕様にないとかできないとかはちょっと言い過ぎだと思う。
まあ、実際問題使わないからそういう認識でも構わないと俺も思うけどさ。
829:デフォルトの名無しさん
09/09/05 17:52:12
シングルクォートの中には文字が一つのはずと理解していたのに
'\0'をみて、まるで2つの文字からなる文字列が入っていると勘違いしたんじゃないのだろうか。
830:デフォルトの名無しさん
09/09/05 17:56:07
VC++は'aa'と二つはできたな。
三つ以上は試したことがない。
831:デフォルトの名無しさん
09/09/05 17:59:36
>>828
マジックナンバー表すのによく使われる。3文字は見たこと無いけど。
832:デフォルトの名無しさん
09/09/05 18:01:31
>>831
ちょっとマジックナンバーについて簡単に説明してもらえますか?
833:デフォルトの名無しさん
09/09/05 18:06:18
VC++ならchar c = '??/n';とかできるな
834:デフォルトの名無しさん
09/09/05 19:57:38
問題を整理しよう。
・>833はトライグラフ。
・シングルクォートで囲える文字数は(トライグラフやエスケープ文字を処理した後の)4文字程度(環境依存)。
・その場合のエンディアンも環境依存。
ということで宜しいかと。
で、例えばint foo = 'abcd'としてprintf("%d\n", foo)としたときの出力が、所謂マジックナンバー。
835:デフォルトの名無しさん
09/09/05 20:06:54
多文字リテラルはC90でもあるだろうに
836:デフォルトの名無しさん
09/09/05 21:49:37
なんだかんだいって、もう本人は解決しちゃったんだろうぜ。
837:デフォルトの名無しさん
09/09/05 22:10:10
>>834
もう一度聞くけど、マジックナンバーについて簡単に説明してもらえますか?
どうも一般的に使われているものと異なるように思うので。
838:デフォルトの名無しさん
09/09/05 22:25:51
やだね、こういう言いたいことを裏に覗かせつつ質問する馬鹿って。
>>837
マジックナンバーと呼ばれるものには私の知る限り3種類ある。
・野球のマジックナンバー。詳細は知らん。
・コード中に埋め込まれた由来不明の値。何故その数字か判らんが兎に角動くと言う皮肉を込めて、マジックナンバーと呼ぶ。
・主にバイナリファイルの先頭に置いて、ファイルの種別を明示するために使われるバイト列。或いはそれを数値化したもの。
Unix使いなら/usr/share/file/magic辺りにあるから覗いてみるといい。
839:デフォルトの名無しさん
09/09/05 22:29:20
馬鹿とまで言われるとは思っていませんでした。
> ・コード中に埋め込まれた由来不明の値。何故その数字か判らんが兎に角動くと言う皮肉を込めて、マジックナンバーと呼ぶ。
僕もこれだと思っていたのですが、>>834さんは出力がマジックナンバーといっているので、
いったいどういう事だろうかと思ったんです。
840:デフォルトの名無しさん
09/09/05 22:33:47
質問しただけで荒れるってジャスティスののか
841:デフォルトの名無しさん
09/09/05 22:34:25
>>837
URLリンク(en.wikipedia.org)(programming)
まぁファイルフォーマットとかを直接触らない人には関係ないかもね。
842:デフォルトの名無しさん
09/09/05 22:40:05
>>841
・an unnamed or ill-documented numerical constant value;
これを言いたそうな気配はするんだが、なんか違った意味で使ってるよな
そりゃ質問もされるだろうよ
843:デフォルトの名無しさん
09/09/05 22:52:03
元素か
844:デフォルトの名無しさん
09/09/05 23:05:49
Linuxでは出力もマジックナンバーと呼ぶんだけどな。
ドザは頭が悪くて困る。
845:デフォルトの名無しさん
09/09/05 23:09:48
C言語でプログラムを作成してる際にわからないことがあったので質問させてください
3次元座標(-0,5、0,5、0)を
(sin(t)、t、cos(t))
みたいな形で現したいと思ってるんですがどのように現すのか教えてください
よろしくお願いします
846:デフォルトの名無しさん
09/09/05 23:16:03
どうも使い方の間違いを肯定したくなくてすり替えばかりしているように見える
よくあることだけどな
847:デフォルトの名無しさん
09/09/05 23:17:38
>>845
sin(0.5)は-0.5ではないし、cos(0.5)も0ではないが・・・
どういう意味なので?
848:デフォルトの名無しさん
09/09/05 23:19:00
>>845
double point_3d[3];
point_3d[0] = sin(t);
point_3d[1] = t;
point_3d[2] = cos(t);
とか?
849:845
09/09/05 23:25:39
DrawLine関数で
(-0,5、0、0)から(-0,5、0,5、0)までの直線をひきたいんですが、その後にその線を変数θを使用して回転させたいと思ってるのでsincosで座標を現したいと思ったのですが
可能でしょうか?
850:デフォルトの名無しさん
09/09/05 23:35:32
Linuxでも
>例えばint foo = 'abcd'としてprintf("%d\n", foo)としたときの出力が、所謂マジックナンバー。
なんていったりはしないよ。
もし言うというなら、Linux板にコピペしてきてそのスレで1000人の同意があったら認める^^
851:デフォルトの名無しさん
09/09/05 23:43:12
>>849
直交座標系と極座標系の変換を知りたいの?
もし単に回転させたいならアフィン変換すればいいだけだけど。
852:デフォルトの名無しさん
09/09/05 23:48:39
>>851
よくわかりません
x座標が-0,5なので-cos(60)でいいのかと思ってやってみてもうまくいかなくて…
3次元での座標を表すときのsinθcosθというのは単に数値を入れるのとは全く別物なんでしょうか?
(0,5、1、0)の座標をsincosの座標で現したいと思ったときに(cos(60)、1、sin(0))と表してもまったく別の位置に表示されるんですけど
853:デフォルトの名無しさん
09/09/05 23:51:36
sin,cosの引数はラジアン。
854:デフォルトの名無しさん
09/09/05 23:52:08
sin、cosの引数は度じゃなくラジアンだから *3.14/180 しないとだめ
855:デフォルトの名無しさん
09/09/05 23:59:56
ありがとうございます
わかりました
856:デフォルトの名無しさん
09/09/06 00:29:07
こないだからC++以前に数学がわかってないやつが多いな
857:デフォルトの名無しさん
09/09/06 00:34:46
というか、本にせよリファレンスにせよ、どっかで説明読めば
引数がラジアンだってことくらい書いてあるはず
理論に基づいて組み上げるんじゃなく
カンでプログラミングしてるんじゃないか
858:デフォルトの名無しさん
09/09/06 00:52:37
普段からsmartポインタって乱用してる?
複雑な管理が必要になる部分以外は余分なコストがかかるから使わないほうがいいのかなって思ったんだけど
859:デフォルトの名無しさん
09/09/06 01:02:17
RAIIとかPimplイディオムを実現するには必要不可欠だろうが
860:デフォルトの名無しさん
09/09/06 01:05:49
RAIIとpimplってほんとによく出てくるなぁ。
RAIIはさておき、pimplは目の当たりにしたことがないから実感がわかない
861:デフォルトの名無しさん
09/09/06 01:06:50
使わなかったところで、それと同様のコードを自分で書く羽目になるだけ、自分へコストが跳ね返ってくる。
まあ、最も単純かつ実行時の負荷が低コストでしかも標準のauto_ptrが残念な出来なのは仕方がない。
unique_ptrに期待しましょう。
862:デフォルトの名無しさん
09/09/06 01:07:24
Exceptional C++を読みなせえ
863:845
09/09/06 01:51:30
すいません
さっき教えていただいた通りにラジアンで線を引けたのですが、for文で線を何本も引いて円を書こうと思い
(sin(θ×t)、1、cos(0))
とし、tの値を少しずつ大きくしていきました。
そうするとx軸に沿って円がかけるはずだとおもうのですが45度から130度くらいまでの扇形みたいな形しかできません
まったく理由がわかりません
どなたかアドバイスをください
お願いします
864:デフォルトの名無しさん
09/09/06 01:59:23
自己解決しました
865:デフォルトの名無しさん
09/09/06 02:01:44
質問の文章考えてるヒマがあったらトライ&エラーやってた方が有意義じゃないか?
866:デフォルトの名無しさん
09/09/06 08:28:07
>>858 乱用してるよ!!
スマポのメリット>>>>>>>>>>>>ほんのわずかなコスト
867:デフォルトの名無しさん
09/09/06 09:05:17
>>858
スマポの評価はboostのスマポ、特にshared_ptrを使ってからしたほうがいい。
マジお勧め。
868:デフォルトの名無しさん
09/09/06 11:04:43
確かにboostのshared_ptrはその利便性からいって鬼。
これ以上ないほどの。
869:デフォルトの名無しさん
09/09/06 11:12:58
FFTで求めた実部データと虚部データから振幅スペクトルを求めるにはどうしたらいいですか?
パワースペクトルだと大きすぎるのでさけたいです
870:デフォルトの名無しさん
09/09/06 11:19:21
>>869
帰れ
871:デフォルトの名無しさん
09/09/06 12:08:14
>>869
mag=hypot(real,image)
872:デフォルトの名無しさん
09/09/06 12:19:02
>>870だが断る
873:デフォルトの名無しさん
09/09/06 14:29:57
グローバル変数を使う時は、関数プロトタイプ宣言より前じゃないとダメなんでしょうか?
874:873
09/09/06 14:30:42
日本語おかしかったです、すいません
グローバル変数を使う時は、関数プロトタイプ宣言より前にグローバル変数の宣言をしないとダメなんでしょうか?
875:デフォルトの名無しさん
09/09/06 14:32:20
グローバル変数の宣言と関数プロトタイプは何の関係もなくね?
876:デフォルトの名無しさん
09/09/06 14:33:31
そうでしたか、ありがとうございます
877:デフォルトの名無しさん
09/09/06 15:45:55
かかわるプロジェクトでは必ず三項演算子は目の敵になってるんですがgotoみたいな存在なんですか?
878:デフォルトの名無しさん
09/09/06 15:48:40
そんなことないよ。
記述の仕方を統一したかっただけじゃない?
879:デフォルトの名無しさん
09/09/06 15:51:37
行数稼げないからって理由だったら嫌だなw
880:デフォルトの名無しさん
09/09/06 15:54:15
>>877
なんでだろね。
どうも三項演算子を理解できないレベルに合わせろってことらしいんだが、まじかね。
881:デフォルトの名無しさん
09/09/06 16:26:07
理解なんて数秒で済むと思うんだけど
古いコンパイラで条件演算子にバグがあって禁止されていた事はあった
882:デフォルトの名無しさん
09/09/06 16:58:04
>>880
構造化プログラミングから逸脱する場合には不可ってことだと
思うんだけど、本質が理解されないまま全部NGになってること
はよくあるね。
参考演算子そのものの理解は当然だれでもできる。
883:デフォルトの名無しさん
09/09/06 17:01:43
ゴメン、「三項」ね。
884:デフォルトの名無しさん
09/09/06 17:02:09
三項演算子は()を下手に省略するとアレ?って挙動になってバグ取り高い壁になる
885:デフォルトの名無しさん
09/09/06 17:10:05
>>882
構造化プログラミング?
逸脱する場合としない場合kwsk。
逸脱するというのであればすべて逸脱では。
886:デフォルトの名無しさん
09/09/06 17:14:19
どんな用途か知らんが、三項演算子は特に問題ないと思うがw
887:デフォルトの名無しさん
09/09/06 17:17:26
>>882
三項演算子どころか、ポインタもろくに理解せずに仕事してるやつ多数。
それが現実。
888:デフォルトの名無しさん
09/09/06 17:23:23
int x = 0;
int y = 0;
bool b = なにかを代入;
//逸脱しないとき
if (b)
{
x = 123;
}
else
{
x = 456;
}
これは、x = b ? 123 : 456; とできるけど、bの意味する内容とか局所性によってはまぁ許容かな…。
//逸脱するとき
if (b)
{
x = 123;
y = 234;
}
else
{
x = 456;
y = 789;
}
こっちは
x = b ? 123 : 456;
y = b ? 234 : 789;
で書けるけど、b の真偽値に応じた代入処理のセットだと言うことが分からない。
elseifの節が後で現れるともう保守性までNG。>>885 の指摘通り、逸脱するかと
言えば全部逸脱だと思う。ちなみにオレは三項演算子は、ほぼNGにしたい派。
889:デフォルトの名無しさん
09/09/06 17:27:37
>>888
そもそもそんなコード書かないだろというか例が悪すぎるw
890:デフォルトの名無しさん
09/09/06 17:32:20
何とも都合のいい主観判断をするものだ
891:デフォルトの名無しさん
09/09/06 17:33:21
>>888
なんでNGかkwsk。
2つ目みたいな書き方はめったにしないと思うが、その最初の例でNGにしたい理由は?
892:デフォルトの名無しさん
09/09/06 17:36:16
class HogeString
{
private:
char* str;
public:
bool isEmpty()const{ return (name == NULL) ? true : false; }
// これをifで書いたら
bool isEmpty()const{
if(name == NULL){
return true;
}
return false;
}
};
ifだと冗長的な感じがする。こういうのは三項演算子でも良いと思うんだけどな。
893:デフォルトの名無しさん
09/09/06 17:38:30
return name == NULL;
894:デフォルトの名無しさん
09/09/06 17:41:46
ですよねぇ〜。書いた後で気づいたわ。
895:デフォルトの名無しさん
09/09/06 17:43:47
ワロタ
896:デフォルトの名無しさん
09/09/06 18:54:01
string, int, int, int の4つのデータをまとめて扱いたいのですが、
mapだと2つ以上の値のセットを扱うとエラーが出てしまいました。
こういう2つ以上の値のセットを扱うためのコンテナってありますか?
897:デフォルトの名無しさん
09/09/06 18:56:27
keyとなるものだけを残して他の3つは構造体かクラスにすれば良いじゃん。
898:デフォルトの名無しさん
09/09/06 20:36:57
namespaceってプロジェクトにひとつぐらいで十分?もっと細かく分けたほうが良いかな
899:デフォルトの名無しさん
09/09/06 20:37:19
CからC++に来たけど&が参照だったりアドレスだったりして気が狂いそうです
900:デフォルトの名無しさん
09/09/06 20:39:40
>>898
好き好き。
>>899
狂ってろ。
901:デフォルトの名無しさん
09/09/06 20:52:05
*がポインタ宣言だったり参照はがしだったり掛け算だったりする
Cから来たなら大丈夫よ
902:デフォルトの名無しさん
09/09/06 21:07:11
>>899
使い方が全然違うじゃん。
・・・それぐらい分からないと他言語でも無理だろ。
903:デフォルトの名無しさん
09/09/06 21:08:13
>>898
俺は2階層ぐらいだけど。
一番大きいプロジェクトの根幹のnamespaceと、
namespace implementationとか。
904:デフォルトの名無しさん
09/09/06 21:37:13
C++のSTLに含まれているstringのメンバ関数に、
find_first_not_ofというものがありますが、
この関数を
find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789")
という風に使って、アルファベットと数字とアンダーバー以外の文字数が
最初に出現する文字数を調べようとしたのですが、うまく働いてくれません。
(;や+などを感知してくれません)
これはなぜでしょうか?
905:デフォルトの名無しさん
09/09/06 21:46:43
>>904
とりあえずソースかけ。
話はそれから。
906:デフォルトの名無しさん
09/09/06 21:49:20
>>904
codepad
URLリンク(codepad.org)
ここで。
907:デフォルトの名無しさん
09/09/06 21:53:17
>アルファベットと数字とアンダーバー以外の文字数が最初に出現する文字数
文字数が出現する文字数ってなんだ?
908:デフォルトの名無しさん
09/09/06 22:12:22
ちょっとぐらい間違ってる日本語を補正する頭もないのかお前は
909:デフォルトの名無しさん
09/09/06 22:25:16
>>908
2か所間違ってるけどな。
まあなんにせよ>>906にあるところに貼ってくれるのをまとう。
910:デフォルトの名無しさん
09/09/07 19:31:24
CあるいはC++でSQLサーバに接続するにはどうしたらいいのでしょうか?
検索しても.NETFrameworkを使ったやり方しかなく困っています
どなたかご教授お願いします
911:デフォルトの名無しさん
09/09/07 19:32:59
sage忘れすまそ('A`)
912:デフォルトの名無しさん
09/09/07 19:48:12
質問です。
32ビットのWindowsの場合malloc()で確保出来るメモリサイズは2Gほどだったと思いますが、
これは、1プロセスあたりの制限ですか?
1つのプログラムで、malloc()を2カ所で呼び出すと、それぞれの箇所で2G確保できるのでしょうか?
913:デフォルトの名無しさん
09/09/07 19:54:23
>>910
ODBCでよければ、
ODBC C++とか、ODBC VC++で検索。
914:デフォルトの名無しさん
09/09/07 20:11:32
>>912
プロセスごとに2GB
915:デフォルトの名無しさん
09/09/07 20:40:05
>>912
どんだけ激しいメモリ消費なんだw
916:デフォルトの名無しさん
09/09/07 20:44:44
>>914
THX
困ったなぁ・・・。ディスクアクセスしながらちびちびやるか。
>>915
48Gほどのテキストデータを木構造に展開して色々やらないといけないのよ。
う〜む、もう少しダイナミックにオンメモリでやりたかった・・・
917:デフォルトの名無しさん
09/09/07 20:45:33
>>916
You, 64ビットに移行しちゃいなYO!
918:デフォルトの名無しさん
09/09/07 20:48:57
BDが真っ青
919:デフォルトの名無しさん
09/09/07 20:53:13
>>916
64bitしかあるまいw
どのみちそんなにメモリ詰めないだろw
920:デフォルトの名無しさん
09/09/07 20:59:40
サーバ用でもない限りマザーボードの上限に引っかかるな
921:デフォルトの名無しさん
09/09/07 21:25:21
>>916
アルゴリズムを検討してメモリの消費量を抑えるのが手っ取り早い。そのほうがいろいろ高速化できる。
それでも解決しないなら最後の手段として64bitOSと64bitコンパイラの採用を考える事になると思うよ。
どんなにメモリがあってもアルゴリズムを改良しないと演算時間がとてつもなくかかりそうな予感。
922:デフォルトの名無しさん
09/09/07 21:43:58
48GBのテキストデータって何ぞ?
漏れのおかずフォルダでもそんなにねーぞ。
923:デフォルトの名無しさん
09/09/07 21:59:47
>>922
そうか、本当に無いのか検証の必要があるな。よし、どっかにアップロードしろ。
924:デフォルトの名無しさん
09/09/07 22:00:23
ゲーム作っててつまずいたので質問します
struct Test{
TEST1 b[2];
省略
}
std::list< Test > lstTest;
こうやって使ってるんですが、このTEST1の配列を動的に確保することってできますか?
リストの中にリストとかしてみたんですが、同じような動きにならなくて困ってます。(ポインタの問題?
925:デフォルトの名無しさん
09/09/07 22:10:58
リストの中にリスト、大丈夫なはずだが
926:デフォルトの名無しさん
09/09/07 22:11:14
64Gって、研究かな?
今は、64Gのテキストデータなんてのを普通に使うようになったのか・・
恐ろしい時代だ・・・。
927:デフォルトの名無しさん
09/09/07 22:12:01
>>924
struct Test {
std::vector<TEST1> b;
};
でいいと思う。
あと解説サイトを見てlistとvectorの使い分けを覚えよう。
928:デフォルトの名無しさん
09/09/07 22:14:01
list -> 知的でおしゃれな感じを出したいときに使う
vector -> スマートなやり手プログラマを演出したいときにはコレ
deque -> 研究者気取りのあなたに
929:デフォルトの名無しさん
09/09/07 23:22:48
48GBとかのデータを扱うなら、クラスタ上でMPIとか使って並列プログラミングってのが筋かなあ
930:デフォルトの名無しさん
09/09/07 23:54:41
buf[10] = 0xff
buf[11] = 0x32
...
int kansu(u_1 *buf){`
i = 10;
printf("test buf[i] %d", i, buf[i])
このようなプログラムで、引数で配列を渡したとき
printfでbuf[10]等の中身を見ようとしたとき、表示がおかしな値になるのですが
どうしてでしょうか?
%d, %s, %x 等もおかしかったのですが
931:デフォルトの名無しさん
09/09/07 23:55:52
"test buf[%d] %d" では?
932:デフォルトの名無しさん
09/09/08 00:14:45
>>931
すみません、ここに書き方間違ってました。
実際のプログラムではそうかいてます。申し訳ありません。
そう書いて、表示がおかしかたtのです
933:デフォルトの名無しさん
09/09/08 00:23:39
%x
934:デフォルトの名無しさん
09/09/08 00:34:53
ソースを張るなり上げるなりしてください
935:デフォルトの名無しさん
09/09/08 00:40:31
u_1が何なのかわからないとなぁ
typedef unsigned char u_1;
だったらprintf()はスタック破壊してるだろうし
typedef unsigned long double u_1;
だったら表示がおかしいとかの次元じゃないし
936:デフォルトの名無しさん
09/09/08 00:47:23
>>935
u_1は、unsignede char です
スタック?どの辺がおかしいのでしょうか?
937:デフォルトの名無しさん
09/09/08 01:06:55
>>930
断片だけ書かれてもわからん。
おかしな値が再現するソースを見せてくれ。
938:デフォルトの名無しさん
09/09/08 01:11:54
>>937
すみません、今手元にないのでそのままお見せできないんですが
下のような感じです。とはいってもさっきと一緒で分かりにくいでしょうが・・
buf[50] ;
buf[1] = 0; buf[2] =5 等代入
void kansu(buf);
void kansu(u_1 *buf){`
i = 10;
printf("test buf[%d] %d", i, buf[i])
printf以降でbuf[i]の中身を別のバッファにコピーしてるのですが、
それを確認しようと思い、printfで確認しようとしたところ
まずその確認以前にうまく表示できなかったもので・・・
939:デフォルトの名無しさん
09/09/08 01:18:12
そもそも、bufの型はなんなんだ?
メモリは確保されてるのか?
940:デフォルトの名無しさん
09/09/08 01:18:36
>>939
malloc関数でかくほしております
941:デフォルトの名無しさん
09/09/08 01:19:31
>>939
bufは、unsigned char です
942:デフォルトの名無しさん
09/09/08 01:23:51
mallocで確保するんならbuf[50]は変な気がするけどな。
943:デフォルトの名無しさん
09/09/08 01:40:27
>>941
> i = 10;
> printf("test buf[%d] %d", i, buf[i])
別に表示がおかしくなることはないと思うがな。
この部分の、期待している表示と実際の表示を書いてくれ。
944:デフォルトの名無しさん
09/09/08 07:33:43
>>943
期待しているのは、buf[i]に代入した値が表示したいのですが、
全く関係ない数字が表示されてしまいます。4桁とか
945:デフォルトの名無しさん
09/09/08 07:47:07
部分だけじゃ、どこがおかしいかわかんねえよw
946:デフォルトの名無しさん
09/09/08 08:04:01
いくら間違っても4桁になるのはありえなさそうなんだが。。
947:デフォルトの名無しさん
09/09/08 08:31:55
>>938
まだコードが断片すぎる。コンパイルできるぐらいのまとまったものが
ないと他の人には問題は発見できないよ。
948:デフォルトの名無しさん
09/09/08 09:21:13
printf("%d", (unsigned char) 0xff)が何を表示されるのかって問題に帰結するのかな?
それだったら255だ。これがもしprintf("%d", (char) 0xff)ならば、-1かもしれないが。
それ以外の結果になるというのであれば、他の何かがおかしいのだろうよ。
949:デフォルトの名無しさん
09/09/08 18:03:25
fopen()でファイルを開くコストって結構かかる物なのでしょうか?
今実装してるプログラム、メモリ的な制限から探索範囲を狭めるために、ファイルを結構細分化するつもりなんですが・・・
950:デフォルトの名無しさん
09/09/08 18:15:34
>>949
ベンチマーク取ればいいが、
どんだけ多くても数百個だろ?一瞬。
むしろそれを超えると、OSの最大ディスクリプタ数にひっかかる。
951:デフォルトの名無しさん
09/09/08 18:16:48
>>949
まあストレージの種類によるんじゃないかな。ハードディスク上のファイルだと、
ファイルが分散しててディスクヘッドが頻繁に移動するのはハード的にきつい
952:デフォルトの名無しさん
09/09/08 18:30:14
>>949
48Gテキストの人か
953:デフォルトの名無しさん
09/09/08 18:59:52
頻繁にファイル開いて読み込んでってやってたらかなり遅くなるな。
一回読み込んだ内容はメモリ上にキャッシュして、キャッシュあふれたら
使用頻度低いほうから解放して…みたいな戦略は考えといたほうがいいと思うね。
954:デフォルトの名無しさん
09/09/08 20:04:30
>>949
ファイルのオープンクローズよりも、開いたファイルでシークしたほうがはるかに軽い。
ファイルの一部分をメモリにマップする手法としてメモリマップドファイルがあるよ。
ディスクキャッシュをメモリにマップするんで大きなデーターを効率的にアクセスできる。
955:デフォルトの名無しさん
09/09/08 20:08:25
Hoge::operator[](A,B,C);
hoge[a][b][c];
みたいなことができればいいのになんでできないんだよ
956:デフォルトの名無しさん
09/09/08 20:25:33
>>955
それでオーバーロードを許したらambiguous多発で大変じゃないか
957:デフォルトの名無しさん
09/09/08 20:44:33
まあ仕方ないからhoge[make_tuple(a,b,c)];
とかやってるんだけどもっとクールアンドホットなハック的テクはないわけ?
958:デフォルトの名無しさん
09/09/08 20:46:37
>>957
プロキシーオブジェクト
959:デフォルトの名無しさん
09/09/08 20:53:26
>>955 ちょっと工夫すればできるから。
960:デフォルトの名無しさん
09/09/08 21:02:07
やろうと思えばそりゃできるけどさ
コストとか範囲チェキとか考えると[][][]・・・でできるいいほうほうが浮かばないんだよ
961:デフォルトの名無しさん
09/09/08 21:02:39
>>955,958
ちとめんどいができるじゃんと思ったら
あれプロキシーオブジェクトっていうのか
初めて知った。さんくすw
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5029日前に更新/231 KB
担当:undef