5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C++相談室 part70

1 :デフォルトの名無しさん:2009/06/14(日) 10:14:10
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part69
http://pc12.2ch.net/test/read.cgi/tech/1241438694/


2 :デフォルトの名無しさん:2009/06/14(日) 10:15:25
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
 http://www.cppreference.com/ (英語)
 http://www.cppll.jp/cppreference/ (↑の日本語訳だけど最新は反映しない)
[禿 Stroustrup]
 http://public.research.att.com/~bs/
[C++ International Standard]
 http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=38110
[JTC1/SC22/WG21 - C++]
 http://www.open-std.org/jtc1/sc22/wg21/
  ここから規格の最新(2003より新しい)ドラフトがダウンロードできる。
[JIS X3014]
 http://www.jisc.go.jp/app/pager?&RKKNP_vJISJISNO=X3014
  ISO規格の日本語訳。JIS X 3014:2003はISO/IEC 14882:2003 (E)に対応。

3 :デフォルトの名無しさん:2009/06/14(日) 10:16:10
■Books(Templateまわり)■
Effective STL
 http://www.amazon.com/exec/obidos/ASIN/0201749629/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
 http://www.amazon.com/exec/obidos/ASIN/0201704315/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
 http://www.amazon.com/exec/obidos/ASIN/0201734842/
C++ Template Metaprogramming
 http://www.amazon.com/exec/obidos/ASIN/0321227255/


4 :デフォルトの名無しさん:2009/06/14(日) 10:17:19
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/boost/
[標準ライブラリ]
 SGI-STL http://www.sgi.com/tech/stl/
 STLport http://stlport.sourceforge.net/
 GNU libstdc++ http://gcc.gnu.org/libstdc++/
 Apache STDCXX http://incubator.apache.org/stdcxx/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
 (日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
 http://sourceforge.net/projects/loki-lib/
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport


5 :デフォルトの名無しさん:2009/06/14(日) 10:18:34
入門ページなど

http://www.cplusplus.com/

・入門,一覧,使い方
http://www5c.biglobe.ne.jp/~ecb/cpp/07_01.html
・メソッド一覧
http://www.wakhok.ac.jp/~sumi/stl/
・サンプルプログラム集
http://www.s34.co.jp/cpptechdoc/reference/stl_samples/


6 :デフォルトの名無しさん:2009/06/14(日) 10:19:28
Apache STDCXX http://incubator.apache.org/stdcxx/

Apache C++ Standard Library (STDCXX) http://stdcxx.apache.org/
というのは指摘済みでした。ごめんなさい。とりあえず訂正。

■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/boost/
[標準ライブラリ]
 SGI-STL http://www.sgi.com/tech/stl/
 STLport http://stlport.sourceforge.net/
 GNU libstdc++ http://gcc.gnu.org/libstdc++/
 Apache C++ Standard Library (STDCXX) http://stdcxx.apache.org/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
 (日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
 http://sourceforge.net/projects/loki-lib/
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport

7 :デフォルトの名無しさん:2009/06/14(日) 10:20:08
結論

Cでいい

8 :デフォルトの名無しさん:2009/06/14(日) 10:25:44
Boost C++ Libraries
http://www.boost.org/

Boost 翻訳プロジェクト
http://boost.cppll.jp/HEAD/

Let's Boost
http://www.kmonos.net/alang/boost/

boost info
http://shinh.skr.jp/boost/

9 :デフォルトの名無しさん:2009/06/14(日) 10:39:30
最悪言語C++は不要
スレも不要

10 :デフォルトの名無しさん:2009/06/14(日) 10:54:15
C++で作れない人にとってはC++は不要
Cスレに帰れ

11 :デフォルトの名無しさん:2009/06/14(日) 11:11:49
c++最高

12 :デフォルトの名無しさん:2009/06/14(日) 11:25:53
>>1

13 :デフォルトの名無しさん:2009/06/14(日) 11:33:21
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

14 :デフォルトの名無しさん:2009/06/14(日) 12:27:14
誤爆

15 :デフォルトの名無しさん:2009/06/14(日) 16:52:33
テンプレはまだ続きます

16 :デフォルトの名無しさん:2009/06/14(日) 17:27:51
『C++再考』

17 :デフォルトの名無しさん:2009/06/14(日) 17:29:40
『C++サイコ』

18 :デフォルトの名無しさん:2009/06/14(日) 19:51:02
std::string myString = GetHogeString();

みたいにした場合、これ以降 myString に対する操作はすべて myString.c_str() のみで、
その他の操作はいっさいしないと仮定した場合

const char * pStr = myString.c_str();

としておいて、以降ずっと(いつの日かmyStringが破棄されるまで)
pStr を使っていても問題ない?


19 :デフォルトの名無しさん:2009/06/14(日) 19:54:33
>>18
問題ない。
myString が破棄されるか、 myString の非 const メンバ関数を呼び出すまで
c_str() の戻り値は有効。

20 :デフォルトの名無しさん:2009/06/14(日) 19:57:06
規格書広げるまでもなく
"いつの日"が1msec後で、1msec後にpStrが向こうになったら困るから、
"いつの日か"破棄されるまでずっと有効。

21 :デフォルトの名無しさん:2009/06/14(日) 21:00:47
開封後はお早めにお召し上がりください

22 :デフォルトの名無しさん:2009/06/14(日) 21:44:06
仮に
class A {
public:
 A() {
  m_String = ::GetHogeStr();
  m_pStr = m_String.c_str();
 }
 const char * GetStr() {
  return m_pStr;
 }
 std::string m_String;
 const char *m_pStr;
};

みたいにしてあった場合、例えば
std::vector<A> a;
とかやってると a の操作によっては中身が再配置されてまずいんでないの?

23 :デフォルトの名無しさん:2009/06/14(日) 21:58:49
>>22
おまいは何を勘違いしているんだ。
m_pStrの中身が0x12345678だったとして、
仮にアフリカに再配置されたとしても0x12345678のままだぞ。

24 :デフォルトの名無しさん:2009/06/14(日) 22:10:27
いや、そうじゃなくて
std::vector<A> vec;
A a;
vec.push_back(a);
const char *a_str = vec[0].GetStr();
vec.push_back(...);
vec.push_back(...);
...
てやったときにさ、a0 が最後まで無効にならないって保障はあるのかと。
vec が保持してるのは A* じゃなくて A じゃん。


25 :デフォルトの名無しさん:2009/06/14(日) 22:11:17
すまん a0 → a_str とよみかえてくれ

26 :デフォルトの名無しさん:2009/06/14(日) 22:12:07
>>22
元の質問ではっきり「これ以降 myString に対する操作はすべて myString.c_str() のみ」って
前提がおいてあるのに、なんでわざわざ問題のある状況を作って「まずいんでないの?」とか
スレ汚すの?

27 :デフォルトの名無しさん:2009/06/14(日) 22:13:41
スレを汚したい年頃だからさ

28 :デフォルトの名無しさん:2009/06/14(日) 22:15:47
パンツ汚したら親に見つからないように風呂場で洗え^^

29 :デフォルトの名無しさん:2009/06/14(日) 22:16:21
>>24
保障あるよ

30 :デフォルトの名無しさん:2009/06/14(日) 22:19:08
myString がグローバル変数だとか、単なるローカル変数ならいいけどさ、
クラスのメンバだったりするとまた話は変わってくるでしょ。
myString に対するそうさが c_str だけとわかっていても、それを含んでいる
インスタンスの扱いによっては、myString を直接いじらなくても
おかしくなる可能性があるんじゃない?


31 :デフォルトの名無しさん:2009/06/14(日) 22:21:59
>30
え!マジで

32 :デフォルトの名無しさん:2009/06/14(日) 22:27:22
class A {...}
std::string <A>
とかやったら、内部バッファが拡張されるたびに
あたらしい領域にAのコピーがつくられて、
古い領域にあるA が全廃棄になるものとばかり思っていた

33 :デフォルトの名無しさん:2009/06/14(日) 22:29:27
そもそも値のセマンティクスを持たないものをSTLコンテナの中に入れちゃらめ^^
R.マッサー先生がそう書いてたでしょ?

34 :デフォルトの名無しさん:2009/06/14(日) 22:45:08
>30
>インスタンスの扱いによっては、myString を直接いじらなくても
>おかしくなる可能性があるんじゃない?

何でわざわざmyStringが破棄される場合の話がでてくるの?
はじめから>>18でもmyStringが破棄されたときは問題だと認識されているが。
いつmyStringが破棄されるか、というのはまったく別の話だろう。



35 :デフォルトの名無しさん:2009/06/14(日) 23:07:06
あまり考えずに丸投げで聞いてみるが
C++でCPSスタイルって出来る?
テンプレート/関数ポインタともに
型の制限は受けるよね、多分

36 :デフォルトの名無しさん:2009/06/14(日) 23:08:16
できるよ。

37 :デフォルトの名無しさん:2009/06/14(日) 23:27:44
template <typename T> void mandelbrot(T cont){
//z=z*z+cを色々計算
cont.parse(z.real(),z.imag());
}

void mandelbrot2(void (*cont)(double,double)){
//略
cont(z.real(),z.imag());
}

一応これで出来そうには思うが
2回以上連続して適用は無理だよな
operator()で統一するぐらいが現実的か

38 :デフォルトの名無しさん:2009/06/15(月) 00:56:33
前スレのABC案に答えてくれた人ありがとうございました。
とりあえずB案で、それがボトルネックになる事態が発生するまでそうしておこうと思います。

39 :デフォルトの名無しさん:2009/06/15(月) 00:57:43
普通Aからだろ。まあいいが。

40 :デフォルトの名無しさん:2009/06/15(月) 01:06:28
個人的にはCがいいかと思っていたのですが、Bでもさほど問題にはならないだろうし、
なにより早すぎる最適化であるという指摘を受けて、なるほどと思いました。
Aであることのメリットは何でしょうか?

41 :デフォルトの名無しさん:2009/06/15(月) 01:12:44
ちなみにCがいいかと思った理由は、スコープを限定できる(C#でいうusingのような)ことと、
ループ内でインスタンス生成することのコスト(が最適化されるかどうかも含めて)を、
そのコードを初めて見た人が心配しなくてすむだろうと思ったからです。

42 :デフォルトの名無しさん:2009/06/15(月) 01:36:47
ブロック式が出てきたら関数化が必要だと思うきがす・・・るけど,採用しなかったならOK

43 :デフォルトの名無しさん:2009/06/15(月) 22:11:48
>>38
お前は何を聞いていたんだ。
コピーコンストラクタには3歳児が10まで数える処理が
含まれているって言ったろ?

44 :39:2009/06/15(月) 23:18:20
>>40
ああ、ごめん。おれもBだわ。勘違いしてた。

45 :デフォルトの名無しさん:2009/06/15(月) 23:23:11
>>43
コピーコンストラクタは速いが、デストラクタでは100まで数えておふろから出る処理が含まれてたと思う

46 :デフォルトの名無しさん:2009/06/15(月) 23:42:18
それが問題になるならその時に対処すればいい

47 :デフォルトの名無しさん:2009/06/16(火) 05:24:12
そもそも真にボトルネックになっているかどうかが分からない。
実測するしかないだろう。

・コピーコンストラクタで毎回生成する方式
の方が速いこともあれば
・代入演算子で毎回生成する方式
の方が速いこともある。

前者は毎回メモリをスタックに確保する必要がある+コピーコンストラクタを起動する必要がある
が、確保場所は好き好きに決めて良いから速いかもしれない。
後者は毎回メモリをスタックに確保する必要がない+代入演算子を呼び出す必要がある
が、確保場所は既にきまっちゃっているわけで、自由度がないかもしれない。

てな感じでしょうかね。

48 :デフォルトの名無しさん:2009/06/16(火) 19:46:51
可能な限りconst使いなさいよという話があると思います。

void func(char *data) { std::cout << data << std::endl; } // こういう関数について
void func(const char *data)      // こうしよう、と書いているけれど
void func(const char * const data)  // こうじゃないのはなんで?

あと、これが普通に動作するのはなぜですか?
void func(const char * const data) { delete [] data; }

49 :デフォルトの名無しさん:2009/06/16(火) 20:09:16
理由1
(const) char * は const char * const に暗黙変換できないので
void func(const char * const data)はchar * をキャストしないと受け取れなくて不便だから
理由2
dataはスタック変数だから壊しても被害が少ないから

deleteの理由
例えばこんなxがfを抜けるたびに破棄されることには疑問は抱かないだろう
これと同じ事で定値性と破棄可能性は無関係
void f(int n){
 const x = n;
}

50 :デフォルトの名無しさん:2009/06/16(火) 20:27:01
>>49
>(const) char * は const char * const に暗黙変換できないので
おいおい

51 :デフォルトの名無しさん:2009/06/16(火) 20:35:33
constをはがすのではなく、つけているだけなので暗黙のキャストは可能と思っています。

破棄可能性が無関係であること、ありがとうございました。

52 :デフォルトの名無しさん:2009/06/16(火) 20:48:10
全然別人だけど、
MyClass *型 は MyClass const *型へと暗黙の型変換は出来るんじゃないの?


53 :デフォルトの名無しさん:2009/06/16(火) 20:51:05
>暗黙のキャスト
って用語的に正しいの?
暗黙の型変換

明示的な型変換
があり、明示的な型変換はキャストと呼ばれるんだと思って居たんだが。

54 :デフォルトの名無しさん:2009/06/16(火) 20:52:59
あ、たしかに、暗黙の型変換って言いますね。ごめんなさい。

55 :53:2009/06/16(火) 20:57:46
>>54
いや、俺が無知なだけなのかもしれない。
Type conversionの別名がキャストだったりするのかもしれん。

まあ誰か有識者よろしく。

56 :デフォルトの名無しさん:2009/06/16(火) 21:16:26
どんな型でも入れられるTreeってないですか?

57 :デフォルトの名無しさん:2009/06/16(火) 21:18:09
>void func(const char * const data)
hoge(const int a)
とは書かないのと同じ理由かと。

58 :デフォルトの名無しさん:2009/06/16(火) 21:25:08
const int aとなぜ書かないのだろう、とも思っていたのですが、
呼び出し元に影響がないので、特に問題になることもないだろうという感じですか?

ちなみに参照になると、func(const MyClass &p) と書きますよね。
この場合、一時オブジェクトを束縛する効果があると最近知りました。

ポインタの参照を受け取るときはやっぱり func(const MyClass * const &p) とすべきなのか、
それとも、アドレスは値コピーされるので一時オブジェクトが引数に使われていても問題ないのか
なんだかよくわからなくなってきました。

59 :デフォルトの名無しさん:2009/06/16(火) 21:32:17
>>58
>const int aとなぜ書かないのだろう、とも思っていたのですが、
>呼び出し元に影響がないので、特に問題になることもないだろうという感じですか?
そう。
だって
void foo(const int a);//下のと同一の意味を持つ表現
void foo(int const x);//上のと同一の意味を持つ表現
とかだったらどう頑張っても(aの値を変えても)コピー渡しである以上、
foo(b);
でbの値が変わることはない。
だからconstつけなくたって(つまりvoid foo(int x);だって)いーじゃん、と。
>ちなみに参照になると、func(const MyClass &p) と書きますよね。
そうしないとconstオブジェクト渡せないでしょ。参照渡しである以上、
const付けておかないと値が変更されるかもしれないじゃない。
>この場合、一時オブジェクトを束縛する効果があると最近知りました。
まあ今回のとは全然別の話だけどね。

60 :デフォルトの名無しさん:2009/06/16(火) 21:33:18
>>56
bool comp(const void*& l, const void*& r) {...}
set<void*> tree(comp);
tree.insert(new SweetMemory);
tree.insert(new StolenBike);
tree.insert(new MyBoss);

61 :59:2009/06/16(火) 21:33:40
>>58
>ポインタの参照を受け取るときはやっぱり func(const MyClass * const &p) とすべきなのか、
>それとも、アドレスは値コピーされるので一時オブジェクトが引数に使われていても問題ないのか
>なんだかよくわからなくなってきました。
じゃあ問題。
……………………………………………………
YourClassを君の自作クラスとしよう。
void foo(const YourClass x);//下のと同一の意味を持つ表現
void foo(YourClass const x);//上のと同一の意味を持つ表現☆
とかだったらどう頑張っても(xの値を変えても)コピー渡しである以上、
foo(y);
でyの値が変わることはない。だから
void foo(YourClass x);
でよい。
……………………………………………………
ここそこでYourClassをMyClass *に読み替えてみよう。
どうなるかな?
とくに☆に着目。

62 :デフォルトの名無しさん:2009/06/16(火) 21:42:49
うーん。
func(const int a);
これは、funcの中でaを変えるつもりはないので、間違えて変えてしまったときにエラーに
なるようにしようという、関数作成者からみた防御策になるので便利だと思ったんですけど。
void sub(int &a) { a = 3; }
という関数をfunc内で呼び出しちゃうなんてことも防げますよね。

>>ちなみに参照になると、func(const MyClass &p) と書きますよね。
>そうしないとconstオブジェクト渡せないでしょ。参照渡しである以上、
>const付けておかないと値が変更されるかもしれないじゃない。
この辺と同じ話なんですけど

63 :デフォルトの名無しさん:2009/06/16(火) 21:45:31
あまり話の流れを読んでないが
メンバ関数にしてconstを付けるっていうのはどうよ
ただ、変数じゃなくて関数全体がconstになってしまうが

64 :デフォルトの名無しさん:2009/06/16(火) 21:51:58
>>61

void foo(const YourClass x);//下のと同一の意味を持つ表現
void foo(YourClass const x);//上のと同一の意味を持つ表現☆

この、YourClassをMyClassに変えて、ということですが、
void foo(const MyClass * x);//A
void foo(MyClass * const x);//B Aとは全然違う意味を持つ表現
void foo(MyClass const * x);//C Aと同一の意味を持つ表現
と思います。

65 :デフォルトの名無しさん:2009/06/16(火) 21:54:32
>>62
ああ、なるほど、経験のあるC++初心者ないしそれ以上なのか。
完全な入門者相手のつもりで書いてしまったわ。
すまんかった。

>void sub(int &a) { a = 3; }
>という関数をfunc内で呼び出しちゃうなんてことも防げますよね。
おっしゃるとおりだね。
まずはintじゃなくてYourClassだったとして考えてみる。

一般にはYourClassのコピーコンストラクタないしデストラクタが非常に重い処理だと考えられるので
>func(const YourClass a);
>これは、funcの中でaを変えるつもりはないので、間違えて変えてしまったとき…(ry
変えるつもりがないのなら
func(const YourClass& a);
にした方がコストが低くていいでしょう。

ここでYourClassがintだったとすると
func(const int& a);
よりは
func(const int a);
func(int a);
の方が良いでしょうってことになるね。

ということで、

66 :61:2009/06/16(火) 21:56:55
>>64
そのとおりです。
いやごめん、入門者相手のつもりだったから。

>void foo(MyClass * const x);//B Aとは全然違う意味を持つ表現
xはconstだが*xがconstでないのだ

なんていう事は分かっている方だったのね。


67 :デフォルトの名無しさん:2009/06/16(火) 22:00:04
はい、一応その辺は理解しているつもりです。(お気遣いさせてしまいすみません)

その上で、funcの中でpを変更するつもりがないのであれば、
void func(const char * const p)
ないしは、
void func(char const * const p)
とすべきではないのかと思った次第です。

68 :デフォルトの名無しさん:2009/06/16(火) 22:00:58
> pを変更するつもりがないのであれば
これを抜かして>>48を書いてしまったのが悪かったのかも。。。重ねてすみません。

69 :61:2009/06/16(火) 22:08:40
>>67
いやこっちこそ下らんレベルで長レスしてすまんかった。

>その上で、funcの中でpを変更するつもりがないのであれば、
>void func(const char * const p)
>void func(char const * const p)
>とすべきではないのか
俺もそうする事はある。"ssttrriinngg"なんてものを渡す時とか。
そうすればpが指すオブジェクトが有効な物を渡されている限り必ず有効であることが保証されるからね。

>void func(char *data) { std::cout << data << std::endl; } // こういう関数について
>void func(const char *data)      // こうしよう、と書いているけれど
>void func(const char * const data)  // こうじゃないのはなんで?
これは単に
>void func(char *data) { std::cout << data << std::endl; } // 1.こういう関数について
>void func(const char *data)    // 2.せめてこれくらいはしよう
>void func(const char * const data // 3.ここまでできるなら完璧だがやっても関数の副作用には変わりない。
>void func(char * const data)   // 4.最低でもこんなのはやめてね
っていう程度じゃない?
ポインタ変数だからconstが2箇所付けられるがために紛らわしい話になっているけど、
要するに関数の副作用をできるだけ防止するためにconstを付けようという文脈だろうとおもう。
1.だと副作用を防げないから2.にしよう。
4.だと副作用を防げないから3.にしよう。
と言った程度でしょう。



70 :61:2009/06/16(火) 22:25:05
参照渡しにて。
>一時オブジェクトを束縛する効果があると最近知りました。
これは認めないとコピー渡しと同じインターフェースで関数が使えないしね。
C++ Labyrinth
ttp://www.fides.dti.ne.jp/~oka-t/cpplab-tips-1.html
ご存じかもしれないけど、参照渡しではないけど似たようなもの。返り値版。


>あと、これが普通に動作するのはなぜですか?
>void func(const char * const data) { delete [] data; }
void func(const char * const data) { delete data; }
じゃなくて?
いずれにせよ確かに不思議だが、
[cppll:9262] const pointer の delete
ttp://ml.tietew.jp/cppll/cppll/article/9262
ここによると
> Draft ANSI C++ Standerd - Nov 1996 Working Paper より:
> <引用>
> 5.3.5 Delete [expr.delete]
> ...
> Note: a pointer to a const type can be the operand of a
> delete-expression; it is not necessary to cast away the
> constness (_expr.const.cast_) of the pointer expression
> before it is used as the operand of the delete-expression.
> </引用>
って書いてあるよ。

71 :デフォルトの名無しさん:2009/06/16(火) 22:29:56
やばい!
雷なって来たから消すわ。

落雷されるとホント困るし。

72 :デフォルトの名無しさん:2009/06/16(火) 22:38:54
>>70
おお、有益な情報をありがとうございます。

> 『プログラミング言語 C++ 第3版』
ちらちらとしか読めていなくて、いかんなあと思ってます。

const pointerのdeleteについてもありがとうございます。
逆に、deleteは指定されたポインタの値を、決して書き換えることはないということなんですかねえ。

delete後にNULLを代入するコードにはそういう事情も含まれてるんでしょうねきっと。(いつも不思議でした)

73 :デフォルトの名無しさん:2009/06/16(火) 22:52:14
要素10オブジェクトからidが一致する1つを見つける
処理を簡単かつ高速に記述するにはどうすればいいですか?


74 :デフォルトの名無しさん:2009/06/16(火) 22:54:24
つmap

75 :デフォルトの名無しさん:2009/06/16(火) 22:54:28
ハッシュが最速

76 :デフォルトの名無しさん:2009/06/16(火) 22:54:36
>>73
頭から順に調べる

77 :デフォルトの名無しさん:2009/06/16(火) 22:58:46
>>73
idが順序もってるならソートしておいてbinary search

78 :デフォルトの名無しさん:2009/06/16(火) 23:09:41
楽さ 76 > 74,77 > 75
早さ 75 > 77=74 > 76
標準ライブラリのマップ実装はtreeなので77に近い

79 :デフォルトの名無しさん:2009/06/16(火) 23:20:43
>>74
mapがいいのですかね?
idは追加削除が頻繁におきます
でも10個までしか登録されません

80 :デフォルトの名無しさん:2009/06/16(火) 23:40:25
圧倒的に最速。
inline void set(size_t id, int val) {
  assert(id < 10);
  a[id] = val;
}
inline int get(size_t id) {
  assert(id < 10);
  return a[id];
}


81 :デフォルトの名無しさん:2009/06/16(火) 23:42:13
このスレのレベルが一変した瞬間でした

82 :デフォルトの名無しさん:2009/06/16(火) 23:43:22
トライ木

83 :デフォルトの名無しさん:2009/06/16(火) 23:49:24
いろんなクラスをtypedefしたtypedefs.hがあって、
そのtypedefs.hをインクルードするclass Aがある。
で、class Aのtypedefをtypedefs.hに記述したいんだけど、
これだと循環インクルードになってエラーになっちゃう?

// typedefs.h
typedef boost::shared_ptr< X > x_ptr; ←こんな奴をまとめたのがtypedefs.h
typedef boost::shared_ptr< A > a_ptr; ←こんなのをtypedefs.hに書きたい

// a.h
#include "typedefs.h"
class A{ x_ptr x; }; ←typedefs.hの中の奴を使ってる。

で、typedefs.hに#include "a.h"を書いたらダメっぽいんです。
どうしたらいいですか?



84 :デフォルトの名無しさん:2009/06/16(火) 23:50:51
>>81
あがったんだよな?

85 :デフォルトの名無しさん:2009/06/16(火) 23:51:45
extern class A;

86 :デフォルトの名無しさん:2009/06/16(火) 23:53:30
速度を求めるならハッシュでいいだろ。
完全ハッシュ関数はgperfで求めればいいし。

87 :デフォルトの名無しさん:2009/06/16(火) 23:55:03
>>85
externは不要。

88 :デフォルトの名無しさん:2009/06/16(火) 23:55:45
gperfじゃだめだろ

89 :デフォルトの名無しさん:2009/06/16(火) 23:57:21
多くても10個のIDを調べるだけなんだから
頭から順に走査すればいい
確率的には比較回数5回以下になる
よけいな計算をするほうが遅くなる

90 :デフォルトの名無しさん:2009/06/17(水) 00:04:38
id同士の比較が一定時間なら,
Hash(id_A)<==>Hash(id_B) と id_A<==>id_B では後者が有利かなぁ

91 :89:2009/06/17(水) 00:06:38
平均比較回数については不明だった
最大でも10回ということしか保証できないな

92 :デフォルトの名無しさん:2009/06/17(水) 00:18:30
class Hoge
{
int id;
};

Hoge hoge[10];

hoge[i].idを比較する場合どうなんですかね?

93 :デフォルトの名無しさん:2009/06/17(水) 00:21:56
idはどうやって決まるの?

94 :デフォルトの名無しさん:2009/06/17(水) 00:25:05
>>93
関数でセットします

void SetID(int index, int id)みたいな感じで

95 :デフォルトの名無しさん:2009/06/17(水) 00:28:18
ごめん、そういうことじゃなくて
IDの範囲やら規則性やらがあるのかってこと。

96 :デフォルトの名無しさん:2009/06/17(水) 00:29:12
>>95
1から32000までと考えてください。

ただ、セットされるのはそのうち10個のみ



97 :デフォルトの名無しさん:2009/06/17(水) 00:32:44
数字を入力してその数字に見合った数だけの文字を表示するためのプログラムを組んでいるのですが
二重ループがうまくいっていないらしく希望の結果になりません、修正点を教えてください

希望のプログラム
5(ここは任意の数字を入力)
*
**
***
****
*****

このように任意の数字を入力しそれまでの間1づつ増加した*を並べたいです

組んだプログラム
#include<stdio.h>
int man()
{
int a,b,c;
scanf("%d",&b);
a=0;
c=0;
while(a<b)
{
while(c<=a)
{
printf("*")
c++;
}
a++;
printf("\n");
}
}

98 :デフォルトの名無しさん:2009/06/17(水) 00:33:25
上記のプログラムで走らせると
*
*
*
*
*

となってしまいます、
*
**
***
****
*****
とするにはどこを修正すればいいのでしょうか、よろしくお願いします

99 :デフォルトの名無しさん:2009/06/17(水) 00:34:51
>>97
ttp://pc12.2ch.net/test/read.cgi/tech/1244449887/377

100 :デフォルトの名無しさん:2009/06/17(水) 00:35:13
#include<map>

map<int, int> m;

void SetID(int index, int id){m.insert(make_pair(id, index));}
int GetIndex(int id){return m[id];}

101 :デフォルトの名無しさん:2009/06/17(水) 00:35:23
>void SetID(int index, int id)
使用者側がindexも分かっているのなら、
それこそid==indexにしてしまって
>>80みたいにしちゃえばいいんじゃないの?


102 :デフォルトの名無しさん:2009/06/17(水) 00:38:04
皆さんどうもです
なんとなく数本サンプル作ってベンチしてみます

どうもでした

103 :デフォルトの名無しさん:2009/06/17(水) 00:38:24
>>99
ありがとうございます

104 :デフォルトの名無しさん:2009/06/17(水) 00:38:35
#include<stdio.h>
int man()
{
int a,b,c;
scanf("%d",&b);
for(a = 0; a < b; a++)
{
for(c = 0; c < a+1; c++)
{
printf("*");
}
printf("\n");
}
}

105 :デフォルトの名無しさん:2009/06/17(水) 00:56:21
>>97
c=0;

106 :デフォルトの名無しさん:2009/06/17(水) 02:21:01
>>98
cがリセットされてないから

107 :デフォルトの名無しさん:2009/06/17(水) 02:33:26
質問させてください。

string ANA    string JAL
  
があり、そのそれぞれ  i番目の文字と j番目の文字を比較したいと考えて、

if ( ANA.at(i) == JAL.at(j) ) { cout<<"unko"<<endl;}

としてみたんですが、おそらくこれが原因で実行時にabnormal program terminationだと怒られました。

at(i) でi番目の要素を取り出せるというのは安易なのですか?参照が返すということですが、そのまま比較はできないんでしょうか?


108 :デフォルトの名無しさん:2009/06/17(水) 02:40:35
安易に取り出せるよ
範囲内ならば。

109 :デフォルトの名無しさん:2009/06/17(水) 02:46:21
at()を使うとstd::out_of_range例外を発生する事がある

110 :デフォルトの名無しさん:2009/06/17(水) 02:59:00
string ANA
の0番目の文字がAで1番目がNで2番目がAだと思ったんだね

111 :デフォルトの名無しさん:2009/06/17(水) 03:02:33
>>110 そこまで逝ってないです><

とりあえず at() については普通に取り出せるはずなんですね。
なんかいじってたら強制終了するようになったし、もう一回隅々まで見直してみます。
ほんとにありがとうございます。

112 :デフォルトの名無しさん:2009/06/17(水) 03:05:30
>>111
そっか、安心したw
「abnormal program termination」とだけしか出力されないのかどうかが気にはなるけれど
とりあえずcatchしてみたらどう

113 :デフォルトの名無しさん:2009/06/17(水) 03:08:11
STLコンテナにカスタムアロケータを渡したいんだけど、毎回
  std::vector<class_x, my_allocator<class_x> >
なんて書くのは面倒くさい。
ポリモーフィックに扱わないなら、
  template<class T>
  my_vector : public std::vector<T, my_allocator<T> >
とかやってもだいじょうぶだよね?

マクロとかtype generatorも考えたけど、どうもしっくりこなくて…
はやくC++0x来てくれ。

114 :デフォルトの名無しさん:2009/06/17(水) 07:36:26
大丈夫だよ。

115 :デフォルトの名無しさん:2009/06/17(水) 07:37:55
>>113
0xは2013年か遅ければ2015年じゃないと無理だよ

116 :デフォルトの名無しさん:2009/06/17(水) 18:57:49
class Hoge{

#ifdef USE_FOO
Foo m_foo;
#endif

#ifdef SPECIAL_BAR
SpecialBar *m_bar;
SpecialData m_d;
#else
Bar *m_bar;
#endif

/*......*/
};

こんな調子の見苦しいクラスを何とかしたいんですが
C++流ではどう書くのがいいんでしょうか?
sizeof(Hoge)は最小限にして、出来れば継承とテンプレートを使わないのが理想なんですが

117 :デフォルトの名無しさん:2009/06/17(水) 19:20:10
標準出力ストリーム
ってstd::coutの事でしょうか?
std::coutが標準出力ストリームを表す抽象的なインスタンスと考えて良いのですか?

std::ostreamクラスを継承したインスタンス群(std::cerrとか)は標準出力ストリームとは
言わないのですか?

118 :デフォルトの名無しさん:2009/06/17(水) 19:27:55
std::coutを標準出力ストリームというのであれば、
std::cerrは標準エラー(出力)ストリームといいそうなものです

119 :デフォルトの名無しさん:2009/06/17(水) 19:42:10
>>116
継承かテンプレートを使うのがC++流です。

120 :デフォルトの名無しさん:2009/06/17(水) 19:49:51
えー
じゃあせめて多重継承を使わずになんとかなりませんか

121 :デフォルトの名無しさん:2009/06/17(水) 20:14:22
>>116
なんだこのクソ設計はw
C++で設計をしている様には到底見えないぞ。

>出来れば継承とテンプレートを使わないのが理想
C++コーディングにおいてそんなのが理想だなんて状況聞いたことない。

122 :デフォルトの名無しさん:2009/06/17(水) 20:23:00
>>116
そんな調子のクラスをどう使ってるの?

123 :デフォルトの名無しさん:2009/06/17(水) 21:01:34
C++にて

標準入力std::cinから受け取るものが
intかstd::stringか分からないときってどうすれば良い?

例えば
入力が「int型の数字」または「人名(数字を全く含まない)」または「不正な入力」
があるとして。
また人名はtaro, hanakoの2通りだとして。

if(std::cinから受け取るものがtaroの時)



124 :デフォルトの名無しさん:2009/06/17(水) 21:02:19
strtokが遅い場合みんなどうしてるのですか?

tolowerも遅くて使いもにならん助けて

125 :123:2009/06/17(水) 21:04:46
誤爆した ごめん。
if(std::cinから受け取るものがtaroの時){
std::cout << "taroを受け取りました。" << std::endl;
}
else if(std::cinから受け取るものがhanakoの時){
std::cout << "hanakoを受け取りました。" << std::endl;
}
else if(std::cinから受け取るものがint型の数字の時){
std::cout << "数 = " << 受け取った数 << " を受け取りました。" << std::endl;
}
else){
std::cout << "入力が不正です。" << std::endl;
}
という感じにしたいのだけど、
いったいどうすれば実現できる??


126 :デフォルトの名無しさん:2009/06/17(水) 21:04:48
怪しいにおいがプンプンするけど、
ここは最小公倍数を取って、std::string。
intが欲しくなったら後で変換すればいいじゃない。

127 :デフォルトの名無しさん:2009/06/17(水) 21:04:55
自分で書く

128 :デフォルトの名無しさん:2009/06/17(水) 21:10:05
>>124
tolowerが遅いのはlocale絡みのせいという話がある。
ttp://www.fides.dti.ne.jp/~oka-t/cpplab-ctype.html

strtokはなんだろう。マルチスレッド絡みだろうか。
BoostにTokenizerとかstring_algoのsplitとか試してみたら?
あるいは正規表現、最終兵器Spiritとか色々あるよ。

129 :デフォルトの名無しさん:2009/06/17(水) 21:14:04
>>128
Spiritは確かに最終兵器すぎるなw

130 :123:2009/06/17(水) 21:15:34
>>126
std::stringで受け取るのね。

そもそも
std::cin >> str_obj;
としたら最初から区切り文字が現れるまでが入るのだっけか?
よく覚えとらん。。。



131 :デフォルトの名無しさん:2009/06/17(水) 21:17:21
>>125
stringで受け取って数値のみ、人名に使える文字のみ、混在で場合分けすればいいだけでは?

132 :デフォルトの名無しさん:2009/06/17(水) 21:18:13
>>130
よく覚えとらん?じゃあ思い出せば?

133 :デフォルトの名無しさん:2009/06/17(水) 21:25:15
>>121
クソなのは重々わかってるんですが、既存ソースなのであまり大がかりにいじりたくないんです
継承はあまりクラス階層増やしたくないのと、独立したifdefがいくつもあるので
素直にやると多重継承になっちゃうので避けたい所です
テンプレートはコンパイラの都合で使えません

>>122
一言では説明しにくいんですが、これ自体はあるデータの集まりで、
加工する方法が色々あって、コンパイル時にいくつか使う物を選んで組み込むんですが
ものによってはタッチしないデータがあるので、メモリ節約のためにifdefで殺してる感じです
加工する側のクラスも同じようなifdefが入り組んでるんで何とかしたいんです

134 :デフォルトの名無しさん:2009/06/17(水) 21:25:39
>>128
Cのtolowerより高速なものってありますか?

135 :デフォルトの名無しさん:2009/06/17(水) 21:27:49
>>132
死ねば?

136 :123:2009/06/17(水) 21:28:29
>>131
そうさせていただきます。

ありがとう。

137 :デフォルトの名無しさん:2009/06/17(水) 21:32:31
g++についてきたGNU ISO C++ Libraryのstd::complexクラステンプレートの一部分より

C++ code - 13 lines - codepad
ttp://codepad.org/WZx9PlS4

ってなってるんだけど, なんでまた
一回ostringstreamで出力用文字列をつくってから
__osに渡してるの?
そのまま__osに出力しちゃだめなのだろうか?
つまり
__os << '(' << __x.real() << ',' << __x.imag() << ')';
にしちゃだめなの?

138 :デフォルトの名無しさん:2009/06/17(水) 21:37:08
>>135
なんで?よく知らないから聞くのならいいとしても、覚えてないって理由で聞くのはおかしくね?

139 :122:2009/06/17(水) 21:40:12
>>133
ふへぇ。
メンテナンス性も失いたくないから別クラスにしたりはしてないって事だよね。

場合によって使う使わないのメンバをポインタにして動的に確保するようにしたらどう?ぐらいしか
アドバイスできないす。でもそれ既存のコードならそうもいかないよねorz

140 :デフォルトの名無しさん:2009/06/17(水) 21:43:58
<<って書くたびにカーネルと通信することになるからでしょ。

だから安価も
>>137>>139
って書くより
137 >> s, 139 >> s, >>s
って書いた方が効率がよい。

141 :デフォルトの名無しさん:2009/06/17(水) 21:44:58
>>138
お前は俺の奴隷なんだから、黙って答えればいいんだよカス。

142 :138:2009/06/17(水) 21:46:04
>>141
あ?何だとやるのかゴルァ

143 :デフォルトの名無しさん:2009/06/17(水) 21:47:01
あれ?
>>123 = >>135なの?
>>135はただの横槍かと思ったのに


144 :デフォルトの名無しさん:2009/06/17(水) 21:50:40
ここまで荒れるのも久しぶりだな・・・

145 :デフォルトの名無しさん:2009/06/17(水) 21:53:20
これで荒れてるのか?

146 :123:2009/06/17(水) 21:56:00
123(俺)!=135
123(俺)!=141

なんだけど。
みんな止めてくれ。。。

147 :デフォルトの名無しさん:2009/06/17(水) 21:56:02
seekpとseekgの意味がstringstreamでは違うのに
fstreamでは同じ意味になるのはなぜですか?

148 :137:2009/06/17(水) 21:58:22
>>140
そうなのか!
そこまで考えてあのコードなのね。。。
ありがとう!

ちなみに俺は>>123と同一人物です。

149 :デフォルトの名無しさん:2009/06/17(水) 22:03:06
>>140
そうかなあ?それくらいバッファリングされるだろ。
個人的には出力途中で(バッファの吐き出しが起こった結果などで)エラーになって
出力が中途半端なところで途切れないようにするためかなと思った。

150 :デフォルトの名無しさん:2009/06/17(水) 22:07:09
>>139
やっぱり難しいですか
クラスに分けてポインタ持たせることも考えたんですが、
たくさん作る必要があるクラスもあるので必要なければポインタも出来れば持ちたくないんですよね

#ifdef USE_FOO
typedef struct {
Foo m_foo;
} Foo_t;
#else
typedef struct {} Foo_t;
#endif

class Hoge{
Foo_t m_foo_t;
/*......*/
};

とかやってifdefをどっかに集めることも考えたんですが、
空の構造体もサイズ0にはならないんですよね
ifdefで行くか、少々のサイズ肥大は受け入れるかの選択になっちゃうのか…

151 :デフォルトの名無しさん:2009/06/17(水) 22:10:12
>>150
肥大化してもいいと思える程度なの?
てっきり全部コミコミだと実行環境の兼ね合いでカッツカッツになっちゃうのかとおもってた。

152 :デフォルトの名無しさん:2009/06/17(水) 22:11:29
>>135 = >>141 = >>142
かなあ。
>>138だけど。

153 :123:2009/06/17(水) 22:18:01
>>149
そういう理由もあるのね。
うーむ。ありがとう。


154 :デフォルトの名無しさん:2009/06/17(水) 22:20:29
>>149
__osが何かも分からないのに勝手にバッファリングされたら困るだろ?

155 :デフォルトの名無しさん:2009/06/17(水) 22:30:57
>>151
もちろん理想はゼロですけど、今後の拡張とかを考えるとポインタ数個程度の無駄はやむを得ないかなぁと
根本的な解決にはならないですけどね
全部は出来ないのでクリティカルな所はそのままifdef残っちゃうので

156 :デフォルトの名無しさん:2009/06/17(水) 23:06:22
なんでそんな糞コード最適化しようとしてるの?
俺だったら、なるべく現状のままで動きゃいいって方針をとる。
もっとまともにしたかったら、全面的に書き直すから工数くれって言う。

157 :デフォルトの名無しさん:2009/06/17(水) 23:09:31
泥臭いことを一切行わずに完結してるコードもなかなかお目にかかれないもんだけどね。

158 :デフォルトの名無しさん:2009/06/17(水) 23:21:00
俺も今ウンココード直してるけど
直す過程でウンコ生産してるんじゃないかと心配している

159 :デフォルトの名無しさん:2009/06/17(水) 23:22:08
自作クラスMyClassに関し、
static_cast<MyClass>(42)
が有効に定義されているとして質問させてください。

MyClass hoge = static_cast<MyClass>(42);
は必ず有効だと思いますが、これは
MyClass hoge(42);
も必ず有効になると期待して良いのですか?


160 :デフォルトの名無しさん:2009/06/17(水) 23:27:18
ウンコは直すより出し直した方が早い

161 :デフォルトの名無しさん:2009/06/17(水) 23:28:06
>>159
よいです。

162 :デフォルトの名無しさん:2009/06/17(水) 23:29:09
>>160
趣味で書いてるのはそれで何度も救われたが
仕事じゃなかなかやらせてもらえんよなぁ・・・

163 :159:2009/06/17(水) 23:30:06
>>161
ありがとうございます!

164 :デフォルトの名無しさん:2009/06/17(水) 23:31:39
#if 0
ウンコ
#endif
出しなおした『ウンコ』

165 :デフォルトの名無しさん:2009/06/17(水) 23:32:51
>>150
-Dオプションとcppを使ってソース吐かせる

166 :デフォルトの名無しさん:2009/06/18(木) 00:31:35
>>156
そのうち書き直そうという話は出てはいるんですが、
書き直すにしても差し替えは出来るようにしないといけないので
結局どっかで同じようなことは必要になるんですよ
だから何とかその辺の設定を一箇所に固める方法を今のうちに考えてるんですがなかなか難しいですね
テンプレートが使えればいいんですけどね…

167 :デフォルトの名無しさん:2009/06/18(木) 00:33:09
一つのクラスにまとめようとするからいけないんじゃねの?
別々のクラスとしてインスタンス作れば、取捨選択は楽じゃん。

168 :デフォルトの名無しさん:2009/06/18(木) 03:17:59
メンテナンス性も失いたくないっていってるしなあ。

DirectXのFVFってどうやって実装されてたっけ?
似たようなにおいを感じるけど。

169 :デフォルトの名無しさん:2009/06/18(木) 04:47:19
マクロでやるならこんなのかなあ

#ifdef USE_FOO
# define FOO_T(a)  Foo  a
#else
# define FOO_T(a)
#endif

class Hoge{
 FOO_T(m_foo_t);
 /*......*/
};



170 :デフォルトの名無しさん:2009/06/18(木) 11:41:57
template パラメータによって インスタンシエートでコンパイルエラーを出す方法ない?
特殊化せずに

template<bool B0, bool B1,bool B2>class A{
void fn0(){if(B0!=true)"compile err";}
void fn1(){if(B0!=true && B1 != true && B2 != false)"compile err";}
// つらつら数百行
};

みたいな

171 :デフォルトの名無しさん:2009/06/18(木) 11:59:31
template<bool B0, bool B1,bool B2> class A{
BOOST_STATIC_ASSERT(B0);//compile err
BOOST_STATIC_ASSERT(B0 && B1 && !B2);//compile err
};

172 :デフォルトの名無しさん:2009/06/18(木) 12:06:13
BOOSTあれば何でもできるな。

173 :デフォルトの名無しさん:2009/06/18(木) 13:15:05
BOOSTあれば俺の嫁がモニタから出てきますか?

174 :デフォルトの名無しさん:2009/06/18(木) 14:38:11
というか、モニタに映ってるってことはどっかで撮影したってことだから
撮影現場に行けば嫁に会えるよ

175 :デフォルトの名無しさん:2009/06/18(木) 15:44:38
アニメだと思われる

176 :デフォルトの名無しさん:2009/06/18(木) 15:56:02
そういやソース中に冗談で/*hogehogeは俺の嫁*/とかやった事あるんだが
実際に製品になったゲームなんかをダンプすると、そういうメッセージが出たとか聞くんだが
そういうのって何が原因で製品に残っちゃうんだろう

177 :デフォルトの名無しさん:2009/06/18(木) 16:17:44
>>176
文字配列リテラルは、なんかの拍子で
静的初期化テーブル(? 名前よく知らん)に残るんじゃね。

178 :デフォルトの名無しさん:2009/06/18(木) 16:30:54
>>175
アニメを撮影した現場に行けばいいと言ってるんだと思われる
3次をモニタに映せば2次な訳だから、2次を撮影したところにいけば3次になってるはずだし

179 :デフォルトの名無しさん:2009/06/18(木) 16:33:40
で、おっさんが俺の嫁を製造している現場を目の当たりにした場合、翌日からどんなC-hinpoのしごき方をすればいいんだ。

180 :デフォルトの名無しさん:2009/06/18(木) 16:42:13
そんなあなたに->*演算子

181 :デフォルトの名無しさん:2009/06/18(木) 16:45:34
>>179
え、2次元でしかないと思いこんじゃってる人?
そんなんだから他のやつに嫁とられんだよ

182 :デフォルトの名無しさん:2009/06/18(木) 18:18:32
>>171 thx
こうすれば評価をテンプレートの中に留め置けるんだね
不正値の導出になんで回りクドイ方法取ってるのか以前疑問を感じてそのまま放置してた。

183 :デフォルトの名無しさん:2009/06/18(木) 21:35:53
C++を使ってCPUの温度を取得するプログラムを書きたいんだが、どういうアルゴリズムで書けばいい?

XP
borland C++
なんだが誰か教えてくれ。

184 :デフォルトの名無しさん:2009/06/18(木) 21:39:02
>>183
C++にはCPUの温度を取得するなんてないからAPIを使うしかないだろうね。

詳しくは誰かがAPIスレを紹介してくれるだろう。

185 :デフォルトの名無しさん:2009/06/18(木) 21:43:52
>>183
こちらでどうぞ
http://pc12.2ch.net/test/read.cgi/tech/1244057140/

186 :デフォルトの名無しさん:2009/06/18(木) 21:44:49
>>184-185
ありがとうww

187 :デフォルトの名無しさん:2009/06/18(木) 22:26:19
05/31
ttp://www.csci.yamanashi.ac.jp/~mino/ad2/2004/0531.html
ここにある
> 注意! sizeof( ) を使った seekg/p ( ) に注意
> seekp, seekg を使ってポインタを動かす場合、第1引数にマイナスの値を指定することで、
> ポインタを前に戻すことができます。しかしこのとき sizeof( )を使って
> file.seekg( -4*sizeof(PersonalRecord), ios::end )
> などとすると、うまく行かないことがあります。(うまく行く場合もある)
> これは sizeof の結果が符号なし(負にならない)整数 ( unsigned int ) であるためです。
> sizeof( ) に負の数をかけるときは注意してください。
> int sizeofps = sizeof(PersonalRecord);
> file.seekg( -4 * sizeofps, ios::end );
> と一旦整数変数に代入するか、
> file.seekg( -4 * (int) sizeof(PersonalRecord), ios::end )
> などと、型を強制的に指定すれば安心です。
についてですが、
int型の負の数 * unsigned int型の正の数
ってどうしてダメなのですか?


188 :デフォルトの名無しさん:2009/06/18(木) 22:30:20
>>187
型拡張で調べればおk

189 :187:2009/06/18(木) 22:37:20
>>188

QAC - ANSI C型拡張
ttp://www.toyo.co.jp/ss/qac/technical_whitepaper_sstp0015j.html
> 2 つのうちどちらかのオペランドが符号なしの場合、
> 両方のオペランドとも、“一番簡単に”計算できる、
> 少なくとも大きな型のオペランドと同じ大きさの
> 符号なしの型に拡張される。
> つまり、(unsigned char型 − int 型) の計算結果は、unsigned int型になります。

これですか。
理解出来ました。
ありがとうございました。

190 :デフォルトの名無しさん:2009/06/18(木) 23:04:12
tellg - C++ Reference
ttp://www.cplusplus.com/reference/iostream/istream/tellg/
ここのサンプルソースの
buffer = new char [length];
が最後にdelete[]されていないようなのですが、
別に大丈夫なのですか?

191 :デフォルトの名無しさん:2009/06/18(木) 23:06:54
サンプルだから

192 :デフォルトの名無しさん:2009/06/18(木) 23:09:43
その場合はしなくても、まあ問題ないけど、したほうがいいと思ってる人は
ぜったい納得しないから、仕事とかだったらdeleteしたほうがいいな。

193 :デフォルトの名無しさん:2009/06/18(木) 23:12:58
>>190
こんなとこで聞く前に一番下にエラー報告フォームへのリンクがあるから
さっさと報告してこい

194 :190:2009/06/18(木) 23:17:02
>>191
つまり着目しているところがちゃんと動けばいいじゃん。
ってことなんですね。

>>192
>その場合はしなくても、まあ問題ないけど
どうして問題ないのですか?
たいした量のメモリーリークじゃないからですか?
それとも仕様上勝手にdeleteしてくれたりするのですか?

>>193
まあ>>191さんのおっしゃるとおりいちいちエラー報告するほどでは
ないと思っていますので。

195 :デフォルトの名無しさん:2009/06/18(木) 23:34:05
>>194
> どうして問題ないのですか?

「malloc free 論争」でググると、いろいろでてくる。

196 :デフォルトの名無しさん:2009/06/18(木) 23:38:40
リンク先見てないけど、問題ないとおもうな
リンク先で紹介されてるものがdaemonだったらごめんね

197 :デフォルトの名無しさん:2009/06/18(木) 23:43:17
free-on-exit

198 :デフォルトの名無しさん:2009/06/18(木) 23:52:29
どうやら
後始末はOSに丸投げしちゃおうという
プログラミングスタイルもあるということですね。

・・・。。。

199 :デフォルトの名無しさん:2009/06/18(木) 23:55:57
fstreamではseekg()達が動くようですが、
std::cinでは無理だったりしますか?
(@g++ WinXP)

200 :デフォルトの名無しさん:2009/06/18(木) 23:56:09
解放しなくていいのか、そりゃ斬新だな
最近のwindows安定してるからこういうこと言えるようになったのかな・・・

201 :デフォルトの名無しさん:2009/06/19(金) 00:00:25
仮想アドレス空間が実装されたのを最近というなら、最近だね

202 :デフォルトの名無しさん:2009/06/19(金) 00:25:57
最近っていうか、DOSの時代から開放しなくても問題おこらないと思うよ。

203 :デフォルトの名無しさん:2009/06/19(金) 00:27:13
Win3.1は解放しないと酷いことになってたと思うが
95もだっけ

204 :デフォルトの名無しさん:2009/06/19(金) 00:27:53
そうなのか、windows9xはすぐメモリリークするソフトがあったら凍るイメージがあったから・・・

205 :デフォルトの名無しさん:2009/06/19(金) 00:30:15
9xだとGlobalAllocで確保したメモリを解放しないのは不安が残る。あとメモリ以外のリソース全般も。
mallocが使っているであろうVirtualAllocは心配していないけど。

206 :デフォルトの名無しさん:2009/06/19(金) 00:33:58
何にせよ、借りたものは返す。
貸してくれたやつが回収しに来るまで待つのは行儀が悪いと
感じる俺は古いのか??

207 :デフォルトの名無しさん:2009/06/19(金) 00:35:26
世界が明日終わるなら、好き勝手なことしてすごしたいジャン。

208 :デフォルトの名無しさん:2009/06/19(金) 00:36:48
古いね。基本は借りパク。他人に物貸すのは上げるつもりじゃないと友人続けられない。
だから俺は貸してといわれたら「断る」ということにしている。

new 演算子も上書きして、問答無用で bad_alloc例外を投げるようにしている。
大人になったら人に物を貸してなどと頼むのは恥知らずのすることだと
明治の人は実に立派だったんだなって思う。mallocとか最悪。

209 :デフォルトの名無しさん:2009/06/19(金) 00:48:37
ま、普通はdelete, free()したほうがいい。
するなって話じゃない。

210 :デフォルトの名無しさん:2009/06/19(金) 00:51:42
わかりました。じゃあ、

int *p = new int[10];
delete p;

int *q = (int*)malloc( sizeof( int ) * 3 );
delete q;
delete q + 1;
delete q + 2;

これで。

211 :デフォルトの名無しさん:2009/06/19(金) 01:00:29
えっ

212 :デフォルトの名無しさん:2009/06/19(金) 01:09:24
>>210
何やってんの?頭大丈夫?

213 :デフォルトの名無しさん:2009/06/19(金) 06:52:40
>>210
重症患者?

214 :デフォルトの名無しさん:2009/06/19(金) 06:57:29
>>199
っ putback - C++ Reference
  ttp://www.cplusplus.com/reference/iostream/istream/putback/


215 :デフォルトの名無しさん:2009/06/20(土) 00:03:10
A.cpp
class A
{
friend B
...

}

B.cpp
class B
{
friend A
}

これどうやって修正しようw

216 :デフォルトの名無しさん:2009/06/20(土) 00:09:02
家族ぐるみのお付き合い状態・・・?

217 :デフォルトの名無しさん:2009/06/20(土) 00:16:08
classの利点カプセル化を崩すfriendは使わない方が良い


218 :デフォルトの名無しさん:2009/06/20(土) 00:17:00
>>217
てっとり早く修正するにはどうすればいいの?



219 :デフォルトの名無しさん:2009/06/20(土) 00:21:50
手っ取り早くは
A.cpp
class A
{
class *Bp;
...
}

B.cpp
class B
{
class *Ap;
}
だが、根本的に設計が問題かもしれん。
それにクラス宣言は。ヘッダーでやれ

220 :デフォルトの名無しさん:2009/06/20(土) 00:22:06
>>218
Class AやBが適切な関数を提供すればいいだけ。

221 :デフォルトの名無しさん:2009/06/20(土) 00:23:27
A.h
class B;
class A
{
class *Bp;
...
}

B.h
class A;
class B
{
class *Ap;
}
にしろ

222 :デフォルトの名無しさん:2009/06/20(土) 00:48:39
class *Ap;って何?

223 :デフォルトの名無しさん:2009/06/20(土) 00:50:03
あ  orz
 A Ap;  です。orz

224 :デフォルトの名無しさん:2009/06/20(土) 01:18:17
これじゃ通らない気がする

225 :デフォルトの名無しさん:2009/06/20(土) 09:25:26
struct impA{};
struct impB{};
class A:impA{};
class B:impB{};

仲良しなオリジナルA,Bクンはくんずほぐれつまぐわって貰って見目用に新たなA,B用意しな

226 :デフォルトの名無しさん:2009/06/20(土) 11:15:13
>>215
まああり得なくはないと思うけど
普通はおかしい状態だな。

>>217
テンプレートを使う場合にfriendにお世話になることがある。



227 :デフォルトの名無しさん:2009/06/20(土) 15:32:57
friend使うのなんて演算子のオーバーロードくらいじゃねぇの

228 :デフォルトの名無しさん:2009/06/20(土) 20:36:49
>>219
>>221
互いにプライベートなメソッドやフィールドへアクセスすることが問題なのに
それじゃ何の解決にもならんだろ。

229 :デフォルトの名無しさん:2009/06/20(土) 22:26:56
だから、フィールドとかメソッドとかなん?
C++にそんな単語ないぞ。
それともビットフィールドのことか?

230 :デフォルトの名無しさん:2009/06/20(土) 22:32:34
フィールド→メンバ変数
メソッド→メンバ関数

読み替えて。

231 :デフォルトの名無しさん:2009/06/20(土) 22:33:11
某標準ライブラリで grep friend するとたくさんマッチするよ
カプセル化が崩れてるの?

232 :デフォルトの名無しさん:2009/06/20(土) 22:37:54
>>229
馬鹿じゃね。読み替えろよ。

233 :デフォルトの名無しさん:2009/06/20(土) 22:46:01
別に。メンバ関数を増やすよりもfriendの非メンバ関数にすべし、
できれば非friendの非メンバ関数にすべしっていうのが
モダンなプログラム作法なので(C++ Coding Standardsなどを参照)
メンバ関数を減らした結果として friend の非メンバ関数が増えるのは仕方ない。

234 :デフォルトの名無しさん:2009/06/20(土) 22:46:46
>>232
勝手に別の言語の概念持ち込むなよ。
それとも、C#厨か?

じゃあせめて、メンバメソッドとグローバルメソッドを使いわけろ、カスが。

235 :デフォルトの名無しさん:2009/06/20(土) 22:51:04
必死だなw

236 :デフォルトの名無しさん:2009/06/20(土) 22:53:19
javaにはグローバルメソッドなんてもんは存在しないから
メンバ関数がなぜ「メンバ」なのか理解できないのかもね。

フィールドもメンバ変数とは違う概念なんだけど
C#厨にはそれも理解できないんだろうな。

237 :デフォルトの名無しさん:2009/06/20(土) 22:54:03
こいつ、どんだけ必死なんだよww

238 :デフォルトの名無しさん:2009/06/20(土) 22:54:56
とりあえず、ここは「C++」相談室なんだから
C#とかjavaの方は帰ってくれませんか?^^

239 :デフォルトの名無しさん:2009/06/20(土) 22:57:41
もう、このスレではメソッドとフィールドという単語は使わせません!
あと、基底クラスをスーパークラスとかいう人も帰ってください。

240 :デフォルトの名無しさん:2009/06/20(土) 22:57:50
ということで、>>234 >>236は帰れ。

241 :デフォルトの名無しさん:2009/06/20(土) 22:59:15
C#厨はC++のメンバ変数をフィールドとか呼んじゃう恥知らず。

242 :デフォルトの名無しさん:2009/06/20(土) 23:00:08
引っ込みがつかなくなったようだなww

もう好きにしろwwww

243 :デフォルトの名無しさん:2009/06/20(土) 23:00:31
用語もまともに使えないのにC++の相談に乗るとかできるわけないよね。

244 :デフォルトの名無しさん:2009/06/20(土) 23:01:15
じゃあ乗らなければいい。黙ってろ。

245 :デフォルトの名無しさん:2009/06/20(土) 23:03:50
確かにメソッドと言われてメンバ関数だと読み取れない程度に用語がまともに使えないレベルの>>243が相談に乗ることは無理だろうな。

246 :デフォルトの名無しさん:2009/06/20(土) 23:04:22
メンバ変数を「フィールド」だって。
ぷっはずかしっ。クライアントの前では使うなよ。

247 :デフォルトの名無しさん:2009/06/20(土) 23:05:07
クライアント(笑)

248 :デフォルトの名無しさん:2009/06/20(土) 23:06:07
この流れを見れば

 用 語 す ら ま と も に 使 え な い 連 中 し か い な い

スレであることは一目瞭然です^^
>>230はちゃんと謝ってるけど。w

249 :230:2009/06/20(土) 23:07:11
>>230は誤っていない。命令しているだけ。

250 :デフォルトの名無しさん:2009/06/20(土) 23:07:34
C#やjavaのプログラマにはこのように
些細な間違いを指摘されると
自分の間違いを認めず、他人の人格を否定することに終始する
とても程度の低い連中しかいないことがわかります。

251 :デフォルトの名無しさん:2009/06/20(土) 23:08:28
C#厨は他人に命令するのが好きなようです。

252 :デフォルトの名無しさん:2009/06/20(土) 23:09:26
ほぼ誤解のない用語の意を汲めない硬直した思考のデキソコナイがいるようだな。

253 :デフォルトの名無しさん:2009/06/20(土) 23:09:33
メンバとかフィールドとかいうC++に存在しない単語を使ってるようなやつの意見は
情報としてまったく価値がないよね。

つまり>>228にはまったく情報価値なし。

254 :デフォルトの名無しさん:2009/06/20(土) 23:10:53
ものごとの価値は受け手によって違う。

「豚に真珠」とはよく言ったものだ。

255 :デフォルトの名無しさん:2009/06/20(土) 23:22:35
久々に見たら何だこの荒れ具合www

もういいよ!
頼むから標準C++用語を使って会話してくれ。
初心者なら標準C++にない用語でもまあ仕方ない。おk。
でも初心者じゃないと思うなら規格書にあるような標準C++用語にしてくれ!

256 :デフォルトの名無しさん:2009/06/20(土) 23:26:43
>>253
おまえ何でそこまで必死なんだよ・・・
何か嫌なことがあったんなら相談に乗るぞ?

257 :デフォルトの名無しさん:2009/06/20(土) 23:31:19
引くに引けなくなっただけだから、優しくしてあげて

258 :デフォルトの名無しさん:2009/06/20(土) 23:51:42
頭が可哀想な人は精神科に連れてってあげましょう

259 :デフォルトの名無しさん:2009/06/20(土) 23:52:24
いや、フィールドとかメソッドとかわけわかんない単語を使った上に
他人をバカ呼ばわりするような連中には優しくされたくないんで。キモい。

260 :デフォルトの名無しさん:2009/06/20(土) 23:53:50
>互いにプライベートなメソッドやフィールドへアクセスすることが問題なのに

プライベートなメソッドってなんだよ。
プライベートなフィールドってなんだよ。

C++にはそんなもん最初からねーよw
ないものにはアクセスできないし問題にもならん。

261 :デフォルトの名無しさん:2009/06/20(土) 23:54:49
フィールドとかメソッドがわけわかんない単語とか言ってる言語適応能力の無いバカは、無理に回答側に回らなくていいから。ひっそり静かにしてろ。

262 :デフォルトの名無しさん:2009/06/20(土) 23:55:42
フィールドとかメソッドがわけわかんない単語を使ってる仕様適応能力の無いバカは、無理に回答側に回らなくていいから。ひっそり静かにしてろ。

ゲラゲラゲラゲラゲラ

263 :デフォルトの名無しさん:2009/06/20(土) 23:58:59
涙拭けよww

264 :デフォルトの名無しさん:2009/06/21(日) 00:00:27
ここの回答者はC#厨、と。メモメモ

265 :デフォルトの名無しさん:2009/06/21(日) 00:02:35
適切な回答ができるなら誰が答えたっていいよ。

266 :デフォルトの名無しさん:2009/06/21(日) 00:03:02
>>261
規格書とスレタイ、どっちを読んでないのかな?

ねぇどっち?

267 :デフォルトの名無しさん:2009/06/21(日) 00:06:02
C++の規格票にフィールドとかメソッドって単語あったっけ?
記憶にないなあ

268 :デフォルトの名無しさん:2009/06/21(日) 00:10:31
他の言語にC++と同様の機能があって別の名で呼ばれていることがあるよ。
たとえばフィールドならC++のメンバー変数、メソッドならメンバー関数とか。
プログラミング言語をある程度知っていればこの程度の読み替え・解釈はそんなに難しくないよ。
すぐにできるようになると思う。

269 :デフォルトの名無しさん:2009/06/21(日) 00:11:54
C#厨やjava厨はC++の勉強するときはいったんC#やjavaの知識捨てろ。
別の言語の概念を持ち込むな。アンドリューハント先生もそう書いてるだろが。

270 :デフォルトの名無しさん:2009/06/21(日) 00:13:16
他人の言葉を解釈しようとするのはコミュニケーションの問題だ

271 :デフォルトの名無しさん:2009/06/21(日) 00:15:13
少なくとも、非標準の用語を使っておきながら

>馬鹿じゃね。読み替えろよ。

などといえる立場じゃねーわな。
馬鹿なのは間違いなくおまえだ。

272 :デフォルトの名無しさん:2009/06/21(日) 00:17:59
違う用語を引っ張り出してくる人の話は8割差し引いて聞いとけばいいってばっちゃが言ってた

273 :デフォルトの名無しさん:2009/06/21(日) 00:23:59
非標準の用語を使っておいて
「馬鹿じゃね。読み替えろよ。」とか「誤っていない。命令しているだけ。」とかいう奴らに
コミュニケーション能力があるとは到底思えんが?

274 :デフォルトの名無しさん:2009/06/21(日) 00:44:11
スレ違いの用語を使う奴も、スレ違いの話を続ける奴もどっちもどっちだな
似た者同士もう少し仲良くやれ

275 :デフォルトの名無しさん:2009/06/21(日) 01:01:19
相手のミスを揶揄したつもりが馬鹿呼ばわりされて琴線に触れたのか。
お互いもう少し言葉を選んだ方がいいな。おれも自省・・・

276 :デフォルトの名無しさん:2009/06/21(日) 01:10:27
揶揄したとか、もう少し言葉選べや。

揶揄したんじゃなく、そんな言葉はC++にないから
ちゃんと説明してくれってこった。

なぁ、回答者は初心者じゃねぇんだろ?

このC++回答者の仮面をかぶったC#厨めらが。


277 :デフォルトの名無しさん:2009/06/21(日) 01:17:54
誰か次の質問してくれ(>_<)

278 :デフォルトの名無しさん:2009/06/21(日) 01:19:32
俺の美貌に免じて落ち着いてくれ、お前ら。

279 :デフォルトの名無しさん:2009/06/21(日) 01:22:19
>>278
おまいのことが大好きだ。

280 :デフォルトの名無しさん:2009/06/21(日) 02:18:04
>>276
>>229については>>230で説明している。

281 :デフォルトの名無しさん:2009/06/21(日) 02:40:07
もう召喚するなwww

282 :デフォルトの名無しさん:2009/06/21(日) 04:44:48
>>280
馬鹿じゃね。読み替えろよ。

283 :デフォルトの名無しさん:2009/06/21(日) 06:06:32
C++標準にない言葉使う奴は回答すんなよ。
相談者が戸惑うだろ。迷惑なんだよ。

C++とC#の違いもわかってないから
そんなキモい言葉使うんだろうし。

284 :デフォルトの名無しさん:2009/06/21(日) 06:08:21
>>268
>プログラミング言語をある程度知っていれば

その程度の理解でC++語るな。


285 :デフォルトの名無しさん:2009/06/21(日) 11:14:40
なんだこのスレ、フィールドとメンバ変数の違いを説明してあげれば済む話じゃないのか?
言語の違いとかいうレベルじゃない、存在そのものが全く違う、
これを初心者にわかりやすくするために同じだと言って説明すると後で大変なことになる
そこを説明してあげたら?

286 :デフォルトの名無しさん:2009/06/21(日) 11:37:27
>>285
よろしくお願いします

287 :デフォルトの名無しさん:2009/06/21(日) 11:42:54

             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /


288 :デフォルトの名無しさん:2009/06/21(日) 11:47:14
待て!
俺の知り合いはJava大好き厨だがC++も使えて、
そいつがC++の話をする時はちゃんと標準C++用語を使うぞ。

・・・要するにJava厨が悪いんじゃなくて標準C++用語を使えないヤツが無能。


289 :デフォルトの名無しさん:2009/06/21(日) 12:33:38
本日のまとめ:
メソッド関数、フィールド変数といえばどっちも満足

290 :デフォルトの名無しさん:2009/06/21(日) 12:39:32
同じだよ
アセンブラで見てごらん
メモリに確保してるだけだよ

291 :デフォルトの名無しさん:2009/06/21(日) 12:43:09
>>290
その言い訳、
もう無理ありすぎだろww

どんだけ苦しいんだよ。


292 :デフォルトの名無しさん:2009/06/21(日) 12:44:56
>>290
間違ってないが正解でもない
お前人と話しててもすぐ会話が終わるタイプだろ
日曜ぐらい楽しもうとかいう考えはないのか

293 :デフォルトの名無しさん:2009/06/21(日) 14:59:54
まったくおまえらはすぐ概念と実装を混同するんだから

「メッセージパッシングなんて所詮ただのメンバ関数呼び出しだろ?」
とか言っちゃうタイプ

294 :デフォルトの名無しさん:2009/06/21(日) 15:05:12
C++は実際そうだから仕方ない
はっきり言ってメッセージという言葉は混乱を招くだけで邪悪

295 :デフォルトの名無しさん:2009/06/21(日) 17:21:10
一人で混乱してろ

296 :デフォルトの名無しさん:2009/06/21(日) 17:29:32
そんなこと言わずに一緒に混乱しようぜ

297 :デフォルトの名無しさん:2009/06/21(日) 17:33:35
のびてると思ったらおまえらは…

あと「メンバ変数って言え」って言ってる人、「メンバ変数」じゃなくて「データメンバ」です
他人の用語の曖昧さを許容するならする、許容しないならしないでその辺ちゃんとしてくれ

298 :デフォルトの名無しさん:2009/06/21(日) 17:39:09
たしか直訳じゃなくて日本語標準は変数関数で合わせようで統一されたはず


299 :デフォルトの名無しさん:2009/06/21(日) 17:44:00
「曖昧」なんじゃなく、「概念が違う」。
用語間違ってるやつは、ここ勘違いしないように。

300 :デフォルトの名無しさん:2009/06/21(日) 17:47:47
>>298
少なくともjisのC++規格ではデータメンバだな

301 :デフォルトの名無しさん:2009/06/21(日) 17:49:35
>>299は「概念」と言いたいだけの馬鹿

302 :デフォルトの名無しさん:2009/06/21(日) 17:50:11
お前ら・・・
>>278の美貌がボコボコじゃないかwww

303 :デフォルトの名無しさん:2009/06/21(日) 17:50:35
というキャラ設定が、恥かいてダメージ負った君の心を癒してくれるわけね。

304 :デフォルトの名無しさん:2009/06/21(日) 17:57:48
JISではデータメンバで統一してある。
吉川邦夫はちゃんとデータメンバって書いてた。
浜田真理はメンバ変数と書いてた。

メソッドとフィールドはうちにある本をざっと見た限りではひとつもない。

305 :デフォルトの名無しさん:2009/06/21(日) 17:58:05
>>299
まぁ確かに概念は違う
でも、データメンバとフィールドはC++のクラスとJavaのクラスくらいには互いに置き換えて認識することが可能だと思うけどね

306 :デフォルトの名無しさん:2009/06/21(日) 18:00:14
>>301はC#厨。

307 :デフォルトの名無しさん:2009/06/21(日) 18:01:01
c++使いが全員フィールドを知っている訳では無かろう。
疑似問題引き起すから用語には注意しなさい。

308 :デフォルトの名無しさん:2009/06/21(日) 18:02:17
概念とか言ってる馬鹿は、blueと青は違うとか言って英語の授業中に暴れてたんだろうな。

309 :デフォルトの名無しさん:2009/06/21(日) 18:02:50
「プライベートなフィールドにメソッドを使ってアクセス」とか、C++スレで平気で書くアホは絶やすべき。


310 :デフォルトの名無しさん:2009/06/21(日) 18:05:05
C#厨がメンバ変数を知らなかったのが発端じゃないのか?

311 :デフォルトの名無しさん:2009/06/21(日) 18:09:51
>>307
C++ユーザ全員が「随伴関数」を知ってるとも思えないけどねw
用語が分からなかったり誤謬があるんじゃないかと思ったら聞けばいいじゃん
…と思うんだけど

312 :デフォルトの名無しさん:2009/06/21(日) 18:10:03
オブジェクト指向言語についてあまり知識の無い>>229がトンチンカンな書き込みをしたのが発端

313 :デフォルトの名無しさん:2009/06/21(日) 18:11:36
JavaのクラスとC++のクラスを似たようなものと見るのもやめてくれ。
それはC++でC流儀のプログラムを組むくらい危険だ。

Javaのインタフェースやファイナライザといったものの存在や
すべてのメソッドが何らかのクラスのメンバであるといった特性が
C++とのプログラミングスタイルの大きな違いを生んでいる。

314 :デフォルトの名無しさん:2009/06/21(日) 18:13:11
>>313はJavaとC++に類似性を見いだせないアホ

315 :デフォルトの名無しさん:2009/06/21(日) 18:14:15
>>228
C++標準すらわかっていないくせに

>互いにプライベートなメソッドやフィールドへアクセスすることが問題なのに
>それじゃ何の解決にもならんだろ。

「俺、オブジェクト指向のことすごく良く知ってるんだぜ?」
みたいな上から目線で書いてるのが問題。

フィールド?メソッド?
C++の基礎から勉強しなおしてください。

316 :デフォルトの名無しさん:2009/06/21(日) 18:15:58
どんな言い訳をしても、フィールドとメソッドがC++の標準的な用語でないことは事実ですから。

317 :デフォルトの名無しさん:2009/06/21(日) 18:16:32
なんだ。上から目線で書かれてそんなに悔しかったのかw

318 :デフォルトの名無しさん:2009/06/21(日) 18:19:13
で、フィールドとメンバ変数の違いって何?

319 :デフォルトの名無しさん:2009/06/21(日) 18:19:25
仕様書を見てみたが、data memberとmember functionって用語で使われてるのか

ついでにJavaもざっと調べてみた
Fields, which are the class variables and instance variables of classes (§8.3),
and constants of interfaces

A method declares executable code that can be invoked, passing a fixed number of
values as arguments

member (class, interface, field, or method)

ここはC++と違う
Methods and fields may have the same name,
since they are used in different contexts and are disambiguated by different lookup
procedures(8.4)



320 :デフォルトの名無しさん:2009/06/21(日) 18:21:17
>>318
同じだよ

321 :デフォルトの名無しさん:2009/06/21(日) 18:23:07
>>318
「データメンバ」ならC++の規格票に精密な定義が載っているが
「フィールド」はC#のそれなのか、Javaのそれなのか、あるいはほかの言語のそれなのか、
何の定義もないので、どういう機能なのかははっきりしない。

フィールドに特殊なアクセス手段が提供される言語もあるし、
フィールドの命名規則が独立している言語もある。
単にカプセルかされたデータをそう呼ぶだけかもしれない。


322 :デフォルトの名無しさん:2009/06/21(日) 18:27:13
いやここで出てきたフィールドはメソッドと対だから

323 :デフォルトの名無しさん:2009/06/21(日) 18:27:27
まともなコミュニケーション能力がある人間ならば
「フィールドはデータメンバーのことですね?そうならば〜ですよ。」という受け答えができるんだけどな。

もっとも、コミュニケーション能力があってもオブジェクト指向言語の知識があまりなくて
フィールドとメンバー変数が類似の機能であることがわからない初心者には難しいか。

324 :デフォルトの名無しさん:2009/06/21(日) 18:28:23
>>323
>>292

325 :デフォルトの名無しさん:2009/06/21(日) 18:32:22
全員流れの理解が中途半端だからまったくかみ合ってないあほすぎる

326 :デフォルトの名無しさん:2009/06/21(日) 18:33:03
誤爆

327 :デフォルトの名無しさん:2009/06/21(日) 18:33:30
javaのフィールドと比べてなら
メンバ変数は大体似たような物、と言っても良いとは思うが
データ構造が違うものは別物だろうよ

例えばjavaのフィールドはインタフェースの定数も含む用語だが
C++にはそもそもインターフェースがない
インターフェース的に使えるクラスはあるが

328 :デフォルトの名無しさん:2009/06/21(日) 18:33:34
メソッドという単語もたいがい曖昧で、
本来はクラス内にカプセル化されていることを意味しているはずなのに、
グローバルなメソッドが存在する言語もある。
ここでは、メソッドは単に「関数」の意味だ。
メンバ関数もfriendな非メンバ関数も、普通のグローバル関数も
すべてメソッドということになる。

議論が曖昧になったときに決着させるためには
用語の統一が重要であることは、ISOやJISの存在を考えるまでもない。

質問者が適当な用語を使うのは仕方がないが、
>>228のように、他人の過ちを指摘しようとするなら、
最低限、そのくらいの分別はわきまえるべきだろう。


329 :デフォルトの名無しさん:2009/06/21(日) 18:34:29
くやしいのうwwwwwくやしいのうwwww

330 :デフォルトの名無しさん:2009/06/21(日) 18:36:12
>>228は「俺はお前らよりオブジェクト指向がわかってるんだから、C++殉教者のカスどもは俺の言うことを聞け」といってるにすぎない。

331 :デフォルトの名無しさん:2009/06/21(日) 18:40:39
病院行けよ。

332 :デフォルトの名無しさん:2009/06/21(日) 18:40:50
フィールド、メソッドという言葉を使うなといってるやつは
オブジェクト指向がわかってない、もしくはコミュニケーション能力がない。

C#厨はこういいたいそうだ。
こいつらに何を言っても無駄だ。w

333 :デフォルトの名無しさん:2009/06/21(日) 18:50:07
>>315>>328>>330
用語の間違いこそあれ、>>228のレス自体に腹立てる理由が分からん。
一体全体、何が気に障ったんだよ・・・

そのレスが参照してる>>219>>221の方が
やれとかしろとかよっぽど上から目線に読めるのだが?

334 :デフォルトの名無しさん:2009/06/21(日) 18:51:17
ていうか、言葉の使い方さえ正しければ
こういう流れにもならずに済んだわけよ。
それだけでも正しい言葉を使う大切さがわかる。

335 :デフォルトの名無しさん:2009/06/21(日) 18:52:08
>>333
馬鹿じゃね。読み替えろよ。

336 :デフォルトの名無しさん:2009/06/21(日) 18:54:32
オブジェクト指向の知識があまりない人には読み替えは難しいんだよ。

337 :デフォルトの名無しさん:2009/06/21(日) 18:57:26
必死で顔真っ赤になってるひと多いの?

338 :デフォルトの名無しさん:2009/06/21(日) 18:59:25
まぁ相談室だからな。 初心者相手には正しい用語(というと語弊はあるが、教科書に載ってそうな用語)を
使ってあげた方が親切だとは思うな。

質問が終わった後で回答者サイドで雑談する分には伝われば何でもいいと思うけど。

339 :デフォルトの名無しさん:2009/06/21(日) 19:06:21
まあ、読み替えられる程度の用語は、読み替えて解釈すればいいってことだね。

「この言葉はC++の用語じゃないから使うな!!」なんて騒いで暴れるのはもってのほか。

340 :デフォルトの名無しさん:2009/06/21(日) 19:12:39
>>332
そろそろデータメンバをメンバ変数と言い換えた理由を聞こうか?

341 :デフォルトの名無しさん:2009/06/21(日) 19:17:37
-----------------------------------------------------------------
ここまで自作自演

342 :デフォルトの名無しさん:2009/06/21(日) 19:18:38
まったく読み替えできないので、JIS規格に反する用語を使うのはやめてください^^

343 :デフォルトの名無しさん:2009/06/21(日) 19:23:27
わからないことがあれば、適宜質問すればいいよ。
みんな親切に教えてくれると思う。

344 :デフォルトの名無しさん:2009/06/21(日) 19:31:43
質問したくないし、親切な人は全員ヤクザなのでいやです^^

345 :デフォルトの名無しさん:2009/06/21(日) 19:35:01
まだ続いてたのか・・・

346 :デフォルトの名無しさん:2009/06/21(日) 19:37:28
このネタであと3年は続けるつもり

347 :デフォルトの名無しさん:2009/06/21(日) 19:40:07
せめて3日で終わらせてくれ

348 :デフォルトの名無しさん:2009/06/21(日) 19:42:02
明日のこの時間には終わるでしょ

349 :デフォルトの名無しさん:2009/06/21(日) 19:56:37
フィールドとかメソッドとか使う奴は池沼。

350 :デフォルトの名無しさん:2009/06/21(日) 20:27:28
誰かkusakabe呼んでこいよ。

351 :デフォルトの名無しさん:2009/06/21(日) 21:04:40
こわがりすぎー

352 :デフォルトの名無しさん:2009/06/21(日) 21:08:30
boost::serializationを使ってシリアライズしようと思っています。
ライブラリなどの自分以外が書いたクラス(例えばboost::gregorian::dataとか)をシリアライズしたい時、
どうすればいいのでしょうか?

353 :352:2009/06/21(日) 21:11:53
×data
○date
でした

354 :デフォルトの名無しさん:2009/06/21(日) 21:29:15
>>352
フィールドとかメソッドとか使うといいよ。プ

355 :デフォルトの名無しさん:2009/06/21(日) 21:30:09
>>352
一瞬あなたが女神に見えました。

使ったことないけどこれだと思う。
http://www.boost.org/doc/libs/1_39_0/libs/serialization/doc/tutorial.html#nonintrusiveversion

356 :デフォルトの名無しさん:2009/06/21(日) 21:34:08
あるところにフィールド君という人がいました。

>>230
 フィールド→メンバ変数
 読み替えて。」

と、言いました。
でも、どちらも間違えでした。
本当はデータメンバだったのです。

357 :デフォルトの名無しさん:2009/06/21(日) 21:38:09
こんなんだからID表示しようぜって話になるんだよな
C++にはメソッドなんてありませんとかわーわー言ってるのはvoid信者かっての

358 :デフォルトの名無しさん:2009/06/21(日) 21:38:43
C++にメソッドがあってもいいだろとわーわー言ってるのはC#厨ですね

359 :デフォルトの名無しさん:2009/06/21(日) 21:47:10
言葉もまともに使えない人たち

360 :デフォルトの名無しさん:2009/06/21(日) 21:49:19
じゃあ説明自体をC++でかけ
そうすれば問題ねーだろ?

361 :デフォルトの名無しさん:2009/06/21(日) 21:53:12
>>355
この方法もシリアライズできるのはpublicメンバだけですよね?
privateメンバに関しては、1つずつgetしてファイルへ書き込み、ファイルから読み込んで1つずつsetしかないんでしょうか?
そもそもgetter/setterがなかったらファイルへの読み書きは不可能になってしまいそうな・・・。

362 :デフォルトの名無しさん:2009/06/21(日) 21:53:18
極論を言い出すアホ出現

363 :デフォルトの名無しさん:2009/06/21(日) 22:07:00
>>356
???

364 :デフォルトの名無しさん:2009/06/21(日) 22:09:44
>>361
ああ確かに。。
説明文にもそう書いてあるね。
こっそりヘッダにfriend仕込むみたいな邪道な方法しか思いつかない--;

365 :デフォルトの名無しさん:2009/06/21(日) 22:10:02
>>357
> C++にはメソッドなんてありませんとかわーわー言ってるのはvoid信者かっての
「C++にはメソッドなんてありませんとかわーわー言ってる」人なんていません。

366 :デフォルトの名無しさん:2009/06/21(日) 22:12:32
よかった、かわいそうなvoid信者はいなかったんだ

367 :デフォルトの名無しさん:2009/06/21(日) 22:16:15
美談

368 :デフォルトの名無しさん:2009/06/21(日) 23:43:42
try {
    throw new exception();
}
catch (exception* e) {
    delete e;
}



try {
    throw exception();
}
catch (exception& e) {
}

ってどっちがいいの?



369 :デフォルトの名無しさん:2009/06/21(日) 23:51:02
下。
キャッチした例外オブジェクトは普通いじらないから
const exception& で受けるとよい。

上はキャッチされないとリークするのでダメ。
また、newするときにbad_allocが飛ぶかもしれない。

370 :デフォルトの名無しさん:2009/06/21(日) 23:57:01
throw MyException();
として、MyException型の一時オブジェクトのコンストラクタが例外をスローした場合、
二重例外になってしまいますか?
それともMyExceptionのスローは中断されて、そのコンストラクタが投げた例外だけが有効になりますか?

371 :デフォルトの名無しさん:2009/06/21(日) 23:57:26
>>370 後者

372 :デフォルトの名無しさん:2009/06/21(日) 23:58:27
>>371
ありがとうございます。コンストラクタで例外がスローされても一応大丈夫なのですね。

373 :デフォルトの名無しさん:2009/06/22(月) 00:05:33
>>372
コンストラクタの例外スローは大丈夫
デストラクタの例外スローは駄目

と覚えておくとよい

374 :デフォルトの名無しさん:2009/06/22(月) 00:10:05
適当な理由がないと覚えられない

375 :デフォルトの名無しさん:2009/06/22(月) 00:16:16
Modern C++ Designでも読めや

376 :デフォルトの名無しさん:2009/06/22(月) 00:20:14
いやこの場合は例外に対する問題だから

Exceptional C++

の方が良い

377 :デフォルトの名無しさん:2009/06/22(月) 00:28:01
C++をやってみたいのですが、
C言語の知識は必須なのでしょうか?
C++から始めるというのは厳しいですか?

378 :デフォルトの名無しさん:2009/06/22(月) 00:31:22
問題なし。

379 :デフォルトの名無しさん:2009/06/22(月) 00:31:34
メソッドとかフィールドとか使わなければ問題ない。

380 :デフォルトの名無しさん:2009/06/22(月) 00:32:51
>>377
全然問題無し
C++の仕様の巨大さに萎えると思うが、少しずつ覚えていくしかない

381 :デフォルトの名無しさん:2009/06/22(月) 00:34:07
>>379
C++にはメソッドもフィールドもないから

382 :デフォルトの名無しさん:2009/06/22(月) 00:36:10
>>381
もっとオブジェクト指向を勉強しましょう :-P

383 :デフォルトの名無しさん:2009/06/22(月) 00:39:38
>>382
C++はC#でもJavaでもありません

詳しくはこのスレの>>228からの議論をよく嫁

384 :デフォルトの名無しさん:2009/06/22(月) 00:41:08
ありがとうございました。
参考に書籍を買いたいのですが、
やさしいC++で良いですかね?

385 :デフォルトの名無しさん:2009/06/22(月) 00:42:58
C++にメソッドとかフィールドとかないとオブジェクト指向について理解できなくて萎える

386 :デフォルトの名無しさん:2009/06/22(月) 00:43:08
ロベールのC++入門講座がいいんじゃない?
あまりの厚さに一瞬躊躇するかもしれないが
内容はとても平易

387 :デフォルトの名無しさん:2009/06/22(月) 00:43:29
え、議論なんて誰かしてたの?

388 :デフォルトの名無しさん:2009/06/22(月) 00:44:18
あるいはここ言って聞け

皆親切に教えてくれるぞ

推薦図書/必読書のためのスレッド 49
http://pc12.2ch.net/test/read.cgi/tech/1244882261/

389 :デフォルトの名無しさん:2009/06/22(月) 00:45:30
>>385
だったら理解するな

>>387
お前のような頭のコチコチに固い馬鹿が吠えてただけかもしれんけどな

390 :デフォルトの名無しさん:2009/06/22(月) 00:45:45
さすがにいきなり禿は厳しいか

391 :デフォルトの名無しさん:2009/06/22(月) 00:49:47
オブジェクト指向について理解ができず、コミュニケーション能力のない人は
フィールドとかメソッドという単語に拒否反応を示す。

392 :デフォルトの名無しさん:2009/06/22(月) 00:50:53
ありがとうございます。
>>388のスレでも一度聞いてみます。

393 :デフォルトの名無しさん:2009/06/22(月) 00:51:25
C#やjavaのプログラマにはこのように
些細な間違いを指摘されると
自分の間違いを認めず、他人の人格を否定することに終始する
とても程度の低い連中しかいないことがわかります。

394 :デフォルトの名無しさん:2009/06/22(月) 00:52:40
>>391
そうじゃなくてさ、ここはC++スレなんだから、C++の規格票にない
言葉を使うのは少なくともやめようぜ

395 :387:2009/06/22(月) 01:02:41
え、ちょ、何でROMってた俺が吠えられることになってる?
>>389は議論(?)してたの?
ってか、どう見ても議論じゃなくね?子供のけんかかよっていう。

396 :デフォルトの名無しさん:2009/06/22(月) 01:05:48
ここ別に規格ガチスレじゃないんでしょ?じゃあ伝わればそれでよくね?
確かに違和感は感じるけどさ、それを指摘するわけでもなく、そんな言葉はありませんとか
陰湿だわ。
「じゅうふくしてます」→「そんな日本語はありません」
そう返すか?って話じゃないのー

397 :デフォルトの名無しさん:2009/06/22(月) 01:09:05
C#やjavaのプログラマにはこのように
些細な間違いを指摘されると
自分の間違いを認めず、他人の人格を否定することに終始する
とても程度の低い連中しかいないことがわかります。

398 :デフォルトの名無しさん:2009/06/22(月) 01:16:05
俺は別にC#やjavaのプログラマではないよ。それらの言語を使うことはあるけれど。
でも、もしかするとC++を使うプログラマのことをC++のプログラマと表現することが規定されているのかもしれない。

C++のプログラマの中には、規格で定義されている言葉以外を用いた議論をすることができない
融通の利かない方がいるのだなあということを知りました。

399 :デフォルトの名無しさん:2009/06/22(月) 01:20:23
>>397
で、データメンバをメンバ変数と言い換えた理由は?

400 :デフォルトの名無しさん:2009/06/22(月) 01:23:20
>>398
そこ
「融通が効かない」と言わない
「厳密に話を進める」と言え

各々が勝手な用語を使い始めると収拾がつかなくなるし
もしかしたら違う意味で使っているという事態が生じるかもしれない

そういう由々しき事態を防ぎたいのだ

>>399
単なるコピペなので俺じゃないよ

401 :デフォルトの名無しさん:2009/06/22(月) 01:23:37
>>383
> C++はC#でもJavaでもありません
当たり前ですね。そして何の意味も持たない返しです :-P

402 :デフォルトの名無しさん:2009/06/22(月) 01:26:40
なんだKusa○abeか

C++を理解できないCしか能のない○usakabeか
放置だな

403 :デフォルトの名無しさん:2009/06/22(月) 01:37:27
>>400
なんで命令されてんだ?
俺は融通が利かないなあと思ったからそう書いたのに。

ともあれ、相談者に対して、厳密に話を進めてほしいかどうかを問わずに、
それを強いるのであれば、テンプレに「正しい用語以外を使った質問には回答しません」と書くべきじゃないかな。
そうしないとまた議論することになっちゃうし。

404 :デフォルトの名無しさん:2009/06/22(月) 01:45:51
>>402
C#厨というキャラ設定にすがる人もいれば、
Cしか能が無いというキャラ設定にすがる人もいて、面白いですね。

まぁ、好きなように逃げて下さい :-P

405 :デフォルトの名無しさん:2009/06/22(月) 01:47:19
是非は別として、通りすがりの俺から見ればこんな事に100レス近く費やしてる時点でどっちもどっち。
不毛だし、その辺でやめといたら?

用語は誤解の元にもなるからキッチリしてるのに越したことは無いけどね。
指導員として新人教育する時はその辺りキッチリ調べてからやるのは当然のこと。
40人の前では不用意な一言が大きな不利益を生む時もあるかも知れんしね。

とはいえ、ここ2chだしなw。一番大事なのは正確性よりスレの雰囲気に合わせることだろw。

>>399
データメンバとメンバ変数なら誤解の起きようがないうえ、そう書いてる書籍もあるらしいし、
そこの指摘は単なる屁理屈だと思うな。そこまで言うならカタカナ使わずに英単語使えば?

406 :デフォルトの名無しさん:2009/06/22(月) 01:53:39
俺もそう思うんだが、C++にはメンバ変数というものはないので、きっちりした人から見れば
その書籍は窓から投げ捨てるべきだろうし、由々しき事態を招く可能性があるため、それが
何を指しているかの確認をすることもなく、会話をすべきではないと言われている

407 :デフォルトの名無しさん:2009/06/22(月) 01:55:21
悪書は存在するが、
そんなものに配慮する必要はない

408 :デフォルトの名無しさん:2009/06/22(月) 06:27:48
ttp://www.google.com/search?name=f&hl=en&q=member-variable
ttp://www.google.com/search?name=f&hl=en&q=function-member

C++の初版本とかは、どう書いてあったんだろうね。

ttp://www.research.att.com/~bs/glossary.html
function member - see member function.

409 :デフォルトの名無しさん:2009/06/22(月) 06:31:51
ttp://www.google.com/search?q=%22member+variable%22+%22data+member%22&btnG=Search&hl=en&sa=2

410 :デフォルトの名無しさん:2009/06/22(月) 08:09:56
データメンバーと呼ぶことにしたのは、定数もメンバーになるかららしいね。

411 :デフォルトの名無しさん:2009/06/22(月) 09:37:10
一応、nonmember variableという言い方なら仕様にある
C++/CLIの仕様だと普通にmember variableは出てくる

412 :デフォルトの名無しさん:2009/06/22(月) 09:43:51
novemberにみえた
11月の変数とかなんか詩的じゃね?

413 :デフォルトの名無しさん:2009/06/22(月) 17:40:20
>>399
>228 名前:デフォルトの名無しさん[sage] 投稿日:2009/06/20(土) 20:36:49
>>219
>>221
>互いにプライベートなメソッドやフィールドへアクセスすることが問題なのに
>それじゃ何の解決にもならんだろ。

と、書き込んだバカが

>230 名前:デフォルトの名無しさん[sage] 投稿日:2009/06/20(土) 22:32:34
>フィールド→メンバ変数
>メソッド→メンバ関数

>読み替えて。

>249 名前:230[sage] 投稿日:2009/06/20(土) 23:07:11
>>230は誤っていない。命令しているだけ。

と、命令したからじゃないか?wwwwwwwwwwwwwwwwwwwwwwwwww
>>228は二重に間違ってる大バカ野郎ってことだな。

414 :デフォルトの名無しさん:2009/06/22(月) 20:28:25
で、どこにデータメンバーなんて書いてあるんだ?

415 :デフォルトの名無しさん:2009/06/22(月) 20:39:42
>>413が必死すぎて哀れ

416 :デフォルトの名無しさん:2009/06/22(月) 20:59:51
>>414
俺が持ってる本には書いてたよ

417 :デフォルトの名無しさん:2009/06/22(月) 21:42:03
こんどは、「データメンバ」と「データメンバー」か?

418 :デフォルトの名無しさん:2009/06/22(月) 21:48:25
未だに、フィールドとかメソッドって使うのが正当だと思っているバカがいるのか?
死んだほうがよくね?

419 :デフォルトの名無しさん:2009/06/22(月) 21:50:49
Modern C++ Design はデータメンバ「ー」、
Effective C++はデータメンバになってるが、
これは別に問題じゃないだろ。

フィールドとメソッドなんて単語を使っている
C++の本は一度も見たことないがな。

420 :デフォルトの名無しさん:2009/06/22(月) 21:53:06
>>413
で、データメンバをフィールドと言い換えた上に、
さらにメンバ変数と言い間違えた理由は?

421 :デフォルトの名無しさん:2009/06/22(月) 22:08:25
データメンバをフィールドと呼んだ上にメンバ変数と言い換えろと命令していた>>228から連絡がありません

422 :デフォルトの名無しさん:2009/06/22(月) 22:17:09
200近くもくだらない議論に使ってたのか。


423 :デフォルトの名無しさん:2009/06/22(月) 22:17:30
いや、そうじゃなくて、
>>399)データメンバをメンバ変数と言い換えた理由は?
に対して、
>>413)が引用している>>228,>>230,>>249のどこにも「データメンバ」という言葉がないのだが?

どこにデータメンバーなんて書いてあるの?

424 :デフォルトの名無しさん:2009/06/22(月) 22:20:21
データメンバよりメンバ変数のほうが一般的に使われているね。
どちらも正しいC++の用語だし、どちらかが正しくないなんて事もない。

このスレにはメンバ変数がC++の用語でないと思っているバカがいるようだが。

425 :デフォルトの名無しさん:2009/06/22(月) 22:20:28
>>423
で、データメンバをフィールドと言い換えた上に、
さらにメンバ変数と言い間違えた理由は?

426 :デフォルトの名無しさん:2009/06/22(月) 22:23:13
>>424
>>297参照。「一般的」であるかどうかはC++の標準規格とは無関係。


427 :デフォルトの名無しさん:2009/06/22(月) 22:24:33
>>424
ソースを示せとおっしゃってます

428 :デフォルトの名無しさん:2009/06/22(月) 22:26:54
データメンバとメンバ変数の議論は
百歩譲ってまあ許せるとしても

フィールドとメソッド

この表現だけはもうどうしようもない。
庇いようがないほどに。

429 :デフォルトの名無しさん:2009/06/22(月) 22:35:00
くだらねぇ議論wwww

430 :デフォルトの名無しさん:2009/06/22(月) 22:36:07
>>425
フィールドをメンバ変数と言い換えたんだろ?

どこにデータメンバーなんて書いてあるの?

431 :デフォルトの名無しさん:2009/06/22(月) 22:39:37
>>430
で、データメンバをフィールドと言い換えた上に、
さらにメンバ変数と言い間違えた理由は?

432 :デフォルトの名無しさん:2009/06/22(月) 22:46:12
>>430
俺が持ってる本には書いてるよ

433 :デフォルトの名無しさん:2009/06/22(月) 22:47:53
何だ、君の本の話か。じゃあいいや。

434 :デフォルトの名無しさん:2009/06/22(月) 22:48:36
>>433
で、データメンバをフィールドと言い換えた上に、
さらにメンバ変数と言い間違えた理由は?

435 :デフォルトの名無しさん:2009/06/22(月) 22:49:43
>>431
フィールドをメンバ変数と言い換えたんだろ?

どこにデータメンバーなんて書いてあるの?

436 :デフォルトの名無しさん:2009/06/22(月) 22:50:27
まだやってんのか
本当におまえらはバカですね

437 :デフォルトの名無しさん:2009/06/22(月) 22:50:52
>>435
で、データメンバをフィールドと言い換えた上に、
さらにメンバ変数と言い間違えた理由は?

438 :デフォルトの名無しさん:2009/06/22(月) 22:53:45
>>437
フィールドをメンバ変数と言い換えたんだろ?

どこにデータメンバーなんて書いてあるの?

439 :デフォルトの名無しさん:2009/06/22(月) 22:55:41
クラスのメンバーの変数を「メンバー変数」と読んでも通じない馬鹿と会話するなんて無理

440 :デフォルトの名無しさん:2009/06/22(月) 22:57:18
ちなみに、クラスのメンバの変数を「フィールド」と呼ぶバカと会話するのも無理です

441 :デフォルトの名無しさん:2009/06/22(月) 22:57:45
昔から普通にメンバ変数っていうけどな。通じるから別にいいじゃん。そういう日本語なんだし。

442 :デフォルトの名無しさん:2009/06/22(月) 22:57:54
データメンバをメンバ変数なんて呼ぶのは
メンバ関数をファンクションメンバと呼ぶのと同じ
意味は通じなくもないが誰からも相手にされない

443 :デフォルトの名無しさん:2009/06/22(月) 22:59:31
ちなみに、データメンバをフィールドなんて呼ぶのは
何かにたとえようもないので、誰からも相手にされない

444 :デフォルトの名無しさん:2009/06/22(月) 23:00:19
Javaを知っていれば、Javaではクラスのメンバの変数を「フィールド」と呼ぶことくらいすぐわかるよ。
C++しか知らないと難しいかもしれないけど。

よほどの馬鹿じゃなければオブジェクト指向言語を少しくらいかじっていればJavaの用語くらい知ってるだろ。

445 :デフォルトの名無しさん:2009/06/22(月) 23:00:48
必死にデータメンバとメンバ変数の話に摩り替えたがってる奴がいるな。
重要なのは↓だから。

>>228
> >>219
> >>221
> 互いにプライベートなメソッドやフィールドへアクセスすることが問題なのに
> それじゃ何の解決にもならんだろ。

こいつの「解決」とやらも見てみたいが。

446 :デフォルトの名無しさん:2009/06/22(月) 23:01:06
C++の世界ではフィールドというのはビットフィールドしか意味し得ないからな

447 :デフォルトの名無しさん:2009/06/22(月) 23:01:26
よし!
じゃあみんなでこうしよう。

>>215から俺のこのレスまでを全部あぼんし、
フィールドが気にくわない人はフィールドをあぼんし、
メソッドが気にくわない人はメソッドをあぼんし、
メンバ変数が気にくわない人はメンバ変数をあぼん
すればよい。
これで解決。

そうしよう!

448 :デフォルトの名無しさん:2009/06/22(月) 23:02:24
>>>444
何を言ってるんだ
Javaのクラスに「メンバ」なんてものは存在しない
あるのはメソッドとフィールドだけだ

JavaもC++も知らないくせに無理すんな

449 :デフォルトの名無しさん:2009/06/22(月) 23:02:30
>>444
>>269だそうです。

450 :デフォルトの名無しさん:2009/06/22(月) 23:02:58
>>444
ほとんどの人はよほどの馬鹿じゃないので、
「C++」相談室でフィールドとかメソッドなんて言葉は使いません。

よほどの馬鹿でもない限り、javaのスレではjavaの用語を、
C#のスレではC#の用語を使います。

451 :デフォルトの名無しさん:2009/06/22(月) 23:03:43
メソッドという単語は、Smalltalkが発祥?

452 :デフォルトの名無しさん:2009/06/22(月) 23:04:16
使わないやつは使わなければいい。

理解できないやつは回答しなければいい。

以上

453 :デフォルトの名無しさん:2009/06/22(月) 23:05:53
>>442
function member はストラウストラップ氏の用語集に載ってる。
「member function を参照せよ」としてだが。

454 :デフォルトの名無しさん:2009/06/22(月) 23:06:40
おー、なんか参考になるなぁ。


455 :デフォルトの名無しさん:2009/06/22(月) 23:07:01
昔は普通にメンバー変数って言ってたよな。
データメンバーなんて言い出したの最近だろ?

456 :デフォルトの名無しさん:2009/06/22(月) 23:08:18
何かこう・・・凄く引っ張るなこの話題

457 :デフォルトの名無しさん:2009/06/22(月) 23:10:32
>>455
1998年に作られた標準C++規格には「データメンバ」しかありません
メンバ変数などという意味不明の造語が公式に使われたことはないし、
もちろんC++0xのドラフトにも影も形もありません

「メンバ変数」などという言葉はこの世のどこにも存在しないんだ
いい加減に現実を見ろ

458 :デフォルトの名無しさん:2009/06/22(月) 23:10:43
オブジェクト指向言語で一般的に「メソッド」と言われているものをC++では「メンバー関数」と言っているだけだから、「メンバー関数」は「メソッド」に違いないよ。

459 :デフォルトの名無しさん:2009/06/22(月) 23:11:37
>>453
>>442はそれを言っているんでしょう。
ひっくり返すな、と。

>>455
うちの本はさほど最近の本でもないけど、データメンバと書かれているよ。

460 :デフォルトの名無しさん:2009/06/22(月) 23:11:39
>>457の世界には1998年以前は存在しないようだな。

ご愁傷さま。

461 :デフォルトの名無しさん:2009/06/22(月) 23:11:50
>>451
恐らく。デザインパターンの金字塔であるGoF本は
C++とSmalltalkを使っているので、
二つの言語の用語がごちゃ混ぜになるアホがいるのかもしれない。

しかし、この本の末尾に載っている用語集には
ちゃんと呼び名が違うことが書かれている。
(両者はオペレーションという概念で統一されている)

462 :デフォルトの名無しさん:2009/06/22(月) 23:13:30
>>460
1998年以前の公式文書に「メンバ変数」という記述があるものが存在するの?
何に載ってるか教えてくれよ

463 :デフォルトの名無しさん:2009/06/22(月) 23:13:34
>>457
どこにもないわけでもないよ。C++の中にはないけれど。

>>458
C++でメソッドというと別のものになっちゃうから。
これに関してはmethodを単にメソッドと訳してしまった方にも落ち度があるんじゃないかと思わんでもないけど。

464 :デフォルトの名無しさん:2009/06/22(月) 23:13:37
>>457
メンバー変数 の検索結果 約 229,000 件中 1 - 100 件目 (0.89 秒)

山のように存在するが?

465 :デフォルトの名無しさん:2009/06/22(月) 23:15:35
>>464
そんなの根拠にならん、ただの間違いだ
どうしようもないアホが世の中に呆れるほど多いと言うことの説明にしかならん

完壁 に一致する日本語のページ 約 398,000 件

466 :デフォルトの名無しさん:2009/06/22(月) 23:15:47
おまえらリアルでもそんなに細かいの?

新人のK君が「ワーニング」とか言っても我慢しちゃうよ俺
指摘すんの面倒だし

467 :デフォルトの名無しさん:2009/06/22(月) 23:17:11
プログラミング言語C++第1版、第2版、ARMが見てみたいんだが。

468 :デフォルトの名無しさん:2009/06/22(月) 23:17:26
それはただの読み方の間違いだからな
データメンバーをメンバ変数だのフィールドだのという0点な間違いとは訳が違う

469 :デフォルトの名無しさん:2009/06/22(月) 23:17:43
ウォーニンが出ました、とかそこだけ変に流暢に言われても困るしな

470 :デフォルトの名無しさん:2009/06/22(月) 23:18:14
>>466
その新人くんが「読み替えろよ、バカ」と先輩の君に言ってくるわけだ。
さらに、「これは命令だから」と言ってくる。

わーにんぐで意味がわからないのは
おまえにコミュニケーション能力がないからだ、とね。

471 :デフォルトの名無しさん:2009/06/22(月) 23:18:46
原理主義者と変わらんな。

472 :デフォルトの名無しさん:2009/06/22(月) 23:20:00
>>465
「メンバ変数」などという言葉はこの世のどこにも存在しないんだ

メンバー変数 の検索結果 約 229,000 件中 1 - 100 件目 (0.89 秒)

そんなの根拠にならん、ただの間違いだ

この世に含まれる「googleの結果」に存在するのだから
「この世のどこにも存在しない」ということが間違いであることの根拠になるだろ。

それともgoogleの結果はあの世のものとでも言うのかね?オカルトか?

473 :デフォルトの名無しさん:2009/06/22(月) 23:22:05
>>472
書き間違えるアホが40万人いようとも、「完壁」なんて言葉は存在しない
いくら恥を重ねたってない所から言葉は出てこないんだよ

474 :デフォルトの名無しさん:2009/06/22(月) 23:23:30
>228 名前:デフォルトの名無しさん[sage] 投稿日:2009/06/20(土) 20:36:49
>>219
>>221
>互いにプライベートなメソッドやフィールドへアクセスすることが問題なのに
>それじゃ何の解決にもならんだろ。

>230 名前:デフォルトの名無しさん[sage] 投稿日:2009/06/20(土) 22:32:34
>フィールド→メンバ変数
>メソッド→メンバ関数
>読み替えて。

>232 名前:デフォルトの名無しさん[sage] 投稿日:2009/06/20(土) 22:37:54
>>229
>馬鹿じゃね。読み替えろよ。

>249 名前:230[sage] 投稿日:2009/06/20(土) 23:07:11
>>230は誤っていない。命令しているだけ。

原点に返るぞ。問題は>>228のこの一連の発言。

475 :デフォルトの名無しさん:2009/06/22(月) 23:23:45
トヨタの「ホームページ」とか言うと怒り出して、日産の「HP」なんて書いた日にゃ顔を真っ赤にして怒鳴り散らす。

そんな馬鹿が少なからずこのスレッドにいる。

476 :デフォルトの名無しさん:2009/06/22(月) 23:26:02
>>475
「ホームページ」は正しいWeb用語だ
使い方を間違ってるだけ
「HP」もしかり

「メンバ変数」という言葉はそもそも存在しない
正しい使い方すらそもそも存在しない完全な架空の言葉
悪意のない用語の混同とは一線を画す

477 :デフォルトの名無しさん:2009/06/22(月) 23:27:00
>>473
OCRでも使わない限り、意図的に入力しない限りそんな言葉は出てこない。
意図的に入力しているのだから明らかに存在する言葉。

無いはずのものが、目の前にあるのだと思うなら、病院へ行ったほうがいい。

478 :デフォルトの名無しさん:2009/06/22(月) 23:28:07
メンバ変数は存在するし誤解なく使用できる言葉。

メンバ変数という言葉が通じないようなど素人と話をしても仕方ない。

479 :デフォルトの名無しさん:2009/06/22(月) 23:29:19
普通にメンバー変数って使うけどな
メンバー変数という言葉が存在しないとか言ってる奴って何なの?アホなの?死ぬの?

480 :デフォルトの名無しさん:2009/06/22(月) 23:29:58
用語について議論したい人は、どっかにスレ立てて移動してくれないかな。

481 :デフォルトの名無しさん:2009/06/22(月) 23:30:04
フィールドはC++の標準規格にないばかりかC++では一般的にも使用しない言葉。

フィールドという言葉を平気で使うようなど素人と話をしても仕方ない。

482 :デフォルトの名無しさん:2009/06/22(月) 23:32:21
だから何度言ったらわかるんだ
C++のクラスが持てるのは「メンバ関数」と「データメンバー」だ
「メンバ変数」なるものをC++のクラスが持つことは出来ない
そしてJavaのクラスもSmalltalkのクラスも「メンバ変数」なるものを持つことは出来ない
「メンバ変数」とやらの概念を含むプログラミング言語は存在しない

歴史や経済やスポーツの世界で俺が知らない意味を持ってるなら話は別だが
少なくともコンピュータの世界に「メンバ変数」という言葉はどこにもない

483 :デフォルトの名無しさん:2009/06/22(月) 23:32:56
な…何だこのくだらなさは

484 :デフォルトの名無しさん:2009/06/22(月) 23:34:25
メンバ変数という呼び名については大して異論はないと思うよ。
一人わーわーわめいている人がいるみたいだけど。
例えば、C++ Coding Standardsではどうどうとメンバ変数という単語が使われている。
恐らく、ほとんどのC++プログラマにも通じる。

しかし、フィールドとメソッドなどという単語を堂々と使っているC++の本は見たことがない。

485 :デフォルトの名無しさん:2009/06/22(月) 23:35:53
要は、「メンバ変数」って誰が最初に言い出したのかってことだよな。
英語でも member varialable はたくさんヒットする。

486 :デフォルトの名無しさん:2009/06/22(月) 23:36:38
C++以外のオブジェクト指向言語に詳しくない人はあまり無理しなくていいよ。
Javaのフィールドとか知らなくても、べつにC++のプログラミングでは困らないし。

487 :デフォルトの名無しさん:2009/06/22(月) 23:37:27
>>485
Bjarne Stroustrup

488 :デフォルトの名無しさん:2009/06/22(月) 23:37:59
R.マッサーのSTL標準テンプレートライブラリによるC++プログラミング第2版でも
メンバ変数という単語がデータメンバの意味で使われている。
ほかにも探せば、名著の中にメンバ変数という単語が出てくるだろう。

ところで、さっきから、実際に本を調べて書き出しているのは俺だけだな…。
JIS規格とISO規格を調べてくれたのは俺じゃないが。

何はともあれ、フィールドとメソッドはない。

489 :デフォルトの名無しさん:2009/06/22(月) 23:38:34
>>485
member variableをメンバと訳しちゃったんだから従うしかないじゃない、という言い分だと思うよ

490 :デフォルトの名無しさん:2009/06/22(月) 23:38:50
>>484
C++ Coding Standardsなら、原著ではちゃんと"data member"という言葉を使ってる
"member variable"なとどいう記述はざっと見る限りは一つもない
訳した奴がアホなだけだろう

491 :デフォルトの名無しさん:2009/06/22(月) 23:38:54
2001年くらいからこの板にいるけど、
C++の話をするときに「メンバ変数」という言葉を使って
「そんなものは無い」って返されたことは一度もないなぁ。

492 :デフォルトの名無しさん:2009/06/22(月) 23:40:04
>>491
2001年には、いわゆる「ゆとり世代」ってのがあまりいなかったからな。

493 :デフォルトの名無しさん:2009/06/22(月) 23:40:31
空気読めない質問ばっかりして呆れられてたんじゃない?

494 :デフォルトの名無しさん:2009/06/22(月) 23:41:33
>>491
そんなこと言うのは昨日あたりからこのスレで暴れてる馬鹿しかいないから

495 :デフォルトの名無しさん:2009/06/22(月) 23:41:56
member variables でグーグルブック検索
ttp://books.google.co.jp/books?q=%22member+variables%22

496 :デフォルトの名無しさん:2009/06/22(月) 23:43:09
ああ、Exceptional C++でもメンバ変数って単語を見つけた。
同じくデータメンバの意味で利用している。
メンバ変数は普通に勉強しているC++プログラマには通じるだろう。

何度も言うが、フィールドとメソッドはない。

497 :デフォルトの名無しさん:2009/06/22(月) 23:43:43
過ちを正すのに遅すぎるということはない
今まで勘違いしてた人たちも、メンバ変数なんて言い方はやめて
これからきちんと「データメンバー」って言うようにすればいい

これでいいだろ?

498 :デフォルトの名無しさん:2009/06/22(月) 23:44:20
データーメンバーじゃなくていいの?

499 :デフォルトの名無しさん:2009/06/22(月) 23:46:14
>>490
>訳した奴がアホなだけだろう

恐らくはそうに違いない。
メンバ変数がC++標準規格の用語でないという事実を争うつもりはない。

重要なことは「フィールド」や「メソッド」などという単語は登場せず、
規格票にもでてこないから、「フィールドをメンバ変数に読み替えてくれ」といったところで
結局どちらも間違っているということだけだ。


500 :デフォルトの名無しさん:2009/06/22(月) 23:46:34
データメンバでもデータメンバーでもデーターメンバーでも何でもいいよ
どれも"data member"という正しい用語の正しい読み方だ

メンバ変数はどういじくり回しても正しくはない

501 :デフォルトの名無しさん:2009/06/22(月) 23:47:13
「data member」って書けばいいじゃん。
読むときはアメリカンにね。

502 :デフォルトの名無しさん:2009/06/22(月) 23:47:24
オブジェクト指向言語についてある程度の知識があれば
フィールドとメソッドという言葉はJavaとC++の類似性から理解できるよ。

理解できなければ無理に理解する必要はないけどね。

503 :デフォルトの名無しさん:2009/06/22(月) 23:49:28
>>500
もうわかったから。お前ん中では正しくないんだね。

504 :デフォルトの名無しさん:2009/06/22(月) 23:49:45
>>501
読むならデニッシュだろ

505 :デフォルトの名無しさん:2009/06/22(月) 23:49:56
>>502
C++のクラスのデータメンバーとJavaのクラスのフィールドはある点で似ている
それは確かにそうだろう
しかしだからといってC++のフィールドだのJavaのデータメンバーだの、
ましてやメンバ変数などという言葉の使い方が正しいことにはならない

506 :デフォルトの名無しさん:2009/06/22(月) 23:50:53
>>505
>それは確かにそうだろう

じゃあもういいんじゃね。


507 :デフォルトの名無しさん:2009/06/22(月) 23:51:53
>>503
ISO/IECが策定した世界標準規格です

508 :デフォルトの名無しさん:2009/06/22(月) 23:51:59
>>505
まぁ落ち着いて、文末に句点つけろよ。
お前の言葉の使い方は間違ってるよ。

509 :デフォルトの名無しさん:2009/06/22(月) 23:53:48
よほどの馬鹿でないかぎり

 C++相談室

で、Javaの用語を使った上に、
人をバカ呼ばわりしたりはしない。

510 :デフォルトの名無しさん:2009/06/22(月) 23:54:42
バカ呼ばわりされたのが悔しかったのね。

511 :デフォルトの名無しさん:2009/06/22(月) 23:54:46
おまいらいい加減にしろ
こんな下らんことを延々と言い争いしたいなら他でやれ

512 :デフォルトの名無しさん:2009/06/22(月) 23:55:31
>>511
あと3年このネタで行きます

513 :デフォルトの名無しさん:2009/06/22(月) 23:55:59
多分他に話題がないからなんだろうね。
この状況みると相談する気もなくなるだろうし。相談する言葉を選ぶのが大変そ。

514 :デフォルトの名無しさん:2009/06/22(月) 23:56:09
>>507
規格はもうわかったから。
メンバ変数って言葉も今回でちゃんと覚えておけよ。

515 :デフォルトの名無しさん:2009/06/22(月) 23:56:17
メンバ変数だのフィールドだのというアホ丸出しでしかも間違った言葉を
執拗に使いたがるアホが粘着してるのがいけないんです

516 :デフォルトの名無しさん:2009/06/22(月) 23:57:10
>>514
お前こそそんな間違った言葉は忘れてデータメンバーって言葉を覚えた方がいいぞ

517 :デフォルトの名無しさん:2009/06/22(月) 23:57:37
>>507
あと、C++のメンバ変数、メンバ関数は、Javaのフィールド、メソッドに対応するよ。
せっかくだから覚えておくといいよ。

518 :デフォルトの名無しさん:2009/06/22(月) 23:58:31
>>517
対応しないから死ねよ^^

519 :デフォルトの名無しさん:2009/06/22(月) 23:59:50
>>517
C++のメンバ関数がJavaのメソッドに対応するのはいいけどね
何度言ったらわかるんだろ
Javaのフィールドに対応するのはC++のデータメンバー
C++にメンバ関数というものはないし、当然Javaのどんなものとも対応はしない

520 :デフォルトの名無しさん:2009/06/22(月) 23:59:52
>>517
つまりJavaにフィールドという言葉はないということか

521 :デフォルトの名無しさん:2009/06/23(火) 00:01:13
C++にメンバ変数がないとか言ってる奴って、馬鹿なの?素人なの?死ぬの?

522 :デフォルトの名無しさん:2009/06/23(火) 00:02:06
>>521
だって、実際にないんだもん
規格のどこを探してもそんな言葉はない

そろそろ諦めてくれよ

523 :デフォルトの名無しさん:2009/06/23(火) 00:02:30
>>516
別に忘れる必要はなくて、
普通は、規格の用語と慣用表現と両方覚えておくほうがよりいいと思う

524 :デフォルトの名無しさん:2009/06/23(火) 00:02:41
C++のスレでフィールドとかメソッドとか平気で使ってる奴って、馬鹿なの?素人なの?死ぬの?

525 :デフォルトの名無しさん:2009/06/23(火) 00:02:48
C++にメンバ変数があるとか言ってる奴って、馬鹿なの?素人なの?死ぬの?

526 :デフォルトの名無しさん:2009/06/23(火) 00:04:25
ちなみに、慣用表現でもC++にはメソッドとかフィールドなんてものはありません。

527 :デフォルトの名無しさん:2009/06/23(火) 00:05:05
>>526
そのへんはJavaの類推でわかるからいいじゃん

528 :デフォルトの名無しさん:2009/06/23(火) 00:05:06
「慣用表現」って詰まる所「俺様表現」だろjk

529 :デフォルトの名無しさん:2009/06/23(火) 00:06:00
>>527
俺Javaなんて糞言語やらないからわからないや

530 :デフォルトの名無しさん:2009/06/23(火) 00:06:10
オブジェクト指向言語で一般的に使われるメンバー、メソッドという用語を知らないことがばれて、よほど悔しかったんだね。
でも、C++ではメンバー変数、メンバー関数って言葉になってるから、それだけ知っていればC++を使う限りは問題ないよ。
オブジェクト指向言語に詳しい人と話すときにはちょっと困るかもしれないけど、でもそんなに気にすることないよ。

531 :デフォルトの名無しさん:2009/06/23(火) 00:07:00
慣用表現をどこまで受け入れるべきかの線引きは確かに難しい。

532 :デフォルトの名無しさん:2009/06/23(火) 00:07:11
>>530
どこから突っ込めばいいかわからない

533 :デフォルトの名無しさん:2009/06/23(火) 00:07:11
結構広まっちゃった表現なら「俺達表現」ってとこで

534 :デフォルトの名無しさん:2009/06/23(火) 00:07:28
>>529
君はJavaのことなんて気にしなくていいよ。C++だけで大丈夫。無理しなくていいよ。

535 :デフォルトの名無しさん:2009/06/23(火) 00:07:51
C++では使わないフィールド、メソッドという用語を平気で使っているってことを指摘されて、よほど悔しかったんだね。
オブジェクト指向言語に詳しいとか思い込んでるだけのバカと話す必要はないからまったく困らないね。

536 :デフォルトの名無しさん:2009/06/23(火) 00:08:23
>>530
そのレスが皮肉のつもりであれば、そのレスにおいてはデータメンバと記述すべきであった。

537 :デフォルトの名無しさん:2009/06/23(火) 00:09:20
実際、データメンバーなんて言ってるやついない。メンバー変数って言ってる。

538 :デフォルトの名無しさん:2009/06/23(火) 00:09:51
言っておくが、GoF本ではちゃんとメソッドとメンバ関数を使い分けてる。
まともな本は用語と概念は切り分けてるから、ごっちゃになる方がアホだと思う。

539 :デフォルトの名無しさん:2009/06/23(火) 00:10:58
オブジェクト指向で一般的に使う言葉ということであれば、
例えばUMLのクラス図ではC++のデータメンバー、Javaのフィールドに対応するものはプロパティと呼ぶ

540 :デフォルトの名無しさん:2009/06/23(火) 00:12:06
慣用表現だから受け入れろよ、という人は、サブルーチンという言葉も躊躇いなく受け入れるのかな

541 :デフォルトの名無しさん:2009/06/23(火) 00:12:16
>>537
だが、それは間違いだったんだ

明日からは胸を張って「データメンバー」って呼べばいい
間違いを正すことに恥じることはない

542 :デフォルトの名無しさん:2009/06/23(火) 00:14:23
用語もマトモに使えないって、どんなマヌケなオブジェクト指向本を読んだんだろうな。
ぜひ書名を教えてほしいもんだ。地雷を踏まなくてすむ。

543 :デフォルトの名無しさん:2009/06/23(火) 00:17:57
JIS原理主義者キモチワルイな
JISだけが規格じゃないのになんでそんなに有り難がっているのか意味不明

544 :デフォルトの名無しさん:2009/06/23(火) 00:19:38
結論。

フィールドとかメソッドとか、C++のスレで使うな。キモイ。

545 :デフォルトの名無しさん:2009/06/23(火) 00:20:54
JISの大本のISO規格の時点で"data member"で統一されてます
"member variable"なんて言葉は出てきません

ところでISO以外のC++の標準規格って何?

546 :デフォルトの名無しさん:2009/06/23(火) 00:22:41
>>543
食わず嫌いよくない
慣れだよ慣れ。

547 :デフォルトの名無しさん:2009/06/23(火) 00:24:53
>>545
ARM

548 :デフォルトの名無しさん:2009/06/23(火) 00:25:19
>228 名前:デフォルトの名無しさん[sage] 投稿日:2009/06/20(土) 20:36:49
>>219
>>221
>互いにプライベートなメソッドやフィールドへアクセスすることが問題なのに
>それじゃ何の解決にもならんだろ。

C++のスレで「メソッドやフィールド」だって。プ

>230 名前:デフォルトの名無しさん[sage] 投稿日:2009/06/20(土) 22:32:34
>フィールド→メンバ変数
>メソッド→メンバ関数

>読み替えて。

C++標準規格には、メンバ変数なんて言葉もないから。プププ

549 :デフォルトの名無しさん:2009/06/23(火) 00:27:26
必死すぎだろw

550 :デフォルトの名無しさん:2009/06/23(火) 00:28:05
リターンキーがなくなり、エンターキーが台頭した頃、エンターキーのことをリターンキーという人がいた。
今もリターンキーって言っているのかな。
リターンキーと言われても違和感はないですか?

virusのことをかつてビールスと発音していました。
今もビールスといっている人はいるのかな。
ビールス対策ソフトと言われても違和感はないですか?

551 :デフォルトの名無しさん:2009/06/23(火) 00:28:30
最近C++を始めた連中はメンバ変数って言葉知らんのかー
時代が変わったのう

552 :デフォルトの名無しさん:2009/06/23(火) 00:29:29
俺3版だからイマイチついていけてないのかもしれん。

553 :デフォルトの名無しさん:2009/06/23(火) 00:30:57
          ____
       / \  /\ キリッ
.     / (ー)  (ー)\    <「もっとも、コミュニケーション能力があってもオブジェクト指向言語の知識があまりなくて
    /   ⌒(__人__)⌒ \     フィールドとメンバー変数が類似の機能であることがわからない初心者には難しいか。」
    |      |r┬-|    |
     \     `ー’´   /
    ノ            \
  /´               ヽ
 |    l              \
 ヽ    -一””””~~``’ー--、   -一”””’ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ   <だっておwww
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)   
| / / /     |r┬-|    | (⌒)/ / / //       
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/      
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー’´      ヽ /    /
 |    |   l||l 从人 l||l      l||l 从人 l||l  バンバン
 ヽ    -一””””~~``’ー--、   -一”””’ー-、
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


554 :デフォルトの名無しさん:2009/06/23(火) 00:31:20
>>551
一部の人がデータメンバーのことをそう間違って呼んでることなら知ってますが
間違いは間違いです

555 :デフォルトの名無しさん:2009/06/23(火) 00:31:35
よかった、俺はプレステのことをファミコンと呼称していなかった

556 :デフォルトの名無しさん:2009/06/23(火) 00:31:42
そもそも「知ってる・知らない」と「適切である・適切でない」がごちゃ混ぜになってるのは何でなの?
煽るために意図的にやってんの?

「○○という言葉の使用は適切でない」という発言に「○○を知らないのか」的なレスするのは全部煽り?

557 :デフォルトの名無しさん:2009/06/23(火) 00:32:31
最近も何も10年も前の規格からデータメンバーはずっとデータメンバーなんだけど

558 :デフォルトの名無しさん:2009/06/23(火) 00:32:51
まあ、朝鮮人が発酵してないキムチはキムチじゃないって火病って騒いでるだけだろ。
発酵してなくても日本ではトウガラシの入ってる白菜の漬物をキムチと呼ぶし、クラスのデータメンバーのことをメンバー変数とも呼ぶ。



559 :デフォルトの名無しさん:2009/06/23(火) 00:34:37
>>553
それが言われて一番悔しかった言葉なの?wwww

560 :デフォルトの名無しさん:2009/06/23(火) 00:37:14
>>558
おもしろいファミコン教えて

561 :デフォルトの名無しさん:2009/06/23(火) 00:37:22
>>559
で、データメンバをフィールドと言い換えた上に、
さらにメンバ変数と言い間違えた理由は?

562 :デフォルトの名無しさん:2009/06/23(火) 00:38:24
>>558
そうか、お前朝鮮人なのか
さっさと祖国に帰りなよ〜

563 :デフォルトの名無しさん:2009/06/23(火) 00:38:29
データメンバーもフィールドもメンバ変数も同義語だろ。

ゴチャゴチャ騒いでるバカって何なの?

564 :デフォルトの名無しさん:2009/06/23(火) 00:40:26
>>563
同義語じゃないし、バカはおまえ。

565 :デフォルトの名無しさん:2009/06/23(火) 00:40:32
>>563
同義じゃないから困るんだ。
メンバ変数という言葉がある世界にはメンバ定数という言葉もありますか?

566 :デフォルトの名無しさん:2009/06/23(火) 00:41:28
>>565
俺の世界ではあり!

567 :デフォルトの名無しさん:2009/06/23(火) 00:41:39
一人で困ってろ馬鹿。

568 :デフォルトの名無しさん:2009/06/23(火) 00:42:17
>>561
で、正しく用語を使えと言いながら
自分も"メンバ変数"が正しいと思い込み、
ずっと指摘せず放置していた理由は?

569 :デフォルトの名無しさん:2009/06/23(火) 00:42:34
>>565
あるよ。

570 :デフォルトの名無しさん:2009/06/23(火) 00:42:38
>>568
          ____
       / \  /\ キリッ
.     / (ー)  (ー)\    <「もっとも、コミュニケーション能力があってもオブジェクト指向言語の知識があまりなくて
    /   ⌒(__人__)⌒ \     フィールドとメンバー変数が類似の機能であることがわからない初心者には難しいか。」
    |      |r┬-|    |
     \     `ー’´   /
    ノ            \
  /´               ヽ
 |    l              \
 ヽ    -一””””~~``’ー--、   -一”””’ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ   <だっておwww
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)   
| / / /     |r┬-|    | (⌒)/ / / //       
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/      
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー’´      ヽ /    /
 |    |   l||l 从人 l||l      l||l 从人 l||l  バンバン
 ヽ    -一””””~~``’ー--、   -一”””’ー-、
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

571 :デフォルトの名無しさん:2009/06/23(火) 00:44:22
バカな言い争いはどうでもいいから、これについて語ろうか

ttp://alenacpp.blogspot.com/2009/06/c.html

572 :デフォルトの名無しさん:2009/06/23(火) 00:44:47
>>556
> 煽るために意図的にやってんの?
まぁ基本はそう。
相手に少しでも大きな歯軋りを立てさせるには
どうやって逆撫ですればいいか、を追求してるの。

573 :デフォルトの名無しさん:2009/06/23(火) 00:47:50
>>563
まあ、「類義語」ではあるかもな

そして、プログラムの世界で似て非なるものに対して雑に同じような扱いをすると
ほぼ確実にタチの悪いバグを埋め込むことはよく知ってるだろう

同義語でない類義語の区別は厳密でなければならない
それが似てれば似てるほどな

574 :デフォルトの名無しさん:2009/06/23(火) 00:49:19
YAGNI

575 :デフォルトの名無しさん:2009/06/23(火) 00:50:32
>>556
そういう事
言ってる事は百も承知だが相手に出来るだけ悔しい思いをして
顔を真っ赤にしてキーボードを叩いて欲しいわけですハイ

576 :デフォルトの名無しさん:2009/06/23(火) 00:51:04
プログラミング言語でプログラムを組んでいるのではなく、自然言語でコミュニケーションをしているのだから
疑問があれば都度聞けばいいし、誤解があることが分かれば後から解決すればいいだけのことなのに
XXは違う、OOは言うななんていうのは見当違いも甚だしい。

577 :デフォルトの名無しさん:2009/06/23(火) 00:52:52
データメンバーを無邪気に「メンバ変数」だの「フィールド」だのと呼んでる人が改心してくれればそれでいいです
間違いは仕方ない、明日から直せばいい

異様に抵抗してる変な人が若干いるみたいだけど

578 :デフォルトの名無しさん:2009/06/23(火) 00:53:17
データメンバー()笑

579 :デフォルトの名無しさん:2009/06/23(火) 00:54:59
メンバー変数は普通にC++用語だし、フィールドはJavaからの類推でメンバー変数だとすぐにわかる。
C++しか知らないと難しいかもしれないけど。

580 :デフォルトの名無しさん:2009/06/23(火) 00:55:46
>>579
分かってるけど知らない振りしてお前を煽ってんのよ

581 :デフォルトの名無しさん:2009/06/23(火) 00:56:51
なんだ、分かてるならいいんじゃね?

582 :デフォルトの名無しさん:2009/06/23(火) 00:57:56
>>579
キリッ

中略

バンバン

583 :デフォルトの名無しさん:2009/06/23(火) 00:57:57
まだメンバ変数が正しいC++用語だと思ってるの?

584 :デフォルトの名無しさん:2009/06/23(火) 00:58:46
>>278に免じて許してやれよ

585 :デフォルトの名無しさん:2009/06/23(火) 00:59:04
class hogeとhoge(int i)というのを定義して

forループの中で

for()
{
hoge h(1);
}

と呼び出すとオーバヘッド大きいですか?

586 :デフォルトの名無しさん:2009/06/23(火) 00:59:22
>>583
C++でフィールドなんて言葉を使っちゃうような人は標準規格なんて聞いたこともないからしょうがないんだよ

587 :デフォルトの名無しさん:2009/06/23(火) 00:59:41
>>579
いやさお前があまりに簡単にファビョるので面白くてつい・・・ね

588 :デフォルトの名無しさん:2009/06/23(火) 01:00:10
>>585
うるさい。今大事な話の最中なんだ!

・・・荒れているので、ほかのスレで質問してください。おながいします。

589 :デフォルトの名無しさん:2009/06/23(火) 01:01:44
突然メタな話題をしだして「俺は冷静なんだぜ」のアッピールが笑えるw

590 :デフォルトの名無しさん:2009/06/23(火) 01:02:05
>>585
hoge(int i)の定義次第だけど普通は重いと考えて避けるだろうな

591 :デフォルトの名無しさん:2009/06/23(火) 01:04:11
顔真っ赤にして火病ってるのはどうみても
C#厨が〜て連呼してるアホだろ。

592 :デフォルトの名無しさん:2009/06/23(火) 01:05:31
お前らこの調子で1000までいっとけよ
明日の朝までにな

593 :デフォルトの名無しさん:2009/06/23(火) 01:07:19
どんな荒地でも一日立つと何事も無かったかのようになる
おまえらの忍耐力はどこまでもつかな?

594 :デフォルトの名無しさん:2009/06/23(火) 01:09:11
>>590
どうでもです。
内部でnewなんか連発してると目も当てられないですよね?


595 :デフォルトの名無しさん:2009/06/23(火) 01:11:02
>>591
どうみたの?

596 :デフォルトの名無しさん:2009/06/23(火) 01:11:26
>>591
>228 名前:デフォルトの名無しさん[sage] 投稿日:2009/06/20(土) 20:36:49
>>219
>>221
>互いにプライベートなメソッドやフィールドへアクセスすることが問題なのに
>それじゃ何の解決にもならんだろ。

どうみてもどちらも間違いです。

>230 名前:デフォルトの名無しさん[sage] 投稿日:2009/06/20(土) 22:32:34
>フィールド→メンバ変数
>メソッド→メンバ関数

>読み替えて。

メンバ変数も標準規格にないことが判明しました。
本当にありがとうございました。

597 :デフォルトの名無しさん:2009/06/23(火) 01:12:00
>>589
ああそうか、自分には到底できない冷静なレスがムカついた時には
そういう噛み付き方もあるのか。

598 :デフォルトの名無しさん:2009/06/23(火) 01:51:20
>>594
目も当てられないほど遅くなったら出せばいいよ
大抵は目にもとまらない速さなんじゃないかな

599 :デフォルトの名無しさん:2009/06/23(火) 04:36:55
>>585,594
最適化は実測の後で。

600 :デフォルトの名無しさん:2009/06/23(火) 04:54:46
メソッドが駄目ならアクセッサやゲッター、セッターも駄目なんですね。


601 :デフォルトの名無しさん:2009/06/23(火) 05:09:47
クラス内で宣言される enum は規格中で専用の用語があてられてないようなんだが、
これを「メンバ enum 」と呼ぶと間違いだと言われるんだろうか?
間違いだとすれば、どう呼べば正しいと言うのだろうか?

602 :デフォルトの名無しさん:2009/06/23(火) 05:11:47
最新のドラフトには "member variable" あるね。ライブラリについての記述にしか無いけど。

603 :デフォルトの名無しさん:2009/06/23(火) 05:15:49
列挙子とかよくかかれてるように思うけど規格では書いてないんだ?


604 :デフォルトの名無しさん:2009/06/23(火) 05:16:38
ん、クラス内限定か
なんだろね?w

605 :デフォルトの名無しさん:2009/06/23(火) 05:17:16
勢いおちてるぞい

606 :デフォルトの名無しさん:2009/06/23(火) 05:20:52
ゲハと見紛うばかりの高尚な煽り合いの最中に、こんな低劣な質問をするのは大変恐縮なのだが…。

親子関係にあり、相互参照しているオブジェクトに対して、子オブジェクトの部分集合を削除したいとして。
最初は erase(remove_if(first_children, last_children, pred)) を思いついたんだけど、
これだと子→親の参照を切断できないから、仕方なくforループを使った。
その後で、ふと「predの中で切断したらよくね?」とか思いついたんだけど、
たとえ手元の実装では動作することを確認できたとしても、
述語に副作用があるのはやっぱりまずいよね?

607 :デフォルトの名無しさん:2009/06/23(火) 05:29:49
>>606
余計な工夫を考えず、一番ベタな形でforループ書くのがいいと思う。

608 :デフォルトの名無しさん:2009/06/23(火) 05:39:45
>>607
ありがとう。そうしとく。

609 :デフォルトの名無しさん:2009/06/23(火) 16:40:49
今からC++やるならC++/CLIの方がいいんでしょうか?
入門書とかぜんぜんないんですがいつからこの言語が出来たんですか?

610 :デフォルトの名無しさん:2009/06/23(火) 18:01:03
クロスDLL問題を最近知りました。
C++の規格に未定義動作と規定されているのでしょうか?
なぜ根本的な解決をしないのでしょう。
なぜ他の部分は互換性を取ったけど、そこだけ非互換にしておくのでしょう。

611 :デフォルトの名無しさん:2009/06/23(火) 18:02:30
言語の規格と何の関係もないから

612 :デフォルトの名無しさん:2009/06/23(火) 18:29:02
>>609
C++/CLI の主な目的は .NET 系技術と C++ の資産を相互運用だから、
.NET と C++ の内、少なくても一方を経験してないと厳しい。

特に学習の障壁となりやすい、ポインタやメモリ周りが特殊なので、
まずは C++ と STL を利用したコンソールアプリあたりで学習を開
始した方が良いと思う。

613 :デフォルトの名無しさん:2009/06/23(火) 18:38:03
最終的にはCLIまでやるべきなんでしょうか
アセンブラと組込CとCOBOLは出来ます
どんどん積み重ねていかないとだめだとするとどんどんハードになると思うんですが
時代が進むにつれて勉強しなくてもいい部分がパッキングされていってる新し言語じゃないってことですか?


614 :デフォルトの名無しさん:2009/06/23(火) 18:41:37
意味不明。
C++とC++/CLIは全くの別物

615 :デフォルトの名無しさん:2009/06/23(火) 18:49:02
>>613
>勉強しなくてもいい部分がパッキングされていってる新し言語じゃないってことですか?
C#でしょう、

616 :610:2009/06/23(火) 19:53:22
shared_ptrもクロスDLL問題の為にデリータをサポートするわけでしょ?

617 :デフォルトの名無しさん:2009/06/23(火) 20:05:54
クロスファイア

618 :デフォルトの名無しさん:2009/06/23(火) 20:06:29
>>610
C++の規格は言語の解釈を定めてるだけであって、
どういうバイナリを吐いてどう実行させるかは処理系の問題

DLLというものが存在しない処理系があっても全く問題ない

619 :610:2009/06/23(火) 21:18:53
DLLであろうと何だろうと規格どうりキチンと動くようにならないのは
なぜなのかっておもって。

620 :デフォルトの名無しさん:2009/06/23(火) 21:46:07
きちんと未定義

621 :デフォルトの名無しさん:2009/06/23(火) 22:14:47
だから名前マングリング位規格で決めとけとあれほど

622 :デフォルトの名無しさん:2009/06/23(火) 22:25:20
まったくだ。
あと、extern "C"よりもうちょっとマシなCとのインタフェースを
決めなかった点もどうかと思うんだが。

623 :デフォルトの名無しさん:2009/06/23(火) 22:27:23
>>622
たとえばどんな?

624 :デフォルトの名無しさん:2009/06/23(火) 22:29:49
ゆくゆくはいろんなextern "XXX"であらゆる言語と接続!という野望のために決めた構文らしい
結果は知っての通り

625 :デフォルトの名無しさん:2009/06/23(火) 22:37:53
>>623
究極的には、C++の側をいじらないでも、CからC++のライブラリを使えるとうれしい。
例外処理があると、がんばっても無理っぽいが。

626 :デフォルトの名無しさん:2009/06/23(火) 22:42:36
#ifdef __cplusplus
extern "C"{
#endif

#ifdef __cplusplus
}
#endif

お決まりのこれを見るたびに絶望的な気分になる

627 :デフォルトの名無しさん:2009/06/23(火) 22:44:55
プリプロセッサで書き換えればいいんじゃね?

628 :デフォルトの名無しさん:2009/06/23(火) 22:46:29
Mintクラスの特定のメンバ関数だけがMoneyの作成を許可されるようにしようとしています。
そこで以下のようにfriend指定したところ、CreateMoneyはprivateなのでコンパイルエラーとなりました。
では、friendの範囲をできるだけ狭くしたまま、目的を達成するにはどうすればいいですか?
よろしくお願いします。

class Money;
class Mint {
 Money* CreateMoney(); // private
};

class Money {
 friend Money* Mint::CreateMoney(); // error
 Money() {} // private
};

Money* Mint::CreateMoney() {
 return new Money;
}

629 :デフォルトの名無しさん:2009/06/23(火) 23:50:26
以下のように定義した関数のように、引数をカッコでくくるのはどんな意味があるのですか?

template<class T, std::size_t N>
std::size_t count_of(T (&array)[N])
{
 return N;
}


630 :デフォルトの名無しさん:2009/06/24(水) 00:07:54
参照の配列か配列の参照かの違いじゃね。

631 :デフォルトの名無しさん:2009/06/24(水) 00:19:54
>>630

配列の参照は()を付けて宣言するのですね
ありがとうございました

632 :デフォルトの名無しさん:2009/06/24(水) 05:48:36
>>628
Mint に friend class Money; するんじゃ不満だってこと?

633 :628:2009/06/24(水) 07:18:38
>>632
とりあえずそれは良さそうな方法ですね。
ただ、MintにはCreateMoneyだけでなく、いろいろなメンバ関数やデータメンバが他にありまして、
それら全部がMoneyからアクセス可能となるのは不満です。
friendの範囲をより限定的にできれば嬉しいのですが。

634 :デフォルトの名無しさん:2009/06/24(水) 07:30:05
std __verify_grouping
これはなんですか?

635 :デフォルトの名無しさん:2009/06/24(水) 07:43:22
>>634
スレ違い。↓こちらへどうぞ。
http://pc12.2ch.net/test/read.cgi/tech/1187922645/

636 :デフォルトの名無しさん:2009/06/24(水) 14:55:14
if((a = malloc(n*n*sizeof(float))) == NULL) return 1;
の部分がエラーになってしまい(line 11 で'int'から'float *'への指定です。:`='演算子)
コンパイラできませんでした。
の質問が来てます。
コンパイラーは何ですか?

637 :デフォルトの名無しさん:2009/06/24(水) 15:05:58
>>636
斬新な質問だな。

とりあえずそのエラーメッセージのパターンは見たことないからわからない。
てきとうにぐぐっても、宿題スレの元質問しかヒットしなかった。

638 :デフォルトの名無しさん:2009/06/24(水) 15:10:03
>>628,633
class Money のインターフェースを抽象インターフェースクラスに抽出して、
その実装を Mint の private や Mint::CreateMoney() のローカルに置く。

やりたいことはこれで済むんじゃないの?

639 :デフォルトの名無しさん:2009/06/24(水) 15:30:01
コンパイラーは何ですか?

こっちが聞きたいよw

640 :デフォルトの名無しさん:2009/06/24(水) 15:30:43
>>636
>コンパイラできませんでした。
とか、もしかして日本人じゃない?


641 :デフォルトの名無しさん:2009/06/24(水) 16:00:19
VC++とVB間のプロセス間通信について聞きたいんですが、ここであってますでしょうか?

自分なりに調べてみたんですが、いまいち詳しいことが載っているサイト、書籍が見つから
なかったので、何かお勧めのサイト、書籍ご存じないでしょうか?

今のところ、VCで画像認識、VBでマイコンの操作できるものがあり、この2つを連携させたいと
思っています。自分は、画像認識を主にやっているので、VC側である程度汎用性をもたせて、
他のプログラムとも連携させたいと考えています。

642 :デフォルトの名無しさん:2009/06/24(水) 16:13:30
>>641
VCからVBを操作するのは困難
VCでdllを作成し、VBからそれを使用するのが簡単

どうしても別プロセスにしたいなら
ファイルマッピング もしくは ソケット
をキーワードにググる

643 :デフォルトの名無しさん:2009/06/24(水) 16:23:16
Win32にパイプあるじゃん

手元にある本を見ただけでもプロセス間通信にはDLLを使った
共有メモリ、名前付きパイプ、メールスロット、ファイルマッピング
などいろいろある

644 :デフォルトの名無しさん:2009/06/24(水) 16:23:47
>>641
ソケットに100k票

645 :デフォルトの名無しさん:2009/06/24(水) 16:41:08
VBのバージョンは?
VB6だとシングルスレッドでないとVBが超不安定になって直ぐ落ちるから、マルチスレッド必須のAPIやフレームワークはムリゲ
そんで,ソケットオススメなのは2PC間でやってもソースがそれほど変わらないから

646 :デフォルトの名無しさん:2009/06/24(水) 17:50:10
>>642
>>644
ありがとうございます

>>643
ちなみ、なんていう本ですか?

>>645
VB2005です

647 :デフォルトの名無しさん:2009/06/24(水) 19:53:20
>>636
#define  NULL   0
って書いた馬鹿者を突き止めてさらし首にすれば
解決する気がする。

648 :デフォルトの名無しさん:2009/06/24(水) 20:03:46
namespace NS
{
class sample
{}
}
このように、クラスの定義の終わりの
閉じ括弧}の後ろにセミコロン;を付けるのを
忘れることが良くあるのだが、
そうするとエラーメッセージがgccで
 expected unqualified-id before '}' token
となる。
和訳すると
 トークン}の前にunqualified-idがあるはずなのにありません。
だと思うのだが
このエラーメッセージのunqualified-idってなに?


649 :デフォルトの名無しさん:2009/06/24(水) 20:12:45
class sample {} hoge;
って書いたときのhogeがないって意味じゃないか?


650 :デフォルトの名無しさん:2009/06/24(水) 20:20:35
>>636
えっ

651 :デフォルトの名無しさん:2009/06/24(水) 20:30:07
>>649
ああ、なーるほど。
そう解釈する訳か。
そんな書き方したことないから忘れてたわ。

652 :628:2009/06/24(水) 21:03:09
>>638
なるほど。ありがとうございました。

653 :636:2009/06/25(木) 00:01:55
>>637 >>639 >>640 >>647 >>650 コンパイル通りました。

654 :デフォルトの名無しさん:2009/06/25(木) 00:31:07
>>653
何が悪かったのか説明してくれ

655 :デフォルトの名無しさん:2009/06/25(木) 00:35:46
コールバック関数の意味がいろいろ調べても良く分かりません。
何で使う必要があるのでしょうか?
誰か教えてください。

656 :デフォルトの名無しさん:2009/06/25(木) 00:36:51
調べて分かる知識と
実践で分かる知識がある

657 :デフォルトの名無しさん:2009/06/25(木) 00:41:21
>>655
一番分かり安い例えがqsort()
あれがWin32で多用されていると思えばよい

658 :デフォルトの名無しさん:2009/06/25(木) 00:45:52
なるほど理解は不文律なのですねわかります

659 :デフォルトの名無しさん:2009/06/25(木) 00:45:58
>>657
qsortの例だと利用価値分かるのだけど、
仕事で見ているソースで使われているコールバック関数の意味が分からず。
スレッドで呼び出すとか書かれているけど、呼び出す関数なんて一つだし
何でわざわざこんなことしてんだか分からん。


660 :デフォルトの名無しさん:2009/06/25(木) 00:56:17
>>659
相互参照を断ち切るためじゃないかな。

AがBの関数読んでてBがAの関数読んでたら
お互いがお互いのことを知ってないといけないけど
コールバック関数を使えば
どちらか一方がもう片方を知っていれば済む。

なるべく早くコールバック関数を理解して、
コールバック関数を使うべきところで使ってない人には
システム設計とかさせない方がいいよ。

661 :636:2009/06/25(木) 01:57:21
>>654
http://pc12.2ch.net/test/read.cgi/tech/1244449887/978
上のやつを下にだれかコピーッてやってください。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail.php?qid=1227550512&sort=1

662 :デフォルトの名無しさん:2009/06/25(木) 02:05:15
>>659
スレッドで呼び出すのが前提なら、バックグラウンド処理のためじゃないの?
時間乗っかる処理を裏で走らせて、その完了をコールバックで知らせ手もらうとか。

663 :デフォルトの名無しさん:2009/06/25(木) 07:30:06
何十にも複雑に入れ子になった構造体が
あるのですが(20kbyte)

これを何度もmemcpyでコピーするとすげー
時間かかります。助けて

664 :デフォルトの名無しさん:2009/06/25(木) 07:55:01
気のせいです

665 :デフォルトの名無しさん:2009/06/25(木) 08:24:49
>>663
>何十にも複雑に入れ子になった構造体
だから遅い訳じゃないよそれ

666 :デフォルトの名無しさん:2009/06/25(木) 11:24:55
きっと再帰的にmemcpyを行っていると予想

667 :デフォルトの名無しさん:2009/06/25(木) 16:01:18
memcpyしないプログラムに書き換える

668 :デフォルトの名無しさん:2009/06/25(木) 16:37:53
そんな複雑な構造体をmemcpyよりも早くコピーする方法なんて思いつかない

669 :デフォルトの名無しさん:2009/06/25(木) 16:42:25
>>668は、何を言っているんだ?

670 :デフォルトの名無しさん:2009/06/25(木) 21:05:04

何を...>>668君、君が何を言っているのか分かんないよ

671 :デフォルトの名無しさん:2009/06/25(木) 23:36:27
べつにだいじなことじゃないので繰り返さなくていいです

672 :デフォルトの名無しさん:2009/06/25(木) 23:45:11
ただの代入とmemcpyだとどんぐらい違うんだろ


673 :デフォルトの名無しさん:2009/06/26(金) 00:02:35
実測で大差なかった。

674 :デフォルトの名無しさん:2009/06/26(金) 10:52:38
operator()をvirtualにするのは規格的に合法なのでしょうか?

675 :デフォルトの名無しさん:2009/06/26(金) 11:44:37
もちろんOKよ。
規格としてvirtualにできないのはポンストラクタだけ。

676 :デフォルトの名無しさん:2009/06/26(金) 11:55:13
ポンストラクタ・・・愛媛のまじめな初期化です

677 :デフォルトの名無しさん:2009/06/26(金) 12:30:02
チンポストラクタ・・・白子製造機です

678 :デフォルトの名無しさん:2009/06/26(金) 12:33:52
>>675
ありがとうございます.
デストラクタって無能なんですね^^

679 :デフォルトの名無しさん:2009/06/26(金) 12:35:07
>>672
memcpy()を使うと最適化が阻害されている可能性がある。

680 :デフォルトの名無しさん:2009/06/26(金) 12:50:21
構造体コピーにすると

rep movsd
rep movsw
movsb

とやってくれたが

memcpyはchar単位のコピーなので

rep movsb

みたいなコードだった
俺様コンパイラの場合

681 :デフォルトの名無しさん:2009/06/26(金) 12:59:50
movs?系ってそんなに高速だっけ。

682 :デフォルトの名無しさん:2009/06/26(金) 13:17:23
>>681
かなり。リピート回数が1/4になるのにバスアクセス回数は変わらないからね。

683 :デフォルトの名無しさん:2009/06/26(金) 13:20:43
memcpyの方が遅い可能性なんて考えたことなかったわ
勉強になるスレだなぁ

684 :デフォルトの名無しさん:2009/06/26(金) 13:34:53
>>680
それは、構造体が固定長だからじゃ。

>memcpyはchar単位のコピーなので
普通は、以下のようにしそうだが。
movsd * size/4 + movsw * (size%4/2) + movsb * (size%4%2/1)

685 :デフォルトの名無しさん:2009/06/26(金) 13:46:12
>>684
あんたの言う「普通」はあくまでも一例。例えば>680のような実装もあるし、
iccのようにSSEを使った専用memcpy()に置き換えてしまう場合もある。

686 :デフォルトの名無しさん:2009/06/26(金) 14:07:44
処理系の最適化とライブラリの実装によるってことかね。
自分の処理系がどうなってるのか気になるなら、
自分でテストコードでベンチとるしかないね。

687 :デフォルトの名無しさん:2009/06/26(金) 14:21:38
アセンブリ出力を眺めるだけでも判ると思うが。

688 :659:2009/06/27(土) 10:32:45
>> 660 662
アドバイスありがとう。
ただ、プログラムは正常に動いているし、処理も高速だし
自分の理解が足らないだけだと思う。

スレッド、サーバー、ソケットとかのクラスがあって、
サーバクラスの中には「クライアントにメッセージ送信」
とか書かれてたり。全体像や関係がさっぱりわからん。
ネットワーク使ってるわけでもないし。カメラ使っているからそれが
関係するのかしないのか・・・。
これらの言葉からおよその全体像って推測できますか?



689 :デフォルトの名無しさん:2009/06/27(土) 11:47:43
サーバースレッドとクライアントスレッドの通信にlocalhost接続つかってんじゃね?

690 :659:2009/06/27(土) 11:58:09
>>689
確かにコメントとかコードを眺めているとそんな感じに思えるのですが、
そうだとしたらどういうメリットがあるんでしょう?
もっとシンプルに出来そうな気がするのですけど。



691 :デフォルトの名無しさん:2009/06/27(土) 13:07:26
BSDソケットなら移植性がありメッセージキューイングを自前実装しなくて済む。
スレッド間通信をプロセス間通信、ネットワーク通信に拡張するのも簡単。
パケットサイズがバカでかいとかじゃなければ、大概の場合でベターな手法だと思うがね。

692 :659:2009/06/27(土) 16:53:43
>>691
BSDソケットでなくwinsockを使っているようで、
2つのプロセスがあって1つがサーバでもう一つがクライアントのようです。
2つのプロセス間でデータをやり取りするのってこういう方法が
普通なんでしょうか?

693 :デフォルトの名無しさん:2009/06/27(土) 17:36:44
プロセス間通信なら名前付きパイプの方がwindowsでは早いって聞いたことがある
なんでもカーネルに近い部分で処理するからオーバーヘッドが少ないらしい

↓こっちのスレですべき話題になってきてる気がする・・・?
http://pc12.2ch.net/test/read.cgi/tech/1244057140/

694 :デフォルトの名無しさん:2009/06/28(日) 20:53:31
一般的に言って、
例外処理って重い?
……………………………………………………

MyClass foo(){〜〜}

try
 {
  foo();
  正常動作時処理
 }
catch(const EXCEP&)
 {エラー処理。}
……………………………………………………

このようにfoo()内部でエラーが発生した場合に例外EXCEPクラスを投げてすぐ後ろでキャッチするのと

……………………………………………………
boost::optional<MyClass> foo(){〜〜}

boost::optional<MyClass> x = foo();

if(x)
 {正常動作時処理}
else
 {エラー処理。}
……………………………………………………

このようにfoo()内部でエラーが発生した場合にboost::optionalで対処するのと
どっちが早いんだろう?


695 :デフォルトの名無しさん:2009/06/28(日) 20:55:26
重くない

696 :デフォルトの名無しさん:2009/06/28(日) 20:59:02
>>695
じゃあやっぱ例外処理が綺麗かな?

697 :デフォルトの名無しさん:2009/06/28(日) 21:05:30
>>694
速度は実測が基本。

一般的に、っていう話で言うと、実行時型情報を含む catch ハンドラの検索があったり、
コンパイラの最適化の対象として優先度が下げられていたりするんで、他の分岐手段より
重いことが考えられる。

698 :デフォルトの名無しさん:2009/06/28(日) 21:08:05
速度は実測が基本とか言ってる奴は馬鹿だから気にしないほうがいい

699 :デフォルトの名無しさん:2009/06/28(日) 21:10:51
俺も実測厨だったんだが、
速度が変化しまくるんで何回か計った平均でいつも出してた

でも1回目とそれ以降って全然違ったりするんだよな
キャッシュたまったんじゃね?って先輩に言われたよ・・・

700 :デフォルトの名無しさん:2009/06/28(日) 21:33:07
速度を複数回実測して平均値を出すのに
簡単な方法ってありますか?


701 :デフォルトの名無しさん:2009/06/28(日) 21:55:38
足して割ればいいんじゃね?

702 :デフォルトの名無しさん:2009/06/28(日) 21:57:11
クソワロタw

703 :デフォルトの名無しさん:2009/06/28(日) 22:40:48
C++を始めた時は「動けばいいや」

その後はまり始めると「何でもかんでもクラスにしてやるぜ」


今、俺は
「正確に動いてインターフェースが使いやすければ、
 関数でもクラスでもどっちでも良いじゃん」
っていう心境になってきたんだが、
これでもいいかね?

704 :デフォルトの名無しさん:2009/06/28(日) 23:13:15
2つの関数作って、順番に呼び出してそれぞれの時間を計ったことがあった。
最初計ったときは、2つ目の関数の内部処理の方が速かった。
でも、順序入れ替えたら新しい順序でも2つ目の方が速かった。
実測はアテにならんね。

705 :デフォルトの名無しさん:2009/06/28(日) 23:21:10
関数とクラスは対立概念ではない

706 :デフォルトの名無しさん:2009/06/28(日) 23:25:51
>>705
そりゃ誰でもしってるだろ。

707 :703:2009/06/28(日) 23:29:57
知らなかった。ごめん。

708 :デフォルトの名無しさん:2009/06/28(日) 23:41:55
>>704
関数1個め実行後のメモリのキャッシュの状態とかによって実行時間なんて簡単に変わる
ある処理の実行時間なんて簡単に計算できるものではないし、
単純に比較できるものでもない(だからこそ実測する)

709 :デフォルトの名無しさん:2009/06/28(日) 23:45:27
キャッシュに惑わされない正しい実測の方法ってどんなのだ?

710 :デフォルトの名無しさん:2009/06/28(日) 23:47:00
実測厨は一生底辺で実測してろwwwww

711 :デフォルトの名無しさん:2009/06/28(日) 23:49:32
>>709
大きいサイズのメモリを使う場合は、あらかじめアクセスしておいて
ページフォルトを起こしておく、とかは常識だろ

712 :デフォルトの名無しさん:2009/06/28(日) 23:55:46
アーキテクチャー依存の糞プログラムが出来上がる

713 :デフォルトの名無しさん:2009/06/28(日) 23:56:39
条件次第で速度が変わると言うことは、
結局測定しても意味がないと言うことなのでは・・・。

714 :デフォルトの名無しさん:2009/06/29(月) 00:02:00
>>707は いわゆる「かわいそうな人」なので、
余り目くじら立てないで挙げて欲しいな。

715 :デフォルトの名無しさん:2009/06/29(月) 00:04:13
知らないことを知らないと正直に言える勇気は認めてあげたい

716 :デフォルトの名無しさん:2009/06/29(月) 00:07:06
>>713
少なくともひとつの環境で実測することは、実測しないことよりはるかにまとも。

717 :デフォルトの名無しさん:2009/06/29(月) 00:09:38
プログラムに慣れていないなら実測したほうがいいかもね。

718 :デフォルトの名無しさん:2009/06/29(月) 00:14:29
そういえば某携帯メーカーでデバッグが遅い遅いってあんまりうるさいので
他社機と比較したら倍以上時間かかっててリーダーが青ざめてたことあったなぁ

719 :デフォルトの名無しさん:2009/06/29(月) 00:15:42
実測もせずに速度の話ができるわけないだろ、常識的に考えて。

720 :703:2009/06/29(月) 00:16:22
いや、>>707
ただの なりすましちゃん。
全くキモチワリイな。

721 :デフォルトの名無しさん:2009/06/29(月) 00:17:38
まあ、ITドカタは計算量のオーダーの話とかしないからな。
まず実測ありきでも仕方ない。そういう仕事なんだし。

722 :デフォルトの名無しさん:2009/06/29(月) 00:22:25
>>721
で、>>694はどっちが速いのよ。

723 :デフォルトの名無しさん:2009/06/29(月) 00:22:42
サッターさんも、メイヤーさんも実測するのが一番と言ってたよ。

724 :デフォルトの名無しさん:2009/06/29(月) 00:23:30
>>722
どっちも速い。

725 :デフォルトの名無しさん:2009/06/29(月) 00:24:39
>>723
じゃあ、実測して満足してろ。

726 :デフォルトの名無しさん:2009/06/29(月) 00:35:51
ビッグオー表記は隠された定数Cを考慮しないから
やっぱり実測するのがベスト。
サッター先生やメイヤーズ先生だけでなく
マッサー先生もそのアルゴリズムが本当に有効かどうかは実測せよと書いていた。

もちろん、ここのカスどもより信じてもいい人たちなので
僕は彼らを信じます

727 :デフォルトの名無しさん:2009/06/29(月) 00:42:00
最後の仕上げで実測するのはいいけど
まずはアルゴリズムの検討をして、コード上のフローを確認して、
アセンブリコードを検討するのが先
それをせずただ実測を繰り返しても何もならない

728 :デフォルトの名無しさん:2009/06/29(月) 00:53:54
「実測が基本」と聞いて「実測しかしない」と解釈したアホが暴れていた、というわけですか。

729 :デフォルトの名無しさん:2009/06/29(月) 01:28:21
>>728
で、「実測しかしない」と解釈して暴れているレスはどれよ?

730 :デフォルトの名無しさん:2009/06/29(月) 01:39:16
>>729
>>710>>725あたりじゃね。

731 :デフォルトの名無しさん:2009/06/29(月) 02:11:26
>>721もでしょ

732 :デフォルトの名無しさん:2009/06/30(火) 07:33:07
計算量と実行効率は違うでしょう
と釣られてみる

733 :デフォルトの名無しさん:2009/06/30(火) 17:26:21
たとえOSやライブラリなどのソースが公開されていても実測が一番正確で頼りになる。

734 :デフォルトの名無しさん:2009/06/30(火) 22:07:14
あっそ。死ねば。

735 :デフォルトの名無しさん:2009/06/30(火) 22:19:02
実測ほど不正確なものはない

736 :デフォルトの名無しさん:2009/06/30(火) 23:05:08
プログラム最適化の第一法則:最適化するな。
プログラム最適化の第二法則:まだするな。


737 :デフォルトの名無しさん:2009/06/30(火) 23:15:00
三:そのままリリースしろ

738 :デフォルトの名無しさん:2009/06/30(火) 23:17:29
四.検収したらあとは別料金

739 :デフォルトの名無しさん:2009/07/01(水) 07:50:54
あるあるwww

740 :デフォルトの名無しさん:2009/07/01(水) 18:58:41
Cスレで話題になってて気になったのでこちらに。
reinterpret_castとstatic_castはどちらが危険か、という話です。
reinterpret_castの方が危険とするサイトもあれば、逆もあって、よくわからなくなりました。
識者の方の意見をお願いします。

741 :デフォルトの名無しさん:2009/07/01(水) 19:12:26
>>740
reinterpret_castはstatic_castでは不可能な型変換(例えばint->ポインタ)を
許すのだから、reinterpret_castの方が危険。

禿本の6.2.7に両者の違いについて書いてあるから読むように。

742 :デフォルトの名無しさん:2009/07/01(水) 19:17:39
reinterpret_castの方が危険とする記述はあちらこちらで見られるのですが、
static_castの方が危険とする記述はあまりありません。
そのため、reinterpret_castの方が危険だという認識を持っていました。

ですが、static_castの方が危険とする記述がされているサイトが
個人サイトではなく、MSDNのDeep C++だったので迷っている次第です。
http://msdn.microsoft.com/ja-jp/library/cc440192(VS.71).aspx

743 :デフォルトの名無しさん:2009/07/01(水) 19:43:51
reinterpret_castは何も関係ないものをキャストしてしまう可能性がある
static_castは形式を合わせるために余計なことをする可能性がある

どっちが危険とかではなくて危険の質が違う

744 :デフォルトの名無しさん:2009/07/01(水) 19:56:30
禿がより危険だって言ってるんだからそれでいいだろ。

MSDNの文書のどこにstatic_castの方が危険と書いてある?

745 :デフォルトの名無しさん:2009/07/01(水) 20:53:58
> static_cast は C++ の道具の中で最も危険なツールの 1 つであり、ほかのすべての方法でうまくいかないときに限り使うべきである。
と書かれているので、static_castを使う前に、reinterpret_castを試すべきだと読めるのですが

746 :デフォルトの名無しさん:2009/07/01(水) 20:58:11
>>743
ありがとうございます。
一概にreinterpret_castの方が危険だとは言えないのですね。

逆に、行うべきではない間違ったキャストをしてしまった場合(バグ)に
気づきやすいのはreinterpret_castであるように思いました。

>>744
>>742のリンク先に記述されていました。

747 :デフォルトの名無しさん:2009/07/01(水) 22:08:17
誤訳かと思ったけど原文もそうだった
http://web.archive.org/web/20010616093710/msdn.microsoft.com/library/welcome/dsmsdn/deep06012000.htm

748 :デフォルトの名無しさん:2009/07/01(水) 22:23:31
MSDNの記事を書いたオッサンの主張は宗教染みてるだろ。
禿とこのオッサンどちらを信じるのかと言われたらおのずと答えは出ると思うが。

749 :デフォルトの名無しさん:2009/07/01(水) 22:24:21
オッサンを信じよう。

750 :デフォルトの名無しさん:2009/07/01(水) 22:30:58
ォィw

751 :デフォルトの名無しさん:2009/07/01(水) 22:36:02
ワロタw

752 :デフォルトの名無しさん:2009/07/01(水) 22:39:32
reinterpret_castの方が危険だとする禿の理由って、例によって安易に型を変更するなとかそういうアレ?

753 :デフォルトの名無しさん:2009/07/01(水) 22:40:34
RAIIを否定するかの様な話しも昔MSDNの記事にあった気がする

754 :デフォルトの名無しさん:2009/07/01(水) 22:47:58
サイズ違いのポインタ変数へreinterpret_castカマしたら危険だよね
near→farとか

755 :デフォルトの名無しさん:2009/07/01(水) 22:53:04
static_castなら安全なの?

756 :デフォルトの名無しさん:2009/07/01(水) 22:53:43
static_castなら安全なの?

757 :デフォルトの名無しさん:2009/07/01(水) 22:55:54
お、誰かわからんけど、確かに大事なことなので2回目ありがとう

758 :デフォルトの名無しさん:2009/07/01(水) 23:06:38
static_castなら一時ポインタオブジェクト生成して型変換も可能だからね

759 :デフォルトの名無しさん:2009/07/01(水) 23:20:35
それって安全なの?

760 :デフォルトの名無しさん:2009/07/01(水) 23:21:24
static_castが危険なのはダウンキャストの時

761 :デフォルトの名無しさん:2009/07/01(水) 23:24:23
reinterpret_castによるダウンキャストは安全なの?

762 :デフォルトの名無しさん:2009/07/01(水) 23:24:43
データモデルと関係があるんじゃないか?

LLP64 16 32 32 64 64
LP64 16 32 64 64 64
IP64 16 64 32 64 64
ILP64 16 64 64 64 64
SILP64 64 64 64 64 64

みたいな感じで

763 :デフォルトの名無しさん:2009/07/01(水) 23:26:09
関係ない

764 :デフォルトの名無しさん:2009/07/01(水) 23:26:54
多重継承があるので、さらにややこしくなる。

765 :デフォルトの名無しさん:2009/07/01(水) 23:28:51
ダウンキャストするときはdynamic_castで安全なんじゃないの?

766 :デフォルトの名無しさん:2009/07/01(水) 23:28:54
ダウンキャストはそれが安全なことをプログラマが保証しなくてはいけない。
その場合でもreinterpret_castでは駄目な場合の方が多いだろう。


767 :デフォルトの名無しさん:2009/07/01(水) 23:30:07
static_castはダウンキャストするときに、多重継承のアドレス調整を行うよね?
reinterpret_castだと、アドレスはそのままじゃないの?

768 :デフォルトの名無しさん:2009/07/01(水) 23:37:38
#include <iostream>

struct A { int a; };
struct B { int b; };
struct C : public A, public B { int c; };

int main() {
C* pC = new C;
std::cout << pC << std::endl;
std::cout << static_cast<B*>(pC) << std::endl;
std::cout << reinterpret_cast<B*>(pC) << std::endl;
}
を実行したら、こうなった。
0x6f0248
0x6f024c
0x6f0248

769 :デフォルトの名無しさん:2009/07/01(水) 23:45:26
reinterpret_cast(何もしない)

static_cast(アドレス調整するだけ)

dynamic_cast(インスタンスのチェック&アドレス調整、ただしクソ重い)

の順に危ない

770 :デフォルトの名無しさん:2009/07/01(水) 23:48:50
クソ重いってどれくらい?

O(n!)くらい?

771 :デフォルトの名無しさん:2009/07/01(水) 23:49:59
クソがつくぐらいだからO(pow(n, n))くらいじゃね?

772 :デフォルトの名無しさん:2009/07/01(水) 23:53:25
そんなに重いんじゃ使えないな。dynamic_castだめじゃん。

773 :デフォルトの名無しさん:2009/07/01(水) 23:55:28
ネタにマジレス
O(n!)もO(pow(n,n))もどちらも(数学的な意味では)正しい

774 :デフォルトの名無しさん:2009/07/01(水) 23:58:30
数学的にどちらも正しいとは?

775 :デフォルトの名無しさん:2009/07/01(水) 23:59:43
O(n!)〜O(pow(n,n))だから

776 :デフォルトの名無しさん:2009/07/02(木) 00:02:15
つまり、dynamic_castが使い物にならないってこと

777 :デフォルトの名無しさん:2009/07/02(木) 00:05:37
こういうのは、C++の設計の悪さだろう。
Cのstructをそのままclassに拡張したと言うところに無理があった。
最初はよかったが、その後泥縄状態。

778 :デフォルトの名無しさん:2009/07/02(木) 00:05:49
まあO(n!)までは行かないにしても
普通の実装ではvtblにクラス名の文字列持ってstrcmpだからな
連発するには重すぎる

779 :デフォルトの名無しさん:2009/07/02(木) 00:07:07
普通の実装って凄く便利な言葉しってるんですね

780 :デフォルトの名無しさん:2009/07/02(木) 00:07:09
連発するんだ

781 :デフォルトの名無しさん:2009/07/02(木) 00:07:59
>>777
それを言い出したらあらゆる不満が噴出するだろ

782 :デフォルトの名無しさん:2009/07/02(木) 00:09:26
C#でおk

783 :デフォルトの名無しさん:2009/07/02(木) 00:10:31
>>777
ちなみに、どんな拡張なら無理がないの?

784 :デフォルトの名無しさん:2009/07/02(木) 00:10:34
windows+eclipse3.5で開発してクロスコンパイル→linux(i86)実行ファイル
で作成したいのですが、
ツールチェーンはcgywinでは間違ってます?
調べるとcgywinでできるようなんですけど
.exeしか生成されない…てかg++でコンパイルしてるかどうかも・・・


785 :デフォルトの名無しさん:2009/07/02(木) 00:10:55
>>779
普通というか、細かい工夫はあるにせよ基本的にはそうするしかないから
C++に限ったことじゃなく実行時型を扱う言語はみんな同じ
JavaにせよC#にせよRubyみたいなLLにせよ

786 :デフォルトの名無しさん:2009/07/02(木) 00:12:07
>>783
C/C++みたいな言語でdynamic_castを必要とするプログラムを書くこと自体がそもそもの間違い

787 :デフォルトの名無しさん:2009/07/02(木) 00:13:41
>>786
つまり、C++の設計は悪くないってことだよね

788 :デフォルトの名無しさん:2009/07/02(木) 00:16:45
ビヤーンストラウストラップ氏は、
後方互換性にこだわりすぎじゃないだろうか。
ある程度で妥協して、あとは extern "C" みたいに、
extern "C++98" とかじゃダメなのか。
とっとと新言語をつくって、 extern "C++" でC++の
資産を使えるようにしとけばよかったのではないか。

789 :デフォルトの名無しさん:2009/07/02(木) 00:17:24
C#があるじゃないか

790 :デフォルトの名無しさん:2009/07/02(木) 00:17:33
>>768
それ知らなかった、勉強になった
reinterpret_cast怖いな

791 :デフォルトの名無しさん:2009/07/02(木) 00:21:36
ManというクラスがTimpoというメンバを持っている場合、
Timpoのコンストラクタより先にManのコンストラクタを呼び出すにはどうすれば良いのでしょうか。

792 :デフォルトの名無しさん:2009/07/02(木) 00:24:06
どうすればも何もかならずManが先に呼ばれるぞ
Manのコンストラクタの中でTimpoのコンストラクタが呼ばれる
それ以外の方法はない

793 :デフォルトの名無しさん:2009/07/02(木) 00:25:58
あ、Timpoが静的メンバでない場合の話な

794 :デフォルトの名無しさん:2009/07/02(木) 00:37:07
dynamic_castはtemplateハッカー御用達なイメージ
Lokiとかboostとか

795 :デフォルトの名無しさん:2009/07/02(木) 00:55:19
>>788
だめだ
それではカスみたいなD言語にすら負けてしまう

796 :デフォルトの名無しさん:2009/07/02(木) 01:02:36
>>790
何もしない(Cのキャストと変わらない)ことを知ってれば
static_castより安全でわかりやすい気もする。

797 :デフォルトの名無しさん:2009/07/02(木) 01:16:16
Cのキャストはstatic_castみたいに動いたりreinterpret_castみたいに動いたりするので
その言い方は語弊がある

798 :デフォルトの名無しさん:2009/07/02(木) 01:37:57
具体例を

799 :デフォルトの名無しさん:2009/07/02(木) 02:28:40
double a; に対し、(int)a はstatic_castと同じで、(int*)&a はreinterpret_castと同じだよね?

A* a; で (B*)a するとどうなるの? reinterpret_castと同じ?

800 :デフォルトの名無しさん:2009/07/02(木) 03:44:41
AとBが継承関係にあるならstatic_castと同じ。
無関係なクラスならreinterpret_castと同じ。

801 :デフォルトの名無しさん:2009/07/02(木) 04:04:01
>>800
ありがと。じゃ>>796もちょっと違うのか。やっぱりC形式のキャストは使うもんじゃないな。

802 :デフォルトの名無しさん:2009/07/02(木) 22:59:43
だというのにC++形式のキャストを1文すら載せないC++本がある

803 :デフォルトの名無しさん:2009/07/02(木) 23:05:46
そういやstatic_castって経由キャストのは完全手動なのかな
int 要求に operator unsigned 適用されたり
long long に operator int 適用されたりする部分の規格ってあるの?

804 :デフォルトの名無しさん:2009/07/02(木) 23:40:05
>>803
何言ってるのかさっぱりわからない。

http://www.google.co.jp/search?q=%22%E7%B5%8C%E7%94%B1%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88%22
> "経由キャスト"の検索結果 8 件中 1 - 8 件目

805 :デフォルトの名無しさん:2009/07/02(木) 23:45:28
const_castがうざい時Cスタイルキャストを使うのは俺だけでいい

806 :デフォルトの名無しさん:2009/07/02(木) 23:49:48
貴様一人でも許さん

807 :デフォルトの名無しさん:2009/07/03(金) 00:16:28
const_cast<const char *>(static_cast<char *>(const_cast<void *>(p)))
とかやるたびに絶望的な気分になる

808 :デフォルトの名無しさん:2009/07/03(金) 00:19:26
const_cast<const char *> は確かに絶望的だね

809 :デフォルトの名無しさん:2009/07/03(金) 01:23:07
C++は、完全に静的型付けで多重継承をやろうとするから、
キャストがめんどくさくなってるんじゃないかね。

810 :デフォルトの名無しさん:2009/07/03(金) 01:32:29
それはない。

811 :デフォルトの名無しさん:2009/07/03(金) 21:30:42
流れをぶった切る初心者の質問ですみません。
class list {
public:
list *next;
list *getnext() { return next; }
}

p->getnext()

p->next
が等価であることが理解できませんが、なにかいい説明はないでしょうか。

812 :デフォルトの名無しさん:2009/07/03(金) 21:32:55
等価じゃないよ。
p->getnext()は左辺値にならない。

list*& getnext() { return next; } だと、かなり近いが。

813 :デフォルトの名無しさん:2009/07/04(土) 00:43:23
class CHoge
{
public:
int a;
int get_a() { return a; }
}

CHoge hoge;
hoge.a と hoge.get_a() が同じ(実際は>>812の言うとおり違うが)ってのは分かるん?
それと全く同じ

814 :デフォルトの名無しさん:2009/07/04(土) 00:47:51
>〜が同じ(実際は〜違うが)ってのは分かるん?

どっちだよwwwわかんねーよwww

>それと全く同じ

それってどれだよwwww

815 :デフォルトの名無しさん:2009/07/04(土) 02:31:23
>>814

816 :815:2009/07/04(土) 02:32:51
ごめんミス
>>814

817 :デフォルトの名無しさん:2009/07/04(土) 03:31:52
>>811
取得するときは変わらないだろうね。
逆に、代入するときを考えてみるといい。

818 :デフォルトの名無しさん:2009/07/04(土) 08:52:12
等価という言葉がよくない。
あとは、関数(メソッド、サブルーチン、手続き)というものを分かっているかどうか。
returnって何か分かってるか。

819 :デフォルトの名無しさん:2009/07/04(土) 08:53:17
>>811
インライン関数は理解してる?

820 :デフォルトの名無しさん:2009/07/04(土) 11:36:15
インライン関数にして左辺値に代入して使うなら多分同じ?

通常の関数の場合は、スタックにでも一度積むのかな、ここの動作がイマイチよく分からない。
返値がvoidの関数と、bool型でも何でも返値を持っていても使用しないというのでは、
やっぱり返値を使用しない方では関数から戻った後も無駄な動作が入るのかな。

821 :デフォルトの名無しさん:2009/07/04(土) 11:37:48
何を求めてるのか知らんが、さっさとアセンブリでも見ろよ。

822 :デフォルトの名無しさん:2009/07/04(土) 11:43:27
>>812-813の説明を言い換えると、こう。

p->nextは変数に直接アクセスしてる。
nextそのものだから、値を取り出し、また代入できる。

list *getnext() { return next; }はnextの保持する値をコピーしている。
list*型の一時変数が作成され、そこにnextが保持するアドレスがコピーされ、返されている。
値を取り出すことはできるが、一時変数に代入しても意味がない。式の終わりとともに破棄されるから。

ポインタは単にアドレスという種類の値を保持しているだけで
それ以上でもそれ以下でもない。参照とは違う。


823 :デフォルトの名無しさん:2009/07/04(土) 13:10:07
>>811
aとbが「等価」とは
!(a < b) && !(b < a)
が真であること。

よって、
p = new list();
であれば
( !(p->getnet() < p->next) && !(p->next < p->getnext()) ) == true
であるから、
p->getnext()とp->nextは等価であるといえる。

824 :デフォルトの名無しさん:2009/07/04(土) 13:11:22
「等価」であることに左辺値かどうかは関係ない。

825 :デフォルトの名無しさん:2009/07/04(土) 13:14:50
等価月憚

826 :811:2009/07/04(土) 13:27:19
>>813
提示していただいたこれは理解できます。
おもうに、ポインタにまどわされたのかもしれません。
p->next と書いたとき、next がオフセットを示している、というイメージが邪魔をしていたようです。
>>817, >>818, >>819
多分大丈夫だと思います。
クラステンプレートの例示コードで悩んでいました。
皆さんコメントありがとうございました。

827 :デフォルトの名無しさん:2009/07/04(土) 13:31:00
>>822
はい。多分p->next とかいたときに、next がオフセットを示唆しているという間違ったイメージが邪魔していたようです。
イメージを修正して読み直したところ、ちょっとだけですが理解できました。

828 :デフォルトの名無しさん:2009/07/09(木) 17:59:25
ttp://d.hatena.ne.jp/mscp/20081130/1228063408
このプログラム動かしてみたいんだけどよくわからんので誰か教えてください.

829 :デフォルトの名無しさん:2009/07/09(木) 18:27:09
どこがわからないのかを説明するべき

830 :デフォルトの名無しさん:2009/07/09(木) 18:39:32
>>828
君の知識の知識のレベルは?
つーかネタ?
本気で聞いてるとは思えないな。

831 :デフォルトの名無しさん:2009/07/09(木) 18:46:32
C++使ってOpenCVとかはある程度いじってるんだが
とりあえずinclude <vector>とかはしてみたいんだけど
vectorとかは認識されていない識別しとかになっちゃうんだよね

だから自分で定義しなきゃいけないんだろうけどどう定義すればいいのかがよくわからないです

832 :デフォルトの名無しさん:2009/07/09(木) 18:47:35
あ,↑828です

833 :デフォルトの名無しさん:2009/07/09(木) 19:04:17
うーんと、つまりOpenCVライブラリはともかく
標準C++の知識は0に近いって事?

・・・でもなんかこのリンク、
C++の知識の問題じゃなくて
画像処理の知識の問題な気がしてきた。


834 :デフォルトの名無しさん:2009/07/09(木) 19:13:21
>>831
たぶんネームスペースなんだろうな。
using namespace std;と最初に書いてみるとか。

835 :828:2009/07/09(木) 19:27:27
using namespace stdはかいてみましたがそれだけではだめでした.
いろいろとグローバル変数とか構造体が定義されていそうなのですが
それぞれがどんなかんじの意味なのかがよくわかりません

836 :デフォルトの名無しさん:2009/07/09(木) 19:57:22
元ネタのPoisson image editingとやらは動かせてんのか?
クラスとかはそっちのソースで定義されてんだろ

837 :デフォルトの名無しさん:2009/07/09(木) 19:59:41
エラーメッセージのコピペもできないこんなレベルじゃ

838 :828:2009/07/09(木) 20:43:36
元ネタのPoissonImageEditingは論文形式ではあるのですが
プログラムとしてはないと思うんですがあるのでしょうか?
ないと思ったから困っているのですが.

エラーとしてはこんなかんじのが出てました.
1>PoissonEdit.cpp
poissonedit.cpp(18) : error C2065: 'pixel' : 定義されていない識別子です。
poissonedit.cpp(18) : error C2059: 構文エラー : '>'
poissonedit.cpp(19) : error C2143: 構文エラー : ';' が '{' の前にありません。
poissonedit.cpp(26) : error C2059: 構文エラー : '>'
poissonedit.cpp(26) : error C2059: 構文エラー : ')'
poissonedit.cpp(27) : error C2065: 'iter2' : 定義されていない識別子です。
poissonedit.cpp(27) : error C2227: '->y' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
1> 型は ''unknown-type'' です。
poissonedit.cpp(27) : error C2143: 構文エラー : ',' が ')' の前にありません。
poissonedit.cpp(29) : error C2059: 構文エラー : '>'
poissonedit.cpp(29) : error C2059: 構文エラー : ')'
poissonedit.cpp(30) : error C2065: 'pix' : 定義されていない識別子です。
poissonedit.cpp(30) : error C2228: '.y' の左側はクラス、構造体、共用体でなければなりません
1> 型は ''unknown-type'' です。
poissonedit.cpp(30) : error C2227: '->y' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
1> 型は ''unknown-type'' です。
poissonedit.cpp(34) : error C2228: '.y' の左側はクラス、構造体、共用体でなければなりません
1> 型は ''unknown-type'' です。
poissonedit.cpp(34) : error C2143: 構文エラー : ',' が ')' の前にありません。
poissonedit.cpp(37) : error C2228: '.y' の左側はクラス、構造体、共用体でなければなりません
1> 型は ''unknown-type'' です。
oissonedit.cpp(45) : error C2143: 構文エラー : ';' が '}' の前にありません。
poissonedit.cpp(45) : fatal error C1004: 予期せぬ EOF が検出されました。

839 :デフォルトの名無しさん:2009/07/09(木) 20:59:30
>>838
だからpixelっていうクラスだか構造体が定義されてるソース持ってこいよ
それを見せずにおれたちに何を求めてるんだよwww

840 :デフォルトの名無しさん:2009/07/09(木) 22:06:10
>>839
いわゆる、ほら、、
 えすぱぁ
ってやつじゃないかな?

841 :デフォルトの名無しさん:2009/07/09(木) 22:16:54
まずはC++のコンパイラを用意するんだ!

842 :デフォルトの名無しさん:2009/07/09(木) 23:07:48
C++コンパイラにかけているように見える

843 :デフォルトの名無しさん:2009/07/09(木) 23:15:30
STLが使えないのかそもそも自分でヘッダファイルを作ってインクルードする方法を知らないのか

844 :デフォルトの名無しさん:2009/07/09(木) 23:21:01
>元ネタのPoissonImageEditingは論文形式ではあるのですが
>プログラムとしてはないと思うんですがあるのでしょうか?
>ないと思ったから困っているのですが.

ええと、俺がバカなのか?
意味がわからんのだが
誰か日本語に翻訳してくれるひといない?

845 :デフォルトの名無しさん:2009/07/09(木) 23:26:16
PoissonImageEditingの手法についての論文はあった
が、ソースコードは見つからない、だから俺は困ってる

俺の翻訳結果

846 :デフォルトの名無しさん:2009/07/09(木) 23:26:22
>>844
元(もと)ネタ(ねた)のPoissonImageEditing(ぽわそんいめーじえでぃてぃんぐ)は論文形式(ろんぶんけいしき)ではあるのですが
プログラム(ぷろぐらむ)としてはないと思(おも)うんですがあるのでしょうか?
ないと思(おも)ったから困(こま)っているのですが.

847 :デフォルトの名無しさん:2009/07/09(木) 23:29:05
この程度の日本語なら超エスパーできないと
顧客からヒアリングなどほとんど無理。

848 :デフォルトの名無しさん:2009/07/09(木) 23:30:06
>>844は日本語ネイティブじゃないんでしょ。

849 :デフォルトの名無しさん:2009/07/09(木) 23:33:34
>>848
お前もなw

850 :デフォルトの名無しさん:2009/07/09(木) 23:58:08
質問なんですが、C++のswitch文って中で計算は可能なのでしょうか?

switch{
d = a + b;
case 〜〜〜
  break;

みたいに
分かりづらくてすみません
無知なもので・・・(泣)

851 :デフォルトの名無しさん:2009/07/09(木) 23:59:42
>>844
どこが分からないのか言えとさんざんこのスレで言われてるでしょ。

852 :デフォルトの名無しさん:2009/07/10(金) 00:01:44
>>850
switch(a+b) {
case 〜〜〜
break;

switch(〜) {
case 〜〜〜
d = a+b;
break;

どっちかだと思うけど、どっちも計算できるよ

853 :デフォルトの名無しさん:2009/07/10(金) 00:02:30
>>852
そんなこと聞いてない

854 :デフォルトの名無しさん:2009/07/10(金) 00:03:57
>>852
ありがとうございます
やってみます

855 :デフォルトの名無しさん:2009/07/10(金) 07:04:38
>>851

w

856 :デフォルトの名無しさん:2009/07/10(金) 11:08:21
Quick BasicのSELECT CASE文はCASE文に条件式が書けたけど
C++のswitch case文ではcase文にかけるのは(整数の)定数式のみ。

857 :デフォルトの名無しさん:2009/07/10(金) 12:57:24
case文に条件式書く状況が俺の拙い想像力じゃ思いつかない

858 :デフォルトの名無しさん:2009/07/10(金) 13:08:32
かなり作為的だけど…

SELECT A
CASE A>3
CASE A MOD 2 = 0
CASE CHAR$( A ) = "A"

こんな感じ。
変数Aが3より大きいとき、Aが偶数の時、Aを文字コードで考えてそれが文字”A”に該当するとき…
みたいに、おおよそ関連性のない条件で分岐できたりする。
まぁ、わざわざこんなことしなくてもどうとでもなるけど。

859 :デフォルトの名無しさん:2009/07/10(金) 14:17:07
そういうのって普通 if で書くと思うんだけど

860 :デフォルトの名無しさん:2009/07/10(金) 14:30:00
さぁ?それはVB使いなりQB使いなりに聞いてくれ。
そこまでは知らん。>>856>>850への回答ってだけだから。
好きにすればいい。

861 :デフォルトの名無しさん:2009/07/10(金) 15:51:51
>>839
それがそのサイトやリンク先に見つからないから困ってるんです

862 :797:2009/07/10(金) 16:49:03
// pixel.h
//このヘッダを作って、includeして、ちょこちょこすればOKです
#include <vector>
struct pixel;
struct pixel
{
float x, y;
std::vector< pixel* > neighbors;
};
inline void init_pixels( std::vector< pixel* >& pixels, unsigned int width, unsigned int height )
{
pixels.reserve( width * height );
for( unsigned int i = 0; i < width * height; ++i )
pixels.push_back( new pixel() );
for( unsigned int y = 0; y < height; ++y )
{
for( unsigned int x = 0; x < width; ++x )
{
pixel* up = y > 0 ? pixels[ (y-1)*width + x ] : pixels[ (height-1)*width + x ];
pixel* down = y < (height-1) ? pixels[ (y+1)*width + x ] : pixels[ 0*width + x ];
pixel* left = x > 0 ? pixels[ y*width + (x-1) ] : pixels[ y*width + (width-1) ];
pixel* right = x < (width-1) ? pixels[ y*width + (x+1) ] : pixels[ y*width + 0 ];
pixel* center = pixels[ y*width + x ];
center->x = x;
center->y = y;
center->neighbors.push_back(up);
center->neighbors.push_back(down);
center->neighbors.push_back(left);
center->neighbors.push_back(right);
}
}
}

863 :デフォルトの名無しさん:2009/07/10(金) 16:54:35
サイトの人に聞け。

864 :デフォルトの名無しさん:2009/07/11(土) 00:51:21
>>859
一応、どれか1つを実行するという意図が一目で分かるというメリットがある
else ifの連鎖だと、else ifなのか単にif文が並んでいるだけなのか
注意深く確認する必要がある


865 :デフォルトの名無しさん:2009/07/11(土) 01:19:33
多態でおk

866 :デフォルトの名無しさん:2009/07/11(土) 10:45:11
そこで{}elifですよ

867 :デフォルトの名無しさん:2009/07/11(土) 11:22:29
クラスのメンバ関数ポインタをメンバにした場合、インスタンスから呼出すにはどうかけばよいでしょうか。

class A {
public:
void (A::*pFunc)();
}

int main() {
A a;
a.*pFunc();
}

だと、pFuncが宣言されていないというエラーがでます(gcc4.0)。
ご教授おねがいします。

868 :デフォルトの名無しさん:2009/07/11(土) 11:27:14
(a.*pFunc)()


869 :デフォルトの名無しさん:2009/07/11(土) 11:35:07
やってみたけど動かん。

A a;
void (A::*p) = a.pFunc;
(a.*pFunc)();

はコンパイルできるが。


870 :デフォルトの名無しさん:2009/07/11(土) 11:39:00
class A {
public:
void (*pFunc)();
}

int main() {
A a;
a.pFunc();
}


871 :デフォルトの名無しさん:2009/07/11(土) 11:45:52
それはありえん。

872 :デフォルトの名無しさん:2009/07/11(土) 11:47:42
「a.pFunc」がメンバ関数ポインタなんだから、それを呼び出すのはこう

int main() {
A a;
(a.*(a.pFunc))();
}

873 :デフォルトの名無しさん:2009/07/11(土) 11:49:32
(a.*(a.pFunc))();

と書いたら行けた。
こんな冗長だったっけ。

874 :デフォルトの名無しさん:2009/07/11(土) 12:14:53
メンバ関数ポインタを持ってるAインスタンスと、
それを通じてメンバ関数を呼び出されるAインスタンスには関係がないから
むしろそう書けないと困る

875 :デフォルトの名無しさん:2009/07/11(土) 13:06:54
>>874
なるほど。それで理解できた

#include <iostream>

class A {
public:
char *m_id;
void (A::*m_pfunc)();
A(char *id, void (A::*pfunc)()) : m_id(id), m_pfunc(pfunc) {}
void foo() { std::cout << m_id << " do foo\n"; }
void bar() { std::cout << m_id << " do bar\n"; }
};

int main() {
A a("Alex", &A::foo), b("Brian", &A::bar);
(a.*a.m_pfunc)(); // Alex do foo
(a.*b.m_pfunc)(); // Alex do bar
(b.*a.m_pfunc)(); // Brian do foo
(b.*b.m_pfunc)(); // Brian do bar
}

876 :デフォルトの名無しさん:2009/07/11(土) 21:20:11
質問ですが、IDとパスワードでログインして、
特定の文字列を抽出するプログラムってどうやって作りますか?

ヒントでもいいので教えていただければうれしいです。。

プログラムは全くの初心者ですが。



877 :デフォルトの名無しさん:2009/07/11(土) 21:21:57
何にログインするのかとか、抽出元の文字列はどこから来るのかとか、
元々の前提条件の情報が全然足りませんが・・・。

878 :デフォルトの名無しさん:2009/07/11(土) 21:32:06
>>876
> IDとパスワードでログインして、
> 特定の文字列を抽出するプログラムってどうやって作りますか?

プログラミングの問題じゃなくてお前の頭がどうかしてるよ。
自分の質問を読み返して見たら?

879 :デフォルトの名無しさん:2009/07/11(土) 22:13:31
質問です。
タスクトレイにアイコンを表示する方法を調べています。
調べてみたら、Shell_NotifyIconという関数を
使用すればいけることが分かりました。
とりえず、コンパイルだけ通してみようと試しましたが、
うまくコンパイルが通りません。
どうすれば、コンパイルを通せるようになるでしょうか?

エラーメッセージが
error LNK2028: 未解決のトークン (0A00000F)
"extern "C" int __stdcall Shell_NotifyIcon・・・・で参照されました。

error LNK2019: 未解決の外部シンボル
"extern "C" int __stdcall Shell_NotifyIconW・・・・で参照されました

Shell_NotifyIconを使用している関数の中身は

NOTIFYICONDATA notif;
Shell_NotifyIcon(NIM_ADD, ¬if);

しか書いていません。

環境はVC++2008 Express Editionです。

よろしくお願いします。

880 :デフォルトの名無しさん:2009/07/11(土) 22:24:46
>>879
そこまで環境依存する話題は専用スレで頼む。どこがふさわしいか知らんけど…

【初心者歓迎】C/C++室 Ver.66【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1243440528/
★初心者にVisual C++を教えるスレ★ Part34
http://pc12.2ch.net/test/read.cgi/tech/1245382769/

881 :デフォルトの名無しさん:2009/07/11(土) 22:43:53
>>880
分かりました。
他のところで聞いてみます。

882 :デフォルトの名無しさん:2009/07/12(日) 10:15:49
Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
はamazonによると誤字脱字が酷いとか書いてあるけど、
第二版を買った方がいいですか?

883 :デフォルトの名無しさん:2009/07/12(日) 10:21:44
今さら第2版なんぞ買ったって役に立たん
つーか尼レビューなんか鵜呑みにするなアホ

884 :デフォルトの名無しさん:2009/07/12(日) 11:24:53
翻訳が酷いなら原書と照らし合わせて読めばいいじゃない。

885 :デフォルトの名無しさん:2009/07/12(日) 11:28:49
原書がさらさら読めるレベルなら
無理してまで読むような本じゃないよ。

第2版のころまではこの本を読まないと手に入らない知識があったけど
今はこの本があまりに有名になったせいで
この本に書いてあることは他の本にもたくさん引用されてる。
C++ Coding Standardsみたいに内容が丸かぶりの本もある。

886 :デフォルトの名無しさん:2009/07/12(日) 11:29:02
日本語は諦めて原著をさがしてダウンロードして読むことにします。

887 :デフォルトの名無しさん:2009/07/12(日) 11:52:22
>>882
いや、原著第3版で良かったよ。
日本語がオススメ。
英語力が相当ある人以外は脳内で翻訳することになるんだから
最初から日本語で読んだ方が良いと思うんだぜ。


888 :デフォルトの名無しさん:2009/07/12(日) 11:56:03
C言語の拡張・後継として開発された言語
 C with Classes
これが改名される時に
どうしてD言語じゃなくてC++になったの?


889 :デフォルトの名無しさん:2009/07/12(日) 11:58:36
P言語はPascalだろ↓

890 :888:2009/07/12(日) 12:03:06
>>889
とするとD言語はDelphiとか?そういうこと?

891 :デフォルトの名無しさん:2009/07/12(日) 12:30:37
ホームページでC++の必読ページってどこですか?

892 :デフォルトの名無しさん:2009/07/12(日) 12:31:58
google.com

893 :デフォルトの名無しさん:2009/07/12(日) 12:35:15
>>891
猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/
ロベールの部屋
ttp://www7b.biglobe.ne.jp/~robe/
C++ FAQ LITE
ttp://www.parashift.com/c++-faq-lite/
STLのページ
ttp://www.wakhok.ac.jp/~sumi/stl/index.html
C/C++ リファレンス
ttp://www.cppll.jp/cppreference/
C++ Labyrinth
ttp://www.fides.dti.ne.jp/~oka-t/cpp-labyrinth.html
C言語FAQ / C++言語FAQ【BohYoh.com】
ttp://www.bohyoh.com/CandCPP/FAQ/
人工言語世界 - kMonos.NET
ttp://www.kmonos.net/alang/




894 :デフォルトの名無しさん:2009/07/12(日) 13:56:31
C言語はCOBOL

895 :デフォルトの名無しさん:2009/07/12(日) 16:24:44
GNU Multi-Precision Library
ttp://ja.wikipedia.org/wiki/GNU_Multi-Precision_Library
これを使ってWindows XP+MinGWで作ったプログラムって、
他のパソコンのWindows XP上でも動くの?


896 :デフォルトの名無しさん:2009/07/12(日) 16:25:28
質問者のくせにタメ口の奴ってなんなの?

897 :デフォルトの名無しさん:2009/07/12(日) 16:27:35
回答者のくせに上から目線って何なの?

898 :895:2009/07/12(日) 16:31:17
>>896
お気に障りましたら申し訳ございません。
あなた様のお知恵をどうかお貸しください。


>>897
ちょww俺だと誤解されちゃうじゃないかwww

899 :デフォルトの名無しさん:2009/07/12(日) 16:34:39
いや、少なくともこういう>>896みたいなやつに限っては
口先だけだから敬語は不要だろ。

まぁたいしたお知恵もお持ちでないんだよ 。

例えば君の質問にも答えられないだろうね。


900 :デフォルトの名無しさん:2009/07/12(日) 16:42:54
なぜおまえが回答してあげな…いやいいんだ

901 :デフォルトの名無しさん:2009/07/12(日) 16:51:55
>>895
動く動く。もしかしたらDLLを連れて行かないといけないかもしれないけど。

902 :895:2009/07/12(日) 17:01:07
>>901
ありがとうございます。
アセンブラが混ざっているようで不安だったんです。


903 :デフォルトの名無しさん:2009/07/12(日) 17:05:33
>>902
そりゃ対応CPUが心配ならSSEとか一切使わないやつをビルドをすればいい。

904 :902:2009/07/12(日) 17:10:25
>>903
左様ですか。
良さそうなのでもうちょっと勉強してきます。


905 :デフォルトの名無しさん:2009/07/12(日) 17:11:43
>>896
回答者なら上から目線でもいいけど
回答者ですらないからなぁ。

906 :デフォルトの名無しさん:2009/07/12(日) 17:18:49
>>895
とえあえず実際にやってみて動くかどうか試しなよ

907 :デフォルトの名無しさん:2009/07/12(日) 18:22:51
2ch初心者なんだろうか。 >>896のことだよ?

908 :デフォルトの名無しさん:2009/07/12(日) 19:29:02
上級者気取りなんだろうか?>>907のことだよ。

909 :デフォルトの名無しさん:2009/07/12(日) 19:30:09
え?ごめん何が何だか分からない。
まあ分かる必要はないか。

910 :デフォルトの名無しさん:2009/07/12(日) 19:57:25
わからないくせに上級者気取り(・∀・)クスクス

911 :909:2009/07/12(日) 20:13:07
>>910
俺は今日初の書き込みだけど?
何カンチガイして( ',_ゝ`) ぷっ

912 :デフォルトの名無しさん:2009/07/12(日) 20:48:20
WinPCap使ってパケットキャプチャーソフト作ろうかなーなんておもってたらサンプルむつかしくて泣いた
なんか適当に関数呼び出すだけでパケットの情報が返ってくるとおもってたのに…
何かすっごく分かりやすく解説してあるサイトないかなー

913 :デフォルトの名無しさん:2009/07/12(日) 21:01:27
WinSock2ならrawパケットつかえるはず

914 :デフォルトの名無しさん:2009/07/12(日) 21:06:28
rawパケットとパケットキャプチャってどう関係してるんだ?

915 :デフォルトの名無しさん:2009/07/12(日) 21:19:26
えっ

916 :デフォルトの名無しさん:2009/07/12(日) 21:47:59
>>913
なんかwinsock2を調べたら例でWinPCapを前提にしてるようなページが出てきたんだけど…
winsock2のほうが簡単なの?

917 :デフォルトの名無しさん:2009/07/12(日) 21:54:03
>>913の言ってるrawパケットってTCPとかのプロトコル部分を
省略したり自分で組み立てられるみたいな話だろ?

918 :デフォルトの名無しさん:2009/07/12(日) 22:21:11
>>911
顔真っ赤にしてどうしました?(・∀・)

919 :デフォルトの名無しさん:2009/07/12(日) 22:36:40
>>918
え?
もちろん鏡見ながらの言葉のですよね?


920 :デフォルトの名無しさん:2009/07/12(日) 22:41:31
>>919
お早い反応ですね^^

921 :デフォルトの名無しさん:2009/07/12(日) 22:45:11
>>918
ここで仕事の鬱憤を晴らすのやめてくれない?

922 :デフォルトの名無しさん:2009/07/12(日) 22:51:08
>>921
まあアンカ付けてるから勘弁してやろうぜ。
まとめてあぼんできるしさ。

923 :デフォルトの名無しさん:2009/07/12(日) 22:54:04
C++ code - 32 lines - codepad
ttp://codepad.org/onXi8fpr
ここにあるMyIntクラスを改良して
intからMyIntへの暗黙の変換
(変換元のint型の値を変換先のMyIntのメンバmem_intで持つ形)
が出来るようにしたいと思っています。

ただしMyIntクラスの定義自身には手を加えられない状況です。

私としては
キャスト演算子の定義を追加できないかと思っているのですが、
メンバ変数としてでない方法でキャスト演算子は定義出来ますか?

924 :923:2009/07/12(日) 23:08:38
つまり本来なら
intを受け取るexplicitでないMyIntのコンストラクタを
定義するべきなのでしょうが、
MyIntクラスの定義自身には手を加えられない
状況のため、仕方なく外部の関数(inline指定予定)で定義しよう
と思っています。

どうにかなりませんでしょうか?

925 :デフォルトの名無しさん:2009/07/12(日) 23:11:58
>>921
ageてまで言いたいことなのか?

926 :923:2009/07/12(日) 23:44:47
すみません、不可能そうなので
doubleを受け取るコンストラクタを利用できる様に条件を緩和して
この様に変更します。
C++ code - 37 lines - codepad
ttp://codepad.org/kUOrRFU5


927 :デフォルトの名無しさん:2009/07/13(月) 00:25:53
struct MyIntStruct {
  int mem_int;
};
int main() {
  MyInt hoge;
  MyIntStruct* mis = (MyIntStruct*) &hoge;
  mis->mem_int = 10;
  std::cout << hoge;
  return 0;
}

928 :デフォルトの名無しさん:2009/07/13(月) 01:40:58
MyInt::MyInt(int val) : mem_int(val) {}

929 :デフォルトの名無しさん:2009/07/13(月) 12:24:18
C++でアドレスを返すにはどうすればいいのでしょうか?
今自分が書いてるソースコードをようやくすると

void MyClass::main()
{
KOUZOUTAI* pUketori;

getAddress(pUketori);
}

void MyClass::getAddress(KOUZOUTAI* pKaesu)
{
pKaesu = m_pHairetu + 10; // メンバ変数配列の要素11個目のアドレスのつもり
}

自分はメンバの配列変数の要素が入っているアドレスを渡す関数を作りたいのですが、
mainに戻ってくると正常な値が入っていません。
メンバの配列変数自体は実体をnewで確保してあります。
もしも内容を返すのであれば
*pKaesu = *(m_pHairetu + 10);だと思うので、
pKaesu = m_pHairetu + 10;
だとmain関数のpUketoriポインタが該当配列のアドレスを指してくれると思ったのですが
違うのでしょうか?

930 :デフォルトの名無しさん:2009/07/13(月) 12:32:21
もうね、何度もいうけど、ポインタっていうのは単なる変数なのよ。
入っている物が、整数でもなく、倍精度実数値でもなく、
単に「ポインタ値」と呼ばれる型情報つきのアドレス値に過ぎないのよ。
いい? それを頭にいれて次の関数を考えてみてね。

void foo( int x ) { x = 1; }

int main() {
int a;
foo( a );
cout << a << endl;
}

これで、表示されるaの中身が1になると思う?
・・・思わないよね。
引数として与えられた変数の中身をいじりたいなら「参照わたし」これ。

931 :デフォルトの名無しさん:2009/07/13(月) 12:32:56
>>929
こんな感じにソースコードを書いたんですが、mainに戻ってくると正常な値が入っていません。
どうしてでしょうか?
void getFive(int num)
{
num = 5;
}
int main()
{
int n;
getFive(n);
return 0;
}

932 :931:2009/07/13(月) 12:33:38
ああ神!聖なる糞!

933 :デフォルトの名無しさん:2009/07/13(月) 12:34:31
つまり

void foo( int &x )

でなければならないわね。
したがって、ポインタの場合も同様で、

void foo( int *&x )

でなければならないのは自明でしょ?

934 :931:2009/07/13(月) 12:35:37
>>933
ネタがまるかぶりして申し訳ないところだが、その場合は参照渡しではなく、アドレス渡しの方がよいと思う。

935 :デフォルトの名無しさん:2009/07/13(月) 12:39:32
良い悪いの議論をするなら
引数を変更する方式よりも、値を返す方式にしたほうがいいと思う。
いつもそうだってわけじゃないけど。

936 :デフォルトの名無しさん:2009/07/13(月) 12:41:06
>>934
確かに。
・・・でもまぁ、このレベルのミスをしている初心者に
ダブルポインタはかわいそうかな・・・みたいなw

937 :デフォルトの名無しさん:2009/07/13(月) 12:43:20
>>935
ん。そですね。

938 :929:2009/07/13(月) 14:36:47
ありがとうございます。確かに言われて見ればおかしな事をしていたと思います。
ダブルポインタを使うならこういう修正でいいのでしょうか?
void MyClass::main()
{
KOUZOUTAI** pUketori;

getAddress(pUketori);
}

void MyClass::getAddress(KOUZOUTAI** pKaesu)
{
*pKaesu = m_pHairetu + 10; // メンバ変数配列の要素11個目のアドレスのつもり
}

939 :デフォルトの名無しさん:2009/07/13(月) 14:58:01
>>938
それはだめ。初期化されていないpUketoriの値を関数に渡しており、その内部でデリファレンス(参照はがし)している。
これは
int* p;
*p = 30;
というコードと同じくらいダメ。
というか、意味も分からずダブルポインタを適当に使ってみても無理。
ちゃんと解説すると少し時間かかるから今から書くけど、その間に他の人に先を越されそうだ。

940 :デフォルトの名無しさん:2009/07/13(月) 15:09:38
書けた。

基本的に、「《ある変数》を関数に渡して、関数の内部でその変数の値を変更したい」場合、
関数の引数は《ある変数》を指すポインタ型として、呼び出し元からは《ある変数》のアドレスを渡す。
(ポインタではなく参照を使うのもいいが、まあその話は置いておく。)

例えば、整数を受け取ってその値を変更するような関数を書く場合は
void five(int* num)
{
*num = 5;
}
として、これを呼び出すときは
int n;
five(&n);
のように使う。これくらいの例は見たことがあると思うが、この場合《ある変数》というのは
int型のnという変数だ。だから関数の引数の型はintを指すポインタ型、つまりint*型であり、
関数に渡すのは &n である。

>>929の例では、《ある変数》に該当するのが、KOUZOUTAI*型のpUketoriという変数だ。
関数の引数 pKaesu の型は、《ある変数》を指すポインタだから、KOUZOUTAI*を指すポインタ、つまりKOUZOUTAI**型にすればよい。(だからダブルポインタが出てくるんだよ。)
関数の内部では *pKaesu の値を設定する。
で、呼び出し元から関数に渡すのは、《ある変数》のアドレス、つまり &pUketori だ。
pUketori の型はKOUZOUTAI*のままでよい。

こういう理屈を分かってないと行き詰まる。

941 :デフォルトの名無しさん:2009/07/13(月) 16:39:32
沖林正紀先生の出番ですね

942 :デフォルトの名無しさん:2009/07/13(月) 21:50:59
列挙型に定数がいくつ定義されているか知る方法って
実際に数える以外にありますか?

943 :デフォルトの名無しさん:2009/07/13(月) 21:52:24
ケツに終端用の定数を加える

944 :デフォルトの名無しさん:2009/07/13(月) 22:11:12
>>942
>>943の方法がとても便利で良いと思うよ。

945 :デフォルトの名無しさん:2009/07/13(月) 22:20:28
こういうことですね
enum hoge{A,B,C,hoge_count};

ありがとうございます!

946 :デフォルトの名無しさん:2009/07/13(月) 22:45:41
sizeof(hoge)

947 :デフォルトの名無しさん:2009/07/13(月) 22:47:46
>>946
それでも行けるの?

948 :デフォルトの名無しさん:2009/07/13(月) 22:55:31
hogeの要素数でなくサイズだからsizeof(int)とかになる

949 :デフォルトの名無しさん:2009/07/13(月) 22:57:25
>>947
_

950 :デフォルトの名無しさん:2009/07/13(月) 23:03:16
>>945
値指定しない前提だけどな

951 :デフォルトの名無しさん:2009/07/14(火) 03:28:36
まったく同じ条件でコンパイルした時オーバーフローするときとしない時があるのは何でなんだぜ?

952 :デフォルトの名無しさん:2009/07/14(火) 03:36:56
>>951
もう少し詳しく書いてみようか。
・どんなコードを書いた?(可能ならコンパイルできる完全なコードを)
・具体的に、どんな風に実行したら、どのようにオーバーフローした?
・そもそも何がオーバーフローしてるの?(普通は整数変数の値かな……それ以外のオーバーフローもあるよ)

953 :デフォルトの名無しさん:2009/07/14(火) 03:38:36
>>951
スレ違い。↓こっち行け。
http://pc12.2ch.net/test/read.cgi/tech/1187922645/

954 :デフォルトの名無しさん:2009/07/14(火) 04:02:02
不完全な質問をされるよりも、レスをスルーされるほうが遥かにむかつくのは俺だけ?

955 :デフォルトの名無しさん:2009/07/14(火) 04:08:05
おまえは甘やかされて育ったんだろうな

956 :929:2009/07/14(火) 13:12:38
>>940
丁寧な解説ありがとうございます。
書き込み内容を参考に勉強します。

957 :デフォルトの名無しさん:2009/07/14(火) 19:53:38
C:\aa>bcc32 hello.cpp
Borland C++ 5.5.1 for Win32 Copyright (
hello.cpp:
Error E2209 hello.cpp 2: Unable to open
Error E2282 hello.cpp 3: Namespace name
Error E2451 hello.cpp 7: Undefined symb
Error E2451 hello.cpp 7: Undefined symb
*** 4 errors in Compile ***

958 :デフォルトの名無しさん:2009/07/14(火) 21:19:33
>>957
無駄なスレ汚しは止めろ。
何なんだよ?

959 :958:2009/07/14(火) 21:20:42
>>957
と思ったらマルチポストか。
消えろヴォケ。

960 :デフォルトの名無しさん:2009/07/14(火) 23:11:59
俺の出番だな。

>>957
別のスレに回答しておいた。

961 :デフォルトの名無しさん:2009/07/15(水) 00:10:12
a

962 :デフォルトの名無しさん:2009/07/15(水) 02:24:10
同名のローカル・グローバル変数や関数が無いにもかかわらず、デフォではメンバを見に行かないのはどういう状況か見当つく人います?
スコープ系のディレクティブでも仕込んであるのかしら。それともC++03だとメンバアクセスにはthis必須に?

963 :デフォルトの名無しさん:2009/07/15(水) 02:32:01
具体的なコードも書かずにエスパーしろとな

964 :デフォルトの名無しさん:2009/07/15(水) 03:04:57
メンバを使おうとしている場所がstatic関数の中だから

965 :デフォルトの名無しさん:2009/07/15(水) 15:00:46
すばらしいエスパーだな

966 :デフォルトの名無しさん:2009/07/15(水) 18:31:04
いや、テンプレートクラスで継承元のメンバを使おうとしているんだろう

967 :デフォルトの名無しさん:2009/07/15(水) 18:35:22
それらしい用語を並べてるけど微妙にずれてるからなあ

968 :デフォルトの名無しさん:2009/07/16(木) 00:03:10
"r"が抜けてるぞ

969 :デフォルトの名無しさん:2009/07/16(木) 00:26:50
template<typename T>
struct Hoge{ 〜 };

こういうクラスで「TがクラスPiyoを継承していたらT=Piyoにする」という風に書きたいんですが、
できるだけクラスや、テンプレート引数を変えずにするにはどんな方法が良いですか?

970 :デフォルトの名無しさん:2009/07/16(木) 00:33:37
亀レスで申し訳ない。
>962-964
いや、すまん。知ってたらでよかったんだ。手元にコードないしね。
確認してきたけど、変数も関数もstaticではなかったよ。
汚くて申し訳ないけど、構造としてはこんな感じ。
---------------------------------------------------------------------------
namespace AAA { char val[] = "表示される";}
namespace BBB {
 using namespace AAA;
 class CLASS { char val[] = "表示されない"; void func(); };
 void CLASS::func() { std::cout << val; }
}
---------------------------------------------------------------------------
実行結果は「表示される」。ちなみにnamespace AAAとBBBは別ファイル。コンパイラはGCC4.1

971 :デフォルトの名無しさん:2009/07/16(木) 00:42:36
>966
あーそれか。テンプレートクラス継承してたような気がする。
ありがとう。

>967
ごめんなさい。勉強はしてるけど片手間だから一向に身に付かん。

972 :デフォルトの名無しさん:2009/07/16(木) 01:26:44
> char val[] = "表示されない";
ここの部分、コンパイル通るのか??

973 :デフォルトの名無しさん:2009/07/16(木) 01:50:44
どういうこと?

974 :デフォルトの名無しさん:2009/07/16(木) 05:17:22
>>972
その書き方を、まさかしらない?

975 :デフォルトの名無しさん:2009/07/16(木) 12:51:06
非staticメンバってそんな風に初期化できたっけ。

976 :デフォルトの名無しさん:2009/07/16(木) 13:59:10
無理。クラス定義内で初期化できるのは static const int のみ。
コンパイラ独自拡張は知らんけど。

977 :デフォルトの名無しさん:2009/07/16(木) 15:06:37
C++0xではできたような

978 :974:2009/07/16(木) 17:05:18
ああホントだ、ろくに読んでなかった。
"表示される"と"表示されない"があるのか。
以後読まずに適当にレスしないように気をつけるわ。


979 :デフォルトの名無しさん:2009/07/16(木) 22:21:38
誰か、これの危険度について相談に乗ってくれ

struct A;

std::vector<A*> v;
std::vector<const A*>& w = reinterpret_cast<std::vector<const A*>&>(v);

裏で危険な特殊化とかやられていると嫌だけど、やっちまいたい衝動に駆られるのだが・・・。

980 :デフォルトの名無しさん:2009/07/16(木) 22:30:32
(v)は(&v)でないと…

981 :デフォルトの名無しさん:2009/07/16(木) 22:54:02
MyClassを作ったとして、その実装次第では
MyClass::operator=(const MyClass&)
で自己代入チェックが必要になります。

しかし、MyClassのコピーコンストラクタでは
代入演算子でいうところの自己代入は起こりえませんよね?
心配しなくても大丈夫でしょうか?


982 :デフォルトの名無しさん:2009/07/16(木) 23:11:57
心配しなくても大丈夫です。

983 :デフォルトの名無しさん:2009/07/16(木) 23:34:42
コピーコンストラクタはインスタンスを生成する処理だから処理を抜けるまで
インスタンスは存在していない。だから引数に自分のインスタンスが渡されることは
ありえない。よって自己代入は起こりえない。

984 :デフォルトの名無しさん:2009/07/17(金) 00:02:39
>>978
"表示される"だけなら大丈夫なの?

985 :デフォルトの名無しさん:2009/07/17(金) 00:04:34
>>984
「表示される」の方はclass内じゃないだろ。

986 :デフォルトの名無しさん:2009/07/17(金) 00:15:17
ああ、>>978は"表示されない"自体に気づかなかったのか
スレ汚しすまんかった

987 :デフォルトの名無しさん:2009/07/17(金) 06:28:18
>>979
やっちゃいけないと判ってるのに他に何か考慮すべき事があるのか?

988 :デフォルトの名無しさん:2009/07/17(金) 06:47:20
学年に一人は居るよね
火災警報ボタン押しちゃう奴

989 :981:2009/07/17(金) 09:12:30
>>982-983
ありがとうございます!!


990 :デフォルトの名無しさん:2009/07/17(金) 12:00:23
>>979
なんでそんなことしたいのかが分からないんだけど、
const_iterator では不足?

991 :デフォルトの名無しさん:2009/07/17(金) 23:40:21
>>979 危惧しているとおりやばいのでやらないほうがいい。
boostってライブラリを使うと簡単にイテレータを作れるから、それでconst A*を返すイテレータを作るのはどうかな?
#include <vector>
#include <boost/iterator/iterator_adaptor.hpp>
class A
{
public:
void test(){}
void testConst()const{}
};
typedef std::vector<A*> VectorA;
class iteratorX :public boost::iterator_adaptor<iteratorX,VectorA::iterator,const A*,boost::use_default,const A*>
{
public:
iteratorX(const VectorA::iterator& aIter):boost::iterator_adaptor<iteratorX,VectorA::iterator,const A*,boost::use_default,const A*>(aIter){}
A* dereference()const{return *base_reference();}
};
int _tmain(int argc, _TCHAR* argv[])
{
VectorA VA;
(*VA.begin())->test(); //エラーにならない。
iteratorX IX=VA.begin();
(*IX)->testConst(); //エラーにならない。
(*IX)->test(); //エラーになる。
VectorA::const_iterator aa=VA.begin();
(*aa)->test(); //エラーにならない。
return 0;
}

992 :デフォルトの名無しさん:2009/07/18(土) 00:02:22
javaジェネリクスのextendsみたいなことをテンプレートでやりたいんですが、やり方ってありますか?




993 :デフォルトの名無しさん:2009/07/18(土) 00:35:09
>>992
type_traitsをenable_ifもしくはBOOST_STATIC_ASSERTと組み合わせる。

次期改訂のC++0xで、ずばりこういう用途(にも使える)、コンセプトって機能を入れようという話もあったが、
どうやら無くなるらしく、C++0xスレはやや葬式ムード。

994 :デフォルトの名無しさん:2009/07/18(土) 02:18:27
初学者なんですが、テンプレートで躓いています。
ソースと発生するwaning/error は次のとおりです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9776.txt
アドバイスがあればよろしくお願い致します。

995 :デフォルトの名無しさん:2009/07/18(土) 02:25:13
>>994
こんな感じに直すんだ。
template <class U>
friend ostream &operator<<(ostream &stream, coord<U> ob);
template <class U>
friend istream &operator>>(istream &stream, coord<U> &ob);


template <class T>
ostream &operator<<(ostream &stream, coord<T> ob)
template <class T>
ostream &operator>>(ostream &stream, coord<T> &ob)
(friend宣言のほうに合わせてTをUにしても構わない)

996 :995:2009/07/18(土) 02:26:40
続きです。フレンド関数はクラスではないからと、つぎのようにしてもコンパイラから警告がでます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9778.txt
なにとぞアドバイスいただきたくお願い致します。

997 :994:2009/07/18(土) 02:41:52
>>995
アドバイスありがとうございます。でもまだwarning/errorがとれません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9780.txt
アドバイスがあればよろしくお願い致します。

998 :デフォルトの名無しさん:2009/07/18(土) 02:50:24
>>997
やっぱり>>995の両者、宣言と定義でテンプレート引数の名前を統一しないとダメそうだな。
VC++ 9とg++ 3.4.4 (Cygwin)では異なっていてもエラーにならなかったんだけど。

999 :デフォルトの名無しさん:2009/07/18(土) 02:56:47
>>997
&がない。
istreamがostreamになってる。

1000 :デフォルトの名無しさん:2009/07/18(土) 03:06:09
C++相談室 part71
http://pc12.2ch.net/test/read.cgi/tech/1247853298/

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

230 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)