1 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:37:43 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。
684 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 22:13:35 ] void f( T a ) {} f の呼び出しで a を生成するときに起きる例外は f の中で発生する 例外ですか,それとも外で発生する例外ですか?
685 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 22:16:42 ] 外
686 名前:なにがだ mailto:sage [2008/04/26(土) 22:30:18 ] >>684 f()に入れる前に出ちゃってるんだから大丈夫。
687 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 22:31:58 ] もう、出しちゃったの?
688 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:46:33 ] Winsock2.0で非同期通信について教えてくれ connectメソッド使ってサーバに接続要求して サーバ側でACCEPTメッセージちゃんと受け取って 接続できてるのに戻り値が0にならないのは何で?
689 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:58:54 ] とりあえずWSAGetLastErrorでエラー内容調べてみたら?
690 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:06:54 ] >>689 やってんだけどわかんないんだ 非同期通信の場合WSAEWOULDBLOCKが返されるのは正常 という記事は見つけたんだけど、鯖立ててない状態で接続しても WSAEWOULDBLOCKしか返らないからエラー処理出来なくて困ったちゃん
691 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:16:49 ] msdn2.microsoft.com/en-us/library/ms887913.aspx >With a nonblocking socket, the connection attempt cannot be completed immediately. >In this case, this function will return SOCKET_ERROR and WSAGetLastError will >return WSAEWOULDBLOCK.
692 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 20:46:47 ] C++のnamespaceとオブジェクトに関連した質問させて下さい。 namespace Aにあるクラスまたは構造体のオブジェクトを、 namespace Bのクラスに引数として渡したいのですが、どのように 記述すればいいのでしょう?出来ればnamespace AとBは別々に、 それがダメならnamespace Aの中にBがいるように出来ればと 思っています。 C++を触りはじめたばかりでわかっていないことが多いのですが、 よろしくお願いします。
693 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 21:26:36 ] namespace AのclassXなら「A::X」
694 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 15:26:11 ] std::vector::size_type 型のオブジェクトは std::size_t 型の オブジェクトに変換できるでしょうか?
695 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:28:10 ] >>694 符号なし整数で、difference_typeの全ての非負数を表す事ができる。 としか書かれてないから、実装依存じゃないかな。
696 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:38:32 ] 教えてください。 Visual Studio 2005をつかっています。 クラスのコンストラクタ内で動的に2次元配列を生成し、 ファイルから値を入力したいのですが、 デバッグ(ローカル,this,vec_x内)で確認すると、2次元配列にはなっているのですが、 行数、列数で共に1となってしまっています。 int **vec_x; int **vec_y; と宣言し、コンストラクタ内で、 vec_x = new int * [ size_y ]; vec_y = new int * [ size_y ]; for(i = 0; i<size_y; i++){ vec_x[i] = new int[size_x]; vec_y[i] = new int[size_x]; } size_y,size_xは初回のnewの次点ですでに、 300,200となっていることは確認済みです。
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 悔しいけど納得した。