- 1 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:37:43 ]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。
- 697 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:43:38 ]
- >>696
何を根拠に行数、列数が1と判断したのか詳しく。 つーか、vector<vector< int> >使ったら?
- 698 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:48:51 ]
- >>696
デバッガでは配列の要素数は型情報として存在しない限り 表示されないというか new [hoge] で取ったサイズは表示されないというか、 要するにただのポインタなので要素は1つしか表示されないというか、 まぁそんな感じ。
- 699 名前:696 mailto:sage [2008/04/28(月) 16:51:46 ]
- >>697
デバッグで、ローカル変数タブからです。 this以下、vec_x(int **)を見ると、 (int *)に対応するところが1段しかありませんでした。 さらに、その下(?)の階層にも要素はひとつしかありませんでした。 >>698 その要素に値を入力したとき、 うまく領域が確保できていればどう表示されるんでしょうか。
- 700 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:59:05 ]
- >>699
詳細は>698の通り。そのデバッガは(newで確保した)可変長配列に対応していないのだろう。 確保できていたかどうかを知る手段はない。 確保に失敗したかどうかは例外が送出されるので受け取ればいい。 つーか、>697の最終行。
- 701 名前:696 mailto:sage [2008/04/28(月) 17:13:14 ]
- むしろ、その後の値の入力に問題があるのかもしれません。
ifstream ifs("FILE_NAME"); ifs >> size_x >> size_y; for( i = 0;i<size_y;i++){ for( j = 0;j < size_x; j++){ ifs >> vec_x[i][j] >> vec_y[i][j]; } } としています。 入力ファイルの中身は、 整数(半角スペース)整数 整数(半角スペース)整数 ... となっており、最初にsize_x,size_yを入力しています。 size_x,size_y,vec_x[0][0]は正しく入力されたのですが、 vex_y[0][0]には正しい値は入っていません。 その後のvex_x,vec_yの各要素の値に関しても同様に正しい値は入力されませんでした。 >>697 STLはややこしくて全く手をつけていません。 お恥ずかしい限りですが…。
- 702 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 17:30:54 ]
- >>701
g++ で一応試したけど、配列は >>696 で問題無いよ。 俺も STL 使った方がいろいろと簡単だとは思うけど。
- 703 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 17:40:17 ]
- STLに限らず、まとまった規模の情報は何でもそうだけど、遠目に見ているうちは
頻繁に使うものと滅多に使わないものが「同じ大きさ」に見えるんで、 無駄に全容を眺めてしまって、「難しそうだなぁ」という気持ちばかり膨らんでいく。 実際には「STLを使う」ってのは、その殆どがつまり「コンテナを使う」ってことで、 これ自体はめちゃくちゃ簡単な話だよ。
- 704 名前:696 mailto:sage [2008/04/28(月) 18:00:02 ]
- ありがとうございます。
STLを勉強してみたいと思います。 今回は(x,y)のようなベクトルによって構成された、 2次元配列を二つ作ることを考えています。 vector<vector< int> > vect1(size_y,vector<int>(size_x)); として、vect1[y][x]として要素にアクセスすればいいのでしょうか。 ttp://gimite.net/bcbqtree/qtreemain.cgi?mode=thread&thread=162 この場合のコンストラクタの動作が理解できません。 第二引数のvector<int>(size_x)でvect1を初期化するのでしょうか。
- 705 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 18:57:24 ]
- >>704
それで使い方はいいよ。 違うよ。2個目の引数は vect1 の各要素を初期化というか instantiate してる。 constructor は 2 つ引数あるときは個数と各要素。
- 706 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 21:50:55 ]
- >>705
下の文に引用が無いから > それで使い方はいいよ。 > 違うよ。 が繋がった感じで、なんかワロタ
- 707 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 13:42:23 ]
- クラスAからpublic派生したクラスBで、クラスA分のメンバ関数をprivateにしたいんですが
Virtual付いてると宣言だけじゃ駄目なんでしょうか? 環境はBCB5+XPです class a { public: void Test1() {}; virtual void Test2() {}; }; class b : public a { private: void Test1(); //OK virtual void Test2(); //リンカエラーが出る };
- 708 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 13:56:01 ]
- virtualは関数の実体を定義しないとエラーになるよ。
- 709 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 13:58:16 ]
- それが許されたとして、aの中でよんでいるTest2はどうなるのか興味浦々
- 710 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 14:13:48 ]
- う〜んそうだったんだ。
a.Test2()で実体があるから、問題ないんじゃないかと思ってたけど 違うのか。 すごく勉強になったよ。ありがとう〜
- 711 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 15:04:23 ]
- class b : public a {
private: using a::Test1; using a::Test2; }; やりたいのはこういうことか?
- 712 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 17:43:05 ]
- >>711
この書き方は知らなかった。 usingについて調べてみます。
- 713 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 23:24:42 ]
- じぇねれーてぃぶこーどって本
買ったけどC++のソース部分読めない たじゅけて
- 714 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 00:30:03 ]
- 出版社に送って新しいのと取り替えてもらえ
- 715 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 00:47:17 ]
- 無限ループになる悪寒
- 716 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 07:55:38 ]
- >>714
当社では、「落丁・乱丁」の場合のみお取替えをさせていただいております。 大変申し訳ありませんが、「ソースコードが理解できない」お客様につきましては、 対応いたしかねますので、ご了承いただけますよう重ねてお願いいたします。
- 717 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 13:45:51 ]
- >>713
何がそんなに難しいの? template とかの勉強が必要なのかな?
- 718 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 00:30:53 ]
- じぇねれーてぃぶこーどなんて本あったっけ?
- 719 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 00:38:16 ]
- 日本語ではなかった気がする
- 720 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 10:14:01 ]
- これかぉ?
www.seshop.com/detail.asp?pid=9025
- 721 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 11:32:55 ]
- hoge
- 722 名前:デフォルトの名無しさん [2008/05/06(火) 11:39:15 ]
- int main ()
{ static int i (0); struct Local { static void increment () { ++ i; } }; Local::increment (); } 関数内のクラスのstaticメンバ関数(Local::increment)から 関数内の変数(i)を触れるのは規格に合ってる? g++.real (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) では触れるのだけど.
- 723 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 14:12:30 ]
- スタティックなメンバ関数からスタティックなメンバ変数が見えるのはいいんでないかい?
別に矛盾はないと思うし。 スタティックなメンバ変数ってのは、スコープ限定のグローバル変数みたいなもんだしね。
- 724 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 15:28:06 ]
- >>723
そういう事なんだろうね。俺も >>722 さんの code 見てちょっと えっ?て思ったけど、気分悪いがはっきりと間違っているとも言えない。 実際 compile してみると走るし(g++ 4.1.1)。どちらの static でも 外せば compile しない。
- 725 名前:722 mailto:sage [2008/05/06(火) 15:42:33 ]
- >>723,724
規格に合っているみたい. 9.8.1に 722ほぼそのまんまの例が載ってました.
- 726 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:05:22 ]
- int* array[10];
ってnewでやる場合どう書けばいいですか?
- 727 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:07:39 ]
- array[0] = new int[931];
- 728 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:26:29 ]
- >>726
もっと分かるように質問しろお( ^ω^)
- 729 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:31:01 ]
- int** array = new int*[10];でしょjk
- 730 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:32:22 ]
- C++のソースコードをアセンブラのコードに変換する方法があるって聞いたんですが
どうやればいいか教えてください コンパイラはVCです
- 731 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:34:11 ]
- コンパイラオプションで「アセンブリコードを出力する」に設定する
- 732 名前:デフォルトの名無しさん mailto:sage [2008/05/06(火) 23:36:49 ]
- 730です
ありがとうございます
- 733 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:02:34 ]
- void F( vecotr<int> &vec )
{ struct T { void operator()( int i ){ printf( "%d\n", i ); } }; for_each( vec.begin(), vec.end(), T() ); } こういう奴で、struct TをFのスコープ外にすると通るんだけど、 スコープ内だと通らない。 なんで? なんで?って考えちゃダメ?
- 734 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:04:20 ]
- >>733
関数ないクラス、構造体はtemplateクラスやtemplate関数にtemplate引数として渡せないと仕様で決まっている。
- 735 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:05:23 ]
- 誤字修正
x 関数ないクラス o C++仕様もまともに知らない奴は死ね
- 736 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:07:32 ]
- x 関数ない
o 関数内 こういうことだろ
- 737 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:18:35 ]
- x こういうことだろ
o べ、別にあんたの為に修正してやってるんじゃないんだからねっ!
- 738 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:35:33 ]
- >733
C++STDの14.3.1.2で不可になってますな。 コンパイル時に特定する必要があるので、外部リンケージの無い要素を指定できないんですな。 そういう意味で文字列リテラルも不可。 #文字列リテラルを実引数にできると色々と面白いんだけど、しようがないか……
- 739 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 00:49:27 ]
- 外部リンケージ?
- 740 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 18:10:55 ]
- ケータイ小説・千の風になっての評価
評価者:ミカ 評価:★★★★★ ミカと同じ名前で同じ歳の子がこんなひどい人生を送るなんて!! 信じられない!! 一晩中泣きました!! 評価者:サナエ 評価:★★★★☆ これがあたしたちのリアル。 評価者:ち†ょ⊃ 評価:★★★★★ 寝ゐ前|ニ言売ゐ女台め†ニяа止маω†ょ<τ 冫欠σ日シ立L≠†ょカヽ〃яа学木交|ニ彳テL≠маU†ニ
- 741 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 19:53:49 ]
- ちなつ
寝る前に読み始めたら止まんなくて 次の日泣きながら学校に行きました 同じ文字を複数の文字にあてたり、いきなりローマ字とか出てくるとワケワカメになるね。
- 742 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 20:39:31 ]
- ドストエフスキー小説・罪と罰の評価
評価者:ラスコーリニコフ 評価:★★★★★ 僕と同じ名前で同じ歳の人がこんなひどい人生を送るなんて!! 信じられない!! 一晩中泣きました!! 評価者:ドストエフスキー 評価:★★★★☆ これがあたしたちのリアル。 評価者:ポルフィーリィ 評価:★★★★★ 予審前に読み始めたら止まんなくて 次の日泣きながら仕事に行きました
- 743 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 00:57:43 ]
- おい
自演してる奴がいるぞ しかも評価は控えめw
- 744 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 16:17:28 ]
- 1 2 3 4
. __ __ _ ,i,_,i_ ,-,_ ,-i,_,l 、 :.. :. ≡=-i'__l, | `i /'-' `i //l l iコ==ラ`'i ti | lヽi li, → | lヽl li → l i,,l l | → ./ /l/ | l-'l |,l | | // l `"|iコ='' / / . 'Fヲ|,H E三l_l_A | .i .| / / ,i_| .| | | || | i' /l .l, -'‐' | || |_ l l .ヽ,ヽ, ‐' ' `‐' -'-' -'-' 脱ぐ たたむ プログラムを src と dest を つくる まちがえる。
- 745 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 19:02:05 ]
- >>742
>評価者:ポルフィーリィ 評価:★★★★★ >予審前に読み始めたら止まんなくて >次の日泣きながら仕事に行きました あんたが言うせりふやない。
- 746 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 19:23:43 ]
- >>744
ワロタ
- 747 名前:デフォルトの名無しさん [2008/05/10(土) 15:18:13 ]
- 重複しない複数の座標値、x,y,zという3つのキーを用いて、
そのキー(座標)の要素に値を代入、変更する処理を行おうと思っています。 現在、 class XYZ { int x; int y; int z; int value; }; としてXYZの配列を計算したい領域分だけ確保しているのですが 任意のx,y,zで値の変更があった場合,そのキーの要素を検索して参照、代入する方法として 何かよい方法はありませんでしょうか? よろしくお願いいたします。
- 748 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 15:20:47 ]
- 管理が冗長すぎるだろ
- 749 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 15:30:18 ]
- std::map<int, std::map<int, std::map<int, int> > > m;
m[x][y][z] = value;
- 750 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 15:45:35 ]
- m[x][y][z]って・・・
- 751 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 15:56:35 ]
- 志村XYZのDVDって出てたっけ?
- 752 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 17:33:03 ]
- >>747
言いたいことがよくわからない。 キーが与えられたら要素を返す method と代入する method (というか メンバ関数)を作るってことじゃないの?変更がどうあるのかもよくわからん。
- 753 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 17:47:52 ]
- XYZにoperator< を定義してsetに突っ込む
- 754 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 17:52:37 ]
- >>747
3次元座標値ってどんな領域なのよ? まず問題の概要を説明しやがれ このスカポンタン
- 755 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 17:55:46 ]
- >>754
そこは重要じゃないだろ
- 756 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 18:01:09 ]
- これでいいだろ
#include<map> class XYZ { int x, y, z; public: XYZ(int x, int y, int z) : x(x), y(y), z(z) {} bool operator<(const XYZ& rhs) const { return x < rhs.x || (x == rhs.x && (y < rhs.y || (y == rhs.y && z < rhs.z))); } }; int main() { std::map<XYZ,int> m; m[XYZ(0,1,2)] = 100; }
- 757 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 05:35:20 ]
- #include <new>
としているコードを見かけますが、 わざわざ<new>をインクルードするのなぜなのでしょうか? インクルードしなくてもnewは普通に使えますよね?
- 758 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:02:53 ]
- いらないと思うんだった、コメントアウトして再コンパイルしてみればいいんじゃね?
単に習慣でインクルードしてるだけかもしれないし。
- 759 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:14:42 ]
- placement new, std::nothrow, std::bad_alloc を利用する際にインクルードするヘッダファイルであって、
普通の new を使うためにインクルードするヘッダファイルではない。
- 760 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:23:57 ]
- >>757
precement newやnew演算子のオーバーロードをするときに使う。
- 761 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:28:16 ]
- オーバーロードする際に必要だっけ?
- 762 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:28:52 ]
- そんな事はない
- 763 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 11:29:54 ]
- だよねー
- 764 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 12:34:18 ]
- かわいい女の子が寝る前に
1分間枕元に立ってくれるための おまじないだと、先輩から聞いたことがる。
- 765 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 15:51:39 ]
- 映画版呪怨ですね。わかります。
- 766 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 00:39:48 ]
- struct xstring_traits{
bool is_w() const {...} ... }; struct vstring_ref { // デフォルトコピーコンストラクタ使用 const xstring_traits* tr_; const char* begin_; const char* end_; const wchar_t* wbegin(){return tr_->is_w() ? reinterpret_cast<const wchar_t*>(begin_) : NULL;} ... }; struct vstring_buffer { const xstring_traits* tr_; char* begin_; char* end_; ... }; struct vstring {...}; // コピーでメモリ再確保
- 767 名前:766 mailto:sage [2008/05/12(月) 00:40:35 ]
- (続き)
やっぱ引数がconst std::stringだと std::string以外から受け取る場合のコストが気持ち悪いし、 const char* でことあるごとにstrlenとかするのも無駄だし、 WindowsだとTCHARとかの場合もあるけど、 WinAPIに関係無い部分にまで<tchar.h>入れるの嫌だし。 で、ただでさえ多い文字列クラスをさらに増やすのかと 葛藤しつつも自作文字列クラスを・・・。 皆はやっぱり普通にstd::string? Windowsの場合は、 typedef std::basic_string<TCHAR>する人もいるよね。
- 768 名前:766 mailto:sage [2008/05/12(月) 00:41:33 ]
- ×引数がconst std::string
○引数がconst std::string&
- 769 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 00:55:18 ]
- 俺は、普段はconst std::string&で済ます。
std::basic_string<TCHAR>のtypedefもWindowsプログラムならよく使う。 767も言うコストが気になるならRangeを引数に取るテンプレートにする。
- 770 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 01:29:45 ]
- スレチだけど俺は TCHAR でちゃんと動くコード(mbcsをちゃんと処理するコード)を
書く気はさらさらないので、欺瞞的なTCHARの使用はなるべく避けてWCHARにしてる。
- 771 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 01:44:18 ]
- 俺も全部 TCHAR で書いてるけど、string::find とか平気で使ってるわ。
mbcs じゃほとんど動かんコードになってる。
- 772 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 07:10:43 ]
- >>767
文字数が必要ならこうする手も。 void hoge(const char* str, size_t len) { } inline void hoge(const std::string& str) { hoge(str.c_str(), str.length()); }
- 773 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:28:40 ]
- なんで、private継承、protected継承すると、アップキャストができなくなるのだ?
- 774 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:44:30 ]
- 外からprivateなメンバにアクセスできないのと同じ
外からprivateな基本クラスにはアクセスできない
- 775 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:48:23 ]
- >>773 外からできなくなるだけで、中からならアップキャストできるよ。
- 776 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:32:36 ]
- private継承するboost::operatorsがなんで動作するのかも良くわかんないな。
- 777 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:41:24 ]
- 分かんない事ばかりなのに使わなければならないC++って、怖くね?
- 778 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:47:31 ]
- >>776
friend関数はクラスのメンバではないから・・・かな? class A { private: friend void foo() { ... } // メンバのように見えるけど実はグローバル関数なのでアクセス制御は効かない }; int main() { foo(); }
- 779 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:48:13 ]
- C++以外の言語も使いますが分からないことだらけです。
- 780 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:36:07 ]
- 何が分からないか判っていれば解ったも同然だ
- 781 名前:デフォルトの名無しさん [2008/05/13(火) 19:54:24 ]
- friend関数、VC2005からtemplate<class T>を頭につけないと
コンパイルが通らなくなったんですね。C++0xはまだなのに こういう仕様変更はひそかにやってるんですか? それとも、もともと規格書にはこう決められていてやっと Vc++2005で対応できた、ということですか?
- 782 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:31:33 ]
- >>777
わかんない部分は無理して使う必要はないし。 でも、わかった後それを使うと今までだらだら長く書いていたコードがすっかりコンパクトにまとまってショックを受けることが多々ある。
- 783 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:43:20 ]
- >>781
それは後者 でも前者みたいなひそかな変更もVC++はよくやる。 いや、きちんと文書化されているけどね。 例えばtype traits支援とかC99の%a書式とか。
- 784 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 12:41:47 ]
- もう C++ なんて好きでもないし使いもしない理由。
ttp://www.hyuki.com/yukiwiki/wiki.cgi?WhyINoLongerLikeOrUseCPlusPlus 悔しいけど納得した。
- 785 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 13:24:39 ]
- 確かにめんどくさいし手間が掛かる…
- 786 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 14:04:26 ]
- C++ Programming Languageを端から端まで二度読める知能があれば右辺値参照ごときにどうして瞼が落ちるのか。
- 787 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 14:14:04 ]
- 落ち着かない仕様
時間の掛かる修正 度重なる保守
- 788 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 14:15:27 ]
- C++は仕事に向かない言語とういのには同意だな
- 789 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 14:30:05 ]
- C++ Programming Languageを二度読むのに必要なのは知能ではなくて忍耐力だからな
- 790 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 14:57:10 ]
- 性能に取り憑かれているのは自分でも気づいているがどうしてもやめられない。
- 791 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 15:08:56 ]
- Java も使うけど、C++ の方が楽に感じる事多いな。
気を付けないと保守が大変というのはわかる。 ただ、どの言語でも保守の問題はあるし、気を付ければ そんなに問題ないと思ってるけど。まぁ、5年後になんて 言っているかはわからんが。
- 792 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 15:57:49 ]
- C++の全機能を使わなければならない、という規約でもあったのだろうか?
演算子オーバロードは危険だと思ったなら、単にその機能を使わなければよい。 参照は不要でポインタがあれば十分だと思ったなら、単にその機能を使わなければよい。 添え字が範囲の中にあるかテストしてほしいと思ったなら、at()メンバ関数を使えばよい。 なぜ、C++の全機能 vs Cの比較なんだろう? C+α(Better C) vs Cの比較をしないのはなぜだ? 要するに、マヌケだってことだ。
- 793 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 16:00:18 ]
- >>784のリンク先
C++に過剰に複雑なところがあるのは同意なので、 その人(翻訳者でなく)がC++嫌ですって言うこと自体に批判は特に無いけど、 ちょっとツッコミ書くてst。 >C の方を使いたくなる 別に複雑な機能を使わなくても、 ・#defineマクロ(MAXなど)の代わり程度のtemplate ・fopen,fcloseみたいなのをRAIIに扱うための極薄ラッパー などの簡単で便利なものだけ「better C+おまけ」程度に使えば良いと思う。 巧みで知識もあると言う割には、要領が悪い気がしないでもない。 >Java や Groovy に そこでGroovyは無いと思う・・・ 俺もjava好きだから良いんだけど、 もうちょっと他の言語も挙げれば良いのに・・・
- 794 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 16:17:12 ]
- >そこでGroovyは無いと思う・・・
ググったら実質両方Javaでワロタw
- 795 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 16:22:57 ]
- >>792
> C+α(Better C) vs Cの比較をしないのはなぜだ? 自分一人で遊んでいるときしか、そういう使い方がうまくいかないからでは。
- 796 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 20:19:22 ]
- なぜ今更そのネタを
- 797 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:02:02 ]
- >>792
> C++の全機能を使わなければならない、という規約でもあったのだろうか? あるとしたら逆だろう。○○しか使ってはいけない、という規約が無くてカオス化する。 あるいは、そういう規約がちゃんと機能して、自分の仕事がうまくいっているとしても、 「ここまでの規約が無ければ収拾つかなくなるC++って・・・」という虚しさは感じることになる。 「C++に文句を言う奴は、C++を使い切れないマヌケだけ」 というのは、C++信者の反撃としては割とお約束だし、部分的には当たっている。 実際、「一人でちょっとしたものを作ることさえできない」人間の八つ当たりも結構見られるし。 ただ、C++の難点というのは、主に「個人の能力ではどうにもならないところ」に表れるものであって、 この話を個人の能力に全部収めて着地させようというのは、わかっててやってるなら いかにも姑息な「問題のすり替え」ではある。
- 798 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:14:38 ]
- > 個人の能力ではどうにもならないところ
ってどこだろう
- 799 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:19:29 ]
- 他人の脳味噌は自分の脳味噌ではない、という事実とか、
そういう風にして複数の脳味噌によって構築された「すんげえ規模」とか。
- 800 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:21:47 ]
- 名前マングリングとかABIとかじゃね
- 801 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:37:50 ]
- C++最高!とまでは言わないが、ハードと離れた言語は使う気しないな
- 802 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:39:21 ]
- >>799
それはC++に限った話じゃないな CでもJavaでもPHPでもよくある話だ >>800 ABIが規定されていてうまく機能している言語ってあります? ちなみに、自分はC++信者なわけではない 素直な感想と疑問
- 803 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 22:46:45 ]
- >>797
どの言語でも仕事で coding する時は文法的に正しければなんでも良い なんてことは無いはずだが。規約を全く無くせば収拾つかなくなると思うが。 規約を決めるのを C++ に限ったことではない。 元の記事はむしろ binary の compatibility を問題にしてるんじゃないかな。
- 804 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 23:05:02 ]
- >>802-803
「有るか無いかでいったら、どの言語にだってあるぞ」 というのは確かにその通りだけど、この場合はC++の「度合いのひどさ」を問題にしているわけで、 ゼロじゃないからどの言語もみんな仲間! ってのは、話の持って行き方としてちょっと違うと思う。
- 805 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 23:15:56 ]
- >>804
でもJavaぐらいだと>>799の問題は似たようなものな気がするけど だんだん複雑になってきてるし ある程度表現力が高い言語になると普遍的な問題じゃないかな C++だとまともに書けない人でもJavaなら書けるのだろうか そんな人がPythonならまともに書けるのか?
- 806 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 23:39:39 ]
- 規模の問題はちょっと違うだろうね。
名前マングリングに関しては確かにC++のは委員会とかの人も 普通に「どうにかしたい」って思ってそうだけど、 実質、ABIがさえ合えば問題無し、って程簡単じゃないから 再コンパイルした方が良い。 UNIX、Linux系ではオプションの変更程度で再makeすることも多いし。 それに完全にバイナリで使うなら.soとか.dllで考え方が良い。
- 807 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 23:46:07 ]
- 例外とか this ポインタの実装手段の違いとかも問題になるんじゃね。
- 808 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 00:27:21 ]
- >>797 で言っている問題で、何でも使うか使わないかは、
compile し直そうが残る問題が多いけど。特に保守性考えると。 件の ABI の問題は compile し直せばいい問題じゃないの? (だから問題になりえないと言っているわけではないが) ちょっと違うことを問題にしていて議論が混ざってる気がする。
- 809 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 21:20:35 ]
- 質問があります
代入演算子をprotectedないしprivateにしたいんですが、 実装はデフォルトで生成されるものそのままでいいんです class Hoge { // さまざまなメンバ変数(代入演算子があったりなかったりする) Hage hage; Fuga fuga; int hensuu; protected: Hoge& operator=(const Hoge&); }; ってやったらリンクエラーになるんですがどうすればいいでしょう イチイチ中身書くのも面倒で・・・
- 810 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 22:07:43 ]
- イチイチ中身書くしかない
- 811 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 23:25:47 ]
- C++0x では default キーワードでデフォルト実装を作ってくれるそうです。
- 812 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 23:26:25 ]
- handle-bodyイディオムで書いて、handleの代入演算子をprotectedなりにすればどう?
- 813 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:09:30 ]
- バイナリとしての0x00をchar配列に格納したいんですが、終端文字として認識されてしまいます。
こういう時ってどうすればいいのでしょうか?? ご教示いただけると幸いです。
- 814 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:16:56 ]
- もしかしてstrcpyとか使ってるのか?
- 815 名前:デフォルトの名無しさん [2008/05/17(土) 01:21:39 ]
- レスどもです。
いえ、const char [] 型に0x00を含む文字列を格納して、cout とかで出力しようとすると0x00以降が出力されないんです。
- 816 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:22:37 ]
- 考えるだけでも恐ろしい
- 817 名前:デフォルトの名無しさん [2008/05/17(土) 01:22:59 ]
- それは当たり前 仕様 0は文末というのが原則です。
- 818 名前:デフォルトの名無しさん [2008/05/17(土) 01:24:21 ]
- 出力させたいんだったら、string使えば出来るはず。 こっちはサイズまではちゃんと出力したと思う。
たとえばstr.resize(10000,'\0'); cout<<str;とする。
- 819 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:24:53 ]
- とすると、バイナリとしての0x00を途中に含むchar文字列を作りたいんですが、無理なんでしょうか??
- 820 名前:デフォルトの名無しさん [2008/05/17(土) 01:25:58 ]
- 0を含むchar配列はできるよ でもstrlenとかは間違える 自分で長さを管理すればよい。
- 821 名前:デフォルトの名無しさん [2008/05/17(土) 01:27:56 ]
- たとええばchar配列で0を含まないならstrcpy、strcmpなどを使い、
0を含むなら長さを自分で指定するmemcpyやmemcmpを使う。
- 822 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:28:55 ]
- いや作れるよ
char配列の内容がNTCSであることを仮定している関数・APIに NTCSでないchar配列を突っ込んでいることが間違いなだけ
- 823 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:47:42 ]
- なるほど!
0x00を入れると格納はされているけど出力できていなかったということですね。 長さを指定したら出力できました。 レス下さった方々ありがとうございましたm(_ _)m
|

|