■過去ログ置き場に戻る■ 1- 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室 part36
1 名前:v(^・^)v :04/09/28 02:02:26
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。

過去スレ、関連スレ、関連リンクなどは >>2-20 あたり

2 名前:v(^・^)v :04/09/28 02:03:12
1 http://mimizun.mine.nu:81/2chlog/tech/piza.2ch.net/tech/kako/980/980175292.html
2 http://pc.2ch.net/tech/kako/996/996640937.html
3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
14 http://pc5.2ch.net/tech/kako/1041/10413/1041328679.html
15 http://pc5.2ch.net/tech/kako/1043/10436/1043605481.html

3 名前:v(^・^)v :04/09/28 02:04:05
16 http://pc5.2ch.net/tech/kako/1045/10457/1045746245.html
17 http://pc5.2ch.net/tech/kako/1047/10475/1047560042.html
18 http://pc5.2ch.net/tech/kako/1050/10501/1050177746.html
19 http://pc5.2ch.net/tech/kako/1052/10526/1052625846.html
20 http://pc5.2ch.net/tech/kako/1055/10551/1055162298.html
21 http://pc5.2ch.net/tech/kako/1057/10575/1057580107.html
22 http://pc5.2ch.net/tech/kako/1060/10603/1060361082.html
23 http://pc5.2ch.net/tech/kako/1062/10626/1062690663.html
24 http://pc5.2ch.net/tech/kako/1066/10665/1066546387.html
25 http://pc5.2ch.net/tech/kako/1067/10679/1067949669.html
26 http://pc5.2ch.net/test/read.cgi/tech/1070164402/ (迷子)
27 http://pc5.2ch.net/test/read.cgi/tech/1074454641/ (迷子)
28 http://pc5.2ch.net/test/read.cgi/tech/1077985164/
29 http://pc5.2ch.net/test/read.cgi/tech/1082047479/
30 http://pc5.2ch.net/test/read.cgi/tech/1084030770/
31 http://pc5.2ch.net/test/read.cgi/tech/1086185282/
32 http://pc5.2ch.net/test/read.cgi/tech/1088236078/
33 http://pc5.2ch.net/test/read.cgi/tech/1090180012/
34 http://pc5.2ch.net/test/read.cgi/tech/1092018643/
35 http://pc5.2ch.net/test/read.cgi/tech/1093958200/

4 名前:デフォルトの名無しさん :04/09/28 02:04:30
4様

5 名前:v(^・^)v :04/09/28 02:04:31
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****

[禿 Stroustrup]
 http://www.research.att.com/~bs/
[C++ International Standard]
 http://www.kuzbass.ru/docs/isocpp/
 http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
 http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38110&ICS1=35&ICS2=60&ICS3=
[JTC1/SC22/WG21 - C++]
 http://www.open-std.org/jtc1/sc22/wg21

[C/C++ Users Journal]
 http://www.cuj.com/
[cppll (ML)]
 http://www.trickpalace.net/cppll/ (日本語)

6 名前:v(^・^)v :04/09/28 02:06:18
■Books■
amazon.com C,C++関連書籍
 http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/

The C++ Programming Language
 http://www.amazon.com/exec/obidos/ASIN/0201700735/
 http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
 http://www.amazon.com/exec/obidos/ASIN/0201824701/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
 http://www.amazon.com/exec/obidos/ASIN/0201379260/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
 http://www.amazon.com/exec/obidos/ASIN/0201924889/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
 http://www.amazon.com/exec/obidos/ASIN/020163371X/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/0201615622/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/020170434X/
Exceptional C++ Style
 http://www.amazon.com/exec/obidos/ASIN/0201760428/

7 名前:v(^・^)v :04/09/28 02:06:57
■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/

8 名前:v(^・^)v :04/09/28 02:34:12
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/boost/
[STL]
 STLport http://www.stlport.org/
 SGI-STL http://www.sgi.com/tech/stl/
 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://www.moderncppdesign.com/
 LokiPort-MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
[他]
 ACE http://www.cs.wustl.edu/~schmidt/
 Blitz++ http://www.oonumerics.org/blitz/
 flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
[他ライブラリリンク集]
 http://www.trumphurst.com/cpplibs/cpplibs.phtml
 (日本語) http://www.kmonos.net/alang/cpp/lib.html

9 名前:v(^・^)v :04/09/28 02:34:34
■関連スレ■
【C++】template 統合スレ -- Part5
http://pc5.2ch.net/test/read.cgi/tech/1091522597/
ぼるじょあがC/C++の宿題を片づけますYO! 31代目
http://pc5.2ch.net/test/read.cgi/tech/1095075678/
C/C++でのWindowsPrograming議論スレ(質問お断り)
http://pc5.2ch.net/test/read.cgi/tech/1049790146/
managed C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/
ATL/WTL Part3
http://pc5.2ch.net/test/read.cgi/tech/1095442366/

10 名前:v(^・^)v :04/09/28 02:35:44
■コンパイラスレ■
フリーコンパイラー使えよ。
http://pc5.2ch.net/test/read.cgi/tech/1061384369/
GCCについて part4
http://pc5.2ch.net/test/read.cgi/tech/1090062751/
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/
タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/
OpenWatcom C++
http://pc5.2ch.net/test/read.cgi/tech/1033433728/
"Code of the Nerds" Digital Mars C/C++
http://pc5.2ch.net/test/read.cgi/tech/1044210976/

11 名前:デフォルトの名無しさん :04/09/28 02:44:49
C++プログラミング入門(オライリー)の書評探してるんですが全然見つかりません。
薄くてよさげなんですがどうなんでしょう?

12 名前:v(^・^)v :04/09/28 02:45:42
■開発環境スレ■
★初心者にVisual C++を教えるスレ★ Part14
http://pc5.2ch.net/test/read.cgi/tech/1093672937/
■MFC相談室 mfc11.dll■
http://pc5.2ch.net/test/read.cgi/tech/1088084875/
C++Builder相談室 Part11
http://pc5.2ch.net/test/read.cgi/tech/1094749339/
Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/

13 名前:v(^・^)v :04/09/28 02:46:14
テンプレ差分
・[JTC1/SC22/WG21 - C++]のURLを移転に対応して変更
・Books に「Exceptional C++ Style」を追加
・Books に「C++ Template Metaprogramming」を追加
・Books が行多すぎになったので、Templateまわりを分けた
・shinichiro.h さんの boost info 移転のお知らせに従いURL変更
・k.inaba さんの Let's boost のほうが情報が新しいので順番を変更
・宿題スレ追尾
・ATL/WTLスレ追尾(統合)
・COMスレ削除
・フリーコンパイラスレ追尾
・GCCスレ追尾
・Borland C++スレ追尾
・Visual C++スレ追尾
・C++Builderスレ追尾

14 名前:v(^・^)v :04/09/28 02:46:51
テンプレ終了です。

15 名前:v(^・^)v :04/09/28 02:46:58
STLつかうと一気に実行ファイルサイズが10倍に?!


16 名前:v(^・^)v :04/09/28 02:47:24
>>11
貴様、>>6が目に入らぬのですか?

17 名前:v(^・^)v :04/09/28 02:49:14
>>15
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。


18 名前:v(^・^)v :04/09/28 02:49:36
>>17
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。


19 名前:v(^・^)v :04/09/28 02:50:02
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?


20 名前:v(^・^)v :04/09/28 02:50:25
>>19
#include <stdafx.h>

後死ね。


21 名前:デフォルトの名無しさん :04/09/28 03:22:41
>>20
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

22 名前:デフォルトの名無しさん :04/09/28 04:00:26
>>1
乙。

23 名前:11 :04/09/28 04:09:58
>>16
amazonは当然みたけど、それ以外じゃまったくない。
この本は人気がないんですか?
Cでは言語プログラミングくらいのことができるんだが、
OOPはrubyで本みながら、簡単なスクリプトがかける程度。
そんな漏れにこの本は最適なのかが知りたいのです。

24 名前:デフォルトの名無しさん :04/09/28 05:04:52
Unicodeの「:」をwcoutで表示することができないのですが、
なぜなのでしょうか? (VC71,WinXP)

(1)ShiftJis(cp932)で以下のソースを保存してコンパイルすると
->前者を実行すると何も表示されず、さらに後者も表示されません。
->でも、後者のみの時は表示が可能でした。
(2)Unicode(cp65001,シグニチャなし)だと
->「error C2001: 定数が 2 行目に続いています。」、
->「error C2143: 構文エラー : ';' が '}' の前にありません。」
-> とでてコンパイルできない

#include<iostream>
int main()
{
std::wcout << L":" << std::endl;// 何も表示されないで止まる?
std::wcout << ":" << std::endl; //: 何故か単独なら表示される
}

25 名前:デフォルトの名無しさん :04/09/28 05:30:23
行列計算用のライブラリで計算速度が速く使いやすいおすすめのものがあれば
紹介していただけないでしょうか?


26 名前:24 :04/09/28 09:07:01
std::wcout.imbue(std::locale("japanese"));
を加えたらうまくいきました。
(結果)

F

27 名前:24 :04/09/28 12:48:57
":"をUnicodeに変換したものとL":"が
一致しないのが原因みたいでした。
なぜこんなことに....

size_t s_len = mbstowcs(NULL,":",0); //2
size_t w_len = wcslen(L":"); //1

28 名前:27 :04/09/28 13:09:46
cのロケール設定し忘れてた...orz
setlocale(LC_ALL,"Japanese");//これがあれば一致した
原因はロケールの設定してなかったからですね。(お騒がせしました,,



29 名前:デフォルトの名無しさん :04/09/28 13:35:49
>>25
Blitz++
boost::ublas
lapack

30 名前:デフォルトの名無しさん :04/09/28 14:08:12
>>28
ここのスレには関係ない話なのであまり伸ばしたくないのですが
vc7.1ってlocaleをいちいち設定しなくても勝手にやってくれるのではなかったっけ。あれ?
すくなくても、俺はlocaleなんて設定しなくてもうまく表示してくれる。
もしかして、versionの違いかも。

31 名前:デフォルトの名無しさん :04/09/28 15:54:07
STL周りは明らかにオブジェクト指向というより
関数型プログラミングの臭いがする。
そのへんのカオスつーかハイブリッド具合がC++っぽいんだろうけど。


32 名前:デフォルトの名無しさん :04/09/28 16:00:11
なにこのコピペ━━━(゚∀゚)━━━ !!!

33 名前:デフォルトの名無しさん :04/09/28 16:03:07
カオス?
意味わかってんのかな?
多分覚えたの単語を使ってみただけだろうけど・・・

34 名前:デフォルトの名無しさん :04/09/28 16:12:19
ちなみにケイオスと発音しないと恥ずかしいよ

35 名前:デフォルトの名無しさん :04/09/28 16:13:34
>>33
「勝利の方程式」みたいなもんでしょ。


36 名前:デフォルトの名無しさん :04/09/28 19:01:41
指定のディレクトリ以下のファイルを読み込む方法てありますか?

37 名前:デフォルトの名無しさん :04/09/28 19:17:07
>>36
C++標準機能にはないので、各環境のスレで聞いてください。

38 名前:デフォルトの名無しさん :04/09/28 19:54:01
>>36
boostで書いてみた.
#include <iostream>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/fstream.hpp>
using namespace std;
void show (const boost::filesystem::path &p) {
boost::filesystem::directory_iterator end;
for (boost::filesystem::directory_iterator itr (p); itr != end; ++ itr) {
if (boost::filesystem::is_directory (*itr))
show (*itr);
else {
string filepath (boost::filesystem::complete (*itr).string ());
cout << "#############" << filepath << "#############" << endl;
ifstream ifs (filepath.c_str ()); if (!ifs) exit (1);
string buf;
while (getline (ifs, buf))
cout << buf << endl;
}
}
}
int main () {
show (boost::filesystem::path ("hoge"));
return 0;
}
初めて使ったので慣れてる人からみたら変なとこがあるかもしれないけど,こんな感じで書けますよ.


39 名前:デフォルトの名無しさん :04/09/29 00:23:25
UTF-16とかってさワイド文字って言うんでしょ?
で、Shit-Jisはマルチバイト文字って言うんでしょ?


じゃ、Asciiって、ワイド文字なの?マルチバイト文字なの?



40 名前:デフォルトの名無しさん :04/09/29 00:50:54
一応独習C終わったんですが、このままCを深く掘り下げていくのと、
今の早い段階でC++に移行するのだとどっちがいいんでしょうか?
個人的にはオブジェクト指向のC++を使ってみたいような気はするんですが、
Cも理解しきらないうちにC++が理解できるのか不安なんです。


41 名前:デフォルトの名無しさん :04/09/29 00:54:35
>>40
早めにC++に移れ。Cにしがみついていると嫌な癖がどんどん身に付いて、
後から引きはがすのに苦労するぞ。

42 名前:デフォルトの名無しさん :04/09/29 01:00:19
Cは文法的な理解だけで十分。
ただし、アルゴリズム的な感覚が身についていない場合はもう少し
Cで勉強してからの方が良い。
他言語を既に習得している場合はそのままC++の習得に移っても良い。

43 名前:デフォルトの名無しさん :04/09/29 01:10:01
>>40
一年や二年ぐらいで付いた癖なんて直すのは簡単なような気がするけど。俺にはわからない。
でも、早いうちにC++に移行したほうがいいのは確かだな。
もれなく、STLやBOOSTが付いてくるから楽しさ満点。
さらに、WIN32プログラムを組もうと考えたらMFCやWTLをやるにはC++の知識(たいした知識じゃないけど)が必要。

44 名前:デフォルトの名無しさん :04/09/29 01:11:48
>>28
ロケールを設定したら問題が解決するとも限らないんだろうな。
文字列リテラル→"execution character set" への変換方法は実装依存。

45 名前:デフォルトの名無しさん :04/09/29 01:12:00
>>42
同意。
プログラムの良い習慣は何言語であろうが変わりはない。
それは C++ とて例外ではないが、必要以上に難しくひねくれたところがあるから、
何と言うか本来なら立ち直れるはずの色々なショックがいちいち問題になりやすい。


46 名前:デフォルトの名無しさん :04/09/29 01:38:59
プログラミング講義C++
という本に演習とありますが答えが載ってないのでやり方が分かりません。
なのでここに演習の文を書くんでその答えを書いてくださらないでしょうか?

>>2つのオブジェクトa,bが、
>>(1)いずれもint型である場合
>>(2)いずれもdouble型である場合
>>(3)一方がint型で他方がdouble型である場合
>>の3つの場合に対して、sizeof(a+b)を表示するプログラムを作成し、その実行結果を考察せよ。



47 名前:デフォルトの名無しさん :04/09/29 01:46:12
おことわりです。

48 名前:デフォルトの名無しさん :04/09/29 05:19:44
>>46
宿題スレにでも行け

49 名前:デフォルトの名無しさん :04/09/29 06:19:33
これからCプログラミングやる初心者ですが
もう、お店ではC++って売ってないみたいんなんですけど
どうすれば入手できますか?
また、どのメーカーのC++がいいですか?
よろしくおねがいします

50 名前:デフォルトの名無しさん :04/09/29 06:23:27
class hoge2ch
{
 private:
  int a,b;
 public:
  hoge2ch(int x,int y):a(x),b(y)
 {

 }
・・・・・
};

という表記を、「オブジェクト指向計算力学入門」という本で見つけました
コンストラクタの引数の後ろに、継承でもないのにコロンが付いて
コンストラクタ内の引数が非公開メンバに代入される事を意味するようですが、
こんな表記法を他の書籍で見かけることは出来ませんでした。

この表記法を使っていて、分かりやすく解説している書籍を紹介して下さい

51 名前:デフォルトの名無しさん :04/09/29 06:47:31
とりあえず、イニシャライザでぐぐっとけ。
それと、この書き方を書いてない本は窓から投げ捨てておくこと。

52 名前:デフォルトの名無しさん :04/09/29 07:12:31
他の書籍のタイトルをさらしておけ

53 名前:デフォルトの名無しさん :04/09/29 07:41:55
>>50
いつかは絶対必要になるから買っておくべし
http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ref=pd_sr_ec_ir_b/249-7749404-9276354

54 名前:50 :04/09/29 08:09:03
>>51-53
教示ありがとうございます
http://plaza.harmonix.ne.jp/~fakira/turedure/cprog_00.htm
代入の仕方で参考になるものをちょっと見つけました

55 名前:デフォルトの名無しさん :04/09/29 08:30:04
>>50(>>54)
代入じゃねぇ。初期化だ。混同すべからず。

56 名前:28 :04/09/29 11:41:06
>>30
ver7.1.3091ですが、やはりないとだめみたい。
C++的には codecvtですかね?
ttp://www.tietew.jp/cppll/archive/568
に例が載ってました。

>>44
そういえばXML以外でエンコーディング指定って見たことない...。

57 名前:デフォルトの名無しさん :04/09/29 15:17:30
派生クラスでは、どうあがいても関数呼び出しが
仮想関数テーブル経由になってしまうのは避けられないのでしょうか?
高速化の必要から悩んでいます。

58 名前:デフォルトの名無しさん :04/09/29 15:24:07
>>57
テーブル経由になるのはvirtual指定したメンバ関数だけだよ。
派生クラスは関係ない。

59 名前:57 :04/09/29 15:37:53
>>58
おおお!ありがとうございます。
基底でvirtualが指定してある関数の場合は、派生側同名の関数で
例えvirtual指定が無く、かつ派生型ポインタで呼び出しても駄目ですよね?

その場合は同じ振る舞いのメソッドを、派生側で別に用意すればいいのか…。
いや本当に助かりました。

60 名前:デフォルトの名無しさん :04/09/29 16:32:48
>>59
基底クラスのメンバー関数がprivateで無い限り派生型でそのメンバー関数を呼べるよ

61 名前:デフォルトの名無しさん :04/09/29 16:35:12
つか仮想関数でもコンパイル時に型が確定してりゃvtblなんか経由しないコンパイラもある。

62 名前:デフォルトの名無しさん :04/09/29 16:38:23
もしくは基底クラスの関数で派生のメンバー関数を使いたいなら
template<class T>
struct base{ void fun(){ static_cast<T&>(*this).fun(); } };

struct My : public base<My>
{ void fun(){} };
でokのはず。

63 名前:デフォルトの名無しさん :04/09/29 16:39:34
>>61
そうなのか。でもVC7.1は違うだろうな。

64 名前:デフォルトの名無しさん :04/09/29 18:27:04
VC7.1でも出来るんじゃないの?
コンパイルタイムで明らかなのであれば
例えばこんなん

class po
{
public:
    virtual void f() = 0;
};

class null : public po{ (ry };

void hoge()
{
    null n;
    n.f();
}

65 名前:デフォルトの名無しさん :04/09/29 18:38:31
しばしば、「仮想メンバー関数の呼び出しは遅い」
というトピックが提供されるみたいだけど、実際どのくらい遅くなるのでしょうか。
目に見えてパフォーマンスが変わるものなのでしょうか。

実測した人とか居ます?

66 名前:デフォルトの名無しさん :04/09/29 19:04:16
仮想関数でもinline展開してくれるコンパイラならいいんでは

67 名前:デフォルトの名無しさん :04/09/29 19:19:59
//main.cpp
#include <stdio.h>
#include <time.h>
#include <typeinfo.h>
struct Virt { virtual int get(); };
struct VirtSub : public Virt { int get();};
struct NonVirt {int get();};
struct NonVirtSub : public NonVirt {int get();};
Virt *virt();
VirtSub *virtsub() ;
NonVirt *nonvirt() ;
NonVirtSub *nonvirtsub() ;
template<class T> void m(T *t) {
clock_t c = clock();
for (int i=0; i<100000000; ++i) t->get();
c = clock() - c;
printf("%s:%u\n", typeid(t).name(), (unsigned)c);
}
int main() {
m(virt());
m((Virt*)virtsub());
m(virtsub());
m(nonvirt());
m((NonVirt*)nonvirtsub());
m(nonvirtsub());
return 0;
}


68 名前:デフォルトの名無しさん :04/09/29 19:20:40
struct Virt { virtual int get(); };
//impl.cpp
struct VirtSub : public Virt { int get();};
struct NonVirt {int get();};
struct NonVirtSub : public NonVirt {int get();};
int Virt::get() { return 0; }
int VirtSub::get() { return 0; }
int NonVirt::get() { return 0; }
int NonVirtSub::get() { return 0; }
Virt virt_;
VirtSub virtsub_;
NonVirt nonvirt_;
NonVirtSub nonvirtsub_;
Virt *virt() { return &virt_; }
VirtSub *virtsub() { return &virtsub_; }
NonVirt *nonvirt() { return &nonvirt_; }
NonVirtSub *nonvirtsub() { return &nonvirtsub_; }


69 名前:デフォルトの名無しさん :04/09/29 19:24:44
$cl main.cpp impl.cpp
$./main
struct Virt *:981
struct Virt *:981
struct VirtSub *:1092
struct NonVirt *:751
struct NonVirt *:741
struct NonVirtSub *:731

vs.net2003
winxp sp2
pentium M 1400MHz(1.15GHz?)

70 名前:デフォルトの名無しさん :04/09/29 19:34:08
仮想関数でパフォーマンス低下に大きく影響を与えるのは
vtable 経由になることではなくインライン展開できないことだと思う。


71 名前:デフォルトの名無しさん :04/09/29 19:39:33
//おまけ ポインタ経由しないとき

template<class T> void n() {
T t;
clock_t c = clock();
for (int i=0; i<100000000; ++i) t.get();
c = clock() - c;
printf("%s:%u\n", typeid(t).name(), (unsigned)c);
}

n<Virt>();
n<VirtSub>();
n<NonVirt>();
n<NonVirtSub>();

---------
struct Virt:741
struct VirtSub:741
struct NonVirt:741
struct NonVirtSub:741



72 名前:デフォルトの名無しさん :04/09/29 19:41:09
まあ、他のコストがテーブルの初期化と正しい関数のオフセットへのアクセスだけだからねえ

73 名前:デフォルトの名無しさん :04/09/29 19:50:28
get()が十分重い関数のときには律速段階にならない罠


74 名前:67 :04/09/29 19:53:25
一言でいえばほとんどまったく影響ない

75 名前:デフォルトの名無しさん :04/09/29 19:53:42
>>67
get()が軽い場合と重い場合で
VirtSub / Virt
NonVirtSub / NonVirt
を算出してみてよ


76 名前:75 :04/09/29 19:59:17
>>74
ないってしゅちょうなのね


77 名前:デフォルトの名無しさん :04/09/29 20:05:29
古い資料だけどここが詳しい?
ttp://gigo.retrogames.com/t_lab/chapter2.html

78 名前:デフォルトの名無しさん :04/09/29 20:11:32
要するに仮想関数であることを問題にするのは、
他の最適化をやりつくした後でいいってこと?

79 名前:デフォルトの名無しさん :04/09/29 20:14:23
まずは設計ね

80 名前:デフォルトの名無しさん :04/09/29 20:22:05
>>75
めどい

81 名前:デフォルトの名無しさん :04/09/29 20:31:58
教えてください。

VC6.0でダイアログベース+MFC+winsock2で、サーバを作ってます。

で質問なんですが、あるクラスのメンバ関数ってスレッド化する事ができるでしょうか?
つまり、クラス内のメンバ関数ってプログラム内でクラス定義されて初めて
関数のメモリが割り当てられるような気がするんですが、
例えば、
_beginthreadex(0 NULL, Func ・・・
このFuncがメンバ関数の時、そのアドレスがわからないような気がするのですが。

親切な人お願いします。


82 名前:デフォルトの名無しさん :04/09/29 20:33:03
VC6とVC7で違ってくるのかな?

VC6だと仮想と非仮想に全く違いがなかった。
VC7だと非仮想関数と、ポインタじゃない呼び出しの仮想が同じくらい速くなった。
>>66の指摘している通り、VC7で明示的にインスタンスを作った場合は、テーブルを使わないみたい。

//----ケースA
CHoge* p = new CHoge;
p->VirtualFunc();
//----ケースB
CHoge obj;
obj.VirtualFunc();

このA,Bの2種類では、Bはテーブルを使わないようです。(VC7の場合)

83 名前:デフォルトの名無しさん :04/09/29 20:38:26
>>81
class c;
namespace{
C* p;
};
class c{
public:
C(){ p = this; }
int f(){ return 0; }
};
int f_stub(){
return p->f();
}

_beginthread( 0, NULL, f_stub, ・・・

84 名前:デフォルトの名無しさん :04/09/29 20:43:16
ということは VC6の最適化機能は不完全?スタンダード版?

85 名前:デフォルトの名無しさん :04/09/29 20:46:58
VC++とC++って別物なの?

86 名前:デフォルトの名無しさん :04/09/29 20:49:12
最適化に完全も不完全もねえだろ
ある意味、ボランティアみたいなものじゃん

87 名前:デフォルトの名無しさん :04/09/29 20:55:06
>>85
C++は言語名でしょ。
VC++はC++ソースのコンパイル環境。
MicroSoft C/C++コンパイラという意味。
他にはBC++やg++などもある。

88 名前:デフォルトの名無しさん :04/09/29 20:55:58
>>85
C++ :プログラミング言語
VC++:MicrosoftのC++コンパイラと周辺ツール類の製品名(の略称)

89 名前:デフォルトの名無しさん :04/09/29 20:59:02
>>86は貧乏でGCCを使おうとしたが難しくて使えなくてBCCで我慢してる

90 名前:デフォルトの名無しさん :04/09/29 21:00:23
>>82
6も7もおなじだったよ?

91 名前:デフォルトの名無しさん :04/09/29 21:00:36
誰か、VC6で試してくれないか?
>>82の意外な書き込みが気になる。

92 名前:デフォルトの名無しさん :04/09/29 21:08:51
あんがと。しかしわかったようなわからんような。
どうやらBACICから始めたほうがよさそうだな。
ポケコンかお

93 名前:デフォルトの名無しさん :04/09/29 21:14:39
>>92
それはどうかと...
ところでポケコンって今日びまだ売ってんの? いくらくらい?


94 名前:デフォルトの名無しさん :04/09/29 21:19:05
>>93
結構進化してるよ。
2〜3万くらいじゃない?

95 名前:デフォルトの名無しさん :04/09/29 21:24:01
PDA使ったらポケコンって用済みじゃない?
手軽にプログラミングするならPCがあるし、PDAでもシリアル出力できるし。

96 名前:デフォルトの名無しさん :04/09/29 21:28:31
>>81,83

>そのアドレスがわからない
this使う
GUI部にマルチスレッドは危険極まりないと思うよ

メモリ割り当てたいなら
class C{ public: C(){}; unsigned f(void* arg); static unsigned stub(void* p){ return C().f(arg); }};
_beginthread(C::stub,0,arg);


97 名前:デフォルトの名無しさん :04/09/29 21:29:55
3万あれば自作して(中古じゃないと無理かな?)PC-UNIXがいいような気がする。


98 名前:デフォルトの名無しさん :04/09/29 21:35:39
>>82 そういう違いは確認できなかった
#include <stdio.h>
#include <time.h>
struct C {virtual int v() { return 0 ;}
int nv() { return 0; }};
int main() {int i;clock_t t;C c, *pc = new C;
printf("ver%d\n", _MSC_VER);
t = clock();
for (i=0; i<100000000; ++i) c.nv();
printf("nonptr-nv:%u\n", clock() - t);
t = clock();
for (i=0; i<100000000; ++i) c.v();
printf("nonptr-v:%u\n", clock() - t);
t = clock();
for (i=0; i<100000000; ++i) pc->nv();
printf("ptr-nv:%u\n", clock() - t);
t = clock();
for (i=0; i<100000000; ++i) pc->v();
printf("ptr-v:%u\n", clock() - t);
return 0;}
-----
[vc6]ver1200
nonptr-nv:771
nonptr-v:771
ptr-nv:781
ptr-v:1242

[vc7]ver1310
nonptr-nv:731
nonptr-v:741
ptr-nv:741
ptr-v:971

99 名前:デフォルトの名無しさん :04/09/29 21:38:29
デバッガで混合表示したほうが早いと思うが

100 名前:デフォルトの名無しさん :04/09/29 21:39:59
>>99
medoi

101 名前:デフォルトの名無しさん :04/09/29 21:43:05
何はともあれVC7が圧勝

102 名前:デフォルトの名無しさん :04/09/29 21:51:57
>>98
ちょっと>>98のサンプルソースを変更してみた。
違う結果が出ると思うので確認してみてホスイ。
-------------------------------------------
#include <stdio.h>
#include <time.h>
volatile int g_number=0;
struct CBASE {virtual int v()=0; int nv() { g_number++;return 0; }};
struct CDERIVED : public CBASE {virtual int v() { g_number++;return 0 ;}};
int main() {int i;clock_t t;CDERIVED c, *pc = new CDERIVED;
const int rep_cnt=200000000;
printf("ver%d\n", _MSC_VER);
t = clock();
for (i=0; i<rep_cnt; ++i) c.nv();
printf("nonptr-nv:%u\n", clock() - t);
t = clock();
for (i=0; i<rep_cnt; ++i) c.v();
printf("nonptr-v:%u\n", clock() - t);
t = clock();
for (i=0; i<rep_cnt; ++i) pc->nv();
printf("ptr-nv:%u\n", clock() - t);
t = clock();
for (i=0; i<rep_cnt; ++i) pc->v();
printf("ptr-v:%u\n", clock() - t);
return 0;}
-------------------------------------------


103 名前:102 :04/09/29 21:53:04
自分の環境での>>102の結果Pen4 3GHz

ver1200
nonptr-nv:984
nonptr-v:875
ptr-nv:937
ptr-v:938

ver1310
nonptr-nv:546
nonptr-v:532
ptr-nv:547
ptr-v:937

104 名前:デフォルトの名無しさん :04/09/29 22:01:30
pen M 1400MHz?
かわらねぇ…

ver1200
nonptr-nv:1662
nonptr-v:1622
ptr-nv:1623
ptr-v:2143

ver1310
nonptr-nv:1682
nonptr-v:1742
ptr-nv:1643
ptr-v:2053


105 名前:40 :04/09/29 22:52:25
>>41->>43
亀レスでスマソですが、レスどうもです。
まだまだ経験が浅い自分だけではふんぎりが付かなかったので、
非常に参考になりました。では、C++やってみますー。

106 名前:36 :04/09/29 23:37:38
>>37
標準でないんですか (´・ω・`)

>>38
ソースまでわざわざありがとうございます。

107 名前:デフォルトの名無しさん :04/09/30 00:23:56
>>102
AthlonXP3000+
Borland-C++ 5.6.4
nonptr-nv:812
nonptr-v:735
ptr-nv:828
ptr-v:953

ver1310
nonptr-nv:547
nonptr-v:391
ptr-nv:562
ptr-v:734

何かAthlonXP速い。Athlon64で誰かやってみて〜

108 名前:デフォルトの名無しさん :04/09/30 01:02:26
>106
そもそもディレクトリがない環境っていうのもあるんで。

109 名前:デフォルトの名無しさん :04/09/30 01:51:09
>>102
これってfor文のコストに関数呼び出しのコストが埋もれてしまっていませんか?
以下,すごく環境依存なコードで申し訳ないですが
VC++&インテルペンティアム互換プロセッサな環境での測定コードを載せておきます.
rdtscはプロセスタイムではなくてプロセッサタイムを計測しているので注意してください.

#include <stdio.h>
#include <time.h>
volatile int g_number=0;
inline __int64 rdtsc(){
__asm{
rdtsc;
}
}
struct CBASE {virtual int v()=0; int nv(){ ++g_number;return 0; }};
struct CDERIVED : public CBASE {virtual int v(){ ++g_number;return 0; }};
int main() {
__int64 t, t2;
CDERIVED c, *pc = new CDERIVED;
printf("ver%d\n", _MSC_VER);
t = rdtsc(); c.nv(); t2 = rdtsc();
printf("nonptr-nv:%u\n", t2 - t);
t = rdtsc(); c.v(); t2 = rdtsc();
printf("nonptr-v:%u\n", t2 - t);
t = rdtsc(); pc->nv(); t2 = rdtsc();
printf("ptr-nv:%u\n", t2 - t);
t = rdtsc(); pc->v(); t2 = rdtsc();
printf("ptr-v:%u\n", clock() - t);
return 0;
}

結果はご自分の目でお確かめください.

110 名前:109 :04/09/30 02:12:28
109に関して補足するまでもないとは思いますが,
このような仮想関数呼び出しのコストが致命的になるのは
コード全体の中でその仮想関数呼び出しがホットスポットになっていて,
なおかつ仮想関数内部の処理が十分軽いときに限られます.
いずれにせよ効率の話なので,この手のことを気にするのは2の次にするべきでしょう.

後,効率の話をするなら99さんの言うように結局はアセンブリを見ないといけないんでしょうね.


111 名前:109 :04/09/30 02:15:13
す,すいません.109の最後のprintfですけれどtypoです.
>printf("ptr-v:%u\n", clock() - t);
printf("ptr-v:%u\n", t2 - t);

恥ずかしいったらありゃしない.

112 名前:デフォルトの名無しさん :04/09/30 02:42:19
サーバーでデータ処理でもするんじゃなきゃ、呼び出しコストなんぞ考える必要もない時代だよなぁ。
組み込みで8ビットCPUでC++使ってるなら考えないといかんけど。

113 名前:デフォルトの名無しさん :04/09/30 05:55:03
std::vector<int> a;
std::vector<int>::iterator i;
i = a.begin;
と括弧を書き忘れたのにコンパイルが完了してしまいました
std::vector<int>::iterator i = a.begin;
はエラーとなり、コピーコンストラクタと演算子の違いということは分かるのですが
なぜ代入できるのでしょうか?

114 名前:デフォルトの名無しさん :04/09/30 06:17:20
コンパイラのバグ。

115 名前:113 :04/09/30 07:49:49
>>114
そうだったのですか。コンパイラを書き忘れていましたがVCのver6でした。
for(のループ変数がスコープをはみ出すので>>113のように書いたところ間違えてしまいました。
完全にはめられていますね。

116 名前:デフォルトの名無しさん :04/09/30 07:56:03
いい加減VC6は捨てろ

117 名前:デフォルトの名無しさん :04/09/30 07:58:01
http://support.microsoft.com/default.aspx?scid=fh;JA;lifeDevToolFam

118 名前:デフォルトの名無しさん :04/09/30 09:51:48
http://msdn.microsoft.com/library/en-us/dnvs05/html/stl-netprimer.asp
STL.NET

119 名前:デフォルトの名無しさん :04/09/30 11:47:22
プログラムの本質的な意味を理論的に説明してくれる人いませんか?

120 名前:デフォルトの名無しさん :04/09/30 12:35:02
プログラムの本質的な意味?どういうこと?

121 名前:デフォルトの名無しさん :04/09/30 12:46:46
>>119
少なくともどういう経緯でその質問が出てきたのか書いてくれんと答えられん。

122 名前:デフォルトの名無しさん :04/09/30 13:29:48
>>119
ある作業を自分以外へ通知・委託するための行為。

123 名前:デフォルトの名無しさん :04/09/30 17:09:35
template <typename T>
class c
{
    template <typename U> struct s{ typedef U u; };
public:
    typedef s<T>::u u;
};

を VC7.1 でコンパイルしたところ

error C2146: 構文エラー : ';' が、識別子 'u' の前に必要です。
error C2501: 'c<T>::u' : 識別名を宣言するのに、型が指定されていません。
warning C4346: 'c<T>::s<T>::u' : 依存名は型ではありません。

とエラーが出るのですが、何故でしょうか…

124 名前:デフォルトの名無しさん :04/09/30 17:12:48
>>123
- typedef s<T>::u u;
+ typedef typename s<T>::u u;


125 名前:デフォルトの名無しさん :04/09/30 17:14:49
>>124
即レス感謝です
Tに依存することを失念してました、、失礼しました…

126 名前:デフォルトの名無しさん :04/09/30 17:27:04
とあるクラス Bitmap が、もしかするとデストラクタで例外を投げるかも知れないとき、
auto_ptr< Bitmap > hoge の値をできるだけ安全に変更するためには
 auto_ptr< Bitmap > hoge( new Bitmap("hehe") );
 hoge.reset( new Bitmap("haha") );
ではなく、
 auto_ptr< Bitmap > hoge( new Bitmap("hehe") );
 hoge = :auto_ptr< Bitmap > ( new Bitmap( "haha" ) );
とする必要があるんでしょうか?(前者だとどこにもbindされない Bitmap("haha") がリークする?)

127 名前:デフォルトの名無しさん :04/09/30 17:29:01
デストラクタが例外を投げるという設計が120%間違ってる

128 名前:デフォルトの名無しさん :04/09/30 18:27:04
>>127
漏れが設計したクラスではないので・・・
とりあえず release してから reset することにしました。

129 名前:デフォルトの名無しさん :04/09/30 18:30:34
>>128
俺ならその例外を握りつぶすラッパクラスを作る。

130 名前:デフォルトの名無しさん :04/09/30 18:57:16
デストラクタが例外を投げてはいけないことはまともな本を
読んだことがあれば必ず書いてあるはずなんだがなぁ…
いまだにそんな設計をする人間がいるのか(_ _;

131 名前:デフォルトの名無しさん :04/09/30 19:39:14
>>130
その辺は完全に漏れの質問が変でした。
実際には「例外を投げるかもしれないとき」ではなくって、
「OSがサポートしている例外機構がC++例外と類似の例外として投げてくる可能性があるとき」
ということでした(Windows の SEH)。


132 名前:大学生 :04/10/01 01:47:48
「Accelerated C++」でC++の勉強を始めた大学生です。
第11章のプログラムをテストしようとしたところ、
コンパイルはできたのですが、MAKEができません。
エラーメッセージの原因がわからないので誰か助けてください。

エラーメッセージ:
Error: 外部シンボル 'Vec<couple>::create()' が未解決
(D:\CPP\CHAPTER11\DEBUG\KADAI11_0.OBJ が参照)


133 名前:大学生 :04/10/01 01:51:12
「Accelerated C++」でC++の勉強を始めた大学生です。
第11章のプログラムをテストしようとしたところ、
コンパイルはできたのですが、MAKEができません。
エラーメッセージの原因がわからないので誰か助けてください。

エラーメッセージ:
Error: 外部シンボル 'Vec<couple>::create()' が未解決
(D:\CPP\CHAPTER11\DEBUG\KADAI11_0.OBJ が参照)

134 名前:デフォルトの名無しさん :04/10/01 01:52:27
>>133
で、その本の11章のプログラムはどんな物ですか。
説明不足ですよ。

135 名前:大学生 :04/10/01 01:53:25
すいません二重投稿してしまいました。。。
以下、ソースコードです。

/* Vec.h */
#ifndef GUARD_Vec_h
#define GUARD_Vec_h
template <class T> class Vec {
public:
Vec() { create(); }
(略)
private:
void create();
(略)
};
#endif



/* Vec.cpp */
#include "Vec.h"
template <class T> void Vec<T>::create()
{
(略)
}
(略)

136 名前:大学生 :04/10/01 01:54:39
/* kadai11_0.cpp */
#include "Vec.h"
#include <iostream>
using std::cout;
using std::endl;
struct couple {
int a;
int b;
};
int main()
{
Vec<couple> sVec;
couple s1 = {1, 2};
sVec.push_back(s1);

for (Vec<couple>::size_type i = 0; i != sVec.size(); i++) {
cout << sVec[i].a << endl;
}

return 0;
}

137 名前:デフォルトの名無しさん :04/10/01 02:00:10
手元にある本がCの本で(まだ読んでない
手元にあるソフトがVC++とVB6.0なんだけど
Cの本を読んでVC++の役に立ちますか?
まったく別物なら素直にVC++の本買おうと思うんだけど
ちょっと貧乏で3週間は買えないから。 
プログラムはまったくした事ないのでパラパラ本を見ても(cとC++の違いが)よくわかりません。

138 名前:デフォルトの名無しさん :04/10/01 02:05:27
>>137
言っておくけれど、VC++とはMicrosoftのソフトの名前で、言語はC++なのですよ。
だから、本を買うならVC++と書いてある本よりもC++と書いてある本を
買うのがよろしい。
また、C++はCの拡張言語なので、Cを知った上でC++を学ぶのが正当な学習です。
ちなみに、Cを覚えるときの参考書は プログラミング言語C、
C++を覚えるときの参考書は C++ Primer、
がおすすめです。

139 名前:デフォルトの名無しさん :04/10/01 02:06:43
>>135
それはテンプレートクラスの実装を別ファイルにしているのが原因。
現実的な話、ほぼすべてのコンパイラはそれをサポートしていない。
解決法はヘッダに実装を直接書くしかない。

140 名前:デフォルトの名無しさん :04/10/01 02:08:04
>>138
詳しくありがとうございました。
Cの本をじっくり読み進めてみます。

141 名前:デフォルトの名無しさん :04/10/01 02:10:55
>>137
C++を学習するのにCを先に学習せねばならないかは、どちらとも
使える人間の間でも議論のあるところ。俺個人は必要ないと
思っている。それから、VC++を使おうがBCCを使おうがC++を学習
しなければ使いようがない。VC++の本とか言ってVC++という
ものすごく環境依存の本を読むよりも、C++という言語については
その専門書を、VC++という環境についてはその専門書を、別に
読むことをお勧めする、金がなくても。結局はそれが近道。

142 名前:デフォルトの名無しさん :04/10/01 02:16:15
Cの内容を兼ねたC++の本も多いような気がする。
というか自分がそれに騙された。Cの入門書をただC++に
直しただけの本。

143 名前:大学生 :04/10/01 02:18:34
>>139
どうもありがとうございます。
ヘッダに直接展開したらMAKEできました!
ファイルをまたがってのテンプレートはできないのですね。
勉強になりました。

144 名前:デフォルトの名無しさん :04/10/01 02:24:31
>>137
Cの勉強は要らないに一票。
あと、書籍代を惜しんでいては勉強は出来んぞ。
どうしても金が無かったら図書館を利用すべし。
政令指定都市クラスならなら公立図書館でも
プログラミング書は結構置いている。

145 名前:デフォルトの名無しさん :04/10/01 02:26:04
>>139
クラステンプレートね。

146 名前:デフォルトの名無しさん :04/10/01 02:28:53
Cはの勉強はいらないと言っている奴はたぶん学術的な下積みも無いに違いない。
高卒プログラマかな。

147 名前:デフォルトの名無しさん :04/10/01 02:31:15
C++やるならC++で勉強すりゃいいよ。

148 名前:デフォルトの名無しさん :04/10/01 02:32:05
>>137
図書館だったら返さないといけないから忘れた時に調べたい
とき不便。基本的には買う方がいいような気がする。自分は、だけど
実際、あれはどうだったっけって思った時本無いから不便に思った事あるし。

149 名前:デフォルトの名無しさん :04/10/01 02:36:19
>>148
同意。
しかし最近は結構ウェブで事足りることも多いからなぁ

150 名前:デフォルトの名無しさん :04/10/01 02:37:53
ここで質問するのもどうかと思うけど
今勉強するべきプログラミング言語ってなにがいいかな?
自分で思うのは
@JAVA
AC
BVB
なんだけど。

151 名前:デフォルトの名無しさん :04/10/01 02:43:43
アングラ探してPDFをDLしろ。英語版か中文版しかないが。
タイ━━━━||Φ|(|゚|∀|゚|)|Φ||━━━━ホ!?

152 名前:デフォルトの名無しさん :04/10/01 02:45:10
いまどきCなんかやってクソッタレなCの文字列処理関数とか覚える暇があるんならアセンブラでもやったほうがまだマシだろ。


153 名前:デフォルトの名無しさん :04/10/01 02:49:20
まさにスレ違いの流れ!

154 名前:デフォルトの名無しさん :04/10/01 02:55:02
アセンブラって言語?

155 名前:デフォルトの名無しさん :04/10/01 03:00:21
(1位タイ)C++(もしくはC),C#,JAVA,ActionScript
以降順位なし。

1位をC++(もしくはC),C#,JAVA,ActionScriptでタイとした理由。
・残念ながら現在OSで圧倒的シェアを占めているWindowsにおいて、
 C#がMicrosoftの次世代主要開発言語として位置づけられていること。
・残念ながら(略)、C++/CLIが結構うまく.NET Frameworkを扱えるらしい
 から、膨大な遺産を持っているC++(もしくはC)はこれから勉強するに
 足る長期間生き残るだろうと予想されること。
・Windowsのサーバーサイドのプログラミングは今後.NETを用いたものに
 移行すること。
・その他UNIXやLINUXの環境においてはまだしばらくはC++(もしくはC)が
 開発の主流であり続けるであろうと予想されること。
・Webのクライアントサイドのプログラミングの主流がJAVAとActionScript
 (Flash)であること。

VBは.NETになって、その意義(プログラム初心者がプログラムらしきものを
形だけでも作ることができる)を失っている。C#に置き換えられていくのでは
ないだろうか。

156 名前:デフォルトの名無しさん :04/10/01 03:02:51
アセンブリ言語をアセンブラでアセンブルしようか。

157 名前:デフォルトの名無しさん :04/10/01 03:07:36
コンパイラは知ってるぞ。漫画だよな。
アセンブラも知ってるぞ。漫画だよな。



158 名前:デフォルトの名無しさん :04/10/01 03:11:35
おまいら、これでも実行してろ
E8 FD FF

159 名前:デフォルトの名無しさん :04/10/01 03:21:29
バイナリエディタを使うんですね

160 名前:デフォルトの名無しさん :04/10/01 03:32:51
>>146
学術的な下積みって何?
駅弁大学で万年助手すること?

161 名前:デフォルトの名無しさん :04/10/01 03:38:40
C++できるってことはCもできるんじゃない。
ていうか>>153に同意

162 名前:デフォルトの名無しさん :04/10/01 09:21:06
スレ違いは分かってて質問するけど(何故ならC++が好きだから)
日本以外に行ったら三文字表記は今でも使われてるのですか。
??=include <iostream>
int main()
??<
int n??(1??)={10};
cout<<"Hello, World??/n"<<n??(0??)<<endl;
return 0;
??>
なんかすごいよね。

163 名前:デフォルトの名無しさん :04/10/01 09:22:40
あっusing namespace std;が抜けてる

164 名前:デフォルトの名無しさん :04/10/01 09:27:16
ならCでパターン全部書いてみろと

165 名前:デフォルトの名無しさん :04/10/01 10:49:25
>>152
こんな風に考えているのが大勢いるんだろうね。
着眼点が下等すぎ。

166 名前:デフォルトの名無しさん :04/10/01 10:57:49
>>165
釣られんな(w
ユーザライクな文字列処理を必要とする人がアセンブラに走るわけがない。

167 名前:デフォルトの名無しさん :04/10/01 12:52:39
>152

あの突っこむべきかどうか本当に必死に考えた結果、突っこみます


ここC++のスレです

168 名前:デフォルトの名無しさん :04/10/01 12:54:10
>>167
なにいってんの?

169 名前:デフォルトの名無しさん :04/10/01 18:36:43
ここはCwwのスレじゃありません。

170 名前:デフォルトの名無しさん :04/10/01 18:55:07
派生クラス固有の値を派生元のポインタから仮想関数経由でセットする方法を教えてください。
class A{
public:
 virtual void Initialize( void* )=0;
};

class B : public A{
 BStruct bs;
public:
 virtual void Initialize( void* p){
  bs = *(BStruct*)p;
 }
};
こんな感じで渡しているのですが、中身の保証が全くありません。NULLチェックのみ
Cstruct, DStruct・・・といろんなサイズ・型の各派生先固有の構造体があります。

171 名前:デフォルトの名無しさん :04/10/01 19:12:21
↑の人の使わせてもらうけど
class A{
  public:
 virtual void Initialize( void* )=0;
     };

  class B : public A{
 BStruct bs;
public:
 virtual void Initialize( void* p){
  bs = *(BStruct*)p;
 }
};  

こんな感じに段落をつけてる(文の最初に空白を数行いれてる)のは
見易くするためだけ?

172 名前:デフォルトの名無しさん :04/10/01 19:14:29
>>171
それのどこが見やすいんだ?

173 名前:デフォルトの名無しさん :04/10/01 19:44:00
>>170
dynamic_castとかCOMのIUnknown::QueryInterfaceみたいな仕組みを導入するとか。
つーか派生先で独自の初期化関数作ればいいじゃない。

174 名前:デフォルトの名無しさん :04/10/01 19:45:26
>>170
受け渡しに使いたい派生クラス固有のオブジェクトをboost::anyかなにかで渡せば?


175 名前:デフォルトの名無しさん :04/10/01 19:45:37
>>170
保証がないということは、
正しくなかった場合にどうしたいのかを
まず決めなければ話を始められない

176 名前:デフォルトの名無しさん :04/10/01 20:00:58
  bs = *(BStruct*)p; というところを
bs=*dynamic_cast<BStruct*>(p); としても動作するようにいたるところ修正...とおもったけど
BStruct は構造体で無いとだめ?


177 名前:デフォルトの名無しさん :04/10/01 20:22:15
>>176
dynamic_castに必要な条件を述べよ

178 名前:デフォルトの名無しさん :04/10/01 20:23:57
>>177
わかんない。まわりくどい事いわないで教えろ

179 名前:デフォルトの名無しさん :04/10/01 20:25:31
キャスト前のポインタの先に virtual

180 名前:デフォルトの名無しさん :04/10/01 20:25:34
つ仮想関数

181 名前:180 :04/10/01 20:27:19
>>179
ケコーンしないか?

182 名前:デフォルトの名無しさん :04/10/01 20:27:56
サンクス。
キミたちに幸せが来るように祈ってる

183 名前:デフォルトの名無しさん :04/10/01 20:29:35
>>181
女なら品定めさせろ
男なら金くれ

184 名前:デフォルトの名無しさん :04/10/01 20:30:57
おまえらみんな金ヤンだ

185 名前:デフォルトの名無しさん :04/10/01 20:31:49
この流れにワラタ

186 名前:デフォルトの名無しさん :04/10/01 20:33:07
>>183
           _._
 _|_|_|_   |_|_|     /  __            ___
   |  |_|    |_|_|    |                       ヽ
   |        /| | \   |          ───一        |
   |___    ノ  |     レ  ヽ_                 _ノ

 _/__〃  |   _|_    __
   / __   |    .|     /  / ヽ
  /       |    |    /  /   |
 /  ヽ__   レ   ノ    \/   /

    へ          へ|\ へ     √ ̄|        へ
   ( レ⌒)  |\   ( |\)| |/~|  ノ ,__√    /7 ∠、 \ .  丶\      _ __
|\_/  /へ_ \)   | |   | |∠  | |__   | /   !  |     | |_〜、  レ' レ'
\_./| |/   \     .| |( ̄  _) |     )  | |    i  |  へ_,/    ノ   ,へ
  /  / ̄~ヽ ヽ.   | | フ  ヽ、 ノ √| |   ! レノ  |  !. \_  ー ̄_,ー~'  )
 / /| |   | |   | |( ノ| |`、) i ノ  | |   \_ノ  ノ /    フ ! (~~_,,,,/ノ/
 | |  | |   / /    | | .  し'  ノ ノ   | |       / /     | |   ̄
 \\ノ |  / /      | |___∠-".   | |      ノ /       ノ |  /(
  \_ノ_/ /     (____)     し'      ノ/      / /  | 〜-,,,__
     ∠-''~                        ノ/         (_ノ   〜ー、、__)

187 名前:170 :04/10/01 20:33:56
>>173
>QueryInterface
COMはあまり知らないのですが、そこまでするのはちょっと。。。と思いました。(自分で言い出しておきながらあれですが)
>dynamic_cast
dynamic_cast<B*>(ptrA)→InitializeB()ということですよね。なるほど。
>>174
boost::anyをためしに使ってみました。
virtual void Initialize ( const boost::any &s ){
 try{
  BStruct bs = boost::any_cast<BStruct>(s);
 }catch( boost::bad_any_cast ){
 ・・・
上手く機能しているようですがこんな感じでいいのでしょうか。詳細は追って勉強してみます。
これでいってみようと思います。
>>175
正しくなければ戻り値をboolにしてfalseをreturnしてやるくらいで十分です。
どこまで保証したいのかがまったくわかりませんでしたね。失礼いたしました。(>>170でもきちんと動くのですから)
>>176
仮想関数がないとだめなんですよね。そうなると関数呼び出し時にdynamic_castしたほうがいいですね。

188 名前:デフォルトの名無しさん :04/10/01 20:43:45
>正しくなければ戻り値をboolにしてfalseをreturnしてやるくらいで十分です。

つまり、未定義ではなく何らかの保証をするってことだな。

189 名前:170 :04/10/01 20:50:26
>>188
そういうことですかね。
boost::anyを使用することによって少なくとも希望の型が渡されたことが保証できますね。

boost::any_castはtype_id で判定しているのですね。
今回の用途にはこれで十分だと思われます。
みなさんありがとうございました。

190 名前:デフォルトの名無しさん :04/10/02 02:15:17
実行時にユーザープログラムが型判定しなきゃいけない例ってのは
どんな場合なんでしょう?

スクリプトの実装くらいしか思いつきません

191 名前:デフォルトの名無しさん :04/10/02 11:30:50
・ドラッグ&ドロップ
・コピー&ペースト
・アーカイブファイルからの読み込み


192 名前:デフォルトの名無しさん :04/10/02 16:07:49

printf("");
って一見何もしないように見えて厳密には一体何が起こってるんでしょうか?
これを書くとエラーが出ないのに省くとメモリ関係のエラーで強制終了でした
コンパイラはBCC32です5.5です
謎です 紐解いて下さい

193 名前:デフォルトの名無しさん :04/10/02 16:13:21
>>192
引数をケツから積んでるかと

>これを書くとエラーが出ないのに省くとメモリ関係のエラーで強制終了でした
おそらく別の箇所でスタックを壊したりしてる予感

周りのコードを見直して見れ

194 名前:デフォルトの名無しさん :04/10/02 19:20:28
>>192
""だって立派な文字列だ。

195 名前:デフォルトの名無しさん :04/10/02 19:21:11
処理系によって扱いが違うのかも。

196 名前:デフォルトの名無しさん :04/10/02 19:27:14
"" が格納されている位置の前に格納されている
別の文字列に対してオーバーランな書き込みしてるとか

197 名前:デフォルトの名無しさん :04/10/02 19:37:45
"は文字列ではありません。"は区切り記号です。

198 名前:デフォルトの名無しさん :04/10/02 19:38:17
return でなく exit で終了させて問題が起こらなければ
スタックの異常

199 名前:デフォルトの名無しさん :04/10/02 20:13:49
>192
あーおんなじ状況になったことがある
メモリまわりのバグなんだよね
不適切なメモリアドレスを操作していないかチェックしたほうがいいよ

200 名前:デフォルトの名無しさん :04/10/03 00:20:14
何故にprintf("");を記述したのか...

201 名前:デフォルトの名無しさん :04/10/03 05:31:18
""はサイズ0の文字列で終端コードである"\0"は含まれるからね。"\0"と書いてあるのと差はない。(はず)
それが格納されるのはあたゆる初期値付き変数と同じところになる。(そうじゃない場合もあるが)

当然それの前の部分でオーバーランをしていたらクッションになってくれてることも考えられる。

202 名前:デフォルトの名無しさん :04/10/03 06:00:31
静的関数だけで構成されていて、インスタンスなんか作っても何もないので意味無いクラスを
つくっても良いものなのですか?なんかアホっぽい質問でスマソ

203 名前:デフォルトの名無しさん :04/10/03 06:20:51
>>202
作りたかったら作ったら良いけど、
その関数をnamespaceに入れたらすむんでないけ?

204 名前:デフォルトの名無しさん :04/10/03 06:41:02
自分もそう思ったのですが、名前空間のネストが深くなって打つのが面倒になったとか、
単にズボラしたくなったとかで、使う人間(他人でも自分でも)がusing namespaceした時に
(例)play()やresume()とかよくありそうな名前がかち合うのではないかとも思ったのです。
Cの時のようにxxx_プレフィックス(gtk_somefuncとかssl_somefuncとか)付けるのもアレなので
クラスで囲んでおけばいいかなと思ったので。
何か勘違いしてたら指摘してくれると嬉しいです。一人でやってると分からんことが多いので。

205 名前:デフォルトの名無しさん :04/10/03 06:55:58
namespaceもstaticメンバ関数も打鍵量は全く一緒じゃないか?

206 名前:デフォルトの名無しさん :04/10/03 07:23:16
JavaのMath系なんかみたいに、static関数前提のクラスというのもあることはあるよ。
Javaは名前空間グローバルな関数が作れないという事情はあるけど、
C++にもtraitsなんかがあるしね。
Effective C++にも、namespaceの代替手段として載っている。
だけどnamespaceの完全な代用には出来ない、ともね。

ただ、using namespaceを前提に考えるのはどうかな。
using hoge::hage; を使うのを推奨するけどね。
(using std::stringとして、ソース内ではstd不要のstringだけで使うとか)

207 名前:デフォルトの名無しさん :04/10/03 07:52:19
あれは namespace が使えない場合でしょ?
クラスにする意味がないんだからこういう設計は絶対しないよ

208 名前:デフォルトの名無しさん :04/10/03 08:19:00
「絶対」ではないよ。
traitsという例をわざわざ挙げたのに。

209 名前:デフォルトの名無しさん :04/10/03 08:26:37
template引数ってのはnamespaceが使えない状況じゃないの?

210 名前:デフォルトの名無しさん :04/10/03 09:07:49
Ruby >>>>>>>>>>>>>>>>>>>>>> なめsぱcえ

211 名前:デフォルトの名無しさん :04/10/03 09:09:01
>>209
そうだよ。
>>208はまだお風呂からでてシャツを着ただけの情況なのでしょ。残りはスッポンポン。

212 名前:デフォルトの名無しさん :04/10/03 09:10:39
Rbuyb >>>>>>>>>>>>>>>>>>>>>>.Rubyho!!!!!!!

213 名前:デフォルトの名無しさん :04/10/03 10:29:23
209って具体的にどういうことなんですか?

214 名前:デフォルトの名無しさん :04/10/03 11:00:43
>>213
namespace A{
 typedef int type;
}

template<class T=A>
struct C
{
 typedef typename T::type type;
};
このようには出来ないということかと。

215 名前:デフォルトの名無しさん :04/10/03 14:18:40
codevct_byname,collate_byname等の
デストラクタがprotectedになってるのですが、
なぜなのでしょうか?



216 名前:デフォルトの名無しさん :04/10/03 16:28:05
>>201
""はサイズ1の配列。"\0"はサイズ2の配列。

217 名前:デフォルトの名無しさん :04/10/03 16:34:14
>>216
サイズという単位はありません

218 名前:デフォルトの名無しさん :04/10/03 16:42:28
>>217
サイズは単位じゃなくて次元では

219 名前:デフォルトの名無しさん :04/10/03 17:38:59
>>217
「要素数」ならいいか?

220 名前:デフォルトの名無しさん :04/10/03 20:46:56
誰も配列ではなく配列へのポインタだって所には突っ込まないのね

221 名前:デフォルトの名無しさん :04/10/03 21:02:34
>>220
C++では文字列リテラルはconst char[n]型である。
プログラミング言語C++第3版5.2.2「文字列リテラル」を参照

222 名前:デフォルトの名無しさん :04/10/04 11:42:49
>>215
ロケールが管理しているオブジェクトだから。

223 名前:デフォルトの名無しさん :04/10/05 00:08:37
VC6の頃はデストラクタはPROTECTEDマクロ=publicだった。
VC7でPROTECTEDマクロ=protectedになった。
意味わからんね。

224 名前:Ruby >>>>>>>>>>>> C++++++ :04/10/05 00:10:31
ばーぁ

225 名前:デフォルトの名無しさん :04/10/05 00:17:03
なんでC+ではなくC++となったのか

226 名前:デフォルトの名無しさん :04/10/05 00:28:21
>>225
インクリメント

227 名前:デフォルトの名無しさん :04/10/05 00:30:40
だれかCをBASIC風に機能削減したバージョンのC--を作ってください。

228 名前: ◆FIcNi4f8js :04/10/05 00:31:38
>>227
WSH


229 名前:デフォルトの名無しさん :04/10/05 00:33:46
Ruby!!!!!!!!!!!!!!!!!!!!!!!!!!!

230 名前:デフォルトの名無しさん :04/10/05 00:37:59
>>229
お前Rubyの事ほとんど知らない奴だろう?

231 名前:超絶Rubyhakka− :04/10/05 00:38:41
Ruby!!!!!!!!!!!!!!!!!!

232 名前: ◆FIcNi4f8js :04/10/05 00:39:40
>>230
きっと生姜区制だろう。


233 名前:デフォルトの名無しさん :04/10/05 00:41:34
最近の小学生は激しいな。

234 名前:デフォルトの名無しさん :04/10/05 02:39:26
>227
>だれかCをBASIC風に機能削減したバージョンのC--を作ってください。
Cって言語の基本的なことはとても少ないと思うんだが…


235 名前:デフォルトの名無しさん :04/10/05 03:24:27
>>227
スレ違いだが、C--という言語はもうある。
http://www.cminusminus.org/
コンパイラのバックエンド用なので、人間様用の言語ではないが。

236 名前:デフォルトの名無しさん :04/10/05 13:46:17
C++に特許侵害の疑い
http://www.itmedia.co.jp/enterprise/articles/0410/05/news016.html

237 名前:デフォルトの名無しさん :04/10/05 14:44:36
特許ってうざいよね。
アイデアを特許にする人たちは俺から見たらお気楽だけど。
実際に特許の部分を有効活用して開発する人たちの血と汗と涙の結晶は特許の前では意味を
なさなくなるんだからやってらんないのでわ。
ま〜勝手にアイデアを使われて怒るのは分るけど
だからといって、訴訟を起こしての損害賠償が高すぎ。
今日の特許の乱立実態だからこそ、損害賠償額のルールを決めたほうがいいような。
もしかしてガイシュツだったりする。

238 名前:デフォルトの名無しさん :04/10/05 14:55:54
std:auto_ptr って何で get メソッドを持ってるんですか?
ポインタの管理を全て auto_ptr が面倒見るから利点があるのだと思うのですが

239 名前:デフォルトの名無しさん :04/10/05 15:01:04
>>238
生ポインタを引数に取る関数とか呼び出せないじゃん

240 名前:デフォルトの名無しさん :04/10/05 15:26:35
>>236
>Kodakの特許はWang Laboratoriesのイメージングソフトウェア部門が開発した技術を
>Kodakが1997年に買い取ったもので、2個のソフトウェアが協調動作する技術、
>つまりオブジェクト指向プログラミングのキーコンセプトであり、
>ユーニス氏によれば、1960年代に開発されたSimulaコンピュータ言語にまでさかのぼることができるという。
公知で特許成立しないんじゃないの? 解説よろしく


241 名前:デフォルトの名無しさん :04/10/05 16:03:37
よくわからんがC++のクラスは大概の実装において仮想関数ポインタのテーブル持ってるだけだから、
逆にそれが特許侵害と認められるとCなどの非OOのコードすら危うくなってくるわけだ・・・。

242 名前:デフォルトの名無しさん :04/10/05 16:27:34
>>241
ちょっと見てみたけど、もっと抽象的なレイヤーでの特許みたい。
OOベースのRPC (Remote Method Invokation の類) と、ORB の基本概念あたりをカバーしてる。
出願時点(1993 年)に既に公知だったような気がするけど・・・


243 名前:デフォルトの名無しさん :04/10/05 16:37:35
スラドが大好きそうなネタだけど誰もたれこんでないのん?

244 名前:デフォルトの名無しさん :04/10/05 16:42:53
Javalobby にスレが立ってる。

http://www.javalobby.org/thread.jspa?forumID=61&threadID=14434&start=0&mode=flat

245 名前:デフォルトの名無しさん :04/10/05 20:00:33
>>239
生ポインタに限定って時点でSTLじゃねえな

246 名前:デフォルトの名無しさん :04/10/06 00:34:43
ヘッダにusing namespace xxx;使う場合と、
ソースにusing namespace xxx;を使うのとでは意味が違うんでしょうか?


247 名前:デフォルトの名無しさん :04/10/06 00:37:11
>>246
どんなしょぼい参考書にも必ず書いてあると思うが。

248 名前:デフォルトの名無しさん :04/10/06 00:38:30
意味は同じ。
効果範囲はスコープ内。

249 名前:デフォルトの名無しさん :04/10/06 00:48:54
>>248
ヘッダはグローバルスコープで、
ソースだとそのファイルがスコープになるということかしら?


250 名前:デフォルトの名無しさん :04/10/06 00:50:01
書いた場所から次の

}

まで。普通のauto変数と一緒。


■過去ログ置き場に戻る■ 1- 次250 最新50
DAT2HTML 0.33f Converted.