トップページ⇒tech
1001コメント277KB

C++相談室 part36

■ このスレッドは過去ログ倉庫に格納されています
0001v(^・^)vNGNG
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。

過去スレ、関連スレ、関連リンクなどは >>2-20 あたり
0002v(^・^)vNGNG
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
0003v(^・^)vNGNG
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/
0004デフォルトの名無しさんNGNG
4様
0005v(^・^)vNGNG
■基本■
[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/ (日本語)
0006v(^・^)vNGNG
■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/
0007v(^・^)vNGNG
■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/
0008v(^・^)vNGNG
■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
0009v(^・^)vNGNG
■関連スレ■
【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/
0010v(^・^)vNGNG
■コンパイラスレ■
フリーコンパイラー使えよ。
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/
0011デフォルトの名無しさんNGNG
C++プログラミング入門(オライリー)の書評探してるんですが全然見つかりません。
薄くてよさげなんですがどうなんでしょう?
0012v(^・^)vNGNG
■開発環境スレ■
★初心者に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/
0013v(^・^)vNGNG
テンプレ差分
・[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スレ追尾
0014v(^・^)vNGNG
テンプレ終了です。
0015v(^・^)vNGNG
STLつかうと一気に実行ファイルサイズが10倍に?!
0016v(^・^)vNGNG
>>11
貴様、>>6が目に入らぬのですか?
0017v(^・^)vNGNG
>>15
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0018v(^・^)vNGNG
>>17
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
0019v(^・^)vNGNG
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
0020v(^・^)vNGNG
>>19
#include <stdafx.h>

後死ね。
0021デフォルトの名無しさんNGNG
>>20
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0022デフォルトの名無しさんNGNG
>>1
乙。
002311NGNG
>>16
amazonは当然みたけど、それ以外じゃまったくない。
この本は人気がないんですか?
Cでは言語プログラミングくらいのことができるんだが、
OOPはrubyで本みながら、簡単なスクリプトがかける程度。
そんな漏れにこの本は最適なのかが知りたいのです。
0024デフォルトの名無しさんNGNG
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; //: 何故か単独なら表示される
}
0025デフォルトの名無しさんNGNG
行列計算用のライブラリで計算速度が速く使いやすいおすすめのものがあれば
紹介していただけないでしょうか?
002624NGNG
std::wcout.imbue(std::locale("japanese"));
を加えたらうまくいきました。
(結果)
:
F
002724NGNG
":"をUnicodeに変換したものとL":"が
一致しないのが原因みたいでした。
なぜこんなことに....

size_t s_len = mbstowcs(NULL,":",0); //2
size_t w_len = wcslen(L":"); //1
002827NGNG
cのロケール設定し忘れてた...orz
setlocale(LC_ALL,"Japanese");//これがあれば一致した
原因はロケールの設定してなかったからですね。(お騒がせしました,,

0029デフォルトの名無しさんNGNG
>>25
Blitz++
boost::ublas
lapack
0030デフォルトの名無しさんNGNG
>>28
ここのスレには関係ない話なのであまり伸ばしたくないのですが
vc7.1ってlocaleをいちいち設定しなくても勝手にやってくれるのではなかったっけ。あれ?
すくなくても、俺はlocaleなんて設定しなくてもうまく表示してくれる。
もしかして、versionの違いかも。
0031デフォルトの名無しさんNGNG
STL周りは明らかにオブジェクト指向というより
関数型プログラミングの臭いがする。
そのへんのカオスつーかハイブリッド具合がC++っぽいんだろうけど。
0032デフォルトの名無しさんNGNG
なにこのコピペ━━━(゚∀゚)━━━ !!!
0033デフォルトの名無しさんNGNG
カオス?
意味わかってんのかな?
多分覚えたの単語を使ってみただけだろうけど・・・
0034デフォルトの名無しさんNGNG
ちなみにケイオスと発音しないと恥ずかしいよ
0035デフォルトの名無しさんNGNG
>>33
「勝利の方程式」みたいなもんでしょ。
0036デフォルトの名無しさんNGNG
指定のディレクトリ以下のファイルを読み込む方法てありますか?
0037デフォルトの名無しさんNGNG
>>36
C++標準機能にはないので、各環境のスレで聞いてください。
0038デフォルトの名無しさんNGNG
>>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;
}
初めて使ったので慣れてる人からみたら変なとこがあるかもしれないけど,こんな感じで書けますよ.
0039デフォルトの名無しさんNGNG
UTF-16とかってさワイド文字って言うんでしょ?
で、Shit-Jisはマルチバイト文字って言うんでしょ?


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

0040デフォルトの名無しさんNGNG
一応独習C終わったんですが、このままCを深く掘り下げていくのと、
今の早い段階でC++に移行するのだとどっちがいいんでしょうか?
個人的にはオブジェクト指向のC++を使ってみたいような気はするんですが、
Cも理解しきらないうちにC++が理解できるのか不安なんです。
0041デフォルトの名無しさんNGNG
>>40
早めにC++に移れ。Cにしがみついていると嫌な癖がどんどん身に付いて、
後から引きはがすのに苦労するぞ。
0042デフォルトの名無しさんNGNG
Cは文法的な理解だけで十分。
ただし、アルゴリズム的な感覚が身についていない場合はもう少し
Cで勉強してからの方が良い。
他言語を既に習得している場合はそのままC++の習得に移っても良い。
0043デフォルトの名無しさんNGNG
>>40
一年や二年ぐらいで付いた癖なんて直すのは簡単なような気がするけど。俺にはわからない。
でも、早いうちにC++に移行したほうがいいのは確かだな。
もれなく、STLやBOOSTが付いてくるから楽しさ満点。
さらに、WIN32プログラムを組もうと考えたらMFCやWTLをやるにはC++の知識(たいした知識じゃないけど)が必要。
0044デフォルトの名無しさんNGNG
>>28
ロケールを設定したら問題が解決するとも限らないんだろうな。
文字列リテラル→"execution character set" への変換方法は実装依存。
0045デフォルトの名無しさんNGNG
>>42
同意。
プログラムの良い習慣は何言語であろうが変わりはない。
それは C++ とて例外ではないが、必要以上に難しくひねくれたところがあるから、
何と言うか本来なら立ち直れるはずの色々なショックがいちいち問題になりやすい。
0046デフォルトの名無しさんNGNG
プログラミング講義C++
という本に演習とありますが答えが載ってないのでやり方が分かりません。
なのでここに演習の文を書くんでその答えを書いてくださらないでしょうか?

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

0047デフォルトの名無しさんNGNG
おことわりです。
0048デフォルトの名無しさんNGNG
>>46
宿題スレにでも行け
0049デフォルトの名無しさんNGNG
これからCプログラミングやる初心者ですが
もう、お店ではC++って売ってないみたいんなんですけど
どうすれば入手できますか?
また、どのメーカーのC++がいいですか?
よろしくおねがいします
0050デフォルトの名無しさんNGNG
class hoge2ch
{
 private:
  int a,b;
 public:
  hoge2ch(int x,int y):a(x),b(y)
 {

 }
・・・・・
};

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

この表記法を使っていて、分かりやすく解説している書籍を紹介して下さい
0051デフォルトの名無しさんNGNG
とりあえず、イニシャライザでぐぐっとけ。
それと、この書き方を書いてない本は窓から投げ捨てておくこと。
0052デフォルトの名無しさんNGNG
他の書籍のタイトルをさらしておけ
0053デフォルトの名無しさんNGNG
>>50
いつかは絶対必要になるから買っておくべし
http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ref=pd_sr_ec_ir_b/249-7749404-9276354
005450NGNG
>>51-53
教示ありがとうございます
http://plaza.harmonix.ne.jp/~fakira/turedure/cprog_00.htm
代入の仕方で参考になるものをちょっと見つけました
0055デフォルトの名無しさんNGNG
>>50(>>54)
代入じゃねぇ。初期化だ。混同すべからず。
005628NGNG
>>30
ver7.1.3091ですが、やはりないとだめみたい。
C++的には codecvtですかね?
ttp://www.tietew.jp/cppll/archive/568
に例が載ってました。

>>44
そういえばXML以外でエンコーディング指定って見たことない...。
0057デフォルトの名無しさんNGNG
派生クラスでは、どうあがいても関数呼び出しが
仮想関数テーブル経由になってしまうのは避けられないのでしょうか?
高速化の必要から悩んでいます。
0058デフォルトの名無しさんNGNG
>>57
テーブル経由になるのはvirtual指定したメンバ関数だけだよ。
派生クラスは関係ない。
005957NGNG
>>58
おおお!ありがとうございます。
基底でvirtualが指定してある関数の場合は、派生側同名の関数で
例えvirtual指定が無く、かつ派生型ポインタで呼び出しても駄目ですよね?

その場合は同じ振る舞いのメソッドを、派生側で別に用意すればいいのか…。
いや本当に助かりました。
0060デフォルトの名無しさんNGNG
>>59
基底クラスのメンバー関数がprivateで無い限り派生型でそのメンバー関数を呼べるよ
0061デフォルトの名無しさんNGNG
つか仮想関数でもコンパイル時に型が確定してりゃvtblなんか経由しないコンパイラもある。
0062デフォルトの名無しさんNGNG
もしくは基底クラスの関数で派生のメンバー関数を使いたいなら
template<class T>
struct base{ void fun(){ static_cast<T&>(*this).fun(); } };

struct My : public base<My>
{ void fun(){} };
でokのはず。
0063デフォルトの名無しさんNGNG
>>61
そうなのか。でもVC7.1は違うだろうな。
0064デフォルトの名無しさんNGNG
VC7.1でも出来るんじゃないの?
コンパイルタイムで明らかなのであれば
例えばこんなん

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

class null : public po{ (ry };

void hoge()
{
    null n;
    n.f();
}
0065デフォルトの名無しさんNGNG
しばしば、「仮想メンバー関数の呼び出しは遅い」
というトピックが提供されるみたいだけど、実際どのくらい遅くなるのでしょうか。
目に見えてパフォーマンスが変わるものなのでしょうか。

実測した人とか居ます?
0066デフォルトの名無しさんNGNG
仮想関数でもinline展開してくれるコンパイラならいいんでは
0067デフォルトの名無しさんNGNG
//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;
}
0068デフォルトの名無しさんNGNG
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_; }
0069デフォルトの名無しさんNGNG
$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?)
0070デフォルトの名無しさんNGNG
仮想関数でパフォーマンス低下に大きく影響を与えるのは
vtable 経由になることではなくインライン展開できないことだと思う。
0071デフォルトの名無しさんNGNG
//おまけ ポインタ経由しないとき

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

0072デフォルトの名無しさんNGNG
まあ、他のコストがテーブルの初期化と正しい関数のオフセットへのアクセスだけだからねえ
0073デフォルトの名無しさんNGNG
get()が十分重い関数のときには律速段階にならない罠
007467NGNG
一言でいえばほとんどまったく影響ない
0075デフォルトの名無しさんNGNG
>>67
get()が軽い場合と重い場合で
VirtSub / Virt
NonVirtSub / NonVirt
を算出してみてよ
007675NGNG
>>74
ないってしゅちょうなのね
0077デフォルトの名無しさんNGNG
古い資料だけどここが詳しい?
ttp://gigo.retrogames.com/t_lab/chapter2.html
0078デフォルトの名無しさんNGNG
要するに仮想関数であることを問題にするのは、
他の最適化をやりつくした後でいいってこと?
0079デフォルトの名無しさんNGNG
まずは設計ね
0080デフォルトの名無しさんNGNG
>>75
めどい
0081デフォルトの名無しさんNGNG
教えてください。

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

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

親切な人お願いします。
0082デフォルトの名無しさんNGNG
VC6とVC7で違ってくるのかな?

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

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

このA,Bの2種類では、Bはテーブルを使わないようです。(VC7の場合)
0083デフォルトの名無しさんNGNG
>>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, ・・・
0084デフォルトの名無しさんNGNG
ということは VC6の最適化機能は不完全?スタンダード版?
0085デフォルトの名無しさんNGNG
VC++とC++って別物なの?
0086デフォルトの名無しさんNGNG
最適化に完全も不完全もねえだろ
ある意味、ボランティアみたいなものじゃん
0087デフォルトの名無しさんNGNG
>>85
C++は言語名でしょ。
VC++はC++ソースのコンパイル環境。
MicroSoft C/C++コンパイラという意味。
他にはBC++やg++などもある。
0088デフォルトの名無しさんNGNG
>>85
C++ :プログラミング言語
VC++:MicrosoftのC++コンパイラと周辺ツール類の製品名(の略称)
0089デフォルトの名無しさんNGNG
>>86は貧乏でGCCを使おうとしたが難しくて使えなくてBCCで我慢してる
0090デフォルトの名無しさんNGNG
>>82
6も7もおなじだったよ?
0091デフォルトの名無しさんNGNG
誰か、VC6で試してくれないか?
>>82の意外な書き込みが気になる。
0092デフォルトの名無しさんNGNG
あんがと。しかしわかったようなわからんような。
どうやらBACICから始めたほうがよさそうだな。
ポケコンかお
0093デフォルトの名無しさんNGNG
>>92
それはどうかと...
ところでポケコンって今日びまだ売ってんの? いくらくらい?
0094デフォルトの名無しさんNGNG
>>93
結構進化してるよ。
2〜3万くらいじゃない?
0095デフォルトの名無しさんNGNG
PDA使ったらポケコンって用済みじゃない?
手軽にプログラミングするならPCがあるし、PDAでもシリアル出力できるし。
0096デフォルトの名無しさんNGNG
>>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);
0097デフォルトの名無しさんNGNG
3万あれば自作して(中古じゃないと無理かな?)PC-UNIXがいいような気がする。
0098デフォルトの名無しさんNGNG
>>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
0099デフォルトの名無しさんNGNG
デバッガで混合表示したほうが早いと思うが
0100デフォルトの名無しさんNGNG
>>99
medoi
0101デフォルトの名無しさんNGNG
何はともあれVC7が圧勝
■ このスレッドは過去ログ倉庫に格納されています